Skip to content

Commit ce09ae4

Browse files
authored
Merge pull request #1959 from nikonso/1908-leave-callback
Fix #1908 - leaveCallback does not fire when links are on the edge of the terminal
2 parents f41146f + bc41cc7 commit ce09ae4

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

src/ui/MouseZoneManager.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export class MouseZoneManager extends Disposable implements IMouseZoneManager {
2323

2424
private _areZonesActive: boolean = false;
2525
private _mouseMoveListener: (e: MouseEvent) => any;
26+
private _mouseLeaveListener: (e: MouseEvent) => any;
2627
private _clickListener: (e: MouseEvent) => any;
2728

2829
private _tooltipTimeout: number = null;
@@ -38,6 +39,7 @@ export class MouseZoneManager extends Disposable implements IMouseZoneManager {
3839

3940
// These events are expensive, only listen to it when mouse zones are active
4041
this._mouseMoveListener = e => this._onMouseMove(e);
42+
this._mouseLeaveListener = e => this._onMouseLeave(e);
4143
this._clickListener = e => this._onClick(e);
4244
}
4345

@@ -89,6 +91,7 @@ export class MouseZoneManager extends Disposable implements IMouseZoneManager {
8991
if (!this._areZonesActive) {
9092
this._areZonesActive = true;
9193
this._terminal.element.addEventListener('mousemove', this._mouseMoveListener);
94+
this._terminal.element.addEventListener('mouseleave', this._mouseLeaveListener);
9295
this._terminal.element.addEventListener('click', this._clickListener);
9396
}
9497
}
@@ -97,6 +100,7 @@ export class MouseZoneManager extends Disposable implements IMouseZoneManager {
97100
if (this._areZonesActive) {
98101
this._areZonesActive = false;
99102
this._terminal.element.removeEventListener('mousemove', this._mouseMoveListener);
103+
this._terminal.element.removeEventListener('mouseleave', this._mouseLeaveListener);
100104
this._terminal.element.removeEventListener('click', this._clickListener);
101105
}
102106
}
@@ -169,6 +173,18 @@ export class MouseZoneManager extends Disposable implements IMouseZoneManager {
169173
}
170174
}
171175

176+
private _onMouseLeave(e: MouseEvent): void {
177+
// Fire the hover end callback and cancel any existing timer if the mouse
178+
// leaves the terminal element
179+
if (this._currentZone) {
180+
this._currentZone.leaveCallback();
181+
this._currentZone = null;
182+
if (this._tooltipTimeout) {
183+
clearTimeout(this._tooltipTimeout);
184+
}
185+
}
186+
}
187+
172188
private _onClick(e: MouseEvent): void {
173189
// Find the active zone and click it if found
174190
const zone = this._findZoneEventAt(e);

0 commit comments

Comments
 (0)