diff --git a/addons/xterm-addon-webgl/src/renderLayer/CursorRenderLayer.ts b/addons/xterm-addon-webgl/src/renderLayer/CursorRenderLayer.ts index c80b4c56..fd686cc7 100644 --- a/addons/xterm-addon-webgl/src/renderLayer/CursorRenderLayer.ts +++ b/addons/xterm-addon-webgl/src/renderLayer/CursorRenderLayer.ts @@ -54,6 +54,12 @@ export class CursorRenderLayer extends BaseRenderLayer { this.onOptionsChanged(terminal); } + public override dispose(): void { + this._cursorBlinkStateManager?.dispose(); + this._cursorBlinkStateManager = undefined; + super.dispose(); + } + public resize(terminal: Terminal, dim: IRenderDimensions): void { super.resize(terminal, dim); // Resizing the canvas discards the contents of the canvas so clear state diff --git a/src/browser/Linkifier2.ts b/src/browser/Linkifier2.ts index dae9acfa..9c978949 100644 --- a/src/browser/Linkifier2.ts +++ b/src/browser/Linkifier2.ts @@ -38,6 +38,11 @@ export class Linkifier2 extends Disposable implements ILinkifier2 { this.register(getDisposeArrayDisposable(this._linkCacheDisposables)); } + public dispose(): void { + super.dispose(); + this._lastMouseEvent = undefined; + } + public registerLinkProvider(linkProvider: ILinkProvider): IDisposable { this._linkProviders.push(linkProvider); return { diff --git a/src/browser/Terminal.ts b/src/browser/Terminal.ts index ea3dc712..621291a5 100644 --- a/src/browser/Terminal.ts +++ b/src/browser/Terminal.ts @@ -586,11 +586,11 @@ export class Terminal extends CoreTerminal implements ITerminal { } if (this.options.overviewRulerWidth) { - this._overviewRulerRenderer = this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement); + this._overviewRulerRenderer = this.register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement)); } this.optionsService.onOptionChange(() => { if (!this._overviewRulerRenderer && this.options.overviewRulerWidth && this._viewportElement && this.screenElement) { - this._overviewRulerRenderer = this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement); + this._overviewRulerRenderer = this.register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement)); } }); // Measure the character size diff --git a/src/browser/Types.d.ts b/src/browser/Types.d.ts index f7011200..f0e70437 100644 --- a/src/browser/Types.d.ts +++ b/src/browser/Types.d.ts @@ -168,7 +168,7 @@ export interface ILinkWithState { state?: ILinkState; } -export interface ILinkifier2 { +export interface ILinkifier2 extends IDisposable { onShowLinkUnderline: IEvent; onHideLinkUnderline: IEvent; readonly currentLink: ILinkWithState | undefined; diff --git a/typings/xterm-headless.d.ts b/typings/xterm-headless.d.ts index 666d45c3..d39a7098 100644 --- a/typings/xterm-headless.d.ts +++ b/typings/xterm-headless.d.ts @@ -637,9 +637,10 @@ declare module 'xterm-headless' { registerMarker(cursorYOffset?: number): IMarker | undefined; /* - * Disposes of the terminal, detaching it from the DOM and removing any - * active listeners. - */ + * Disposes of the terminal, detaching it from the DOM and removing any + * active listeners. Once the terminal is disposed it should not be used + * again. + */ dispose(): void; /** diff --git a/typings/xterm.d.ts b/typings/xterm.d.ts index 4890b4dd..8c4e7735 100644 --- a/typings/xterm.d.ts +++ b/typings/xterm.d.ts @@ -952,7 +952,8 @@ declare module 'xterm' { /* * Disposes of the terminal, detaching it from the DOM and removing any - * active listeners. + * active listeners. Once the terminal is disposed it should not be used + * again. */ dispose(): void;