diff --git a/src/Terminal.ts b/src/Terminal.ts index 704df3795..5c9154fc2 100644 --- a/src/Terminal.ts +++ b/src/Terminal.ts @@ -281,7 +281,7 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp this.register(this._inputHandler); this.linkifier = this.linkifier || new Linkifier(this._bufferService, this._logService); - this.linkifier2 = this.linkifier2 || new Linkifier2(this._bufferService, this._coreService, this.onScroll.bind(this)); + this.linkifier2 = this.linkifier2 || new Linkifier2(this._bufferService); if (this.options.windowsMode) { this._windowsMode = applyWindowsMode(this); @@ -600,7 +600,7 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp this.register(this._mouseZoneManager); this.register(this.onScroll(() => this._mouseZoneManager.clearAll())); this.linkifier.attachToDom(this.element, this._mouseZoneManager); - this.linkifier2.attachToDom(this.element, this._mouseService); + this.linkifier2.attachToDom(this.element, this._mouseService, this._renderService); // This event listener must be registered aftre MouseZoneManager is created this.register(addDisposableDomListener(this.element, 'mousedown', (e: MouseEvent) => this._selectionService.onMouseDown(e))); diff --git a/src/browser/Linkifier2.ts b/src/browser/Linkifier2.ts index b5a06df84..cddb69983 100644 --- a/src/browser/Linkifier2.ts +++ b/src/browser/Linkifier2.ts @@ -5,14 +5,15 @@ import { ILinkifier2, ILinkProvider, IBufferCellPosition, ILink, ILinkifierEvent } from './Types'; import { IDisposable } from 'common/Types'; -import { IMouseService } from './services/Services'; +import { IMouseService, IRenderService } from './services/Services'; import { IBufferService, ICoreService } from 'common/services/Services'; import { EventEmitter, IEvent } from 'common/EventEmitter'; export class Linkifier2 implements ILinkifier2 { private _element: HTMLElement | undefined; - private _linkProviders: ILinkProvider[] = []; private _mouseService: IMouseService | undefined; + private _renderService: IRenderService | undefined; + private _linkProviders: ILinkProvider[] = []; private _currentLink: ILink | undefined; private _lastMouseEvent: MouseEvent | undefined; private _linkCacheDisposables: IDisposable[] = []; @@ -24,9 +25,7 @@ export class Linkifier2 implements ILinkifier2 { public get onHideTooltip(): IEvent { return this._onHideTooltip.event; } constructor( - private readonly _bufferService: IBufferService, - private readonly _coreService: ICoreService, - private readonly _onScroll: IEvent + private readonly _bufferService: IBufferService ) { } @@ -45,9 +44,10 @@ export class Linkifier2 implements ILinkifier2 { }; } - public attachToDom(element: HTMLElement, mouseService: IMouseService): void { + public attachToDom(element: HTMLElement, mouseService: IMouseService, renderService: IRenderService): void { this._element = element; this._mouseService = mouseService; + this._renderService = renderService; this._element.addEventListener('mousemove', this._onMouseMove.bind(this)); this._element.addEventListener('click', this._onMouseDown.bind(this)); @@ -162,9 +162,10 @@ export class Linkifier2 implements ILinkifier2 { this._currentLink = link; this._showTooltip(this._element, link, this._lastMouseEvent); - // Add listeners for onData and onScroll - this._linkCacheDisposables.push(this._coreService.onData(() => this._clearCurrentLink())); - this._linkCacheDisposables.push(this._onScroll(() => this._clearCurrentLink())); + // Add listener for rerendering + if (this._renderService) { + this._linkCacheDisposables.push(this._renderService.onRender(() => this._clearCurrentLink())); + } } } diff --git a/src/browser/Types.d.ts b/src/browser/Types.d.ts index fb19fead0..387fa32e1 100644 --- a/src/browser/Types.d.ts +++ b/src/browser/Types.d.ts @@ -5,7 +5,7 @@ import { IEvent } from 'common/EventEmitter'; import { IDisposable } from 'common/Types'; -import { IMouseService } from './services/Services'; +import { IMouseService, IRenderService } from './services/Services'; export interface IColorManager { colors: IColorSet; @@ -98,7 +98,7 @@ export interface ILinkifier2 { onShowTooltip: IEvent; onHideTooltip: IEvent; - attachToDom(element: HTMLElement, mouseService: IMouseService): void; + attachToDom(element: HTMLElement, mouseService: IMouseService, renderService: IRenderService): void; registerLinkProvider(linkProvider: ILinkProvider): IDisposable; }