diff --git a/src/vs/workbench/api/electron-browser/mainThreadWebview.ts b/src/vs/workbench/api/electron-browser/mainThreadWebview.ts index 2562e932d13..1d7da64f539 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadWebview.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadWebview.ts @@ -246,18 +246,6 @@ class WebviewEditor extends BaseWebviewEditor { } }, null, this._contentDisposables); - this._webview.onFocus(() => { - if (this.input) { - (this.input as WebviewInput).events.onFocus(); - } - }, this, this._contentDisposables); - - this._webview.onBlur(() => { - if (this.input) { - (this.input as WebviewInput).events.onBlur(); - } - }, this, this._contentDisposables); - this._contentDisposables.push(this._webview); this._contentDisposables.push(toDisposable(() => this._webview = null)); } @@ -283,7 +271,7 @@ export class MainThreadWebview implements MainThreadWebviewShape { private readonly _proxy: ExtHostWebviewsShape; private readonly _webviews = new Map(); - // private _activeWebview: WebviewInput | undefined; + private _activeWebview: WebviewInput | undefined = undefined; constructor( context: IExtHostContext, @@ -293,7 +281,7 @@ export class MainThreadWebview implements MainThreadWebviewShape { ) { this._proxy = context.getProxy(ExtHostContext.ExtHostWebviews); - _editorGroupService.onEditorsChanged(() => this.onEditorsChanged, null, this._toDispose); + _editorGroupService.onEditorsChanged(this.onEditorsChanged, this, this._toDispose); } dispose(): void { @@ -357,15 +345,31 @@ export class MainThreadWebview implements MainThreadWebviewShape { private onEditorsChanged() { const activeEditor = this._editorService.getActiveEditor(); + let newActiveWebview: WebviewInput | undefined = undefined; if (activeEditor.input instanceof WebviewInput) { - // this._activeWebview = activeEditor.input; for (const handle of map.keys(this._webviews)) { const input = this._webviews.get(handle); if (input.matches(activeEditor.input)) { - + newActiveWebview = input; + break; } } } + + if (newActiveWebview) { + if (!this._activeWebview || !newActiveWebview.matches(this._activeWebview)) { + if (this._activeWebview) { + this._activeWebview.events.onBlur(); + } + newActiveWebview.events.onFocus(); + this._activeWebview = newActiveWebview; + } + } else { + if (this._activeWebview) { + this._activeWebview.events.onBlur(); + this._activeWebview = undefined; + } + } } }