From 407393b1285ed648be6594395429a802e876b20c Mon Sep 17 00:00:00 2001 From: christine betts Date: Fri, 8 Aug 2025 15:21:50 +0000 Subject: [PATCH] [ide-mode] Hide diff options when active diff is not focused (#5808) Co-authored-by: Jacob Richman --- .../vscode-ide-companion/src/diff-manager.ts | 28 ++++++++++++++++++- .../src/extension.test.ts | 7 +++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/packages/vscode-ide-companion/src/diff-manager.ts b/packages/vscode-ide-companion/src/diff-manager.ts index d2a53b54..9c7afc1d 100644 --- a/packages/vscode-ide-companion/src/diff-manager.ts +++ b/packages/vscode-ide-companion/src/diff-manager.ts @@ -54,11 +54,25 @@ export class DiffManager { new vscode.EventEmitter(); readonly onDidChange = this.onDidChangeEmitter.event; private diffDocuments = new Map(); + private readonly subscriptions: vscode.Disposable[] = []; constructor( private readonly log: (message: string) => void, private readonly diffContentProvider: DiffContentProvider, - ) {} + ) { + this.subscriptions.push( + vscode.window.onDidChangeActiveTextEditor((editor) => { + this.onActiveEditorChange(editor); + }), + ); + this.onActiveEditorChange(vscode.window.activeTextEditor); + } + + dispose() { + for (const subscription of this.subscriptions) { + subscription.dispose(); + } + } /** * Creates and shows a new diff view. @@ -199,6 +213,18 @@ export class DiffManager { ); } + private async onActiveEditorChange(editor: vscode.TextEditor | undefined) { + const isVisible = + !!editor && + editor.document.uri.scheme === DIFF_SCHEME && + this.diffDocuments.has(editor.document.uri.toString()); + await vscode.commands.executeCommand( + 'setContext', + 'gemini.diff.isVisible', + isVisible, + ); + } + private addDiffDocument(uri: vscode.Uri, diffInfo: DiffInfo) { this.diffDocuments.set(uri.toString(), diffInfo); } diff --git a/packages/vscode-ide-companion/src/extension.test.ts b/packages/vscode-ide-companion/src/extension.test.ts index 89d1821f..2b3db5ac 100644 --- a/packages/vscode-ide-companion/src/extension.test.ts +++ b/packages/vscode-ide-companion/src/extension.test.ts @@ -18,6 +18,13 @@ vi.mock('vscode', () => ({ show: vi.fn(), sendText: vi.fn(), })), + onDidChangeActiveTextEditor: vi.fn(), + activeTextEditor: undefined, + tabGroups: { + all: [], + close: vi.fn(), + }, + showTextDocument: vi.fn(), }, workspace: { workspaceFolders: [],