From 4ba9ad5d6c43ca2c392c0125d1beabd14d80ce43 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Mon, 25 May 2020 10:00:30 +0200 Subject: [PATCH] Emit view zones changed through view model --- src/vs/editor/browser/view/viewImpl.ts | 5 ++--- .../editor/browser/widget/codeEditorWidget.ts | 8 ++++---- .../viewModel/viewModelEventDispatcher.ts | 19 ++++++++++++++++++- .../editor/common/viewModel/viewModelImpl.ts | 3 ++- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/vs/editor/browser/view/viewImpl.ts b/src/vs/editor/browser/view/viewImpl.ts index d58c3f0fede..72397cdf9e8 100644 --- a/src/vs/editor/browser/view/viewImpl.ts +++ b/src/vs/editor/browser/view/viewImpl.ts @@ -450,10 +450,9 @@ export class View extends ViewEventHandler { return new OverviewRuler(this._context, cssClassName); } - public change(callback: (changeAccessor: IViewZoneChangeAccessor) => any): boolean { - const hadAChange = this.viewZones.changeViewZones(callback); + public change(callback: (changeAccessor: IViewZoneChangeAccessor) => any): void { + this.viewZones.changeViewZones(callback); this._scheduleRender(); - return hadAChange; } public render(now: boolean, everything: boolean): void { diff --git a/src/vs/editor/browser/widget/codeEditorWidget.ts b/src/vs/editor/browser/widget/codeEditorWidget.ts index 0f3aaa1bddf..9cb79e71a6c 100644 --- a/src/vs/editor/browser/widget/codeEditorWidget.ts +++ b/src/vs/editor/browser/widget/codeEditorWidget.ts @@ -1385,10 +1385,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE if (!this._modelData || !this._modelData.hasRealView) { return; } - const hasChanges = this._modelData.view.change(callback); - if (hasChanges) { - this._onDidChangeViewZones.fire(); - } + this._modelData.view.change(callback); } public getTargetAtClientPoint(clientX: number, clientY: number): editorBrowser.IMouseTarget | null { @@ -1521,6 +1518,9 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE case OutgoingViewModelEventKind.ScrollChanged: this._onDidScrollChange.fire(e); break; + case OutgoingViewModelEventKind.ViewZonesChanged: + this._onDidChangeViewZones.fire(); + break; } })); diff --git a/src/vs/editor/common/viewModel/viewModelEventDispatcher.ts b/src/vs/editor/common/viewModel/viewModelEventDispatcher.ts index 2bd933331e7..8b8f5b4b907 100644 --- a/src/vs/editor/common/viewModel/viewModelEventDispatcher.ts +++ b/src/vs/editor/common/viewModel/viewModelEventDispatcher.ts @@ -148,6 +148,7 @@ export const enum OutgoingViewModelEventKind { ContentSizeChanged, FocusChanged, ScrollChanged, + ViewZonesChanged, } export class ContentSizeChangedEvent implements IContentSizeChangedEvent { @@ -251,7 +252,6 @@ export class ScrollChangedEvent { return (!this.scrollWidthChanged && !this.scrollLeftChanged && !this.scrollHeightChanged && !this.scrollTopChanged); } - public merge(other: OutgoingViewModelEvent): ScrollChangedEvent { if (other.kind !== OutgoingViewModelEventKind.ScrollChanged) { return this; @@ -263,8 +263,25 @@ export class ScrollChangedEvent { } } +export class ViewZonesChangedEvent { + + public readonly kind = OutgoingViewModelEventKind.ViewZonesChanged; + + constructor() { + } + + public isNoOp(): boolean { + return false; + } + + public merge(other: OutgoingViewModelEvent): ViewZonesChangedEvent { + return this; + } +} + export type OutgoingViewModelEvent = ( ContentSizeChangedEvent | FocusChangedEvent | ScrollChangedEvent + | ViewZonesChangedEvent ); diff --git a/src/vs/editor/common/viewModel/viewModelImpl.ts b/src/vs/editor/common/viewModel/viewModelImpl.ts index 99de87ae6ab..63663464456 100644 --- a/src/vs/editor/common/viewModel/viewModelImpl.ts +++ b/src/vs/editor/common/viewModel/viewModelImpl.ts @@ -30,7 +30,7 @@ import { Cursor } from 'vs/editor/common/controller/cursor'; import { PartialCursorState, CursorState, IColumnSelectData, EditOperationType, CursorConfiguration } from 'vs/editor/common/controller/cursorCommon'; import { CursorChangeReason } from 'vs/editor/common/controller/cursorEvents'; import { IWhitespaceChangeAccessor } from 'vs/editor/common/viewLayout/linesLayout'; -import { ViewModelEventDispatcher, OutgoingViewModelEvent, FocusChangedEvent, ScrollChangedEvent } from 'vs/editor/common/viewModel/viewModelEventDispatcher'; +import { ViewModelEventDispatcher, OutgoingViewModelEvent, FocusChangedEvent, ScrollChangedEvent, ViewZonesChangedEvent } from 'vs/editor/common/viewModel/viewModelEventDispatcher'; import { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler'; const USE_IDENTITY_LINES_COLLECTION = true; @@ -980,6 +980,7 @@ export class ViewModel extends Disposable implements IViewModel { const hadAChange = this.viewLayout.changeWhitespace(callback); if (hadAChange) { this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewZonesChangedEvent()); + this._eventDispatcher.emitOutgoingEvent(new ViewZonesChangedEvent()); } } public setMaxLineWidth(maxLineWidth: number): void { -- GitLab