Skip to content

Commit c0001d7

Browse files
committed
Fixes microsoft#116483: Allow folding in the diff editor
1 parent 8d542f9 commit c0001d7

File tree

4 files changed

+40
-2
lines changed

4 files changed

+40
-2
lines changed

src/vs/editor/browser/widget/codeEditorWidget.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,9 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE
207207

208208
private readonly _onDidChangeViewZones: Emitter<void> = this._register(new Emitter<void>());
209209
public readonly onDidChangeViewZones: Event<void> = this._onDidChangeViewZones.event;
210+
211+
private readonly _onDidChangeHiddenAreas: Emitter<void> = this._register(new Emitter<void>());
212+
public readonly onDidChangeHiddenAreas: Event<void> = this._onDidChangeHiddenAreas.event;
210213
//#endregion
211214

212215
public readonly isSimpleWidget: boolean;
@@ -1535,6 +1538,9 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE
15351538
case OutgoingViewModelEventKind.ViewZonesChanged:
15361539
this._onDidChangeViewZones.fire();
15371540
break;
1541+
case OutgoingViewModelEventKind.HiddenAreasChanged:
1542+
this._onDidChangeHiddenAreas.fire();
1543+
break;
15381544
case OutgoingViewModelEventKind.ReadOnlyEditAttempt:
15391545
this._onDidAttemptReadOnlyEdit.fire();
15401546
break;

src/vs/editor/browser/widget/diffEditorWidget.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,11 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
480480
}
481481
}));
482482

483+
this._register(editor.onDidChangeHiddenAreas(() => {
484+
this._updateDecorationsRunner.cancel();
485+
this._updateDecorations();
486+
}));
487+
483488
this._register(editor.onDidChangeModelContent(() => {
484489
if (this._isVisible) {
485490
this._beginUpdateDecorationsSoon();
@@ -542,6 +547,11 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
542547
}
543548
}));
544549

550+
this._register(editor.onDidChangeHiddenAreas(() => {
551+
this._updateDecorationsRunner.cancel();
552+
this._updateDecorations();
553+
}));
554+
545555
this._register(editor.onDidChangeModelContent(() => {
546556
if (this._isVisible) {
547557
this._beginUpdateDecorationsSoon();
@@ -1064,7 +1074,6 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
10641074
// Clone scrollbar options before changing them
10651075
clonedOptions.scrollbar = { ...(clonedOptions.scrollbar || {}) };
10661076
clonedOptions.scrollbar.vertical = 'visible';
1067-
clonedOptions.folding = false;
10681077
clonedOptions.codeLens = this._options.diffCodeLens;
10691078
clonedOptions.fixedOverflowWidgets = true;
10701079
// clonedOptions.lineDecorationsWidth = '2ch';

src/vs/editor/common/viewModel/viewModelEventDispatcher.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ export const enum OutgoingViewModelEventKind {
176176
FocusChanged,
177177
ScrollChanged,
178178
ViewZonesChanged,
179+
HiddenAreasChanged,
179180
ReadOnlyEditAttempt,
180181
CursorStateChanged,
181182
}
@@ -308,6 +309,22 @@ export class ViewZonesChangedEvent {
308309
}
309310
}
310311

312+
export class HiddenAreasChangedEvent {
313+
314+
public readonly kind = OutgoingViewModelEventKind.HiddenAreasChanged;
315+
316+
constructor() {
317+
}
318+
319+
public isNoOp(): boolean {
320+
return false;
321+
}
322+
323+
public merge(other: OutgoingViewModelEvent): HiddenAreasChangedEvent {
324+
return this;
325+
}
326+
}
327+
311328
export class CursorStateChangedEvent {
312329

313330
public readonly kind = OutgoingViewModelEventKind.CursorStateChanged;
@@ -388,6 +405,7 @@ export type OutgoingViewModelEvent = (
388405
| FocusChangedEvent
389406
| ScrollChangedEvent
390407
| ViewZonesChangedEvent
408+
| HiddenAreasChangedEvent
391409
| ReadOnlyEditAttemptEvent
392410
| CursorStateChangedEvent
393411
);

src/vs/editor/common/viewModel/viewModelImpl.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,9 +442,10 @@ export class ViewModel extends Disposable implements IViewModel {
442442
}
443443

444444
public setHiddenAreas(ranges: Range[]): void {
445+
let lineMappingChanged = false;
445446
try {
446447
const eventsCollector = this._eventDispatcher.beginEmitViewEvents();
447-
let lineMappingChanged = this._lines.setHiddenAreas(ranges);
448+
lineMappingChanged = this._lines.setHiddenAreas(ranges);
448449
if (lineMappingChanged) {
449450
eventsCollector.emitViewEvent(new viewEvents.ViewFlushedEvent());
450451
eventsCollector.emitViewEvent(new viewEvents.ViewLineMappingChangedEvent());
@@ -458,6 +459,10 @@ export class ViewModel extends Disposable implements IViewModel {
458459
this._eventDispatcher.endEmitViewEvents();
459460
}
460461
this._updateConfigurationViewLineCount.schedule();
462+
463+
if (lineMappingChanged) {
464+
this._eventDispatcher.emitOutgoingEvent(new ViewZonesChangedEvent());
465+
}
461466
}
462467

463468
public getVisibleRangesPlusViewportAboveBelow(): Range[] {

0 commit comments

Comments
 (0)