mirror of
https://github.com/microsoft/vscode.git
synced 2026-07-13 23:44:09 +01:00
Switch to newer mouseleave event (#153111)
Switch to newer `mouseleave` event (ref #138789)
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user