Use onEditorsChanged to fire webview onBecameActive and onBecameInactive

Fixes #43775
Fixes #43776
This commit is contained in:
Matt Bierner
2018-02-15 11:06:53 -08:00
parent ae15d09cbc
commit 70b41f0b2d

View File

@@ -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<number, WebviewInput>();
// 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;
}
}
}
}