diff --git a/src/vs/workbench/api/browser/mainThreadWebviewPanels.ts b/src/vs/workbench/api/browser/mainThreadWebviewPanels.ts index 5e00e96f690..c8329367c1e 100644 --- a/src/vs/workbench/api/browser/mainThreadWebviewPanels.ts +++ b/src/vs/workbench/api/browser/mainThreadWebviewPanels.ts @@ -154,9 +154,10 @@ export class MainThreadWebviewPanels extends Disposable implements extHostProtoc initData: extHostProtocol.IWebviewInitData, showOptions: extHostProtocol.WebviewPanelShowOptions, ): void { + const targetGroup = this.getTargetGroupFromShowOptions(showOptions); const mainThreadShowOptions: ICreateWebViewShowOptions = showOptions ? { preserveFocus: !!showOptions.preserveFocus, - group: columnToEditorGroup(this._editorGroupService, showOptions.viewColumn) + group: targetGroup } : {}; const extension = reviveWebviewExtension(extensionData); @@ -197,7 +198,19 @@ export class MainThreadWebviewPanels extends Disposable implements extHostProtoc return; } - this._webviewWorkbenchService.revealWebview(webview, showOptions.viewColumn ?? ACTIVE_GROUP, !!showOptions.preserveFocus); + const targetGroup = this.getTargetGroupFromShowOptions(showOptions); + this._webviewWorkbenchService.revealWebview(webview, targetGroup, !!showOptions.preserveFocus); + } + + private getTargetGroupFromShowOptions(showOptions: extHostProtocol.WebviewPanelShowOptions) { + if (typeof showOptions.viewColumn !== 'undefined') { + if (showOptions.viewColumn >= 0) { + return columnToEditorGroup(this._editorGroupService, showOptions.viewColumn); + } else { + return showOptions.viewColumn; + } + } + return ACTIVE_GROUP; } public $registerSerializer(viewType: string, options: { serializeBuffersForPostMessage: boolean }): void { diff --git a/src/vs/workbench/api/common/extHostWebviewPanels.ts b/src/vs/workbench/api/common/extHostWebviewPanels.ts index 188bda392c1..ed1dfe47592 100644 --- a/src/vs/workbench/api/common/extHostWebviewPanels.ts +++ b/src/vs/workbench/api/common/extHostWebviewPanels.ts @@ -151,7 +151,7 @@ class ExtHostWebviewPanel extends Disposable implements vscode.WebviewPanel { public reveal(viewColumn?: vscode.ViewColumn, preserveFocus?: boolean): void { this.assertNotDisposed(); this.#proxy.$reveal(this.#handle, { - viewColumn: viewColumn ? typeConverters.ViewColumn.from(viewColumn) : undefined, + viewColumn: typeof viewColumn === 'undefined' ? undefined : typeConverters.ViewColumn.from(viewColumn), preserveFocus: !!preserveFocus }); } diff --git a/src/vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService.ts b/src/vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService.ts index 779cf22256c..836162dbe84 100644 --- a/src/vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService.ts +++ b/src/vs/workbench/contrib/webviewPanel/browser/webviewWorkbenchService.ts @@ -244,9 +244,6 @@ export class WebviewEditorService extends Disposable implements IWebviewWorkbenc preserveFocus: boolean ): void { const topLevelEditor = this.findTopLevelEditorForWebview(webview); - if (this._editorService.activeEditor === topLevelEditor) { - return; - } this._editorService.openEditor(topLevelEditor, { preserveFocus,