From cb35d1b4879f97b9b557eaf21e530898620e58aa Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Mon, 5 Jan 2026 12:31:54 -0800 Subject: [PATCH] Ensure mouse listeners are removed on dispose Also use ? over ! just in case Fixes #5586 --- src/browser/CoreBrowserTerminal.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/browser/CoreBrowserTerminal.ts b/src/browser/CoreBrowserTerminal.ts index d2407062..abc363ed 100644 --- a/src/browser/CoreBrowserTerminal.ts +++ b/src/browser/CoreBrowserTerminal.ts @@ -636,8 +636,8 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal { // send event to CoreMouseService function sendEvent(ev: MouseEvent | WheelEvent): boolean { - // get mouse coordinates - const pos = self._mouseService!.getMouseReportCoords(ev, self.screenElement!); + // Get mouse coordinates + const pos = self._mouseService?.getMouseReportCoords(ev, self.screenElement!); if (!pos) { return false; } @@ -804,6 +804,16 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal { // force initial onProtocolChange so we dont miss early mouse requests this.coreMouseService.activeProtocol = this.coreMouseService.activeProtocol; + // Ensure document-level listeners are removed on dispose + this._register(toDisposable(() => { + if (requestedEvents.mouseup) { + this._document!.removeEventListener('mouseup', requestedEvents.mouseup); + } + if (requestedEvents.mousedrag) { + this._document!.removeEventListener('mousemove', requestedEvents.mousedrag); + } + })); + /** * "Always on" event listeners. */