@@ -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