From f7a966087e7e465a18a0f3e615b4d9d11204d8ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82?= Date: Wed, 1 Oct 2025 16:28:34 +0200 Subject: [PATCH] Disable hover on gestures other than hover --- .../src/web/tools/GestureHandlerWebDelegate.ts | 7 ++++++- .../src/web/tools/PointerEventManager.ts | 9 ++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/react-native-gesture-handler/src/web/tools/GestureHandlerWebDelegate.ts b/packages/react-native-gesture-handler/src/web/tools/GestureHandlerWebDelegate.ts index 8e46b32c9b..6efe45ba36 100644 --- a/packages/react-native-gesture-handler/src/web/tools/GestureHandlerWebDelegate.ts +++ b/packages/react-native-gesture-handler/src/web/tools/GestureHandlerWebDelegate.ts @@ -12,6 +12,7 @@ import { MouseButton } from '../../handlers/gestureHandlerCommon'; import KeyboardEventManager from './KeyboardEventManager'; import WheelEventManager from './WheelEventManager'; import { tagMessage } from '../../utils'; +import HoverGestureHandler from '../handlers/HoverGestureHandler'; interface DefaultViewStyles { userSelect: string; @@ -52,7 +53,11 @@ export class GestureHandlerWebDelegate this.setTouchAction(); this.setContextMenu(); - this.eventManagers.push(new PointerEventManager(this.view)); + const shouldSendHoverEvents = handler instanceof HoverGestureHandler; + + this.eventManagers.push( + new PointerEventManager(this.view, shouldSendHoverEvents) + ); this.eventManagers.push(new KeyboardEventManager(this.view)); this.eventManagers.push(new WheelEventManager(this.view)); diff --git a/packages/react-native-gesture-handler/src/web/tools/PointerEventManager.ts b/packages/react-native-gesture-handler/src/web/tools/PointerEventManager.ts index 446a2c7cc0..c7219e6328 100644 --- a/packages/react-native-gesture-handler/src/web/tools/PointerEventManager.ts +++ b/packages/react-native-gesture-handler/src/web/tools/PointerEventManager.ts @@ -15,8 +15,9 @@ export default class PointerEventManager extends EventManager { private trackedPointers = new Set(); private readonly mouseButtonsMapper = new Map(); private lastPosition: Point; + private shouldSendHoverEvents: boolean; - constructor(view: HTMLElement) { + constructor(view: HTMLElement, shouldSendHoverEvents: boolean) { super(view); this.mouseButtonsMapper.set(0, MouseButton.LEFT); @@ -29,6 +30,8 @@ export default class PointerEventManager extends EventManager { x: -Infinity, y: -Infinity, }; + + this.shouldSendHoverEvents = shouldSendHoverEvents; } private pointerDownCallback = (event: PointerEvent) => { @@ -82,6 +85,10 @@ export default class PointerEventManager extends EventManager { }; private pointerMoveCallback = (event: PointerEvent) => { + if (!this.shouldSendHoverEvents && this.activePointersCounter === 0) { + return; + } + const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.MOVE); const target = event.target as HTMLElement;