Merge from vscode 8e0f348413f4f616c23a88ae30030efa85811973 (#6381)

* Merge from vscode 8e0f348413f4f616c23a88ae30030efa85811973

* disable strict null check
This commit is contained in:
Anthony Dresser
2019-07-15 22:35:46 -07:00
committed by GitHub
parent f720ec642f
commit 0b7e7ddbf9
2406 changed files with 59140 additions and 35464 deletions

View File

@@ -6,14 +6,14 @@
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { Event } from 'vs/base/common/event';
import { ITelemetryData } from 'vs/platform/telemetry/common/telemetry';
import { IProcessEnvironment, isMacintosh, isLinux } from 'vs/base/common/platform';
import { IProcessEnvironment, isMacintosh, isLinux, isWeb } from 'vs/base/common/platform';
import { ParsedArgs, IEnvironmentService } from 'vs/platform/environment/common/environment';
import { IWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces';
import { IRecentlyOpened, IRecent } from 'vs/platform/history/common/history';
import { ISerializableCommandAction } from 'vs/platform/actions/common/actions';
import { ExportData } from 'vs/base/common/performance';
import { LogLevel } from 'vs/platform/log/common/log';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { DisposableStore, Disposable } from 'vs/base/common/lifecycle';
import { URI, UriComponents } from 'vs/base/common/uri';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { CancelablePromise, createCancelablePromise } from 'vs/base/common/async';
@@ -153,6 +153,7 @@ export interface IWindowsService {
// Global methods
openWindow(windowId: number, uris: IURIToOpen[], options: IOpenSettings): Promise<void>;
openNewWindow(options?: INewWindowOptions): Promise<void>;
openExtensionDevelopmentHostWindow(args: ParsedArgs, env: IProcessEnvironment): Promise<void>;
getWindows(): Promise<{ id: number; workspace?: IWorkspaceIdentifier; folderUri?: ISingleFolderWorkspaceIdentifier; title: string; filename?: string; }[]>;
getWindowCount(): Promise<number>;
log(severity: string, ...messages: string[]): Promise<void>;
@@ -205,15 +206,15 @@ export interface IFileToOpen {
}
export function isWorkspaceToOpen(uriToOpen: IURIToOpen): uriToOpen is IWorkspaceToOpen {
return !!uriToOpen['workspaceUri'];
return !!(uriToOpen as IWorkspaceToOpen)['workspaceUri'];
}
export function isFolderToOpen(uriToOpen: IURIToOpen): uriToOpen is IFolderToOpen {
return !!uriToOpen['folderUri'];
return !!(uriToOpen as IFolderToOpen)['folderUri'];
}
export function isFileToOpen(uriToOpen: IURIToOpen): uriToOpen is IFileToOpen {
return !!uriToOpen['fileUri'];
return !!(uriToOpen as IFileToOpen)['fileUri'];
}
@@ -238,9 +239,11 @@ export interface IWindowService {
closeWorkspace(): Promise<void>;
updateTouchBar(items: ISerializableCommandAction[][]): Promise<void>;
enterWorkspace(path: URI): Promise<IEnterWorkspaceResult | undefined>;
toggleFullScreen(): Promise<void>;
toggleFullScreen(target?: HTMLElement): Promise<void>;
setRepresentedFilename(fileName: string): Promise<void>;
getRecentlyOpened(): Promise<IRecentlyOpened>;
addRecentlyOpened(recents: IRecent[]): Promise<void>;
removeFromRecentlyOpened(paths: URI[]): Promise<void>;
focusWindow(): Promise<void>;
closeWindow(): Promise<void>;
openWindow(uris: IURIToOpen[], options?: IOpenSettings): Promise<void>;
@@ -282,6 +285,10 @@ export interface IWindowSettings {
}
export function getTitleBarStyle(configurationService: IConfigurationService, environment: IEnvironmentService, isExtensionDevelopment = environment.isExtensionDevelopment): 'native' | 'custom' {
if (isWeb) {
return 'custom';
}
const configuration = configurationService.getValue<IWindowSettings>('window');
const isDev = !environment.isBuilt || isExtensionDevelopment;
@@ -295,7 +302,7 @@ export function getTitleBarStyle(configurationService: IConfigurationService, en
return 'native'; // native tabs on sierra do not work with custom title style
}
const useSimpleFullScreen = isMacintosh && configuration.nativeFullScreen === false;
const useSimpleFullScreen = false; //isMacintosh && configuration.nativeFullScreen === false;
if (useSimpleFullScreen) {
return 'native'; // simple fullscreen does not work well with custom title style (https://github.com/Microsoft/vscode/issues/63291)
}
@@ -412,6 +419,7 @@ export interface IWindowConfiguration extends ParsedArgs {
nodeCachedDataDir?: string;
backupPath?: string;
backupWorkspaceResource?: URI;
workspace?: IWorkspaceIdentifier;
folderUri?: ISingleFolderWorkspaceIdentifier;
@@ -447,13 +455,15 @@ export interface IRunKeybindingInWindowRequest {
userSettingsLabel: string;
}
export class ActiveWindowManager implements IDisposable {
export class ActiveWindowManager extends Disposable {
private disposables: IDisposable[] = [];
private readonly disposables = this._register(new DisposableStore());
private firstActiveWindowIdPromise: CancelablePromise<number | undefined> | undefined;
private activeWindowId: number | undefined;
constructor(@IWindowsService windowsService: IWindowsService) {
super();
const onActiveWindowChange = Event.latch(Event.any(windowsService.onWindowOpen, windowsService.onWindowFocus));
onActiveWindowChange(this.setActiveWindow, this, this.disposables);
@@ -474,10 +484,7 @@ export class ActiveWindowManager implements IDisposable {
async getActiveClientId(): Promise<string | undefined> {
const id = this.firstActiveWindowIdPromise ? (await this.firstActiveWindowIdPromise) : this.activeWindowId;
return `window:${id}`;
}
dispose() {
this.disposables = dispose(this.disposables);
}
}

View File

@@ -12,6 +12,7 @@ import { ISerializableCommandAction } from 'vs/platform/actions/common/actions';
import { URI } from 'vs/base/common/uri';
import { ParsedArgs } from 'vs/platform/environment/common/environment';
import { IMainProcessService } from 'vs/platform/ipc/electron-browser/mainProcessService';
import { IProcessEnvironment } from 'vs/base/common/platform';
export class WindowsService implements IWindowsService {
@@ -195,6 +196,10 @@ export class WindowsService implements IWindowsService {
return this.channel.call('openNewWindow', options);
}
openExtensionDevelopmentHostWindow(args: ParsedArgs, env: IProcessEnvironment): Promise<void> {
return this.channel.call('openExtensionDevelopmentHostWindow', [args, env]);
}
async getWindows(): Promise<{ id: number; workspace?: IWorkspaceIdentifier; folderUri?: ISingleFolderWorkspaceIdentifier; title: string; filename?: string; }[]> {
const result = await this.channel.call<{
id: number;

View File

@@ -92,7 +92,6 @@ export interface IWindowsMainService {
readonly onWindowClose: Event<number>;
// methods
ready(initialUserEnv: IProcessEnvironment): void;
reload(win: ICodeWindow, cli?: ParsedArgs): void;
enterWorkspace(win: ICodeWindow, path: URI): Promise<IEnterWorkspaceResult | undefined>;
closeWorkspace(win: ICodeWindow): void;

View File

@@ -5,7 +5,7 @@
import * as nls from 'vs/nls';
import * as os from 'os';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
import { assign } from 'vs/base/common/objects';
import { URI } from 'vs/base/common/uri';
import product from 'vs/platform/product/node/product';
@@ -21,14 +21,15 @@ import { IWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier } from 'vs/platf
import { ISerializableCommandAction } from 'vs/platform/actions/common/actions';
import { Schemas } from 'vs/base/common/network';
import { mnemonicButtonLabel } from 'vs/base/common/labels';
import { isMacintosh, isLinux } from 'vs/base/common/platform';
import { isMacintosh, isLinux, IProcessEnvironment } from 'vs/base/common/platform';
import { ILogService } from 'vs/platform/log/common/log';
import { ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation';
export class WindowsService implements IWindowsService, IURLHandler, IDisposable {
export class WindowsService extends Disposable implements IWindowsService, IURLHandler {
_serviceBrand: any;
_serviceBrand: ServiceIdentifier<any>;
private disposables: IDisposable[] = [];
private readonly disposables = this._register(new DisposableStore());
private _activeWindowId: number | undefined;
@@ -52,6 +53,8 @@ export class WindowsService implements IWindowsService, IURLHandler, IDisposable
@IHistoryMainService private readonly historyService: IHistoryMainService,
@ILogService private readonly logService: ILogService
) {
super();
urlService.registerHandler(this);
// remember last active window id
@@ -303,6 +306,18 @@ export class WindowsService implements IWindowsService, IURLHandler, IDisposable
this.windowsMainService.openNewWindow(OpenContext.API, options);
}
async openExtensionDevelopmentHostWindow(args: ParsedArgs, env: IProcessEnvironment): Promise<void> {
this.logService.trace('windowsService#openExtensionDevelopmentHostWindow ' + JSON.stringify(args));
if (args.extensionDevelopmentPath) {
this.windowsMainService.openExtensionDevelopmentHostWindow(args.extensionDevelopmentPath, {
context: OpenContext.API,
cli: args,
userEnv: Object.keys(env).length > 0 ? env : undefined
});
}
}
async getWindows(): Promise<{ id: number; workspace?: IWorkspaceIdentifier; folderUri?: ISingleFolderWorkspaceIdentifier; title: string; filename?: string; }[]> {
this.logService.trace('windowsService#getWindows');
@@ -319,14 +334,28 @@ export class WindowsService implements IWindowsService, IURLHandler, IDisposable
}
async log(severity: string, ...messages: string[]): Promise<void> {
console[severity].apply(console, ...messages);
let consoleFn = console.log;
switch (severity) {
case 'error':
consoleFn = console.error;
break;
case 'warn':
consoleFn = console.warn;
break;
case 'info':
consoleFn = console.info;
break;
}
consoleFn(...messages);
}
async showItemInFolder(path: URI): Promise<void> {
async showItemInFolder(resource: URI): Promise<void> {
this.logService.trace('windowsService#showItemInFolder');
if (path.scheme === Schemas.file) {
shell.showItemInFolder(path.fsPath);
if (resource.scheme === Schemas.file) {
shell.showItemInFolder(resource.fsPath);
}
}
@@ -337,7 +366,8 @@ export class WindowsService implements IWindowsService, IURLHandler, IDisposable
async openExternal(url: string): Promise<boolean> {
this.logService.trace('windowsService#openExternal');
return shell.openExternal(url);
shell.openExternal(url);
return true;
}
async startCrashReporter(config: Electron.CrashReporterStartOptions): Promise<void> {
@@ -403,19 +433,20 @@ export class WindowsService implements IWindowsService, IURLHandler, IDisposable
buttons = [ok, copy];
}
this.windowsMainService.showMessageBox({
const result = await this.windowsMainService.showMessageBox({
title: product.nameLong,
type: 'info',
message: product.nameLong,
detail: `\n${detail}`,
buttons,
noLink: true,
defaultId: buttons.indexOf(ok)
}, this.windowsMainService.getFocusedWindow() || this.windowsMainService.getLastActiveWindow()).then(result => {
if (buttons[result.button] === copy) {
clipboard.writeText(detail);
}
});
defaultId: buttons.indexOf(ok),
cancelId: buttons.indexOf(ok)
}, this.windowsMainService.getFocusedWindow() || this.windowsMainService.getLastActiveWindow());
if (buttons[result.button] === copy) {
clipboard.writeText(detail);
}
}
async handleURL(uri: URI): Promise<boolean> {
@@ -461,8 +492,4 @@ export class WindowsService implements IWindowsService, IURLHandler, IDisposable
return undefined;
}
dispose(): void {
this.disposables = dispose(this.disposables);
}
}

View File

@@ -102,6 +102,7 @@ export class WindowsChannel implements IServerChannel {
return this.service.openWindow(arg[0], urisToOpen, options);
}
case 'openNewWindow': return this.service.openNewWindow(arg);
case 'openExtensionDevelopmentHostWindow': return this.service.openExtensionDevelopmentHostWindow(arg[0], arg[1]);
case 'getWindows': return this.service.getWindows();
case 'getWindowCount': return this.service.getWindowCount();
case 'relaunch': return this.service.relaunch(arg[0]);