From 5c13561a2fbbbf7718aa4c7092b1ed25d9f3ad27 Mon Sep 17 00:00:00 2001 From: johnsoncodehk Date: Sun, 31 Jul 2022 21:02:12 +0800 Subject: [PATCH] fix: avoid webview buttons show in unrelated extensions windows close #1611 --- .../vscode-vue-language-features/package.json | 10 +++++----- .../src/features/preview.ts | 20 +++++++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/extensions/vscode-vue-language-features/package.json b/extensions/vscode-vue-language-features/package.json index 134a4a17c..cd3779478 100644 --- a/extensions/vscode-vue-language-features/package.json +++ b/extensions/vscode-vue-language-features/package.json @@ -714,11 +714,11 @@ }, { "command": "volar.action.selectElement", - "when": "activeEditor == WebviewEditor" + "when": "volarPreviewFocus" }, { "command": "volar.action.openInBrowser", - "when": "activeEditor == WebviewEditor" + "when": "volarPreviewFocus" }, { "command": "volar.selectTypeScriptVersion", @@ -743,17 +743,17 @@ }, { "command": "volar.action.selectElement", - "when": "activeEditor == WebviewEditor", + "when": "volarPreviewFocus", "group": "navigation" }, { "command": "volar.action.openInBrowser", - "when": "activeEditor == WebviewEditor", + "when": "volarPreviewFocus", "group": "navigation" }, { "command": "workbench.action.webview.reloadWebviewAction", - "when": "activeEditor == WebviewEditor", + "when": "volarPreviewFocus", "group": "navigation" } ], diff --git a/extensions/vscode-vue-language-features/src/features/preview.ts b/extensions/vscode-vue-language-features/src/features/preview.ts index ab5bc88b7..a51d86f4a 100644 --- a/extensions/vscode-vue-language-features/src/features/preview.ts +++ b/extensions/vscode-vue-language-features/src/features/preview.ts @@ -20,6 +20,7 @@ const enum PreviewType { export async function register(context: vscode.ExtensionContext) { const panels = new Set(); + let _activePreview: vscode.WebviewPanel | undefined; let externalBrowserPanel: vscode.WebviewPanel | undefined; let avoidUpdateOnDidChangeActiveTextEditor = false; let updateComponentPreview: Function | undefined; @@ -365,6 +366,7 @@ export async function register(context: vscode.ExtensionContext) { enableFindWidget: true, }, ); + trackActive(); const panelContext: vscode.Disposable[] = []; @@ -412,6 +414,24 @@ export async function register(context: vscode.ExtensionContext) { } return port; + + function trackActive(): void { + panel.onDidChangeViewState(({ webviewPanel }) => { + setPreviewActiveContext(webviewPanel.active); + _activePreview = webviewPanel.active ? panel : undefined; + }); + + panel.onDidDispose(() => { + if (_activePreview === panel) { + setPreviewActiveContext(false); + _activePreview = undefined; + } + }); + } + + function setPreviewActiveContext(value: boolean) { + vscode.commands.executeCommand('setContext', 'volarPreviewFocus', value); + } } async function webviewEventHandler(message: any) {