Use disposal registration

This commit is contained in:
Svante Boberg
2022-07-27 14:24:42 +02:00
parent c895f67fd8
commit 078b83fcaf
4 changed files with 13 additions and 25 deletions
@@ -55,10 +55,8 @@ export class CursorRenderLayer extends BaseRenderLayer {
}
public override dispose(): void {
if (this._cursorBlinkStateManager) {
this._cursorBlinkStateManager.dispose();
this._cursorBlinkStateManager = undefined;
}
this._cursorBlinkStateManager?.dispose();
this._cursorBlinkStateManager = undefined;
super.dispose();
}
+6 -10
View File
@@ -6,6 +6,7 @@
import { ILinkifierEvent, ILinkMatcher, LinkMatcherHandler, ILinkMatcherOptions, ILinkifier, IMouseZoneManager, IMouseZone, IRegisteredLinkMatcher } from 'browser/Types';
import { IBufferStringIteratorResult } from 'common/buffer/Types';
import { EventEmitter, IEvent } from 'common/EventEmitter';
import { Disposable } from 'common/Lifecycle';
import { ILogService, IBufferService, IOptionsService, IUnicodeService } from 'common/services/Services';
/**
@@ -18,7 +19,7 @@ const OVERSCAN_CHAR_LIMIT = 2000;
/**
* The Linkifier applies links to rows shortly after they have been refreshed.
*/
export class Linkifier implements ILinkifier {
export class Linkifier extends Disposable implements ILinkifier {
/**
* The time to wait after a row is changed before it is linkified. This prevents
* the costly operation of searching every row multiple times, potentially a
@@ -35,11 +36,11 @@ export class Linkifier implements ILinkifier {
private _nextLinkMatcherId = 0;
private _rowsToLinkify: { start: number | undefined, end: number | undefined };
private _onShowLinkUnderline = new EventEmitter<ILinkifierEvent>();
private _onShowLinkUnderline = this.register(new EventEmitter<ILinkifierEvent>());
public get onShowLinkUnderline(): IEvent<ILinkifierEvent> { return this._onShowLinkUnderline.event; }
private _onHideLinkUnderline = new EventEmitter<ILinkifierEvent>();
private _onHideLinkUnderline = this.register(new EventEmitter<ILinkifierEvent>());
public get onHideLinkUnderline(): IEvent<ILinkifierEvent> { return this._onHideLinkUnderline.event; }
private _onLinkTooltip = new EventEmitter<ILinkifierEvent>();
private _onLinkTooltip = this.register(new EventEmitter<ILinkifierEvent>());
public get onLinkTooltip(): IEvent<ILinkifierEvent> { return this._onLinkTooltip.event; }
constructor(
@@ -47,18 +48,13 @@ export class Linkifier implements ILinkifier {
@ILogService private readonly _logService: ILogService,
@IUnicodeService private readonly _unicodeService: IUnicodeService
) {
super();
this._rowsToLinkify = {
start: undefined,
end: undefined
};
}
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.
+3 -7
View File
@@ -168,7 +168,7 @@ export class Terminal extends CoreTerminal implements ITerminal {
this._setup();
this.linkifier = this._instantiationService.createInstance(Linkifier);
this.linkifier = this.register(this._instantiationService.createInstance(Linkifier));
this.linkifier2 = this.register(this._instantiationService.createInstance(Linkifier2));
this._decorationService = this._instantiationService.createInstance(DecorationService);
this._instantiationService.setService(IDecorationService, this._decorationService);
@@ -247,12 +247,8 @@ 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 {
@@ -612,11 +608,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
+2 -4
View File
@@ -192,7 +192,7 @@ export interface ILinkifierEvent {
fg: number | undefined;
}
export interface ILinkifier {
export interface ILinkifier extends IDisposable {
onShowLinkUnderline: IEvent<ILinkifierEvent>;
onHideLinkUnderline: IEvent<ILinkifierEvent>;
onLinkTooltip: IEvent<ILinkifierEvent>;
@@ -201,7 +201,6 @@ 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 {
@@ -213,14 +212,13 @@ export interface ILinkWithState {
state?: ILinkState;
}
export interface ILinkifier2 {
export interface ILinkifier2 extends IDisposable {
onShowLinkUnderline: IEvent<ILinkifierEvent>;
onHideLinkUnderline: IEvent<ILinkifierEvent>;
readonly currentLink: ILinkWithState | undefined;
attachToDom(element: HTMLElement, mouseService: IMouseService, renderService: IRenderService): void;
registerLinkProvider(linkProvider: ILinkProvider): IDisposable;
dispose(): void;
}
export interface ILinkMatcherOptions {