59dfe0a24eade3cfeee7169531b0301e83b52877
[WebKit-https.git] / Source / WebCore / page / EventHandler.h
1 /*
2  * Copyright (C) 2006-2014 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
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.
12  *
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. 
24  */
25
26 #ifndef EventHandler_h
27 #define EventHandler_h
28
29 #include "Cursor.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"
39 #include "Timer.h"
40 #include "WheelEventDeltaTracker.h"
41 #include <memory>
42 #include <wtf/Forward.h>
43 #include <wtf/RefPtr.h>
44
45 #if PLATFORM(IOS)
46 #ifdef __OBJC__
47 @class WebEvent;
48 @class WAKView;
49 #include "WAKAppKitStubs.h"
50 #else
51 class WebEvent;
52 #endif
53 #endif // PLATFORM(IOS)
54
55 #if PLATFORM(COCOA) && !defined(__OBJC__)
56 class NSView;
57 #endif
58
59 #if ENABLE(TOUCH_EVENTS)
60 #include <wtf/HashMap.h>
61 #endif
62
63 #if ENABLE(IOS_TOUCH_EVENTS)
64 #include <wtf/HashSet.h>
65 #include <wtf/Vector.h>
66 #endif
67
68 namespace WebCore {
69
70 class AutoscrollController;
71 class ContainerNode;
72 class DataTransfer;
73 class Document;
74 class Element;
75 class Event;
76 class EventTarget;
77 class FloatPoint;
78 class FloatQuad;
79 class Frame;
80 class HTMLFrameSetElement;
81 class HitTestRequest;
82 class HitTestResult;
83 class KeyboardEvent;
84 class MouseEventWithHitTestResults;
85 class Node;
86 class OptionalCursor;
87 class PlatformKeyboardEvent;
88 class PlatformTouchEvent;
89 class PlatformWheelEvent;
90 class RenderBox;
91 class RenderElement;
92 class RenderLayer;
93 class RenderWidget;
94 class ScrollableArea;
95 class SVGElementInstance;
96 class Scrollbar;
97 class TextEvent;
98 class Touch;
99 class TouchEvent;
100 class VisibleSelection;
101 class WheelEvent;
102 class Widget;
103
104 struct DragState;
105
106 #if ENABLE(DRAG_SUPPORT)
107 extern const int LinkDragHysteresis;
108 extern const int ImageDragHysteresis;
109 extern const int TextDragHysteresis;
110 extern const int GeneralDragHysteresis;
111 #endif // ENABLE(DRAG_SUPPORT)
112
113 #if ENABLE(IOS_GESTURE_EVENTS)
114 extern const float GestureUnknown;
115 #endif
116
117 enum AppendTrailingWhitespace { ShouldAppendTrailingWhitespace, DontAppendTrailingWhitespace };
118 enum CheckDragHysteresis { ShouldCheckDragHysteresis, DontCheckDragHysteresis };
119
120 class EventHandler {
121     WTF_MAKE_NONCOPYABLE(EventHandler);
122     WTF_MAKE_FAST_ALLOCATED;
123 public:
124     explicit EventHandler(Frame&);
125     ~EventHandler();
126
127     void clear();
128     void nodeWillBeRemoved(Node&);
129
130 #if ENABLE(DRAG_SUPPORT)
131     void updateSelectionForMouseDrag();
132 #endif
133
134 #if ENABLE(PAN_SCROLLING)
135     void didPanScrollStart();
136     void didPanScrollStop();
137     void startPanScrolling(RenderElement*);
138 #endif
139
140     void stopAutoscrollTimer(bool rendererIsBeingDestroyed = false);
141     RenderBox* autoscrollRenderer() const;
142     void updateAutoscrollRenderer();
143     bool autoscrollInProgress() const;
144     bool mouseDownWasInSubframe() const { return m_mouseDownWasInSubframe; }
145     bool panScrollInProgress() const;
146
147     void dispatchFakeMouseMoveEventSoon();
148     void dispatchFakeMouseMoveEventSoonInQuad(const FloatQuad&);
149
150     WEBCORE_EXPORT HitTestResult hitTestResultAtPoint(const LayoutPoint&,
151         HitTestRequest::HitTestRequestType hitType = HitTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::DisallowShadowContent,
152         const LayoutSize& padding = LayoutSize());
153
154     bool mousePressed() const { return m_mousePressed; }
155     Node* mousePressNode() const { return m_mousePressNode.get(); }
156
157     WEBCORE_EXPORT void setCapturingMouseEventsElement(PassRefPtr<Element>); // A caller is responsible for resetting capturing element to 0.
158
159 #if ENABLE(DRAG_SUPPORT)
160     bool updateDragAndDrop(const PlatformMouseEvent&, DataTransfer*);
161     void cancelDragAndDrop(const PlatformMouseEvent&, DataTransfer*);
162     bool performDragAndDrop(const PlatformMouseEvent&, DataTransfer*);
163     void updateDragStateAfterEditDragIfNeeded(Element* rootEditableElement);
164 #endif
165
166     void scheduleHoverStateUpdate();
167 #if ENABLE(CURSOR_SUPPORT)
168     void scheduleCursorUpdate();
169 #endif
170
171     void setResizingFrameSet(HTMLFrameSetElement*);
172
173     void resizeLayerDestroyed();
174
175     IntPoint lastKnownMousePosition() const;
176     Cursor currentMouseCursor() const { return m_currentMouseCursor; }
177
178     static Frame* subframeForTargetNode(Node*);
179     static Frame* subframeForHitTestResult(const MouseEventWithHitTestResults&);
180
181     WEBCORE_EXPORT bool scrollOverflow(ScrollDirection, ScrollGranularity, Node* startingNode = 0);
182     WEBCORE_EXPORT bool scrollRecursively(ScrollDirection, ScrollGranularity, Node* startingNode = 0);
183     WEBCORE_EXPORT bool logicalScrollRecursively(ScrollLogicalDirection, ScrollGranularity, Node* startingNode = 0);
184
185     bool tabsToLinks(KeyboardEvent*) const;
186     bool tabsToAllFormControls(KeyboardEvent*) const;
187
188     bool mouseMoved(const PlatformMouseEvent&);
189     WEBCORE_EXPORT bool passMouseMovedEventToScrollbars(const PlatformMouseEvent&);
190
191     void lostMouseCapture();
192
193     bool handleMousePressEvent(const PlatformMouseEvent&);
194     bool handleMouseMoveEvent(const PlatformMouseEvent&, HitTestResult* hoveredNode = 0, bool onlyUpdateScrollbars = false);
195     bool handleMouseReleaseEvent(const PlatformMouseEvent&);
196     WEBCORE_EXPORT bool handleWheelEvent(const PlatformWheelEvent&);
197     void defaultWheelEventHandler(Node*, WheelEvent*);
198     bool handlePasteGlobalSelection(const PlatformMouseEvent&);
199
200     void platformPrepareForWheelEvents(const PlatformWheelEvent&, const HitTestResult&, RefPtr<Element>& eventTarget, RefPtr<ContainerNode>& scrollableContainer, ScrollableArea*&, bool& isOverWidget);
201     void platformRecordWheelEvent(const PlatformWheelEvent&);
202     bool platformCompleteWheelEvent(const PlatformWheelEvent&, Element* eventTarget, ContainerNode* scrollableContainer, ScrollableArea*);
203     bool platformCompletePlatformWidgetWheelEvent(const PlatformWheelEvent&, const Widget&, ContainerNode* scrollableContainer);
204
205 #if ENABLE(IOS_TOUCH_EVENTS) || ENABLE(IOS_GESTURE_EVENTS)
206     typedef Vector<RefPtr<Touch>> TouchArray;
207     typedef HashMap<EventTarget*, TouchArray*> EventTargetTouchMap;
208     typedef HashSet<RefPtr<EventTarget>> EventTargetSet;
209 #endif
210
211 #if ENABLE(IOS_TOUCH_EVENTS)
212     bool dispatchTouchEvent(const PlatformTouchEvent&, const AtomicString&, const EventTargetTouchMap&, float, float);
213 #endif
214
215 #if ENABLE(IOS_GESTURE_EVENTS)
216     bool dispatchGestureEvent(const PlatformTouchEvent&, const AtomicString&, const EventTargetSet&, float, float);
217 #endif
218
219 #if PLATFORM(IOS)
220     void defaultTouchEventHandler(Node*, TouchEvent*);
221 #endif
222
223 #if ENABLE(CONTEXT_MENUS)
224     WEBCORE_EXPORT bool sendContextMenuEvent(const PlatformMouseEvent&);
225     bool sendContextMenuEventForKey();
226 #endif
227
228     void setMouseDownMayStartAutoscroll() { m_mouseDownMayStartAutoscroll = true; }
229
230     bool needsKeyboardEventDisambiguationQuirks() const;
231
232     static unsigned accessKeyModifiers();
233     WEBCORE_EXPORT bool handleAccessKey(const PlatformKeyboardEvent&);
234     WEBCORE_EXPORT bool keyEvent(const PlatformKeyboardEvent&);
235     void defaultKeyboardEventHandler(KeyboardEvent*);
236
237     WEBCORE_EXPORT void handleKeyboardSelectionMovementForAccessibility(KeyboardEvent*);
238
239     bool handleTextInputEvent(const String& text, Event* underlyingEvent = 0, TextEventInputType = TextEventInputKeyboard);
240     void defaultTextInputEventHandler(TextEvent*);
241
242 #if ENABLE(DRAG_SUPPORT)
243     WEBCORE_EXPORT bool eventMayStartDrag(const PlatformMouseEvent&) const;
244     
245     WEBCORE_EXPORT void dragSourceEndedAt(const PlatformMouseEvent&, DragOperation);
246 #endif
247
248     void focusDocumentView();
249
250     void capsLockStateMayHaveChanged(); // Only called by FrameSelection
251     
252     WEBCORE_EXPORT void sendScrollEvent(); // Ditto
253
254 #if PLATFORM(COCOA) && defined(__OBJC__)
255 #if !PLATFORM(IOS)
256     WEBCORE_EXPORT void mouseDown(NSEvent *);
257     WEBCORE_EXPORT void mouseDragged(NSEvent *);
258     WEBCORE_EXPORT void mouseUp(NSEvent *);
259     WEBCORE_EXPORT void mouseMoved(NSEvent *);
260     WEBCORE_EXPORT bool keyEvent(NSEvent *);
261     WEBCORE_EXPORT bool wheelEvent(NSEvent *);
262 #else
263     WEBCORE_EXPORT void mouseDown(WebEvent *);
264     WEBCORE_EXPORT void mouseUp(WebEvent *);
265     WEBCORE_EXPORT void mouseMoved(WebEvent *);
266     WEBCORE_EXPORT bool keyEvent(WebEvent *);
267     WEBCORE_EXPORT bool wheelEvent(WebEvent *);
268 #endif
269
270 #if ENABLE(IOS_TOUCH_EVENTS)
271     void touchEvent(WebEvent *);
272 #endif
273
274 #if !PLATFORM(IOS)
275     WEBCORE_EXPORT void passMouseMovedEventToScrollbars(NSEvent *);
276
277     WEBCORE_EXPORT void sendFakeEventsAfterWidgetTracking(NSEvent *initiatingEvent);
278 #endif
279
280 #if !PLATFORM(IOS)
281     void setActivationEventNumber(int num) { m_activationEventNumber = num; }
282
283     WEBCORE_EXPORT static NSEvent *currentNSEvent();
284 #else
285     static WebEvent *currentEvent();
286 #endif // !PLATFORM(IOS)
287 #endif // PLATFORM(COCOA) && defined(__OBJC__)
288
289 #if PLATFORM(IOS)
290     void invalidateClick();
291 #endif
292
293 #if ENABLE(TOUCH_EVENTS)
294     WEBCORE_EXPORT bool handleTouchEvent(const PlatformTouchEvent&);
295 #endif
296
297     bool useHandCursor(Node*, bool isOverLink, bool shiftKey);
298     void updateCursor();
299
300     bool isHandlingWheelEvent() const { return m_isHandlingWheelEvent; }
301
302 private:
303 #if ENABLE(DRAG_SUPPORT)
304     static DragState& dragState();
305     static const double TextDragDelay;
306     
307     PassRefPtr<DataTransfer> createDraggingDataTransfer() const;
308 #endif // ENABLE(DRAG_SUPPORT)
309
310     bool eventActivatedView(const PlatformMouseEvent&) const;
311     bool updateSelectionForMouseDownDispatchingSelectStart(Node*, const VisibleSelection&, TextGranularity);
312     void selectClosestWordFromHitTestResult(const HitTestResult&, AppendTrailingWhitespace);
313     void selectClosestWordFromMouseEvent(const MouseEventWithHitTestResults&);
314     void selectClosestWordOrLinkFromMouseEvent(const MouseEventWithHitTestResults&);
315
316     bool handleMouseDoubleClickEvent(const PlatformMouseEvent&);
317
318     WEBCORE_EXPORT bool handleMousePressEvent(const MouseEventWithHitTestResults&);
319     bool handleMousePressEventSingleClick(const MouseEventWithHitTestResults&);
320     bool handleMousePressEventDoubleClick(const MouseEventWithHitTestResults&);
321     bool handleMousePressEventTripleClick(const MouseEventWithHitTestResults&);
322 #if ENABLE(DRAG_SUPPORT)
323     bool handleMouseDraggedEvent(const MouseEventWithHitTestResults&);
324 #endif
325     WEBCORE_EXPORT bool handleMouseReleaseEvent(const MouseEventWithHitTestResults&);
326
327     OptionalCursor selectCursor(const HitTestResult&, bool shiftKey);
328
329     void hoverTimerFired(Timer&);
330 #if ENABLE(CURSOR_SUPPORT)
331     void cursorUpdateTimerFired(Timer&);
332 #endif
333
334     bool logicalScrollOverflow(ScrollLogicalDirection, ScrollGranularity, Node* startingNode = 0);
335     
336     bool shouldTurnVerticalTicksIntoHorizontal(const HitTestResult&, const PlatformWheelEvent&) const;
337     
338     bool mouseDownMayStartSelect() const { return m_mouseDownMayStartSelect; }
339
340     static bool isKeyboardOptionTab(KeyboardEvent*);
341     static bool eventInvertsTabsToLinksClientCallResult(KeyboardEvent*);
342
343 #if !ENABLE(IOS_TOUCH_EVENTS)
344     void fakeMouseMoveEventTimerFired(Timer&);
345     void cancelFakeMouseMoveEvent();
346 #endif
347
348     bool isInsideScrollbar(const IntPoint&) const;
349
350 #if ENABLE(TOUCH_EVENTS)
351     bool dispatchSyntheticTouchEventIfEnabled(const PlatformMouseEvent&);
352 #endif
353
354 #if !PLATFORM(IOS)
355     void invalidateClick();
356 #endif
357
358     Node* nodeUnderMouse() const;
359     
360     void updateMouseEventTargetNode(Node*, const PlatformMouseEvent&, bool fireMouseOverOut);
361     void fireMouseOverOut(bool fireMouseOver = true, bool fireMouseOut = true, bool updateLastNodeUnderMouse = true);
362     
363     MouseEventWithHitTestResults prepareMouseEvent(const HitTestRequest&, const PlatformMouseEvent&);
364
365     bool dispatchMouseEvent(const AtomicString& eventType, Node* target, bool cancelable, int clickCount, const PlatformMouseEvent&, bool setUnder);
366 #if ENABLE(DRAG_SUPPORT)
367     bool dispatchDragEvent(const AtomicString& eventType, Element& target, const PlatformMouseEvent&, DataTransfer*);
368
369     void freeDataTransfer();
370
371     bool handleDrag(const MouseEventWithHitTestResults&, CheckDragHysteresis);
372 #endif
373     bool handleMouseUp(const MouseEventWithHitTestResults&);
374 #if ENABLE(DRAG_SUPPORT)
375     void clearDragState();
376
377     bool dispatchDragSrcEvent(const AtomicString& eventType, const PlatformMouseEvent&);
378
379     bool dragHysteresisExceeded(const FloatPoint&) const;
380     bool dragHysteresisExceeded(const IntPoint&) const;
381 #endif // ENABLE(DRAG_SUPPORT)
382     
383     bool mouseMovementExceedsThreshold(const FloatPoint&, int pointsThreshold) const;
384
385     bool passMousePressEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe);
386     bool passMouseMoveEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe, HitTestResult* hoveredNode = 0);
387     bool passMouseReleaseEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe);
388
389     bool passSubframeEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe, HitTestResult* hoveredNode = 0);
390
391     bool passMousePressEventToScrollbar(MouseEventWithHitTestResults&, Scrollbar*);
392
393     bool passWidgetMouseDownEventToWidget(const MouseEventWithHitTestResults&);
394     bool passWidgetMouseDownEventToWidget(RenderWidget*);
395
396     bool passMouseDownEventToWidget(Widget*);
397     bool passWheelEventToWidget(const PlatformWheelEvent&, Widget&);
398
399     void defaultSpaceEventHandler(KeyboardEvent*);
400     void defaultBackspaceEventHandler(KeyboardEvent*);
401     void defaultTabEventHandler(KeyboardEvent*);
402     void defaultArrowEventHandler(FocusDirection, KeyboardEvent*);
403
404 #if ENABLE(DRAG_SUPPORT)
405     DragSourceAction updateDragSourceActionsAllowed() const;
406 #endif
407
408     // The following are called at the beginning of handleMouseUp and handleDrag.  
409     // If they return true it indicates that they have consumed the event.
410     bool eventLoopHandleMouseUp(const MouseEventWithHitTestResults&);
411 #if ENABLE(DRAG_SUPPORT)
412     bool eventLoopHandleMouseDragged(const MouseEventWithHitTestResults&);
413 #endif
414
415 #if ENABLE(DRAG_SUPPORT)
416     void updateSelectionForMouseDrag(const HitTestResult&);
417 #endif
418
419     void updateLastScrollbarUnderMouse(Scrollbar*, bool);
420     
421     void setFrameWasScrolledByUser();
422
423     bool capturesDragging() const { return m_capturesDragging; }
424
425 #if PLATFORM(COCOA) && defined(__OBJC__)
426     NSView *mouseDownViewIfStillGood();
427
428     PlatformMouseEvent currentPlatformMouseEvent() const;
429 #endif
430
431 #if ENABLE(FULLSCREEN_API)
432     bool isKeyEventAllowedInFullScreen(const PlatformKeyboardEvent&) const;
433 #endif
434
435     void setLastKnownMousePosition(const PlatformMouseEvent&);
436
437 #if ENABLE(CURSOR_VISIBILITY)
438     void startAutoHideCursorTimer();
439     void cancelAutoHideCursorTimer();
440     void autoHideCursorTimerFired(Timer&);
441 #endif
442
443     void beginTrackingPotentialLongMousePress(const HitTestResult&);
444     void recognizeLongMousePress(Timer&);
445     void cancelTrackingPotentialLongMousePress();
446     bool longMousePressHysteresisExceeded();
447     void clearLongMousePressState();
448     bool handleLongMousePressMouseMovedEvent(const PlatformMouseEvent&);
449
450     void clearLatchedState();
451
452     Frame& m_frame;
453
454     bool m_mousePressed;
455     bool m_capturesDragging;
456     RefPtr<Node> m_mousePressNode;
457
458     bool m_mouseDownMayStartSelect;
459 #if ENABLE(DRAG_SUPPORT)
460     bool m_mouseDownMayStartDrag;
461     bool m_dragMayStartSelectionInstead;
462 #endif
463     bool m_mouseDownWasSingleClickInSelection;
464     enum SelectionInitiationState { HaveNotStartedSelection, PlacedCaret, ExtendedSelection };
465     SelectionInitiationState m_selectionInitiationState;
466
467 #if ENABLE(DRAG_SUPPORT)
468     LayoutPoint m_dragStartPos;
469 #endif
470
471     bool m_panScrollButtonPressed;
472
473     Timer m_hoverTimer;
474 #if ENABLE(CURSOR_SUPPORT)
475     Timer m_cursorUpdateTimer;
476 #endif
477
478     Timer m_longMousePressTimer;
479     bool m_didRecognizeLongMousePress;
480
481     std::unique_ptr<AutoscrollController> m_autoscrollController;
482     bool m_mouseDownMayStartAutoscroll;
483     bool m_mouseDownWasInSubframe;
484
485 #if !ENABLE(IOS_TOUCH_EVENTS)
486     Timer m_fakeMouseMoveEventTimer;
487 #endif
488
489     bool m_svgPan;
490     RefPtr<SVGElementInstance> m_instanceUnderMouse;
491     RefPtr<SVGElementInstance> m_lastInstanceUnderMouse;
492
493     RenderLayer* m_resizeLayer;
494
495     RefPtr<Element> m_capturingMouseEventsElement;
496     bool m_eventHandlerWillResetCapturingMouseEventsElement;
497     
498     RefPtr<Element> m_elementUnderMouse;
499     RefPtr<Element> m_lastElementUnderMouse;
500     RefPtr<Frame> m_lastMouseMoveEventSubframe;
501     RefPtr<Scrollbar> m_lastScrollbarUnderMouse;
502     Cursor m_currentMouseCursor;
503
504     int m_clickCount;
505     RefPtr<Node> m_clickNode;
506
507 #if ENABLE(IOS_GESTURE_EVENTS)
508     float m_gestureInitialDiameter;
509     float m_gestureLastDiameter;
510     float m_gestureInitialRotation;
511     float m_gestureLastRotation;
512 #endif
513
514 #if ENABLE(IOS_TOUCH_EVENTS)
515     unsigned m_firstTouchID;
516
517     TouchArray m_touches;
518     EventTargetSet m_gestureTargets;
519     RefPtr<Frame> m_touchEventTargetSubframe;
520 #endif
521
522 #if ENABLE(DRAG_SUPPORT)
523     RefPtr<Element> m_dragTarget;
524     bool m_shouldOnlyFireDragOverEvent;
525 #endif
526     
527     RefPtr<HTMLFrameSetElement> m_frameSetBeingResized;
528
529     LayoutSize m_offsetFromResizeCorner; // In the coords of m_resizeLayer.
530     
531     bool m_mousePositionIsUnknown;
532     IntPoint m_lastKnownMousePosition;
533     IntPoint m_lastKnownMouseGlobalPosition;
534     IntPoint m_mouseDownPos; // In our view's coords.
535     double m_mouseDownTimestamp;
536     PlatformMouseEvent m_mouseDown;
537
538 #if PLATFORM(COCOA)
539     NSView *m_mouseDownView;
540     bool m_sendingEventToSubview;
541     bool m_startedGestureAtScrollLimit;
542 #if !PLATFORM(IOS)
543     int m_activationEventNumber;
544 #endif
545 #endif
546 #if ENABLE(TOUCH_EVENTS) && !ENABLE(IOS_TOUCH_EVENTS)
547     typedef HashMap<int, RefPtr<EventTarget>> TouchTargetMap;
548     TouchTargetMap m_originatingTouchPointTargets;
549     RefPtr<Document> m_originatingTouchPointDocument;
550     unsigned m_originatingTouchPointTargetKey;
551     bool m_touchPressed;
552 #endif
553
554     double m_maxMouseMovedDuration;
555     PlatformEvent::Type m_baseEventType;
556     bool m_didStartDrag;
557     bool m_didLongPressInvokeContextMenu;
558     bool m_isHandlingWheelEvent;
559
560 #if ENABLE(CURSOR_VISIBILITY)
561     Timer m_autoHideCursorTimer;
562 #endif
563 };
564
565 } // namespace WebCore
566
567 #endif // EventHandler_h