2 * Copyright (C) 2006-2015 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 #ifndef EventHandler_h
27 #define EventHandler_h
30 #include "DragActions.h"
31 #include "FocusDirection.h"
32 #include "HitTestRequest.h"
33 #include "LayoutPoint.h"
34 #include "PlatformMouseEvent.h"
35 #include "PlatformWheelEvent.h"
36 #include "ScrollTypes.h"
37 #include "TextEventInputType.h"
38 #include "TextGranularity.h"
40 #include "WheelEventDeltaFilter.h"
42 #include <wtf/Forward.h>
43 #include <wtf/HashMap.h>
44 #include <wtf/HashSet.h>
45 #include <wtf/RefPtr.h>
46 #include <wtf/Vector.h>
47 #include <wtf/WeakPtr.h>
53 #include "WAKAppKitStubs.h"
55 #endif // PLATFORM(IOS)
63 class AutoscrollController;
73 class HTMLFrameSetElement;
77 class MouseEventWithHitTestResults;
80 class PlatformGestureEvent;
81 class PlatformKeyboardEvent;
82 class PlatformTouchEvent;
83 class PlatformWheelEvent;
93 class VisibleSelection;
99 #if ENABLE(DRAG_SUPPORT)
100 extern const int LinkDragHysteresis;
101 extern const int ImageDragHysteresis;
102 extern const int TextDragHysteresis;
103 extern const int GeneralDragHysteresis;
104 #endif // ENABLE(DRAG_SUPPORT)
106 #if ENABLE(IOS_GESTURE_EVENTS) || ENABLE(MAC_GESTURE_EVENTS)
107 extern const float GestureUnknown;
108 extern const unsigned InvalidTouchIdentifier;
111 enum AppendTrailingWhitespace { ShouldAppendTrailingWhitespace, DontAppendTrailingWhitespace };
112 enum CheckDragHysteresis { ShouldCheckDragHysteresis, DontCheckDragHysteresis };
114 enum class ImmediateActionStage {
118 ActionCancelledWithoutUpdate,
119 ActionCancelledAfterUpdate,
124 WTF_MAKE_NONCOPYABLE(EventHandler);
125 WTF_MAKE_FAST_ALLOCATED;
127 explicit EventHandler(Frame&);
131 void nodeWillBeRemoved(Node&);
133 #if ENABLE(DRAG_SUPPORT)
134 void updateSelectionForMouseDrag();
137 #if ENABLE(PAN_SCROLLING)
138 void didPanScrollStart();
139 void didPanScrollStop();
140 void startPanScrolling(RenderElement*);
143 void stopAutoscrollTimer(bool rendererIsBeingDestroyed = false);
144 RenderBox* autoscrollRenderer() const;
145 void updateAutoscrollRenderer();
146 bool autoscrollInProgress() const;
147 bool mouseDownWasInSubframe() const { return m_mouseDownWasInSubframe; }
148 bool panScrollInProgress() const;
150 WEBCORE_EXPORT void dispatchFakeMouseMoveEventSoon();
151 void dispatchFakeMouseMoveEventSoonInQuad(const FloatQuad&);
153 WEBCORE_EXPORT HitTestResult hitTestResultAtPoint(const LayoutPoint&,
154 HitTestRequest::HitTestRequestType hitType = HitTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::DisallowShadowContent,
155 const LayoutSize& padding = LayoutSize());
157 bool mousePressed() const { return m_mousePressed; }
158 Node* mousePressNode() const { return m_mousePressNode.get(); }
160 WEBCORE_EXPORT void setCapturingMouseEventsElement(PassRefPtr<Element>); // A caller is responsible for resetting capturing element to 0.
162 #if ENABLE(DRAG_SUPPORT)
163 bool updateDragAndDrop(const PlatformMouseEvent&, DataTransfer*);
164 void cancelDragAndDrop(const PlatformMouseEvent&, DataTransfer*);
165 bool performDragAndDrop(const PlatformMouseEvent&, DataTransfer*);
166 void updateDragStateAfterEditDragIfNeeded(Element* rootEditableElement);
169 void scheduleHoverStateUpdate();
170 #if ENABLE(CURSOR_SUPPORT)
171 void scheduleCursorUpdate();
174 void setResizingFrameSet(HTMLFrameSetElement*);
176 void resizeLayerDestroyed();
178 IntPoint lastKnownMousePosition() const;
179 IntPoint lastKnownMouseGlobalPosition() const { return m_lastKnownMouseGlobalPosition; }
180 Cursor currentMouseCursor() const { return m_currentMouseCursor; }
182 static Frame* subframeForTargetNode(Node*);
183 static Frame* subframeForHitTestResult(const MouseEventWithHitTestResults&);
185 WEBCORE_EXPORT bool scrollOverflow(ScrollDirection, ScrollGranularity, Node* startingNode = nullptr);
186 WEBCORE_EXPORT bool scrollRecursively(ScrollDirection, ScrollGranularity, Node* startingNode = nullptr);
187 WEBCORE_EXPORT bool logicalScrollRecursively(ScrollLogicalDirection, ScrollGranularity, Node* startingNode = nullptr);
189 bool tabsToLinks(KeyboardEvent*) const;
190 bool tabsToAllFormControls(KeyboardEvent*) const;
192 WEBCORE_EXPORT bool mouseMoved(const PlatformMouseEvent&);
193 WEBCORE_EXPORT bool passMouseMovedEventToScrollbars(const PlatformMouseEvent&);
195 void lostMouseCapture();
197 WEBCORE_EXPORT bool handleMousePressEvent(const PlatformMouseEvent&);
198 bool handleMouseMoveEvent(const PlatformMouseEvent&, HitTestResult* hoveredNode = nullptr, bool onlyUpdateScrollbars = false);
199 WEBCORE_EXPORT bool handleMouseReleaseEvent(const PlatformMouseEvent&);
200 bool handleMouseForceEvent(const PlatformMouseEvent&);
201 WEBCORE_EXPORT bool handleWheelEvent(const PlatformWheelEvent&);
202 void defaultWheelEventHandler(Node*, WheelEvent*);
203 bool handlePasteGlobalSelection(const PlatformMouseEvent&);
205 void platformPrepareForWheelEvents(const PlatformWheelEvent&, const HitTestResult&, RefPtr<Element>& eventTarget, RefPtr<ContainerNode>& scrollableContainer, ScrollableArea*&, bool& isOverWidget);
206 void platformRecordWheelEvent(const PlatformWheelEvent&);
207 bool platformCompleteWheelEvent(const PlatformWheelEvent&, ContainerNode* scrollableContainer, ScrollableArea*);
208 bool platformCompletePlatformWidgetWheelEvent(const PlatformWheelEvent&, const Widget&, ContainerNode* scrollableContainer);
209 void platformNotifyIfEndGesture(const PlatformWheelEvent&, ScrollableArea*);
211 #if ENABLE(IOS_TOUCH_EVENTS) || ENABLE(IOS_GESTURE_EVENTS)
212 typedef Vector<RefPtr<Touch>> TouchArray;
213 typedef HashMap<EventTarget*, TouchArray*> EventTargetTouchMap;
216 #if ENABLE(IOS_TOUCH_EVENTS) || ENABLE(IOS_GESTURE_EVENTS) || ENABLE(MAC_GESTURE_EVENTS)
217 typedef HashSet<RefPtr<EventTarget>> EventTargetSet;
220 #if ENABLE(IOS_TOUCH_EVENTS)
221 bool dispatchTouchEvent(const PlatformTouchEvent&, const AtomicString&, const EventTargetTouchMap&, float, float);
222 bool dispatchSimulatedTouchEvent(IntPoint location);
225 #if ENABLE(IOS_GESTURE_EVENTS)
226 bool dispatchGestureEvent(const PlatformTouchEvent&, const AtomicString&, const EventTargetSet&, float, float);
227 #elif ENABLE(MAC_GESTURE_EVENTS)
228 bool dispatchGestureEvent(const PlatformGestureEvent&, const AtomicString&, const EventTargetSet&, float, float);
229 WEBCORE_EXPORT bool handleGestureEvent(const PlatformGestureEvent&);
233 void defaultTouchEventHandler(Node*, TouchEvent*);
236 #if ENABLE(CONTEXT_MENUS)
237 WEBCORE_EXPORT bool sendContextMenuEvent(const PlatformMouseEvent&);
238 bool sendContextMenuEventForKey();
241 void setMouseDownMayStartAutoscroll() { m_mouseDownMayStartAutoscroll = true; }
243 bool needsKeyboardEventDisambiguationQuirks() const;
245 static unsigned accessKeyModifiers();
246 WEBCORE_EXPORT bool handleAccessKey(const PlatformKeyboardEvent&);
247 WEBCORE_EXPORT bool keyEvent(const PlatformKeyboardEvent&);
248 void defaultKeyboardEventHandler(KeyboardEvent*);
250 bool accessibilityPreventsEventPropogation(KeyboardEvent*);
251 WEBCORE_EXPORT void handleKeyboardSelectionMovementForAccessibility(KeyboardEvent*);
253 bool handleTextInputEvent(const String& text, Event* underlyingEvent = nullptr, TextEventInputType = TextEventInputKeyboard);
254 void defaultTextInputEventHandler(TextEvent*);
256 #if ENABLE(DRAG_SUPPORT)
257 WEBCORE_EXPORT bool eventMayStartDrag(const PlatformMouseEvent&) const;
259 WEBCORE_EXPORT void dragSourceEndedAt(const PlatformMouseEvent&, DragOperation);
262 void focusDocumentView();
264 WEBCORE_EXPORT void sendScrollEvent();
266 #if PLATFORM(COCOA) && defined(__OBJC__)
268 WEBCORE_EXPORT void mouseDown(NSEvent *, NSEvent *correspondingPressureEvent);
269 WEBCORE_EXPORT void mouseDragged(NSEvent *, NSEvent *correspondingPressureEvent);
270 WEBCORE_EXPORT void mouseUp(NSEvent *, NSEvent *correspondingPressureEvent);
271 WEBCORE_EXPORT void mouseMoved(NSEvent *, NSEvent *correspondingPressureEvent);
272 WEBCORE_EXPORT void pressureChange(NSEvent *, NSEvent* correspondingPressureEvent);
273 WEBCORE_EXPORT bool keyEvent(NSEvent *);
274 WEBCORE_EXPORT bool wheelEvent(NSEvent *);
276 WEBCORE_EXPORT void mouseDown(WebEvent *);
277 WEBCORE_EXPORT void mouseUp(WebEvent *);
278 WEBCORE_EXPORT void mouseMoved(WebEvent *);
279 WEBCORE_EXPORT bool keyEvent(WebEvent *);
280 WEBCORE_EXPORT bool wheelEvent(WebEvent *);
283 #if ENABLE(IOS_TOUCH_EVENTS)
284 WEBCORE_EXPORT void touchEvent(WebEvent *);
288 WEBCORE_EXPORT void passMouseMovedEventToScrollbars(NSEvent *, NSEvent* correspondingPressureEvent);
290 WEBCORE_EXPORT void sendFakeEventsAfterWidgetTracking(NSEvent *initiatingEvent);
294 void setActivationEventNumber(int num) { m_activationEventNumber = num; }
296 WEBCORE_EXPORT static NSEvent *currentNSEvent();
297 static NSEvent *correspondingPressureEvent();
299 static WebEvent *currentEvent();
300 #endif // !PLATFORM(IOS)
301 #endif // PLATFORM(COCOA) && defined(__OBJC__)
304 void invalidateClick();
307 #if ENABLE(TOUCH_EVENTS)
308 WEBCORE_EXPORT bool handleTouchEvent(const PlatformTouchEvent&);
311 bool useHandCursor(Node*, bool isOverLink, bool shiftKey);
314 bool isHandlingWheelEvent() const { return m_isHandlingWheelEvent; }
316 WEBCORE_EXPORT void setImmediateActionStage(ImmediateActionStage stage);
317 ImmediateActionStage immediateActionStage() const { return m_immediateActionStage; }
320 #if ENABLE(DRAG_SUPPORT)
321 static DragState& dragState();
322 static const double TextDragDelay;
324 PassRefPtr<DataTransfer> createDraggingDataTransfer() const;
325 #endif // ENABLE(DRAG_SUPPORT)
327 bool eventActivatedView(const PlatformMouseEvent&) const;
328 bool updateSelectionForMouseDownDispatchingSelectStart(Node*, const VisibleSelection&, TextGranularity);
329 void selectClosestWordFromHitTestResult(const HitTestResult&, AppendTrailingWhitespace);
330 VisibleSelection selectClosestWordFromHitTestResultBasedOnLookup(const HitTestResult&);
331 void selectClosestWordFromMouseEvent(const MouseEventWithHitTestResults&);
332 void selectClosestContextualWordFromMouseEvent(const MouseEventWithHitTestResults&);
333 void selectClosestContextualWordOrLinkFromMouseEvent(const MouseEventWithHitTestResults&);
335 bool handleMouseDoubleClickEvent(const PlatformMouseEvent&);
337 WEBCORE_EXPORT bool handleMousePressEvent(const MouseEventWithHitTestResults&);
338 bool handleMousePressEventSingleClick(const MouseEventWithHitTestResults&);
339 bool handleMousePressEventDoubleClick(const MouseEventWithHitTestResults&);
340 bool handleMousePressEventTripleClick(const MouseEventWithHitTestResults&);
341 #if ENABLE(DRAG_SUPPORT)
342 bool handleMouseDraggedEvent(const MouseEventWithHitTestResults&);
344 WEBCORE_EXPORT bool handleMouseReleaseEvent(const MouseEventWithHitTestResults&);
346 OptionalCursor selectCursor(const HitTestResult&, bool shiftKey);
348 void hoverTimerFired();
349 #if ENABLE(CURSOR_SUPPORT)
350 void cursorUpdateTimerFired();
353 bool logicalScrollOverflow(ScrollLogicalDirection, ScrollGranularity, Node* startingNode = nullptr);
355 bool shouldTurnVerticalTicksIntoHorizontal(const HitTestResult&, const PlatformWheelEvent&) const;
357 bool mouseDownMayStartSelect() const { return m_mouseDownMayStartSelect; }
359 static bool isKeyboardOptionTab(KeyboardEvent*);
360 static bool eventInvertsTabsToLinksClientCallResult(KeyboardEvent*);
362 #if !ENABLE(IOS_TOUCH_EVENTS)
363 void fakeMouseMoveEventTimerFired();
364 void cancelFakeMouseMoveEvent();
367 bool isInsideScrollbar(const IntPoint&) const;
369 #if ENABLE(TOUCH_EVENTS)
370 bool dispatchSyntheticTouchEventIfEnabled(const PlatformMouseEvent&);
374 void invalidateClick();
377 Node* nodeUnderMouse() const;
379 void updateMouseEventTargetNode(Node*, const PlatformMouseEvent&, bool fireMouseOverOut);
380 void fireMouseOverOut(bool fireMouseOver = true, bool fireMouseOut = true, bool updateLastNodeUnderMouse = true);
382 MouseEventWithHitTestResults prepareMouseEvent(const HitTestRequest&, const PlatformMouseEvent&);
384 bool dispatchMouseEvent(const AtomicString& eventType, Node* target, bool cancelable, int clickCount, const PlatformMouseEvent&, bool setUnder);
385 #if ENABLE(DRAG_SUPPORT)
386 bool dispatchDragEvent(const AtomicString& eventType, Element& target, const PlatformMouseEvent&, DataTransfer*);
388 void freeDataTransfer();
390 bool handleDrag(const MouseEventWithHitTestResults&, CheckDragHysteresis);
392 bool handleMouseUp(const MouseEventWithHitTestResults&);
393 #if ENABLE(DRAG_SUPPORT)
394 void clearDragState();
396 bool dispatchDragSrcEvent(const AtomicString& eventType, const PlatformMouseEvent&);
398 bool dragHysteresisExceeded(const FloatPoint&) const;
399 bool dragHysteresisExceeded(const IntPoint&) const;
400 #endif // ENABLE(DRAG_SUPPORT)
402 bool mouseMovementExceedsThreshold(const FloatPoint&, int pointsThreshold) const;
404 bool passMousePressEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe);
405 bool passMouseMoveEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe, HitTestResult* hoveredNode = nullptr);
406 bool passMouseReleaseEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe);
408 bool passSubframeEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe, HitTestResult* hoveredNode = nullptr);
410 bool passMousePressEventToScrollbar(MouseEventWithHitTestResults&, Scrollbar*);
412 bool passWidgetMouseDownEventToWidget(const MouseEventWithHitTestResults&);
413 bool passWidgetMouseDownEventToWidget(RenderWidget*);
415 bool passMouseDownEventToWidget(Widget*);
416 bool passWheelEventToWidget(const PlatformWheelEvent&, Widget&);
418 void defaultSpaceEventHandler(KeyboardEvent*);
419 void defaultBackspaceEventHandler(KeyboardEvent*);
420 void defaultTabEventHandler(KeyboardEvent*);
421 void defaultArrowEventHandler(FocusDirection, KeyboardEvent*);
423 #if ENABLE(DRAG_SUPPORT)
424 DragSourceAction updateDragSourceActionsAllowed() const;
427 // The following are called at the beginning of handleMouseUp and handleDrag.
428 // If they return true it indicates that they have consumed the event.
429 bool eventLoopHandleMouseUp(const MouseEventWithHitTestResults&);
430 #if ENABLE(DRAG_SUPPORT)
431 bool eventLoopHandleMouseDragged(const MouseEventWithHitTestResults&);
434 #if ENABLE(DRAG_SUPPORT)
435 void updateSelectionForMouseDrag(const HitTestResult&);
438 void updateLastScrollbarUnderMouse(Scrollbar*, bool);
440 void setFrameWasScrolledByUser();
442 bool capturesDragging() const { return m_capturesDragging; }
444 #if PLATFORM(COCOA) && defined(__OBJC__)
445 NSView *mouseDownViewIfStillGood();
447 PlatformMouseEvent currentPlatformMouseEvent() const;
450 #if ENABLE(FULLSCREEN_API)
451 bool isKeyEventAllowedInFullScreen(const PlatformKeyboardEvent&) const;
454 void setLastKnownMousePosition(const PlatformMouseEvent&);
456 #if ENABLE(CURSOR_VISIBILITY)
457 void startAutoHideCursorTimer();
458 void cancelAutoHideCursorTimer();
459 void autoHideCursorTimerFired();
462 void beginTrackingPotentialLongMousePress(const HitTestResult&);
463 void recognizeLongMousePress();
464 void cancelTrackingPotentialLongMousePress();
465 bool longMousePressHysteresisExceeded();
466 void clearLongMousePressState();
467 bool handleLongMousePressMouseMovedEvent(const PlatformMouseEvent&);
469 void clearLatchedState();
473 bool m_mousePressed { false };
474 bool m_capturesDragging { false };
475 RefPtr<Node> m_mousePressNode;
477 bool m_mouseDownMayStartSelect { false };
478 #if ENABLE(DRAG_SUPPORT)
479 bool m_mouseDownMayStartDrag { false };
480 bool m_dragMayStartSelectionInstead { false };
482 bool m_mouseDownWasSingleClickInSelection { false };
483 enum SelectionInitiationState { HaveNotStartedSelection, PlacedCaret, ExtendedSelection };
484 SelectionInitiationState m_selectionInitiationState { HaveNotStartedSelection };
486 #if ENABLE(DRAG_SUPPORT)
487 LayoutPoint m_dragStartPos;
490 bool m_panScrollButtonPressed { false };
493 #if ENABLE(CURSOR_SUPPORT)
494 Timer m_cursorUpdateTimer;
497 Timer m_longMousePressTimer;
498 bool m_didRecognizeLongMousePress { false };
500 std::unique_ptr<AutoscrollController> m_autoscrollController;
501 bool m_mouseDownMayStartAutoscroll { false };
502 bool m_mouseDownWasInSubframe { false };
504 #if !ENABLE(IOS_TOUCH_EVENTS)
505 Timer m_fakeMouseMoveEventTimer;
508 bool m_svgPan { false };
510 RenderLayer* m_resizeLayer { nullptr };
512 RefPtr<Element> m_capturingMouseEventsElement;
513 bool m_eventHandlerWillResetCapturingMouseEventsElement { false };
515 RefPtr<Element> m_elementUnderMouse;
516 RefPtr<Element> m_lastElementUnderMouse;
517 RefPtr<Frame> m_lastMouseMoveEventSubframe;
518 WeakPtr<Scrollbar> m_lastScrollbarUnderMouse;
519 Cursor m_currentMouseCursor;
521 int m_clickCount { 0 };
522 RefPtr<Node> m_clickNode;
524 #if ENABLE(IOS_GESTURE_EVENTS)
525 float m_gestureInitialDiameter { GestureUnknown };
526 float m_gestureInitialRotation { GestureUnknown };
528 #if ENABLE(IOS_GESTURE_EVENTS) || ENABLE(MAC_GESTURE_EVENTS)
529 float m_gestureLastDiameter { GestureUnknown };
530 float m_gestureLastRotation { GestureUnknown };
531 EventTargetSet m_gestureTargets;
533 #if ENABLE(MAC_GESTURE_EVENTS)
534 bool m_hasActiveGesture { false };
537 #if ENABLE(IOS_TOUCH_EVENTS)
538 unsigned m_firstTouchID { InvalidTouchIdentifier };
540 TouchArray m_touches;
541 RefPtr<Frame> m_touchEventTargetSubframe;
544 #if ENABLE(DRAG_SUPPORT)
545 RefPtr<Element> m_dragTarget;
546 bool m_shouldOnlyFireDragOverEvent { false };
549 RefPtr<HTMLFrameSetElement> m_frameSetBeingResized;
551 LayoutSize m_offsetFromResizeCorner; // In the coords of m_resizeLayer.
553 bool m_mousePositionIsUnknown { true };
554 IntPoint m_lastKnownMousePosition;
555 IntPoint m_lastKnownMouseGlobalPosition;
556 IntPoint m_mouseDownPos; // In our view's coords.
557 double m_mouseDownTimestamp { 0 };
558 PlatformMouseEvent m_mouseDown;
561 NSView *m_mouseDownView { nullptr };
562 bool m_sendingEventToSubview { false };
564 int m_activationEventNumber { -1 };
567 #if ENABLE(TOUCH_EVENTS) && !ENABLE(IOS_TOUCH_EVENTS)
568 typedef HashMap<int, RefPtr<EventTarget>> TouchTargetMap;
569 TouchTargetMap m_originatingTouchPointTargets;
570 RefPtr<Document> m_originatingTouchPointDocument;
571 unsigned m_originatingTouchPointTargetKey { 0 };
572 bool m_touchPressed { false };
575 double m_maxMouseMovedDuration { 0 };
576 PlatformEvent::Type m_baseEventType { PlatformEvent::NoType };
577 bool m_didStartDrag { false };
578 bool m_didLongPressInvokeContextMenu { false };
579 bool m_isHandlingWheelEvent { false };
581 #if ENABLE(CURSOR_VISIBILITY)
582 Timer m_autoHideCursorTimer;
585 ImmediateActionStage m_immediateActionStage { ImmediateActionStage::None };
588 } // namespace WebCore
590 #endif // EventHandler_h