From 9df996cb3db67f89392a54206237dcc565579f15 Mon Sep 17 00:00:00 2001 From: Svante Boberg Date: Sat, 23 Jul 2022 13:21:13 +0200 Subject: [PATCH] Dispose events https://github.com/microsoft/vscode/issues/155232 The events that is setup for needs to be disposed for js to be able to garbage collect the terminals. --- src/browser/Linkifier.ts | 6 ++++++ src/browser/Linkifier2.ts | 7 +++++++ src/browser/Terminal.ts | 4 ++++ src/browser/Types.d.ts | 2 ++ 4 files changed, 19 insertions(+) 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 {