From 416f12fcc3d738eaca1c60cb828ddc9733ec03a1 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 10 Jul 2024 07:01:44 -0700 Subject: [PATCH] Remove ScrollSource This isn't used anymore, it was used earlier to workaround recursion between the viewport and the terminal objects --- src/browser/CoreBrowserTerminal.ts | 16 ++++++++-------- src/browser/Terminal.test.ts | 7 +++---- src/common/CoreTerminal.ts | 11 +++++------ src/common/Types.ts | 6 ------ src/common/services/BufferService.ts | 4 ++-- src/common/services/Services.ts | 6 +++--- src/headless/Terminal.ts | 4 ++-- 7 files changed, 23 insertions(+), 31 deletions(-) diff --git a/src/browser/CoreBrowserTerminal.ts b/src/browser/CoreBrowserTerminal.ts index bd0eb4c3..7944502c 100644 --- a/src/browser/CoreBrowserTerminal.ts +++ b/src/browser/CoreBrowserTerminal.ts @@ -21,9 +21,9 @@ * http://linux.die.net/man/7/urxvt */ +import { IDecoration, IDecorationOptions, IDisposable, ILinkProvider, IMarker } from '@xterm/xterm'; import { copyHandler, handlePasteEvent, moveTextAreaUnderMouseCursor, paste, rightClickHandler } from 'browser/Clipboard'; import { addDisposableDomListener } from 'browser/Lifecycle'; -import { Linkifier } from './Linkifier'; import * as Strings from 'browser/LocalizableStrings'; import { OscLinkProvider } from 'browser/OscLinkProvider'; import { CharacterJoinerHandler, CustomKeyEventHandler, CustomWheelEventHandler, IBrowser, IBufferRange, ICompositionHelper, ILinkifier2, ITerminal } from 'browser/Types'; @@ -36,6 +36,7 @@ import { IRenderer } from 'browser/renderer/shared/Types'; import { CharSizeService } from 'browser/services/CharSizeService'; import { CharacterJoinerService } from 'browser/services/CharacterJoinerService'; import { CoreBrowserService } from 'browser/services/CoreBrowserService'; +import { LinkProviderService } from 'browser/services/LinkProviderService'; import { MouseService } from 'browser/services/MouseService'; import { RenderService } from 'browser/services/RenderService'; import { SelectionService } from 'browser/services/SelectionService'; @@ -46,7 +47,7 @@ import { CoreTerminal } from 'common/CoreTerminal'; import { EventEmitter, IEvent, forwardEvent } from 'common/EventEmitter'; import { MutableDisposable, toDisposable } from 'common/Lifecycle'; import * as Browser from 'common/Platform'; -import { ColorRequestType, CoreMouseAction, CoreMouseButton, CoreMouseEventType, IColorEvent, ITerminalOptions, KeyboardResultType, ScrollSource, SpecialColorIndex } from 'common/Types'; +import { ColorRequestType, CoreMouseAction, CoreMouseButton, CoreMouseEventType, IColorEvent, ITerminalOptions, KeyboardResultType, SpecialColorIndex } from 'common/Types'; import { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; import { IBuffer } from 'common/buffer/Types'; import { C0, C1_ESCAPED } from 'common/data/EscapeSequences'; @@ -54,10 +55,9 @@ import { evaluateKeyboardEvent } from 'common/input/Keyboard'; import { toRgbString } from 'common/input/XParseColor'; import { DecorationService } from 'common/services/DecorationService'; import { IDecorationService } from 'common/services/Services'; -import { IDecoration, IDecorationOptions, IDisposable, ILinkProvider, IMarker } from '@xterm/xterm'; import { WindowsOptionsReportType } from '../common/InputHandler'; import { AccessibilityManager } from './AccessibilityManager'; -import { LinkProviderService } from 'browser/services/LinkProviderService'; +import { Linkifier } from './Linkifier'; export class CoreBrowserTerminal extends CoreTerminal implements ITerminal { public textarea: HTMLTextAreaElement | undefined; @@ -506,7 +506,7 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal { this.register(this.onFocus(() => this._renderService!.handleFocus())); const viewport = this.register(this._instantiationService.createInstance(Viewport, this.element, this.screenElement)); - this.register(viewport.onRequestScrollLines(e => this.scrollLines(e, false, ScrollSource.VIEWPORT))); + this.register(viewport.onRequestScrollLines(e => this.scrollLines(e, false))); this._selectionService = this.register(this._instantiationService.createInstance(SelectionService, this.element, @@ -869,8 +869,8 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal { } } - public scrollLines(disp: number, suppressScrollEvent?: boolean, source = ScrollSource.TERMINAL): void { - super.scrollLines(disp, suppressScrollEvent, source); + public scrollLines(disp: number, suppressScrollEvent?: boolean): void { + super.scrollLines(disp, suppressScrollEvent); this.refresh(0, this.rows - 1); } @@ -1220,7 +1220,7 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal { } // IMPORTANT: Fire scroll event before viewport is reset. This ensures embedders get the clear // scroll event and that the viewport's state will be valid for immediate writes. - this._onScroll.fire({ position: this.buffer.ydisp, source: ScrollSource.TERMINAL }); + this._onScroll.fire({ position: this.buffer.ydisp }); // TODO: Reset scrollable element? // this.viewport?.reset(); this.refresh(0, this.rows - 1); diff --git a/src/browser/Terminal.test.ts b/src/browser/Terminal.test.ts index cf09d96c..b871058e 100644 --- a/src/browser/Terminal.test.ts +++ b/src/browser/Terminal.test.ts @@ -3,14 +3,13 @@ * @license MIT */ +import { MockCompositionHelper, MockRenderer, MockViewport, TestTerminal } from 'browser/TestUtils.test'; +import type { IBrowser } from 'browser/Types'; import { assert } from 'chai'; -import { MockViewport, MockCompositionHelper, MockRenderer, TestTerminal } from 'browser/TestUtils.test'; import { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; import { CellData } from 'common/buffer/CellData'; import { MockUnicodeService } from 'common/TestUtils.test'; -import { IMarker, ScrollSource } from 'common/Types'; -import { ICoreService } from 'common/services/Services'; -import type { IBrowser } from 'browser/Types'; +import { IMarker } from 'common/Types'; const INIT_COLS = 80; const INIT_ROWS = 24; diff --git a/src/common/CoreTerminal.ts b/src/common/CoreTerminal.ts index 327b8bc2..470cdb3d 100644 --- a/src/common/CoreTerminal.ts +++ b/src/common/CoreTerminal.ts @@ -27,7 +27,7 @@ import { InstantiationService } from 'common/services/InstantiationService'; import { LogService } from 'common/services/LogService'; import { BufferService, MINIMUM_COLS, MINIMUM_ROWS } from 'common/services/BufferService'; import { OptionsService } from 'common/services/OptionsService'; -import { IDisposable, IAttributeData, ICoreTerminal, IScrollEvent, ScrollSource } from 'common/Types'; +import { IDisposable, IAttributeData, ICoreTerminal, IScrollEvent } from 'common/Types'; import { CoreService } from 'common/services/CoreService'; import { EventEmitter, IEvent, forwardEvent } from 'common/EventEmitter'; import { CoreMouseService } from 'common/services/CoreMouseService'; @@ -134,11 +134,11 @@ export abstract class CoreTerminal extends Disposable implements ICoreTerminal { this.register(this.coreService.onUserInput(() => this._writeBuffer.handleUserInput())); this.register(this.optionsService.onMultipleOptionChange(['windowsMode', 'windowsPty'], () => this._handleWindowsPtyOptionChange())); this.register(this._bufferService.onScroll(event => { - this._onScroll.fire({ position: this._bufferService.buffer.ydisp, source: ScrollSource.TERMINAL }); + this._onScroll.fire({ position: this._bufferService.buffer.ydisp }); this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop, this._bufferService.buffer.scrollBottom); })); this.register(this._inputHandler.onScroll(event => { - this._onScroll.fire({ position: this._bufferService.buffer.ydisp, source: ScrollSource.TERMINAL }); + this._onScroll.fire({ position: this._bufferService.buffer.ydisp }); this._inputHandler.markRangeDirty(this._bufferService.buffer.scrollTop, this._bufferService.buffer.scrollBottom); })); @@ -198,10 +198,9 @@ export abstract class CoreTerminal extends Disposable implements ICoreTerminal { * @param suppressScrollEvent Don't emit the scroll event as scrollLines. This is used to avoid * unwanted events being handled by the viewport when the event was triggered from the viewport * originally. - * @param source Which component the event came from. */ - public scrollLines(disp: number, suppressScrollEvent?: boolean, source?: ScrollSource): void { - this._bufferService.scrollLines(disp, suppressScrollEvent, source); + public scrollLines(disp: number, suppressScrollEvent?: boolean): void { + this._bufferService.scrollLines(disp, suppressScrollEvent); } public scrollPages(pageCount: number): void { diff --git a/src/common/Types.ts b/src/common/Types.ts index 8b32067e..f98a7d3e 100644 --- a/src/common/Types.ts +++ b/src/common/Types.ts @@ -60,12 +60,6 @@ export interface IKeyboardEvent { export interface IScrollEvent { position: number; - source: ScrollSource; -} - -export const enum ScrollSource { - TERMINAL, - VIEWPORT, } export interface ICircularList { diff --git a/src/common/services/BufferService.ts b/src/common/services/BufferService.ts index d20d0cea..77af447a 100644 --- a/src/common/services/BufferService.ts +++ b/src/common/services/BufferService.ts @@ -5,7 +5,7 @@ import { EventEmitter } from 'common/EventEmitter'; import { Disposable } from 'common/Lifecycle'; -import { IAttributeData, IBufferLine, ScrollSource } from 'common/Types'; +import { IAttributeData, IBufferLine } from 'common/Types'; import { BufferSet } from 'common/buffer/BufferSet'; import { IBuffer, IBufferSet } from 'common/buffer/Types'; import { IBufferService, IOptionsService } from 'common/services/Services'; @@ -125,7 +125,7 @@ export class BufferService extends Disposable implements IBufferService { * to avoid unwanted events being handled by the viewport when the event was triggered from the * viewport originally. */ - public scrollLines(disp: number, suppressScrollEvent?: boolean, source?: ScrollSource): void { + public scrollLines(disp: number, suppressScrollEvent?: boolean): void { const buffer = this.buffer; if (disp < 0) { if (buffer.ydisp === 0) { diff --git a/src/common/services/Services.ts b/src/common/services/Services.ts index 210a0afb..842d482c 100644 --- a/src/common/services/Services.ts +++ b/src/common/services/Services.ts @@ -3,11 +3,11 @@ * @license MIT */ +import { IDecoration, IDecorationOptions, ILinkHandler, ILogger, IWindowsPty } from '@xterm/xterm'; import { IEvent, IEventEmitter } from 'common/EventEmitter'; +import { CoreMouseEncoding, CoreMouseEventType, CursorInactiveStyle, CursorStyle, IAttributeData, ICharset, IColor, ICoreMouseEvent, ICoreMouseProtocol, IDecPrivateModes, IDisposable, IModes, IOscLinkData, IWindowOptions } from 'common/Types'; import { IBuffer, IBufferSet } from 'common/buffer/Types'; -import { IDecPrivateModes, ICoreMouseEvent, CoreMouseEncoding, ICoreMouseProtocol, CoreMouseEventType, ICharset, IWindowOptions, IModes, IAttributeData, ScrollSource, IDisposable, IColor, CursorStyle, CursorInactiveStyle, IOscLinkData } from 'common/Types'; import { createDecorator } from 'common/services/ServiceRegistry'; -import { IDecorationOptions, IDecoration, ILinkHandler, IWindowsPty, ILogger } from '@xterm/xterm'; export const IBufferService = createDecorator('BufferService'); export interface IBufferService { @@ -21,7 +21,7 @@ export interface IBufferService { onResize: IEvent<{ cols: number, rows: number }>; onScroll: IEvent; scroll(eraseAttr: IAttributeData, isWrapped?: boolean): void; - scrollLines(disp: number, suppressScrollEvent?: boolean, source?: ScrollSource): void; + scrollLines(disp: number, suppressScrollEvent?: boolean): void; resize(cols: number, rows: number): void; reset(): void; } diff --git a/src/headless/Terminal.ts b/src/headless/Terminal.ts index 66040756..0b078ba8 100644 --- a/src/headless/Terminal.ts +++ b/src/headless/Terminal.ts @@ -25,7 +25,7 @@ import { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; import { IBuffer } from 'common/buffer/Types'; import { CoreTerminal } from 'common/CoreTerminal'; import { EventEmitter, forwardEvent } from 'common/EventEmitter'; -import { IMarker, ITerminalOptions, ScrollSource } from 'common/Types'; +import { IMarker, ITerminalOptions } from 'common/Types'; export class Terminal extends CoreTerminal { private readonly _onBell = this.register(new EventEmitter()); @@ -115,7 +115,7 @@ export class Terminal extends CoreTerminal { for (let i = 1; i < this.rows; i++) { this.buffer.lines.push(this.buffer.getBlankLine(DEFAULT_ATTR_DATA)); } - this._onScroll.fire({ position: this.buffer.ydisp, source: ScrollSource.TERMINAL }); + this._onScroll.fire({ position: this.buffer.ydisp }); } /**