From 2d4488856971f7255c6b0968a9a987aa0c9155cc Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 3 Dec 2015 07:57:44 +0100 Subject: [PATCH] broadcast should support target window --- src/vs/workbench/electron-main/windows.ts | 11 +++++++++-- .../services/thread/electron-browser/threadService.ts | 4 ++-- .../services/window/electron-browser/windowService.ts | 6 +++--- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/vs/workbench/electron-main/windows.ts b/src/vs/workbench/electron-main/windows.ts index 35ebd34b5fe..199f2da2e6e 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 11302b297e3..baa8313712b 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 4a4c052ed5f..24896b3b74d 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 }); -- GitLab