From 1f1233437c65ea762f383174c06c60c5d4c9309a Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Wed, 2 Nov 2016 11:04:27 +0100 Subject: [PATCH] windows ipc: adopt openFile/FolderPicker --- src/vs/code/electron-main/windows.ts | 20 +---- src/vs/platform/windows/common/windows.ts | 4 +- src/vs/platform/windows/common/windowsIpc.ts | 8 +- .../windows/electron-browser/windowService.ts | 4 +- .../windows/electron-main/windowsService.ts | 4 +- .../electron-browser/electronFileActions.ts | 73 ++++++++++--------- 6 files changed, 49 insertions(+), 64 deletions(-) diff --git a/src/vs/code/electron-main/windows.ts b/src/vs/code/electron-main/windows.ts index 32366c6c075..ef33d8adfad 100644 --- a/src/vs/code/electron-main/windows.ts +++ b/src/vs/code/electron-main/windows.ts @@ -105,7 +105,7 @@ export interface IWindowsMainService { open(openConfig: IOpenConfiguration): VSCodeWindow[]; openPluginDevelopmentHostWindow(openConfig: IOpenConfiguration): void; openFileFolderPicker(forceNewWindow?: boolean): void; - openFilePicker(forceNewWindow?: boolean): void; + openFilePicker(forceNewWindow?: boolean, path?: string): void; openFolderPicker(forceNewWindow?: boolean): void; openAccessibilityOptions(): void; focusLastActive(cli: ParsedArgs): VSCodeWindow; @@ -239,24 +239,6 @@ export class WindowsManager implements IWindowsMainService, IWindowEventService } }); - ipc.on('vscode:openFilePicker', (event, forceNewWindow?: boolean, path?: string) => { - this.logService.log('IPC#vscode-openFilePicker'); - - this.openFilePicker(forceNewWindow, path); - }); - - ipc.on('vscode:openFolderPicker', (event, forceNewWindow?: boolean) => { - this.logService.log('IPC#vscode-openFolderPicker'); - - this.openFolderPicker(forceNewWindow); - }); - - ipc.on('vscode:openFileFolderPicker', (event, forceNewWindow?: boolean) => { - this.logService.log('IPC#vscode-openFileFolderPicker'); - - this.openFileFolderPicker(forceNewWindow); - }); - ipc.on('vscode:closeFolder', (event, windowId: number) => { this.logService.log('IPC#vscode-closeFolder'); diff --git a/src/vs/platform/windows/common/windows.ts b/src/vs/platform/windows/common/windows.ts index e27263bca0e..90a6fa22b15 100644 --- a/src/vs/platform/windows/common/windows.ts +++ b/src/vs/platform/windows/common/windows.ts @@ -15,7 +15,7 @@ export interface IWindowsService { _serviceBrand: any; openFileFolderPicker(windowId: number, forceNewWindow?: boolean): TPromise; - openFilePicker(windowId: number, forceNewWindow?: boolean): TPromise; + openFilePicker(windowId: number, forceNewWindow?: boolean, path?: string): TPromise; openFolderPicker(windowId: number, forceNewWindow?: boolean): TPromise; } @@ -26,6 +26,6 @@ export interface IWindowService { _serviceBrand: any; openFileFolderPicker(forceNewWindow?: boolean): TPromise; - openFilePicker(forceNewWindow?: boolean): TPromise; + openFilePicker(forceNewWindow?: boolean, path?: string): TPromise; openFolderPicker(forceNewWindow?: boolean): TPromise; } \ No newline at end of file diff --git a/src/vs/platform/windows/common/windowsIpc.ts b/src/vs/platform/windows/common/windowsIpc.ts index a1931a74633..70d6c4a8c40 100644 --- a/src/vs/platform/windows/common/windowsIpc.ts +++ b/src/vs/platform/windows/common/windowsIpc.ts @@ -11,7 +11,7 @@ import { IWindowsService } from './windows'; export interface IWindowsChannel extends IChannel { call(command: 'openFileFolderPicker', args: [number, boolean]): TPromise; - call(command: 'openFilePicker', args: [number, boolean]): TPromise; + call(command: 'openFilePicker', args: [number, boolean, string]): TPromise; call(command: 'openFolderPicker', args: [number, boolean]): TPromise; call(command: string, arg?: any): TPromise; } @@ -23,7 +23,7 @@ export class WindowsChannel implements IWindowsChannel { call(command: string, arg?: any): TPromise { switch (command) { case 'openFileFolderPicker': return this.service.openFileFolderPicker(arg[0], arg[1]); - case 'openFilePicker': return this.service.openFilePicker(arg[0], arg[1]); + case 'openFilePicker': return this.service.openFilePicker(arg[0], arg[1], arg[2]); case 'openFolderPicker': return this.service.openFolderPicker(arg[0], arg[1]); } } @@ -39,8 +39,8 @@ export class WindowsChannelClient implements IWindowsService { return this.channel.call('openFileFolderPicker', [windowId, forceNewWindow]); } - openFilePicker(windowId: number, forceNewWindow?: boolean): TPromise { - return this.channel.call('openFilePicker', [windowId, forceNewWindow]); + openFilePicker(windowId: number, forceNewWindow?: boolean, path?: string): TPromise { + return this.channel.call('openFilePicker', [windowId, forceNewWindow, path]); } openFolderPicker(windowId: number, forceNewWindow?: boolean): TPromise { diff --git a/src/vs/platform/windows/electron-browser/windowService.ts b/src/vs/platform/windows/electron-browser/windowService.ts index 3b4c9bda8d4..47dfb6e8ca5 100644 --- a/src/vs/platform/windows/electron-browser/windowService.ts +++ b/src/vs/platform/windows/electron-browser/windowService.ts @@ -21,8 +21,8 @@ export class WindowService implements IWindowService { return this.windowsService.openFileFolderPicker(this.windowId, forceNewWindow); } - openFilePicker(forceNewWindow?: boolean): TPromise { - return this.windowsService.openFilePicker(this.windowId, forceNewWindow); + openFilePicker(forceNewWindow?: boolean, path?: string): TPromise { + return this.windowsService.openFilePicker(this.windowId, forceNewWindow, path); } openFolderPicker(forceNewWindow?: boolean): TPromise { diff --git a/src/vs/platform/windows/electron-main/windowsService.ts b/src/vs/platform/windows/electron-main/windowsService.ts index db7e5827407..4ce17705c3d 100644 --- a/src/vs/platform/windows/electron-main/windowsService.ts +++ b/src/vs/platform/windows/electron-main/windowsService.ts @@ -24,8 +24,8 @@ export class WindowsService implements IWindowsService { return TPromise.as(null); } - openFilePicker(windowId: number, forceNewWindow?: boolean): TPromise { - this.windowsMainService.openFilePicker(forceNewWindow); + openFilePicker(windowId: number, forceNewWindow?: boolean, path?: string): TPromise { + this.windowsMainService.openFilePicker(forceNewWindow, path); return TPromise.as(null); } diff --git a/src/vs/workbench/parts/files/electron-browser/electronFileActions.ts b/src/vs/workbench/parts/files/electron-browser/electronFileActions.ts index fb54929b75e..d973c906835 100644 --- a/src/vs/workbench/parts/files/electron-browser/electronFileActions.ts +++ b/src/vs/workbench/parts/files/electron-browser/electronFileActions.ts @@ -18,6 +18,7 @@ import { asFileEditorInput } from 'vs/workbench/common/editor'; import { IMessageService } from 'vs/platform/message/common/message'; import { IEditorGroupService } from 'vs/workbench/services/group/common/groupService'; import { IWindowIPCService } from 'vs/workbench/services/window/electron-browser/windowService'; +import { IWindowService } from 'vs/platform/windows/common/windows'; import { ipcRenderer as ipc, clipboard } from 'electron'; @@ -116,63 +117,65 @@ export class GlobalCopyPathAction extends Action { } } -export class BaseOpenAction extends Action { - - private ipcMsg: string; - - constructor(id: string, label: string, ipcMsg: string) { - super(id, label); - - this.ipcMsg = ipcMsg; - } - - public run(): TPromise { - ipc.send(this.ipcMsg); // Handle in browser process - - return TPromise.as(true); - } -} - export class OpenFileAction extends Action { - public static ID = 'workbench.action.files.openFile'; - public static LABEL = nls.localize('openFile', "Open File..."); + static ID = 'workbench.action.files.openFile'; + static LABEL = nls.localize('openFile', "Open File..."); - constructor(id: string, label: string, @IWorkbenchEditorService private editorService: IWorkbenchEditorService) { + constructor( + id: string, + label: string, + @IWorkbenchEditorService private editorService: IWorkbenchEditorService, + @IWindowService private windowService: IWindowService + ) { super(id, label); } - public run(): TPromise { + run(): TPromise { const fileInput = asFileEditorInput(this.editorService.getActiveEditorInput(), true); // Handle in browser process if (fileInput) { - ipc.send('vscode:openFilePicker', false, paths.dirname(fileInput.getResource().fsPath)); - } else { - ipc.send('vscode:openFilePicker'); + return this.windowService.openFilePicker(false, paths.dirname(fileInput.getResource().fsPath)); } - return TPromise.as(true); + return this.windowService.openFilePicker(); } } -export class OpenFolderAction extends BaseOpenAction { +export class OpenFolderAction extends Action { - public static ID = 'workbench.action.files.openFolder'; - public static LABEL = nls.localize('openFolder', "Open Folder..."); + static ID = 'workbench.action.files.openFolder'; + static LABEL = nls.localize('openFolder', "Open Folder..."); - constructor(id: string, label: string) { - super(id, label, 'vscode:openFolderPicker'); + constructor( + id: string, + label: string, + @IWindowService private windowService: IWindowService + ) { + super(id, label); + } + + run(): TPromise { + return this.windowService.openFolderPicker(); } } -export class OpenFileFolderAction extends BaseOpenAction { +export class OpenFileFolderAction extends Action { + + static ID = 'workbench.action.files.openFileFolder'; + static LABEL = nls.localize('openFileFolder', "Open..."); - public static ID = 'workbench.action.files.openFileFolder'; - public static LABEL = nls.localize('openFileFolder', "Open..."); + constructor( + id: string, + label: string, + @IWindowService private windowService: IWindowService + ) { + super(id, label); + } - constructor(id: string, label: string) { - super(id, label, 'vscode:openFileFolderPicker'); + run(): TPromise { + return this.windowService.openFileFolderPicker(); } } -- GitLab