Pragmatic fix for diff decoration in split editors (#211356)

* Show git gutter indicators in both panes when using `Split Editor In Group`
Fixes #211257

* Revert "Show git gutter indicators in both panes when using `Split Editor In Group`"

This reverts commit e8b2166ef3.

* Pragmatic fix
This commit is contained in:
Alex Ross 2024-04-25 15:53:18 +02:00 committed by GitHub
parent e5faffedfc
commit 72c0c28ee3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -58,6 +58,10 @@ import { AccessibilitySignal, IAccessibilitySignalService } from 'vs/platform/ac
import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility';
import { IQuickDiffService, QuickDiff } from 'vs/workbench/contrib/scm/common/quickDiff';
import { IQuickDiffSelectItem, SwitchQuickDiffBaseAction, SwitchQuickDiffViewItem } from 'vs/workbench/contrib/scm/browser/dirtyDiffSwitcher';
import { TextDiffEditor } from 'vs/workbench/browser/parts/editor/textDiffEditor';
import { IEditorControl } from 'vs/workbench/common/editor';
import { TextFileEditor } from 'vs/workbench/contrib/files/browser/editors/textFileEditor';
import { SideBySideEditor } from 'vs/workbench/browser/parts/editor/sideBySideEditor';
class DiffActionRunner extends ActionRunner {
@ -1649,8 +1653,28 @@ export class DirtyDiffWorkbenchController extends Disposable implements ext.IWor
this.enabled = false;
}
private getVisibleEditorControls(): IEditorControl[] {
const controls: IEditorControl[] = [];
const addControl = (control: IEditorControl | undefined) => {
if (control) {
controls.push(control);
}
};
for (const editorPane of this.editorService.visibleEditorPanes) {
if (editorPane instanceof TextDiffEditor || editorPane instanceof TextFileEditor) {
addControl(editorPane.getControl());
} else if (editorPane instanceof SideBySideEditor) {
addControl(editorPane.getPrimaryEditorPane()?.getControl());
addControl(editorPane.getSecondaryEditorPane()?.getControl());
}
}
return controls;
}
private onEditorsChanged(): void {
for (const editor of this.editorService.visibleTextEditorControls) {
const visibleControls = this.getVisibleEditorControls();
for (const editor of visibleControls) {
if (isCodeEditor(editor)) {
const textModel = editor.getModel();
const controller = DirtyDiffController.get(editor);
@ -1676,7 +1700,7 @@ export class DirtyDiffWorkbenchController extends Disposable implements ext.IWor
for (const [uri, item] of this.items) {
for (const editorId of item.keys()) {
if (!this.editorService.visibleTextEditorControls.find(editor => isCodeEditor(editor) && editor.getModel()?.uri.toString() === uri.toString() && editor.getId() === editorId)) {
if (!this.getVisibleEditorControls().find(editor => isCodeEditor(editor) && editor.getModel()?.uri.toString() === uri.toString() && editor.getId() === editorId)) {
if (item.has(editorId)) {
const dirtyDiffItem = item.get(editorId);
dirtyDiffItem?.dispose();