diff --git a/src/vs/workbench/electron-main/windows.ts b/src/vs/workbench/electron-main/windows.ts index 35ebd34b5fe02bfece20e4c8f2d2db0390bd6dce..199f2da2e6ea5b70cc42115accad7bafbd9b2136 100644 --- a/src/vs/workbench/electron-main/windows.ts +++ b/src/vs/workbench/electron-main/windows.ts @@ -234,9 +234,16 @@ export class WindowsManager { storage.setItem(WindowsManager.themeStorageKey, theme); }); - ipc.on('vscode:broadcast', (event: Event, windowId: number, broadcast: { channel: string; payload: any; }) => { + ipc.on('vscode:broadcast', (event: Event, windowId: number, target: string, broadcast: { channel: string; payload: any; }) => { if (broadcast.channel && broadcast.payload) { - this.sendToAll('vscode:broadcast', broadcast, [windowId]); + if (target) { + let targetWindow = this.findWindow(target); + if (targetWindow && targetWindow.win.id !== windowId) { + targetWindow.send('vscode:broadcast', broadcast); + } + } else { + this.sendToAll('vscode:broadcast', broadcast, [windowId]); + } } }); diff --git a/src/vs/workbench/services/thread/electron-browser/threadService.ts b/src/vs/workbench/services/thread/electron-browser/threadService.ts index 11302b297e3f4cf8645225d639d8b2c7c4be4c2b..baa8313712ba0edbada88046ede5cbe1caaa491e 100644 --- a/src/vs/workbench/services/thread/electron-browser/threadService.ts +++ b/src/vs/workbench/services/thread/electron-browser/threadService.ts @@ -142,7 +142,7 @@ class PluginHostProcessManager { payload: { port: port } - }); + }, config.env.pluginDevelopmentPath /* target */); } // Messages from Plugin host @@ -211,7 +211,7 @@ class PluginHostProcessManager { this.windowService.broadcast({ channel: PLUGIN_LOG_BROADCAST_CHANNEL, payload: logEntry - }); + }, config.env.pluginDevelopmentPath /* target */); } } diff --git a/src/vs/workbench/services/window/electron-browser/windowService.ts b/src/vs/workbench/services/window/electron-browser/windowService.ts index 4a4c052ed5f171493ed99b3065160aa98c7bf5e6..24896b3b74d7695b49055e0a42e4b95c546ee66b 100644 --- a/src/vs/workbench/services/window/electron-browser/windowService.ts +++ b/src/vs/workbench/services/window/electron-browser/windowService.ts @@ -33,7 +33,7 @@ export interface IWindowService { registerWindow(win: ElectronWindow): void; - broadcast(b: IBroadcast): void; + broadcast(b: IBroadcast, target?: string): void; onBroadcast: EventProvider<(b: IBroadcast) => void>; } @@ -72,8 +72,8 @@ export class WindowService implements IWindowService { this.win = win; } - public broadcast(b: IBroadcast): void { - ipc.send('vscode:broadcast', this.getWindowId(), { + public broadcast(b: IBroadcast, target?: string): void { + ipc.send('vscode:broadcast', this.getWindowId(), target, { channel: b.channel, payload: b.payload });