@xterm/xterm 6.1.0-beta.286 → 6.1.0-beta.288
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/lib/xterm.js +1 -1
- package/lib/xterm.js.map +1 -1
- package/lib/xterm.mjs +2 -2
- package/lib/xterm.mjs.map +3 -3
- package/package.json +2 -2
- package/src/browser/services/MouseService.ts +18 -27
- package/src/common/Version.ts +1 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xterm/xterm",
|
|
3
3
|
"description": "Full xterm terminal, in your browser",
|
|
4
|
-
"version": "6.1.0-beta.
|
|
4
|
+
"version": "6.1.0-beta.288",
|
|
5
5
|
"main": "lib/xterm.js",
|
|
6
6
|
"module": "lib/xterm.mjs",
|
|
7
7
|
"style": "css/xterm.css",
|
|
@@ -119,5 +119,5 @@
|
|
|
119
119
|
"ws": "^8.20.0",
|
|
120
120
|
"xterm-benchmark": "^0.3.2"
|
|
121
121
|
},
|
|
122
|
-
"commit": "
|
|
122
|
+
"commit": "8aab310366549d8d865bd8fc4bd509051f2bb2a1"
|
|
123
123
|
}
|
|
@@ -7,7 +7,7 @@ import { addDisposableListener } from '../Dom';
|
|
|
7
7
|
import { IBufferService, IMouseStateService, ICoreService, ILogService, IOptionsService } from '../../common/services/Services';
|
|
8
8
|
import { CoreMouseAction, CoreMouseButton, CoreMouseEventType, ICoreMouseEvent, IDisposable } from '../../common/Types';
|
|
9
9
|
import { C0 } from '../../common/data/EscapeSequences';
|
|
10
|
-
import { DisposableStore, MutableDisposable
|
|
10
|
+
import { DisposableStore, MutableDisposable } from '../../common/Lifecycle';
|
|
11
11
|
import { ICoreBrowserService, IMouseCoordsService, IMouseService, IMouseServiceTarget, IRenderService, ISelectionService } from './Services';
|
|
12
12
|
import { Gesture, EventType as GestureEventType, IGestureEvent } from '../scrollable/touch';
|
|
13
13
|
|
|
@@ -21,6 +21,8 @@ interface IMouseBindContext {
|
|
|
21
21
|
readonly target: IMouseServiceTarget;
|
|
22
22
|
readonly focus: () => void;
|
|
23
23
|
readonly requestedEvents: RequestedMouseEvents;
|
|
24
|
+
readonly mouseupListener: MutableDisposable<IDisposable>;
|
|
25
|
+
readonly mousedragListener: MutableDisposable<IDisposable>;
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
export class MouseService implements IMouseService {
|
|
@@ -61,7 +63,11 @@ export class MouseService implements IMouseService {
|
|
|
61
63
|
mousedrag: null,
|
|
62
64
|
mousemove: null
|
|
63
65
|
};
|
|
64
|
-
const
|
|
66
|
+
const mouseupListener = new MutableDisposable<IDisposable>();
|
|
67
|
+
const mousedragListener = new MutableDisposable<IDisposable>();
|
|
68
|
+
register(mouseupListener);
|
|
69
|
+
register(mousedragListener);
|
|
70
|
+
const ctx: IMouseBindContext = { target, focus, requestedEvents, mouseupListener, mousedragListener };
|
|
65
71
|
const eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener> = {
|
|
66
72
|
mouseup: (ev: Event) => this._handleMouseUp(ctx, ev as MouseEvent),
|
|
67
73
|
wheel: (ev: Event) => this._handleWheel(ctx, ev as WheelEvent),
|
|
@@ -85,16 +91,6 @@ export class MouseService implements IMouseService {
|
|
|
85
91
|
// force initial onProtocolChange so we dont miss early mouse requests
|
|
86
92
|
this._mouseStateService.activeProtocol = this._mouseStateService.activeProtocol;
|
|
87
93
|
|
|
88
|
-
// Ensure document-level listeners are removed on dispose
|
|
89
|
-
register(toDisposable(() => {
|
|
90
|
-
if (requestedEvents.mouseup) {
|
|
91
|
-
document.removeEventListener('mouseup', requestedEvents.mouseup);
|
|
92
|
-
}
|
|
93
|
-
if (requestedEvents.mousedrag) {
|
|
94
|
-
document.removeEventListener('mousemove', requestedEvents.mousedrag);
|
|
95
|
-
}
|
|
96
|
-
}));
|
|
97
|
-
|
|
98
94
|
/**
|
|
99
95
|
* "Always on" event listeners.
|
|
100
96
|
*/
|
|
@@ -199,12 +195,8 @@ export class MouseService implements IMouseService {
|
|
|
199
195
|
this._sendEvent(ctx, ev);
|
|
200
196
|
if (!ev.buttons) {
|
|
201
197
|
// if no other button is held remove global handlers
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
}
|
|
205
|
-
if (ctx.requestedEvents.mousedrag) {
|
|
206
|
-
ctx.target.document.removeEventListener('mousemove', ctx.requestedEvents.mousedrag);
|
|
207
|
-
}
|
|
198
|
+
ctx.mouseupListener.clear();
|
|
199
|
+
ctx.mousedragListener.clear();
|
|
208
200
|
}
|
|
209
201
|
}
|
|
210
202
|
|
|
@@ -246,11 +238,14 @@ export class MouseService implements IMouseService {
|
|
|
246
238
|
// of the terminal element.
|
|
247
239
|
// Note: Other emulators also do this for 'mousedown' while a button
|
|
248
240
|
// is held, we currently limit 'mousedown' to the terminal only.
|
|
241
|
+
// Use the element's current document in case it moved to another window after open.
|
|
242
|
+
const { element, document: targetDocument } = ctx.target;
|
|
243
|
+
const listenerDocument = element.ownerDocument ?? targetDocument;
|
|
249
244
|
if (ctx.requestedEvents.mouseup) {
|
|
250
|
-
ctx.
|
|
245
|
+
ctx.mouseupListener.value = addDisposableListener(listenerDocument, 'mouseup', ctx.requestedEvents.mouseup);
|
|
251
246
|
}
|
|
252
247
|
if (ctx.requestedEvents.mousedrag) {
|
|
253
|
-
ctx.
|
|
248
|
+
ctx.mousedragListener.value = addDisposableListener(listenerDocument, 'mousemove', ctx.requestedEvents.mousedrag);
|
|
254
249
|
}
|
|
255
250
|
}
|
|
256
251
|
|
|
@@ -398,7 +393,7 @@ export class MouseService implements IMouseService {
|
|
|
398
393
|
}
|
|
399
394
|
|
|
400
395
|
private _handleProtocolChange(ctx: IMouseBindContext, eventListeners: Record<'mouseup' | 'wheel' | 'mousedrag' | 'mousemove', EventListener>, events: CoreMouseEventType): void {
|
|
401
|
-
const { element
|
|
396
|
+
const { element } = ctx.target;
|
|
402
397
|
const { requestedEvents } = ctx;
|
|
403
398
|
// apply global changes on events
|
|
404
399
|
if (events) {
|
|
@@ -433,18 +428,14 @@ export class MouseService implements IMouseService {
|
|
|
433
428
|
}
|
|
434
429
|
|
|
435
430
|
if (!(events & CoreMouseEventType.UP)) {
|
|
436
|
-
|
|
437
|
-
document.removeEventListener('mouseup', requestedEvents.mouseup);
|
|
438
|
-
}
|
|
431
|
+
ctx.mouseupListener.clear();
|
|
439
432
|
requestedEvents.mouseup = null;
|
|
440
433
|
} else {
|
|
441
434
|
requestedEvents.mouseup ??= eventListeners.mouseup;
|
|
442
435
|
}
|
|
443
436
|
|
|
444
437
|
if (!(events & CoreMouseEventType.DRAG)) {
|
|
445
|
-
|
|
446
|
-
document.removeEventListener('mousemove', requestedEvents.mousedrag);
|
|
447
|
-
}
|
|
438
|
+
ctx.mousedragListener.clear();
|
|
448
439
|
requestedEvents.mousedrag = null;
|
|
449
440
|
} else {
|
|
450
441
|
requestedEvents.mousedrag ??= eventListeners.mousedrag;
|
package/src/common/Version.ts
CHANGED