Skip to content

Commit 784de60

Browse files
authored
Add activeWebviewPanelId context key (microsoft#156944)
Fixes microsoft#156942 This context tracks the id of the active webviewPanel
1 parent 7833aad commit 784de60

File tree

12 files changed

+51
-33
lines changed

12 files changed

+51
-33
lines changed

extensions/markdown-language-features/package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -187,22 +187,22 @@
187187
},
188188
{
189189
"command": "markdown.showSource",
190-
"when": "markdownPreviewFocus",
190+
"when": "activeWebviewPanelId == 'markdown.preview' || activeCustomEditorId == 'vscode.markdown.preview.editor'",
191191
"group": "navigation"
192192
},
193193
{
194194
"command": "markdown.preview.refresh",
195-
"when": "markdownPreviewFocus",
195+
"when": "activeWebviewPanelId == 'markdown.preview' || activeCustomEditorId == 'vscode.markdown.preview.editor'",
196196
"group": "1_markdown"
197197
},
198198
{
199199
"command": "markdown.preview.toggleLock",
200-
"when": "markdownPreviewFocus",
200+
"when": "activeWebviewPanelId == 'markdown.preview' || activeCustomEditorId == 'vscode.markdown.preview.editor'",
201201
"group": "1_markdown"
202202
},
203203
{
204204
"command": "markdown.showPreviewSecuritySelector",
205-
"when": "markdownPreviewFocus",
205+
"when": "activeWebviewPanelId == 'markdown.preview' || activeCustomEditorId == 'vscode.markdown.preview.editor'",
206206
"group": "1_markdown"
207207
}
208208
],
@@ -247,7 +247,7 @@
247247
},
248248
{
249249
"command": "markdown.showSource",
250-
"when": "markdownPreviewFocus",
250+
"when": "activeWebviewPanelId == 'markdown.preview' || activeCustomEditorId == 'vscode.markdown.preview.editor'",
251251
"group": "navigation"
252252
},
253253
{
@@ -256,19 +256,19 @@
256256
},
257257
{
258258
"command": "markdown.showPreviewSecuritySelector",
259-
"when": "markdownPreviewFocus"
259+
"when": "activeWebviewPanelId == 'markdown.preview' || activeCustomEditorId == 'vscode.markdown.preview.editor'"
260260
},
261261
{
262262
"command": "markdown.preview.toggleLock",
263-
"when": "markdownPreviewFocus"
263+
"when": "activeWebviewPanelId == 'markdown.preview' || activeCustomEditorId == 'vscode.markdown.preview.editor'"
264264
},
265265
{
266266
"command": "markdown.preview.refresh",
267267
"when": "editorLangId == markdown && !notebookEditorFocused"
268268
},
269269
{
270270
"command": "markdown.preview.refresh",
271-
"when": "markdownPreviewFocus"
271+
"when": "activeWebviewPanelId == 'markdown.preview' || activeCustomEditorId == 'vscode.markdown.preview.editor'"
272272
},
273273
{
274274
"command": "markdown.findAllFileReferences",

extensions/markdown-language-features/src/preview/previewManager.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,6 @@ class PreviewStore<T extends IManagedMarkdownPreview> extends Disposable {
5858

5959
export class MarkdownPreviewManager extends Disposable implements vscode.WebviewPanelSerializer, vscode.CustomTextEditorProvider {
6060

61-
private static readonly markdownPreviewActiveContextKey = 'markdownPreviewFocus';
62-
6361
private readonly _topmostLineMonitor = new TopmostLineMonitor();
6462
private readonly _previewConfigurations = new MarkdownPreviewConfigurationManager();
6563

@@ -216,7 +214,6 @@ export class MarkdownPreviewManager extends Disposable implements vscode.Webview
216214
this._contributions,
217215
this._tocProvider);
218216

219-
this.setPreviewActiveContext(true);
220217
this._activePreview = preview;
221218
return this.registerDynamicPreview(preview);
222219
}
@@ -250,19 +247,14 @@ export class MarkdownPreviewManager extends Disposable implements vscode.Webview
250247

251248
private trackActive(preview: IManagedMarkdownPreview): void {
252249
preview.onDidChangeViewState(({ webviewPanel }) => {
253-
this.setPreviewActiveContext(webviewPanel.active);
254250
this._activePreview = webviewPanel.active ? preview : undefined;
255251
});
256252

257253
preview.onDispose(() => {
258254
if (this._activePreview === preview) {
259-
this.setPreviewActiveContext(false);
260255
this._activePreview = undefined;
261256
}
262257
});
263258
}
264259

265-
private setPreviewActiveContext(value: boolean) {
266-
vscode.commands.executeCommand('setContext', MarkdownPreviewManager.markdownPreviewActiveContextKey, value);
267-
}
268260
}

src/vs/workbench/api/browser/mainThreadWebviewPanels.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ export class MainThreadWebviewPanels extends Disposable implements extHostProtoc
167167

168168
const webview = this._webviewWorkbenchService.createWebview({
169169
id: handle,
170-
providedId: viewType,
170+
providedViewType: viewType,
171171
options: reviveWebviewOptions(initData.panelOptions),
172172
contentOptions: reviveWebviewContentOptions(initData.webviewOptions),
173173
extension

src/vs/workbench/contrib/customEditor/browser/customEditorInput.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export class CustomEditorInput extends LazilyResolvedWebviewEditorInput {
4646
const id = generateUuid();
4747
const webview = accessor.get(IWebviewService).createWebviewOverlay({
4848
id,
49-
providedId: viewType,
49+
providedViewType: viewType,
5050
options: { customClasses: options?.customClasses },
5151
contentOptions: {},
5252
extension: undefined,

src/vs/workbench/contrib/customEditor/browser/customEditorInputFactory.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ export class CustomEditorInputSerializer extends WebviewEditorInputSerializer {
111111
function reviveWebview(webviewService: IWebviewService, data: { id: string; origin: string | undefined; viewType: string; state: any; webviewOptions: WebviewOptions; contentOptions: WebviewContentOptions; extension?: WebviewExtensionDescription }) {
112112
const webview = webviewService.createWebviewOverlay({
113113
id: data.id,
114-
providedId: data.viewType,
114+
providedViewType: data.viewType,
115115
origin: data.origin,
116116
options: {
117117
purpose: WebviewContentPurpose.CustomEditor,

src/vs/workbench/contrib/webview/browser/overlayWebview.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export class OverlayWebview extends Disposable implements IOverlayWebview {
4444
private _findWidgetEnabled: IContextKey<boolean> | undefined;
4545

4646
public readonly id: string;
47-
public readonly providedId?: string;
47+
public readonly providedViewType?: string;
4848
public readonly origin: string;
4949

5050
public constructor(
@@ -56,7 +56,7 @@ export class OverlayWebview extends Disposable implements IOverlayWebview {
5656
super();
5757

5858
this.id = initInfo.id;
59-
this.providedId = initInfo.providedId;
59+
this.providedViewType = initInfo.providedViewType;
6060
this.origin = initInfo.origin ?? generateUuid();
6161

6262
this._extension = initInfo.extension;
@@ -194,7 +194,7 @@ export class OverlayWebview extends Disposable implements IOverlayWebview {
194194
if (!this._webview.value) {
195195
const webview = this._webviewService.createWebviewElement({
196196
id: this.id,
197-
providedId: this.providedId,
197+
providedViewType: this.providedViewType,
198198
origin: this.origin,
199199
options: this._options,
200200
contentOptions: this._contentOptions,

src/vs/workbench/contrib/webview/browser/webview.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,11 @@ export interface IWebview extends IDisposable {
161161
*/
162162
readonly origin: string;
163163

164+
/**
165+
* The original view type of the webview.
166+
*/
167+
readonly providedViewType?: string;
168+
164169
html: string;
165170
contentOptions: WebviewContentOptions;
166171
localResourcesRoot: readonly URI[];

src/vs/workbench/contrib/webview/browser/webviewElement.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ namespace WebviewState {
102102

103103
export interface WebviewInitInfo {
104104
readonly id: string;
105-
readonly providedId?: string;
105+
readonly providedViewType?: string;
106106
readonly origin?: string;
107107

108108
readonly options: WebviewOptions;
@@ -123,11 +123,10 @@ export class WebviewElement extends Disposable implements IWebview, WebviewFindD
123123
*/
124124
public readonly id: string;
125125

126-
127126
/**
128127
* The provided identifier of this webview.
129128
*/
130-
public readonly providedId?: string;
129+
public readonly providedViewType?: string;
131130

132131
/**
133132
* The origin this webview itself is loaded from. May not be unique
@@ -210,7 +209,7 @@ export class WebviewElement extends Disposable implements IWebview, WebviewFindD
210209
super();
211210

212211
this.id = initInfo.id;
213-
this.providedId = initInfo.providedId;
212+
this.providedViewType = initInfo.providedViewType;
214213
this.iframeId = generateUuid();
215214
this.origin = initInfo.origin ?? this.iframeId;
216215

@@ -343,7 +342,7 @@ export class WebviewElement extends Disposable implements IWebview, WebviewFindD
343342
getActions: () => {
344343
const contextKeyService = this._contextKeyService!.createOverlay([
345344
...Object.entries(data.context),
346-
['webview', this.providedId],
345+
['webview', this.providedViewType],
347346
]);
348347

349348
const result: IAction[] = [];
@@ -352,7 +351,7 @@ export class WebviewElement extends Disposable implements IWebview, WebviewFindD
352351
menu.dispose();
353352
return result;
354353
},
355-
getActionsContext: (): WebviewActionContext => ({ ...data.context, webview: this.providedId }),
354+
getActionsContext: (): WebviewActionContext => ({ ...data.context, webview: this.providedViewType }),
356355
getAnchor: () => ({
357356
x: elementBox.x + data.clientX,
358357
y: elementBox.y + data.clientY

src/vs/workbench/contrib/webviewPanel/browser/webviewEditor.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ import { Emitter, Event } from 'vs/base/common/event';
99
import { DisposableStore, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle';
1010
import { isWeb } from 'vs/base/common/platform';
1111
import { generateUuid } from 'vs/base/common/uuid';
12-
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
12+
import * as nls from 'vs/nls';
13+
import { IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey';
1314
import { IEditorOptions } from 'vs/platform/editor/common/editor';
1415
import { IStorageService } from 'vs/platform/storage/common/storage';
1516
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
@@ -26,6 +27,14 @@ import { IEditorService } from 'vs/workbench/services/editor/common/editorServic
2627
import { IHostService } from 'vs/workbench/services/host/browser/host';
2728
import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService';
2829

30+
/**
31+
* Tracks the id of the actively focused webview.
32+
*/
33+
export const CONTEXT_ACTIVE_WEBVIEW_PANEL_ID = new RawContextKey<string>('activeWebviewPanelId', '', {
34+
type: 'string',
35+
description: nls.localize('context.activeWebviewId', "The viewType of the currently active webview panel."),
36+
});
37+
2938
export class WebviewEditor extends EditorPane {
3039

3140
public static readonly ID = 'WebviewEditor';

src/vs/workbench/contrib/webviewPanel/browser/webviewEditorInputSerializer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export class WebviewEditorInputSerializer implements IEditorSerializer {
8080
return this._webviewWorkbenchService.reviveWebview({
8181
webviewInitInfo: {
8282
id: data.id,
83-
providedId: data.providedId,
83+
providedViewType: data.providedId,
8484
origin: data.origin,
8585
options: data.webviewOptions,
8686
contentOptions: data.contentOptions,

0 commit comments

Comments
 (0)