Switch to newer mouseleave event (#153111)

Switch to newer `mouseleave` event (ref #138789)
This commit is contained in:
Alexandru Dima
2022-06-24 15:22:37 +02:00
committed by GitHub
parent 68e2d6b1aa
commit 919ec63663
7 changed files with 12 additions and 40 deletions
+1 -29
View File
@@ -122,35 +122,6 @@ export function addDisposableGenericMouseMoveListener(node: EventTarget, handler
export function addDisposableGenericMouseUpListener(node: EventTarget, handler: (event: any) => void, useCapture?: boolean): IDisposable {
return addDisposableListener(node, platform.isIOS && BrowserFeatures.pointerEvents ? EventType.POINTER_UP : EventType.MOUSE_UP, handler, useCapture);
}
export function addDisposableNonBubblingMouseOutListener(node: Element, handler: (event: MouseEvent) => void): IDisposable {
return addDisposableListener(node, 'mouseout', (e: MouseEvent) => {
// Mouse out bubbles, so this is an attempt to ignore faux mouse outs coming from children elements
let toElement: Node | null = <Node>(e.relatedTarget);
while (toElement && toElement !== node) {
toElement = toElement.parentNode;
}
if (toElement === node) {
return;
}
handler(e);
});
}
export function addDisposableNonBubblingPointerOutListener(node: Element, handler: (event: MouseEvent) => void): IDisposable {
return addDisposableListener(node, 'pointerout', (e: MouseEvent) => {
// Mouse out bubbles, so this is an attempt to ignore faux mouse outs coming from children elements
let toElement: Node | null = <Node>(e.relatedTarget);
while (toElement && toElement !== node) {
toElement = toElement.parentNode;
}
if (toElement === node) {
return;
}
handler(e);
});
}
export function createEventEmitter<K extends keyof HTMLElementEventMap>(target: HTMLElement, type: K, options?: boolean | AddEventListenerOptions): event.Emitter<HTMLElementEventMap[K]> {
let domListener: DomListener | null = null;
@@ -870,6 +841,7 @@ export const EventType = {
POINTER_UP: 'pointerup',
POINTER_DOWN: 'pointerdown',
POINTER_MOVE: 'pointermove',
POINTER_LEAVE: 'pointerleave',
CONTEXT_MENU: 'contextmenu',
WHEEL: 'wheel',
// Keyboard
@@ -232,7 +232,7 @@ export abstract class AbstractScrollableElement extends Widget {
this._setListeningToMouseWheel(this._options.handleMouseWheel);
this.onmouseover(this._listenOnDomNode, (e) => this._onMouseOver(e));
this.onnonbubblingmouseout(this._listenOnDomNode, (e) => this._onMouseOut(e));
this.onmouseleave(this._listenOnDomNode, (e) => this._onMouseLeave(e));
this._hideTimeout = this._register(new TimeoutTimer());
this._isDragging = false;
@@ -525,7 +525,7 @@ export abstract class AbstractScrollableElement extends Widget {
this._hide();
}
private _onMouseOut(e: IMouseEvent): void {
private _onMouseLeave(e: IMouseEvent): void {
this._mouseIsOver = false;
this._hide();
}
+2 -2
View File
@@ -23,8 +23,8 @@ export abstract class Widget extends Disposable {
this._register(dom.addDisposableListener(domNode, dom.EventType.MOUSE_OVER, (e: MouseEvent) => listener(new StandardMouseEvent(e))));
}
protected onnonbubblingmouseout(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {
this._register(dom.addDisposableNonBubblingMouseOutListener(domNode, (e: MouseEvent) => listener(new StandardMouseEvent(e))));
protected onmouseleave(domNode: HTMLElement, listener: (e: IMouseEvent) => void): void {
this._register(dom.addDisposableListener(domNode, dom.EventType.MOUSE_LEAVE, (e: MouseEvent) => listener(new StandardMouseEvent(e))));
}
protected onkeydown(domNode: HTMLElement, listener: (e: IKeyboardEvent) => void): void {
+2 -2
View File
@@ -173,7 +173,7 @@ export class EditorMouseEventFactory {
}
public onMouseLeave(target: HTMLElement, callback: (e: EditorMouseEvent) => void): IDisposable {
return dom.addDisposableNonBubblingMouseOutListener(target, (e: MouseEvent) => {
return dom.addDisposableListener(target, dom.EventType.MOUSE_LEAVE, (e: MouseEvent) => {
callback(this._create(e));
});
}
@@ -208,7 +208,7 @@ export class EditorPointerEventFactory {
}
public onPointerLeave(target: HTMLElement, callback: (e: EditorMouseEvent) => void): IDisposable {
return dom.addDisposableNonBubblingPointerOutListener(target, (e: MouseEvent) => {
return dom.addDisposableListener(target, dom.EventType.POINTER_LEAVE, (e: MouseEvent) => {
callback(this._create(e));
});
}
@@ -113,7 +113,7 @@ export class FindOptionsWidget extends Widget implements IOverlayWidget {
}
}));
this._register(dom.addDisposableNonBubblingMouseOutListener(this._domNode, (e) => this._onMouseOut()));
this._register(dom.addDisposableListener(this._domNode, dom.EventType.MOUSE_LEAVE, (e) => this._onMouseLeave()));
this._register(dom.addDisposableListener(this._domNode, 'mouseover', (e) => this._onMouseOver()));
this._applyTheme(themeService.getColorTheme());
@@ -160,7 +160,7 @@ export class FindOptionsWidget extends Widget implements IOverlayWidget {
this._hideSoon.schedule();
}
private _onMouseOut(): void {
private _onMouseLeave(): void {
this._hideSoon.schedule();
}
@@ -59,7 +59,7 @@ export class EnvironmentVariableInfoWidget extends Widget implements ITerminalWi
}
});
});
this.onnonbubblingmouseout(this._domNode, () => {
this.onmouseleave(this._domNode, () => {
scheduler.cancel();
this._mouseMoveListener?.dispose();
});
@@ -520,7 +520,7 @@ class CompositeMouseTracker extends Widget {
) {
super();
this._elements.forEach(n => this.onmouseover(n, () => this._onTargetMouseOver()));
this._elements.forEach(n => this.onnonbubblingmouseout(n, () => this._onTargetMouseOut()));
this._elements.forEach(n => this.onmouseleave(n, () => this._onTargetMouseLeave()));
}
private _onTargetMouseOver(): void {
@@ -528,7 +528,7 @@ class CompositeMouseTracker extends Widget {
this._clearEvaluateMouseStateTimeout();
}
private _onTargetMouseOut(): void {
private _onTargetMouseLeave(): void {
this._isMouseIn = false;
this._evaluateMouseState();
}