From e0a8269fcd571badf792e5d2b7bd9722dc00bd84 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Fri, 25 Nov 2016 17:33:57 +0100 Subject: [PATCH] Open file/folder dialog needs to know its target window (fixes #5796) --- src/vs/code/electron-main/windows.ts | 15 ++++++++------- .../windows/electron-main/windowsService.ts | 4 +++- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/vs/code/electron-main/windows.ts b/src/vs/code/electron-main/windows.ts index 4a836792785c..bb7793ba3b57 100644 --- a/src/vs/code/electron-main/windows.ts +++ b/src/vs/code/electron-main/windows.ts @@ -75,6 +75,7 @@ interface INativeOpenDialogOptions { pickFiles?: boolean; path?: string; forceNewWindow?: boolean; + window?: VSCodeWindow; } const ReopenFoldersSetting = { @@ -100,8 +101,8 @@ export interface IWindowsMainService { open(openConfig: IOpenConfiguration): VSCodeWindow[]; openPluginDevelopmentHostWindow(openConfig: IOpenConfiguration): void; openFileFolderPicker(forceNewWindow?: boolean): void; - openFilePicker(forceNewWindow?: boolean, path?: string): void; - openFolderPicker(forceNewWindow?: boolean): void; + openFilePicker(forceNewWindow?: boolean, path?: string, window?: VSCodeWindow): void; + openFolderPicker(forceNewWindow?: boolean, window?: VSCodeWindow): void; openAccessibilityOptions(): void; focusLastActive(cli: ParsedArgs): VSCodeWindow; getLastActiveWindow(): VSCodeWindow; @@ -862,12 +863,12 @@ export class WindowsManager implements IWindowsMainService { this.doPickAndOpen({ pickFolders: true, pickFiles: true, forceNewWindow }); } - public openFilePicker(forceNewWindow?: boolean, path?: string): void { - this.doPickAndOpen({ pickFiles: true, forceNewWindow, path }); + public openFilePicker(forceNewWindow?: boolean, path?: string, window?: VSCodeWindow): void { + this.doPickAndOpen({ pickFiles: true, forceNewWindow, path, window }); } - public openFolderPicker(forceNewWindow?: boolean): void { - this.doPickAndOpen({ pickFolders: true, forceNewWindow }); + public openFolderPicker(forceNewWindow?: boolean, window?: VSCodeWindow): void { + this.doPickAndOpen({ pickFolders: true, forceNewWindow, window }); } public openAccessibilityOptions(): void { @@ -896,7 +897,7 @@ export class WindowsManager implements IWindowsMainService { private getFileOrFolderPaths(options: INativeOpenDialogOptions, clb: (paths: string[]) => void): void { const workingDir = options.path || this.storageService.getItem(WindowsManager.workingDirPickerStorageKey); - const focussedWindow = this.getFocusedWindow(); + const focussedWindow = options.window || this.getFocusedWindow(); let pickerProperties: ('openFile' | 'openDirectory' | 'multiSelections' | 'createDirectory')[]; if (options.pickFiles && options.pickFolders) { diff --git a/src/vs/platform/windows/electron-main/windowsService.ts b/src/vs/platform/windows/electron-main/windowsService.ts index 031fb1c254e7..12159a4db22f 100644 --- a/src/vs/platform/windows/electron-main/windowsService.ts +++ b/src/vs/platform/windows/electron-main/windowsService.ts @@ -49,7 +49,9 @@ export class WindowsService implements IWindowsService, IDisposable { } openFolderPicker(windowId: number, forceNewWindow?: boolean): TPromise { - this.windowsMainService.openFolderPicker(forceNewWindow); + const vscodeWindow = this.windowsMainService.getWindowById(windowId); + this.windowsMainService.openFolderPicker(forceNewWindow, vscodeWindow); + return TPromise.as(null); }