From 49a0904857c9a44decc7fbed8f7d6633d1091456 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Sun, 9 Oct 2022 08:07:43 -0700 Subject: [PATCH] Move onSpecificOptionChange adoption --- src/browser/Terminal.ts | 26 +++++++++++++------------- src/browser/Viewport.ts | 1 + src/common/CoreTerminal.ts | 2 +- src/common/services/Services.ts | 2 +- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/browser/Terminal.ts b/src/browser/Terminal.ts index abb5dfdf..37883ded 100644 --- a/src/browser/Terminal.ts +++ b/src/browser/Terminal.ts @@ -264,6 +264,17 @@ export class Terminal extends CoreTerminal implements ITerminal { } } + private _handleScreenReaderModeOptionChange(value: boolean): void { + if (value) { + if (!this._accessibilityManager && this._renderService) { + this._accessibilityManager = new AccessibilityManager(this, this._renderService); + } + } else { + this._accessibilityManager?.dispose(); + this._accessibilityManager = undefined; + } + } + protected _updateOptions(key: string): void { // TODO: These listeners should be owned by individual components switch (key) { @@ -285,6 +296,7 @@ export class Terminal extends CoreTerminal implements ITerminal { case 'fontWeight': case 'fontWeightBold': case 'minimumContrastRatio': + // TODO: move to render service // When the font changes the size of the cells may change which requires a renderer clear if (this._renderService) { this._renderService.clear(); @@ -292,19 +304,6 @@ export class Terminal extends CoreTerminal implements ITerminal { this.refresh(0, this.rows - 1); } break; - case 'scrollback': - this.viewport?.syncScrollArea(); - break; - case 'screenReaderMode': - if (this.optionsService.rawOptions.screenReaderMode) { - if (!this._accessibilityManager && this._renderService) { - this._accessibilityManager = new AccessibilityManager(this, this._renderService); - } - } else { - this._accessibilityManager?.dispose(); - this._accessibilityManager = undefined; - } - break; } } @@ -577,6 +576,7 @@ export class Terminal extends CoreTerminal implements ITerminal { // ensure the correct order of the dprchange event this._accessibilityManager = new AccessibilityManager(this, this._renderService); } + this.register(this.optionsService.onSpecificOptionChange('screenReaderMode', e => this._handleScreenReaderModeOptionChange(e))); if (this.options.overviewRulerWidth) { this._overviewRulerRenderer = this.register(this._instantiationService.createInstance(OverviewRulerRenderer, this._viewportElement, this.screenElement)); diff --git a/src/browser/Viewport.ts b/src/browser/Viewport.ts index 8f88c559..700c9e22 100644 --- a/src/browser/Viewport.ts +++ b/src/browser/Viewport.ts @@ -75,6 +75,7 @@ export class Viewport extends Disposable implements IViewport { this._handleThemeChange(themeService.colors); this.register(themeService.onChangeColors(e => this._handleThemeChange(e))); + this.register(this._optionsService.onSpecificOptionChange('scrollback', () => this.syncScrollArea())); // Perform this async to ensure the ICharSizeService is ready. setTimeout(() => this.syncScrollArea(), 0); diff --git a/src/common/CoreTerminal.ts b/src/common/CoreTerminal.ts index 8f1c2a0d..f4a7d301 100644 --- a/src/common/CoreTerminal.ts +++ b/src/common/CoreTerminal.ts @@ -261,7 +261,7 @@ export abstract class CoreTerminal extends Disposable implements ICoreTerminal { this.coreMouseService.reset(); } - private _handleWindowsModeOptionChange(value: boolean | undefined): void { + private _handleWindowsModeOptionChange(value: boolean): void { if (value) { this._enableWindowsMode(); } else { diff --git a/src/common/services/Services.ts b/src/common/services/Services.ts index 9b591962..5e6751e9 100644 --- a/src/common/services/Services.ts +++ b/src/common/services/Services.ts @@ -200,7 +200,7 @@ export interface IOptionsService { * preferred over {@link onOptionChange} when only a single option is being listened to. */ // eslint-disable-next-line @typescript-eslint/naming-convention - onSpecificOptionChange(key: T, listener: (arg1: ITerminalOptions[T]) => any): IDisposable; + onSpecificOptionChange(key: T, listener: (arg1: Required[T]) => any): IDisposable; } export type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;