diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts index eb810bbc325..6c939655713 100644 --- a/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts @@ -387,6 +387,33 @@ suite('vscode API - window', () => { //assert.strictEqual(tabs[4].viewColumn, ViewColumn.Three); }); + test('Tabs - ensure active tab is correct', async () => { + const [docA, docB, docC] = await Promise.all([ + workspace.openTextDocument(await createRandomFile()), + workspace.openTextDocument(await createRandomFile()), + workspace.openTextDocument(await createRandomFile()), + ]); + + await window.showTextDocument(docA, { viewColumn: ViewColumn.One, preview: false }); + assert.ok(window.activeTab); + assert.strictEqual(window.activeTab.resource?.toString(), docA.uri.toString()); + + await window.showTextDocument(docB, { viewColumn: ViewColumn.Two, preview: false }); + assert.ok(window.activeTab); + assert.strictEqual(window.activeTab.resource?.toString(), docB.uri.toString()); + + await window.showTextDocument(docC, { viewColumn: ViewColumn.Three, preview: false }); + assert.ok(window.activeTab); + assert.strictEqual(window.activeTab.resource?.toString(), docC.uri.toString()); + + await commands.executeCommand('workbench.action.closeActiveEditor'); + await commands.executeCommand('workbench.action.closeActiveEditor'); + await commands.executeCommand('workbench.action.closeActiveEditor'); + + assert.ok(!window.activeTab); + + }); + //#endregion test('#7013 - input without options', function () { diff --git a/src/vs/workbench/api/browser/mainThreadEditorTabs.ts b/src/vs/workbench/api/browser/mainThreadEditorTabs.ts index 677d19a1730..b7d15bba316 100644 --- a/src/vs/workbench/api/browser/mainThreadEditorTabs.ts +++ b/src/vs/workbench/api/browser/mainThreadEditorTabs.ts @@ -27,7 +27,8 @@ export class MainThreadEditorTabs { this._proxy = extHostContext.getProxy(ExtHostContext.ExtHostEditorTabs); - this._dispoables.add(editorService.onDidEditorsChange(this._pushEditorTabs, this)); + //this._dispoables.add(editorService.onDidEditorsChange(this._pushEditorTabs, this)); + this._dispoables.add(editorService.onDidVisibleEditorsChange(this._pushEditorTabs, this)); this._editorGroupsService.whenReady.then(() => this._pushEditorTabs()); } diff --git a/src/vs/workbench/api/common/extHostEditorTabs.ts b/src/vs/workbench/api/common/extHostEditorTabs.ts index 9df055a29ec..879dc99e4ff 100644 --- a/src/vs/workbench/api/common/extHostEditorTabs.ts +++ b/src/vs/workbench/api/common/extHostEditorTabs.ts @@ -76,8 +76,11 @@ export class ExtHostEditorTabs implements IExtHostEditorTabs { isActive: dto.isActive }); }); + const oldActiveTab = this._activeTab; this._activeTab = activeIndex === -1 ? undefined : this._tabs[activeIndex]; - this._onDidChangeActiveTab.fire(this._activeTab); + if (this._activeTab !== oldActiveTab) { + this._onDidChangeActiveTab.fire(this._activeTab); + } this._onDidChangeTabs.fire(this._tabs); } }