diff --git a/src/browser/Linkifier.ts b/src/browser/Linkifier.ts index b17d66a8..25f07104 100644 --- a/src/browser/Linkifier.ts +++ b/src/browser/Linkifier.ts @@ -53,6 +53,12 @@ export class Linkifier implements ILinkifier { }; } + public dispose(): void { + this._onShowLinkUnderline.dispose(); + this._onHideLinkUnderline.dispose(); + this._onLinkTooltip.dispose(); + } + /** * Attaches the linkifier to the DOM, enabling linkification. * @param mouseZoneManager The mouse zone manager to register link zones with. diff --git a/src/browser/Linkifier2.ts b/src/browser/Linkifier2.ts index dae9acfa..8d7cbee6 100644 --- a/src/browser/Linkifier2.ts +++ b/src/browser/Linkifier2.ts @@ -38,6 +38,13 @@ export class Linkifier2 extends Disposable implements ILinkifier2 { this.register(getDisposeArrayDisposable(this._linkCacheDisposables)); } + public dispose(): void { + super.dispose(); + this._onShowLinkUnderline.dispose(); + this._onHideLinkUnderline.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 bd82325d..732c7d49 100644 --- a/src/browser/Terminal.ts +++ b/src/browser/Terminal.ts @@ -247,8 +247,12 @@ export class Terminal extends CoreTerminal implements ITerminal { super.dispose(); this._renderService?.dispose(); this._customKeyEventHandler = undefined; + this._overviewRulerRenderer?.dispose(); + this._overviewRulerRenderer = undefined; this.write = () => { }; this.element?.parentNode?.removeChild(this.element); + this.linkifier.dispose(); + this.linkifier2.dispose(); } protected _setup(): void { diff --git a/src/browser/Types.d.ts b/src/browser/Types.d.ts index 41992a8b..8408b331 100644 --- a/src/browser/Types.d.ts +++ b/src/browser/Types.d.ts @@ -201,6 +201,7 @@ export interface ILinkifier { linkifyRows(start: number, end: number): void; registerLinkMatcher(regex: RegExp, handler: LinkMatcherHandler, options?: ILinkMatcherOptions): number; deregisterLinkMatcher(matcherId: number): boolean; + dispose(): void; } interface ILinkState { @@ -219,6 +220,7 @@ export interface ILinkifier2 { attachToDom(element: HTMLElement, mouseService: IMouseService, renderService: IRenderService): void; registerLinkProvider(linkProvider: ILinkProvider): IDisposable; + dispose(): void; } export interface ILinkMatcherOptions {