Handle commands in WebviewEditorOverlay correctly

Fixes #77772
This commit is contained in:
Matt Bierner
2019-07-22 11:26:17 -07:00
parent 1c28c30760
commit 37e26c095f
3 changed files with 12 additions and 0 deletions
@@ -192,6 +192,10 @@ class DynamicWebviewEditorOverlay extends Disposable implements WebviewEditorOve
showFind(): void { this.withWebview(webview => webview.showFind()); }
hideFind(): void { this.withWebview(webview => webview.hideFind()); }
public getInnerWebview() {
return this._webview.value;
}
private withWebview(f: (webview: Webview) => void): void {
if (this._webview.value) {
f(this._webview.value);
@@ -97,6 +97,8 @@ export interface WebviewEditorOverlay extends Webview {
claim(owner: any): void;
release(owner: any): void;
getInnerWebview(): Webview | undefined;
}
export const webviewDeveloperCategory = nls.localize('developer', "Developer");
@@ -9,6 +9,7 @@ import { Command, ServicesAccessor } from 'vs/editor/browser/editorExtensions';
import { WebviewEditor } from 'vs/workbench/contrib/webview/browser/webviewEditor';
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { ElectronWebviewBasedWebview } from 'vs/workbench/contrib/webview/electron-browser/webviewElement';
import { WebviewEditorOverlay } from 'vs/workbench/contrib/webview/common/webview';
export class OpenWebviewDeveloperToolsAction extends Action {
static readonly ID = 'workbench.action.webview.openDeveloperTools';
@@ -92,6 +93,11 @@ function withActiveWebviewBasedWebview(accessor: ServicesAccessor, f: (webview:
webViewEditor.withWebview(webview => {
if (webview instanceof ElectronWebviewBasedWebview) {
f(webview);
} else if ((webview as WebviewEditorOverlay).getInnerWebview) {
const innerWebview = (webview as WebviewEditorOverlay).getInnerWebview();
if (innerWebview instanceof ElectronWebviewBasedWebview) {
f(innerWebview);
}
}
});
}