66import * as dom from 'vs/base/browser/dom' ;
77import { StandardMouseEvent } from 'vs/base/browser/mouseEvent' ;
88import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes' ;
9+ import { equals } from 'vs/base/common/arrays' ;
910import { Disposable , DisposableStore } from 'vs/base/common/lifecycle' ;
1011import 'vs/css!./stickyScroll' ;
1112import { ICodeEditor , IOverlayWidget , IOverlayWidgetPosition } from 'vs/editor/browser/editorBrowser' ;
@@ -21,6 +22,10 @@ export class StickyScrollWidgetState {
2122 readonly lineNumbers : number [ ] ,
2223 readonly lastLineRelativePosition : number
2324 ) { }
25+
26+ public equals ( other : StickyScrollWidgetState | undefined ) : boolean {
27+ return ! ! other && this . lastLineRelativePosition === other . lastLineRelativePosition && equals ( this . lineNumbers , other . lineNumbers ) ;
28+ }
2429}
2530
2631const _ttPolicy = createTrustedTypesPolicy ( 'stickyScrollViewLayer' , { createHTML : value => value } ) ;
@@ -35,6 +40,7 @@ export class StickyScrollWidget extends Disposable implements IOverlayWidget {
3540 private _lastLineRelativePosition : number = 0 ;
3641 private _hoverOnLine : number = - 1 ;
3742 private _hoverOnColumn : number = - 1 ;
43+ private _state : StickyScrollWidgetState | undefined ;
3844
3945 constructor (
4046 private readonly _editor : ICodeEditor
@@ -68,6 +74,10 @@ export class StickyScrollWidget extends Disposable implements IOverlayWidget {
6874 }
6975
7076 setState ( state : StickyScrollWidgetState ) : void {
77+ if ( state . equals ( this . _state ) ) {
78+ return ;
79+ }
80+ this . _state = state ;
7181 dom . clearNode ( this . _rootDomNode ) ;
7282 this . _disposableStore . clear ( ) ;
7383 this . _lineNumbers . length = 0 ;
0 commit comments