[ide-mode] Hide diff options when active diff is not focused (#5808)

Co-authored-by: Jacob Richman <jacob314@gmail.com>
This commit is contained in:
christine betts 2025-08-08 15:21:50 +00:00 committed by GitHub
parent 51d09e720b
commit 407393b128
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 34 additions and 1 deletions

View File

@ -54,11 +54,25 @@ export class DiffManager {
new vscode.EventEmitter<JSONRPCNotification>();
readonly onDidChange = this.onDidChangeEmitter.event;
private diffDocuments = new Map<string, DiffInfo>();
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);
}

View File

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