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: [],