diff --git a/src/vs/platform/windows/common/windows.ts b/src/vs/platform/windows/common/windows.ts index 000fd229a12..6fc7c717bd9 100644 --- a/src/vs/platform/windows/common/windows.ts +++ b/src/vs/platform/windows/common/windows.ts @@ -25,6 +25,7 @@ export interface IWindowsService { openDevTools(windowId: number): TPromise; toggleDevTools(windowId: number): TPromise; // TODO@joao: rename, shouldn't this be closeWindow? + // @ben: no, this actually leaves the window open but changes it to have no workspace opened closeFolder(windowId: number): TPromise; toggleFullScreen(windowId: number): TPromise; setRepresentedFilename(windowId: number, fileName: string): TPromise; @@ -40,8 +41,7 @@ export interface IWindowsService { quit(): TPromise; // Global methods - // TODO@joao: rename, shouldn't this be openWindow? - windowOpen(paths: string[], forceNewWindow?: boolean): TPromise; + openWindow(paths: string[], options?: { forceNewWindow?: boolean, forceReuseWindow?: boolean }): TPromise; openNewWindow(): TPromise; showWindow(windowId: number): TPromise; getWindows(): TPromise<{ id: number; path: string; title: string; }[]>; diff --git a/src/vs/platform/windows/common/windowsIpc.ts b/src/vs/platform/windows/common/windowsIpc.ts index 42369382626..a02689a28ef 100644 --- a/src/vs/platform/windows/common/windowsIpc.ts +++ b/src/vs/platform/windows/common/windowsIpc.ts @@ -31,7 +31,7 @@ export interface IWindowsChannel extends IChannel { call(command: 'setDocumentEdited', arg: [number, boolean]): TPromise; call(command: 'toggleMenuBar', arg: number): TPromise; call(command: 'quit'): TPromise; - call(command: 'windowOpen', arg: [string[], boolean]): TPromise; + call(command: 'openWindow', arg: [string[], { forceNewWindow?: boolean, forceReuseWindow?: boolean }]): TPromise; call(command: 'openNewWindow'): TPromise; call(command: 'showWindow', arg: number): TPromise; call(command: 'getWindows'): TPromise<{ id: number; path: string; title: string; }[]>; @@ -76,7 +76,7 @@ export class WindowsChannel implements IWindowsChannel { case 'unmaximizeWindow': return this.service.unmaximizeWindow(arg); case 'setDocumentEdited': return this.service.setDocumentEdited(arg[0], arg[1]); case 'toggleMenuBar': return this.service.toggleMenuBar(arg); - case 'windowOpen': return this.service.windowOpen(arg[0], arg[1]); + case 'openWindow': return this.service.openWindow(arg[0], arg[1]); case 'openNewWindow': return this.service.openNewWindow(); case 'showWindow': return this.service.showWindow(arg); case 'getWindows': return this.service.getWindows(); @@ -179,8 +179,8 @@ export class WindowsChannelClient implements IWindowsService { return this.channel.call('quit'); } - windowOpen(paths: string[], forceNewWindow?: boolean): TPromise { - return this.channel.call('windowOpen', [paths, forceNewWindow]); + openWindow(paths: string[], options?: { forceNewWindow?: boolean, forceReuseWindow?: boolean }): TPromise { + return this.channel.call('openWindow', [paths, options]); } openNewWindow(): TPromise { diff --git a/src/vs/platform/windows/electron-main/windowsService.ts b/src/vs/platform/windows/electron-main/windowsService.ts index aa9adf73444..7b0e6d47e4b 100644 --- a/src/vs/platform/windows/electron-main/windowsService.ts +++ b/src/vs/platform/windows/electron-main/windowsService.ts @@ -198,12 +198,12 @@ export class WindowsService implements IWindowsService, IDisposable { return TPromise.as(null); } - windowOpen(paths: string[], forceNewWindow?: boolean): TPromise { + openWindow(paths: string[], options?: { forceNewWindow?: boolean, forceReuseWindow?: boolean }): TPromise { if (!paths || !paths.length) { return TPromise.as(null); } - this.windowsMainService.open({ context: OpenContext.OTHER, cli: this.environmentService.args, pathsToOpen: paths, forceNewWindow }); + this.windowsMainService.open({ context: OpenContext.OTHER, cli: this.environmentService.args, pathsToOpen: paths, forceNewWindow: options && options.forceNewWindow, forceReuseWindow: options && options.forceReuseWindow }); return TPromise.as(null); } diff --git a/src/vs/workbench/electron-browser/actions.ts b/src/vs/workbench/electron-browser/actions.ts index a29af01a04e..10f15341b35 100644 --- a/src/vs/workbench/electron-browser/actions.ts +++ b/src/vs/workbench/electron-browser/actions.ts @@ -588,8 +588,8 @@ export class OpenRecentAction extends Action { } const runPick = (path: string, context: IEntryRunContext) => { - const newWindow = context.keymods.indexOf(KeyMod.CtrlCmd) >= 0; - this.windowsService.windowOpen([path], newWindow); + const forceNewWindow = context.keymods.indexOf(KeyMod.CtrlCmd) >= 0; + this.windowsService.openWindow([path], { forceNewWindow }); }; const folderPicks: IFilePickOpenEntry[] = recentFolders.map((p, index) => toPick(p, index === 0 ? { label: nls.localize('folders', "folders") } : void 0, true)); diff --git a/src/vs/workbench/electron-browser/window.ts b/src/vs/workbench/electron-browser/window.ts index 012c423cb3a..1f1d712bb9d 100644 --- a/src/vs/workbench/electron-browser/window.ts +++ b/src/vs/workbench/electron-browser/window.ts @@ -137,7 +137,7 @@ export class ElectronWindow { DOM.EventHelper.stop(e, true); this.focus(); // make sure this window has focus so that the open call reaches the right window! - this.windowsService.windowOpen(draggedExternalResources.map(r => r.fsPath)); + this.windowsService.openWindow(draggedExternalResources.map(r => r.fsPath), { forceReuseWindow: true }); cleanUp(); }) diff --git a/src/vs/workbench/parts/files/electron-browser/electronFileActions.ts b/src/vs/workbench/parts/files/electron-browser/electronFileActions.ts index 53014f290b0..a22a107ba2b 100644 --- a/src/vs/workbench/parts/files/electron-browser/electronFileActions.ts +++ b/src/vs/workbench/parts/files/electron-browser/electronFileActions.ts @@ -154,7 +154,7 @@ export class ShowOpenedFileInNewWindow extends Action { public run(): TPromise { const fileResource = toResource(this.editorService.getActiveEditorInput(), { supportSideBySide: true, filter: 'file' }); if (fileResource) { - this.windowsService.windowOpen([fileResource.fsPath], true); + this.windowsService.openWindow([fileResource.fsPath], { forceNewWindow: true }); } else { this.messageService.show(severity.Info, nls.localize('openFileToShow', "Open a file first to open in new window")); } diff --git a/src/vs/workbench/parts/files/electron-browser/files.electron.contribution.ts b/src/vs/workbench/parts/files/electron-browser/files.electron.contribution.ts index bf7b04b24f5..93bfd9df732 100644 --- a/src/vs/workbench/parts/files/electron-browser/files.electron.contribution.ts +++ b/src/vs/workbench/parts/files/electron-browser/files.electron.contribution.ts @@ -92,7 +92,7 @@ CommandsRegistry.registerCommand('_files.openFolderPicker', (accessor: ServicesA CommandsRegistry.registerCommand('_files.windowOpen', (accessor: ServicesAccessor, paths: string[], forceNewWindow: boolean) => { const windowsService = accessor.get(IWindowsService); - windowsService.windowOpen(paths, forceNewWindow); + windowsService.openWindow(paths, { forceNewWindow }); }); CommandsRegistry.registerCommand('workbench.action.files.openFileInNewWindow', (accessor: ServicesAccessor) => { diff --git a/src/vs/workbench/parts/git/electron-browser/gitActions.ts b/src/vs/workbench/parts/git/electron-browser/gitActions.ts index f983b03b2c3..1a809c3fbab 100644 --- a/src/vs/workbench/parts/git/electron-browser/gitActions.ts +++ b/src/vs/workbench/parts/git/electron-browser/gitActions.ts @@ -70,7 +70,7 @@ export class CloneAction extends Action { return clone.then(path => { const forceNewWindow = this.workspaceService.hasWorkspace(); - return this.windowsService.windowOpen([path], forceNewWindow); + return this.windowsService.openWindow([path], { forceNewWindow, forceReuseWindow: !forceNewWindow }); }).then(null, e => { if (/already exists and is not an empty directory/.test(e.stderr || '')) { diff --git a/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.ts b/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.ts index ef9c163a4ae..9c05c47a36c 100644 --- a/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.ts +++ b/src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.ts @@ -40,7 +40,7 @@ class OpenSnippetsAction extends actions.Action { } private openFile(filePath: string): winjs.TPromise { - return this.windowsService.windowOpen([filePath]); + return this.windowsService.openWindow([filePath], { forceReuseWindow: true }); } public run(): winjs.Promise { diff --git a/src/vs/workbench/test/workbenchTestServices.ts b/src/vs/workbench/test/workbenchTestServices.ts index b3cb1743a4b..4321cd6487b 100644 --- a/src/vs/workbench/test/workbenchTestServices.ts +++ b/src/vs/workbench/test/workbenchTestServices.ts @@ -887,8 +887,7 @@ export class TestWindowsService implements IWindowsService { } // Global methods - // TODO@joao: rename, shouldn't this be openWindow? - windowOpen(paths: string[], forceNewWindow?: boolean): TPromise { + openWindow(paths: string[], options?: { forceNewWindow?: boolean, forceReuseWindow?: boolean }): TPromise { return TPromise.as(void 0); } openNewWindow(): TPromise {