18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
22fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * Copyright (C) 2006, 2007, 2009, 2010, 2011 Apple Inc. All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef EventHandler_h
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define EventHandler_h
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "DragActions.h"
30dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "FocusDirection.h"
31967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#include "HitTestRequest.h"
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformMouseEvent.h"
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ScrollTypes.h"
34ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include "TextEventInputType.h"
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Timer.h"
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/Forward.h>
372bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <wtf/OwnPtr.h>
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/RefPtr.h>
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
405e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#if PLATFORM(MAC) && !defined(__OBJC__)
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass NSView;
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
44cd97be1e939c83f2a837fa63c24d06231a0097d9Ben Murdoch#if ENABLE(TOUCH_EVENTS)
45885493cb204540cc0d918892ef5d4ba2b8285766Ben Murdoch#include <wtf/HashMap.h>
46885493cb204540cc0d918892ef5d4ba2b8285766Ben Murdoch#endif
47885493cb204540cc0d918892ef5d4ba2b8285766Ben Murdoch
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Clipboard;
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Cursor;
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Event;
53885493cb204540cc0d918892ef5d4ba2b8285766Ben Murdochclass EventTarget;
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass FloatPoint;
55dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass FloatQuad;
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Frame;
572fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass HTMLFrameSetElement;
588f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianclass HitTestRequest;
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass HitTestResult;
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass KeyboardEvent;
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass MouseEventWithHitTestResults;
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Node;
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass PlatformKeyboardEvent;
64f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdochclass PlatformTouchEvent;
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass PlatformWheelEvent;
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderLayer;
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderObject;
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderWidget;
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass SVGElementInstance;
702fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass Scrollbar;
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass TextEvent;
72f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdochclass TouchEvent;
73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass WheelEvent;
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Widget;
752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(GESTURE_EVENTS)
772fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockclass PlatformGestureEvent;
782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif
792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
802bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(GESTURE_RECOGNIZER)
812bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass PlatformGestureRecognizer;
822bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
832bde8e466a4451c7319e3a072d118917957d6554Steve Block
84231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT)
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern const int LinkDragHysteresis;
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern const int ImageDragHysteresis;
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern const int TextDragHysteresis;
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectextern const int GeneralDragHysteresis;
89231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif // ENABLE(DRAG_SUPPORT)
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochenum HitTestScrollbars { ShouldHitTestScrollbars, DontHitTestScrollbars };
920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
93ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass EventHandler {
94ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    WTF_MAKE_NONCOPYABLE(EventHandler);
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    EventHandler(Frame*);
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ~EventHandler();
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void clear();
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
101231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT)
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void updateSelectionForMouseDrag();
103231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Node* mousePressNode() const;
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setMousePressNode(PassRefPtr<Node>);
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
108d0825bca7fe65beaee391d30da42e937db621564Steve Block    void startPanScrolling(RenderObject*);
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool panScrollInProgress() { return m_panScrollInProgress; }
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setPanScrollInProgress(bool inProgress) { m_panScrollInProgress = inProgress; }
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void stopAutoscrollTimer(bool rendererIsBeingDestroyed = false);
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RenderObject* autoscrollRenderer() const;
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void updateAutoscrollRenderer();
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    void dispatchFakeMouseMoveEventSoon();
117dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void dispatchFakeMouseMoveEventSoonInQuad(const FloatQuad&);
118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
119db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    HitTestResult hitTestResultAtPoint(const IntPoint&, bool allowShadowContent, bool ignoreClipping = false,
120db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block                                       HitTestScrollbars scrollbars = DontHitTestScrollbars,
121db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block                                       HitTestRequest::HitTestRequestType hitType = HitTestRequest::ReadOnly | HitTestRequest::Active,
122db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block                                       const IntSize& padding = IntSize());
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool mousePressed() const { return m_mousePressed; }
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setMousePressed(bool pressed) { m_mousePressed = pressed; }
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1275af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    void setCapturingMouseEventsNode(PassRefPtr<Node>); // A caller is responsible for resetting capturing node to 0.
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
129231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT)
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool updateDragAndDrop(const PlatformMouseEvent&, Clipboard*);
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void cancelDragAndDrop(const PlatformMouseEvent&, Clipboard*);
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool performDragAndDrop(const PlatformMouseEvent&, Clipboard*);
133231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void scheduleHoverStateUpdate();
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setResizingFrameSet(HTMLFrameSetElement*);
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void resizeLayerDestroyed();
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    IntPoint currentMousePosition() const;
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setIgnoreWheelEvents(bool);
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
145231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    static Frame* subframeForTargetNode(Node*);
1462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    static Frame* subframeForHitTestResult(const MouseEventWithHitTestResults&);
147231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1485af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    bool scrollOverflow(ScrollDirection, ScrollGranularity, Node* startingNode = 0);
149f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool logicalScrollOverflow(ScrollLogicalDirection, ScrollGranularity, Node* startingNode = 0);
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1515af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    bool scrollRecursively(ScrollDirection, ScrollGranularity, Node* startingNode = 0);
152f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    bool logicalScrollRecursively(ScrollLogicalDirection, ScrollGranularity, Node* startingNode = 0);
1530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
154231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT)
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool shouldDragAutoNode(Node*, const IntPoint&) const; // -webkit-user-drag == auto
156231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
157231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
158231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    bool shouldTurnVerticalTicksIntoHorizontal(const HitTestResult&) const;
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool tabsToLinks(KeyboardEvent*) const;
16181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    bool tabsToAllFormControls(KeyboardEvent*) const;
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool mouseDownMayStartSelect() const { return m_mouseDownMayStartSelect; }
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool mouseMoved(const PlatformMouseEvent&);
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16721939df44de1705786c545cd1bf519d47250322dBen Murdoch    void lostMouseCapture();
16821939df44de1705786c545cd1bf519d47250322dBen Murdoch
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool handleMousePressEvent(const PlatformMouseEvent&);
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool handleMouseMoveEvent(const PlatformMouseEvent&, HitTestResult* hoveredNode = 0);
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool handleMouseReleaseEvent(const PlatformMouseEvent&);
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool handleWheelEvent(PlatformWheelEvent&);
173dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void defaultWheelEventHandler(Node*, WheelEvent*);
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(GESTURE_EVENTS)
1762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    bool handleGestureEvent(const PlatformGestureEvent&);
1772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif
1782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
179231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(CONTEXT_MENUS)
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool sendContextMenuEvent(const PlatformMouseEvent&);
181ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    bool sendContextMenuEventForKey();
182231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setMouseDownMayStartAutoscroll() { m_mouseDownMayStartAutoscroll = true; }
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool needsKeyboardEventDisambiguationQuirks() const;
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
188635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    static unsigned accessKeyModifiers();
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool handleAccessKey(const PlatformKeyboardEvent&);
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool keyEvent(const PlatformKeyboardEvent&);
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void defaultKeyboardEventHandler(KeyboardEvent*);
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
193ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    bool handleTextInputEvent(const String& text, Event* underlyingEvent = 0, TextEventInputType = TextEventInputKeyboard);
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void defaultTextInputEventHandler(TextEvent*);
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
196231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT)
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool eventMayStartDrag(const PlatformMouseEvent&) const;
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void dragSourceEndedAt(const PlatformMouseEvent&, DragOperation);
200231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void focusDocumentView();
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void capsLockStateMayHaveChanged();
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2068f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    void sendResizeEvent();
2078f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    void sendScrollEvent();
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2095e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#if PLATFORM(MAC) && defined(__OBJC__)
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PassRefPtr<KeyboardEvent> currentKeyboardEvent() const;
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2125f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    void mouseDown(NSEvent *);
2135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    void mouseDragged(NSEvent *);
2145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    void mouseUp(NSEvent *);
2155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    void mouseMoved(NSEvent *);
2165f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    bool keyEvent(NSEvent *);
2175f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    bool wheelEvent(NSEvent *);
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
219231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(CONTEXT_MENUS)
2205f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    bool sendContextMenuEvent(NSEvent *);
221231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
2225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    bool eventMayStartDrag(NSEvent *);
2235f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
2245f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    void sendFakeEventsAfterWidgetTracking(NSEvent *initiatingEvent);
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setActivationEventNumber(int num) { m_activationEventNumber = num; }
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2285f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    static NSEvent *currentNSEvent();
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
231f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch#if ENABLE(TOUCH_EVENTS)
232f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch    bool handleTouchEvent(const PlatformTouchEvent&);
2336fbaea61d241814b015fd7e022796e68d8ef3e8eBen Murdoch#if PLATFORM(ANDROID)
2346fbaea61d241814b015fd7e022796e68d8ef3e8eBen Murdoch    void setCapturingTouchEventsNode(PassRefPtr<Node>);
2356fbaea61d241814b015fd7e022796e68d8ef3e8eBen Murdoch#endif
236f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch#endif
237f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch
23881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    static bool isKeyboardOptionTab(KeyboardEvent*);
23981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
241231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT)
242643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    enum DragAndDropHandleType {
243643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        UpdateDragAndDrop,
244643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        CancelDragAndDrop,
245643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        PerformDragAndDrop
246643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    };
247643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
248ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    struct EventHandlerDragState {
249ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        WTF_MAKE_NONCOPYABLE(EventHandlerDragState); WTF_MAKE_FAST_ALLOCATED;
250ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    public:
251ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        EventHandlerDragState() { }
2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        RefPtr<Node> m_dragSrc; // element that may be a drag source, for the current mouse gesture
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_dragSrcIsLink;
2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_dragSrcIsImage;
2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_dragSrcInSelection;
2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_dragSrcMayBeDHTML;
2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_dragSrcMayBeUA; // Are DHTML and/or the UserAgent allowed to drag out?
2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_dragSrcIsDHTML;
2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        RefPtr<Clipboard> m_dragClipboard; // used on only the source side of dragging
2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static EventHandlerDragState& dragState();
2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static const double TextDragDelay;
263643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
264643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool canHandleDragAndDropForTarget(DragAndDropHandleType, Node* target, const PlatformMouseEvent&, Clipboard*, bool* accepted = 0);
2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PassRefPtr<Clipboard> createDraggingClipboard() const;
267231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif // ENABLE(DRAG_SUPPORT)
2682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool eventActivatedView(const PlatformMouseEvent&) const;
2705f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    void selectClosestWordFromMouseEvent(const MouseEventWithHitTestResults&);
2715f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    void selectClosestWordOrLinkFromMouseEvent(const MouseEventWithHitTestResults&);
2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool handleMouseDoubleClickEvent(const PlatformMouseEvent&);
2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    static Node* targetNode(const MouseEventWithHitTestResults&);
2762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    static Node* targetNode(const HitTestResult&);
2772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool handleMousePressEvent(const MouseEventWithHitTestResults&);
2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool handleMousePressEventSingleClick(const MouseEventWithHitTestResults&);
2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool handleMousePressEventDoubleClick(const MouseEventWithHitTestResults&);
2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool handleMousePressEventTripleClick(const MouseEventWithHitTestResults&);
282231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT)
2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool handleMouseDraggedEvent(const MouseEventWithHitTestResults&);
284231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool handleMouseReleaseEvent(const MouseEventWithHitTestResults&);
2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void handleKeyboardSelectionMovement(KeyboardEvent*);
2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Cursor selectCursor(const MouseEventWithHitTestResults&, Scrollbar*);
2908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if ENABLE(PAN_SCROLLING)
2910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updatePanScrollState();
2928f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif
2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void hoverTimerFired(Timer<EventHandler>*);
2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static bool canMouseDownStartSelect(Node*);
297231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT)
2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static bool canMouseDragExtendSelect(Node*);
299231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void handleAutoscroll(RenderObject*);
3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void startAutoscrollTimer();
3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setAutoscrollRenderer(RenderObject*);
3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void autoscrollTimerFired(Timer<EventHandler>*);
3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
306dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void fakeMouseMoveEventTimerFired(Timer<EventHandler>*);
307dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void cancelFakeMouseMoveEvent();
308dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void invalidateClick();
3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Node* nodeUnderMouse() const;
3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void updateMouseEventTargetNode(Node*, const PlatformMouseEvent&, bool fireMouseOverOut);
3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void fireMouseOverOut(bool fireMouseOver = true, bool fireMouseOut = true, bool updateLastNodeUnderMouse = true);
3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    MouseEventWithHitTestResults prepareMouseEvent(const HitTestRequest&, const PlatformMouseEvent&);
3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool dispatchMouseEvent(const AtomicString& eventType, Node* target, bool cancelable, int clickCount, const PlatformMouseEvent&, bool setUnder);
319231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT)
3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool dispatchDragEvent(const AtomicString& eventType, Node* target, const PlatformMouseEvent&, Clipboard*);
3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void freeClipboard();
3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool handleDrag(const MouseEventWithHitTestResults&);
325231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool handleMouseUp(const MouseEventWithHitTestResults&);
327231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT)
3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void clearDragState();
3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool dispatchDragSrcEvent(const AtomicString& eventType, const PlatformMouseEvent&);
3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool dragHysteresisExceeded(const FloatPoint&) const;
3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool dragHysteresisExceeded(const IntPoint&) const;
334231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif // ENABLE(DRAG_SUPPORT)
3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool passMousePressEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe);
3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool passMouseMoveEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe, HitTestResult* hoveredNode = 0);
3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool passMouseReleaseEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe);
3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool passSubframeEventToSubframe(MouseEventWithHitTestResults&, Frame* subframe, HitTestResult* hoveredNode = 0);
3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool passMousePressEventToScrollbar(MouseEventWithHitTestResults&, Scrollbar*);
3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool passWidgetMouseDownEventToWidget(const MouseEventWithHitTestResults&);
3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool passWidgetMouseDownEventToWidget(RenderWidget*);
3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool passMouseDownEventToWidget(Widget*);
3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool passWheelEventToWidget(PlatformWheelEvent&, Widget*);
3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
350635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    void defaultSpaceEventHandler(KeyboardEvent*);
3512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void defaultBackspaceEventHandler(KeyboardEvent*);
3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void defaultTabEventHandler(KeyboardEvent*);
353dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void defaultArrowEventHandler(FocusDirection, KeyboardEvent*);
3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
355231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT)
3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void allowDHTMLDrag(bool& flagDHTML, bool& flagUA) const;
357231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // The following are called at the beginning of handleMouseUp and handleDrag.
3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // If they return true it indicates that they have consumed the event.
3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool eventLoopHandleMouseUp(const MouseEventWithHitTestResults&);
362231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT)
3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool eventLoopHandleMouseDragged(const MouseEventWithHitTestResults&);
364231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
366231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT)
3672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void updateSelectionForMouseDrag(const HitTestResult&);
368231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void updateLastScrollbarUnderMouse(Scrollbar*, bool);
371231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
372231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    void setFrameWasScrolledByUser();
3730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
374dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    FocusDirection focusDirectionForKey(const AtomicString&) const;
375dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
3768f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    bool capturesDragging() const { return m_capturesDragging; }
3778f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
37821939df44de1705786c545cd1bf519d47250322dBen Murdoch#if PLATFORM(MAC) && defined(__OBJC__)
3795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    NSView *mouseDownViewIfStillGood();
3805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
3815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    PlatformMouseEvent currentPlatformMouseEvent() const;
3825f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#endif
3835f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Frame* m_frame;
3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_mousePressed;
3878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    bool m_capturesDragging;
3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<Node> m_mousePressNode;
3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_mouseDownMayStartSelect;
391231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT)
3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_mouseDownMayStartDrag;
393231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_mouseDownWasSingleClickInSelection;
3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_beganSelectingText;
3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
397231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT)
3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    IntPoint m_dragStartPos;
399231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    IntPoint m_panScrollStartPos;
4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_panScrollInProgress;
4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool m_panScrollButtonPressed;
4050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool m_springLoadedPanScrollInProgress;
4060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Timer<EventHandler> m_hoverTimer;
4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Timer<EventHandler> m_autoscrollTimer;
4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RenderObject* m_autoscrollRenderer;
4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_autoscrollInProgress;
4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_mouseDownMayStartAutoscroll;
4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_mouseDownWasInSubframe;
4145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
415dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    Timer<EventHandler> m_fakeMouseMoveEventTimer;
416dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG)
4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_svgPan;
4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<SVGElementInstance> m_instanceUnderMouse;
4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<SVGElementInstance> m_lastInstanceUnderMouse;
4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RenderLayer* m_resizeLayer;
4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<Node> m_capturingMouseEventsNode;
4265af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    bool m_eventHandlerWillResetCapturingMouseEventsNode;
4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<Node> m_nodeUnderMouse;
4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<Node> m_lastNodeUnderMouse;
4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<Frame> m_lastMouseMoveEventSubframe;
4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<Scrollbar> m_lastScrollbarUnderMouse;
4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int m_clickCount;
4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<Node> m_clickNode;
4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
436231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT)
4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<Node> m_dragTarget;
438643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    bool m_shouldOnlyFireDragOverEvent;
439231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RefPtr<HTMLFrameSetElement> m_frameSetBeingResized;
4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
443635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    IntSize m_offsetFromResizeCorner;   // in the coords of m_resizeLayer
4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    IntPoint m_currentMousePosition;
4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    IntPoint m_mouseDownPos; // in our view's coords
4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    double m_mouseDownTimestamp;
4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PlatformMouseEvent m_mouseDown;
4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool m_useLatchedWheelEventNode;
4510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    RefPtr<Node> m_latchedWheelEventNode;
4520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool m_widgetIsLatched;
453231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
454231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    RefPtr<Node> m_previousWheelScrolledNode;
455231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
4565e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#if PLATFORM(MAC)
4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NSView *m_mouseDownView;
4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_sendingEventToSubview;
4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int m_activationEventNumber;
4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
461f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch#if ENABLE(TOUCH_EVENTS)
462885493cb204540cc0d918892ef5d4ba2b8285766Ben Murdoch    typedef HashMap<int, RefPtr<EventTarget> > TouchTargetMap;
463885493cb204540cc0d918892ef5d4ba2b8285766Ben Murdoch    TouchTargetMap m_originatingTouchPointTargets;
464967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    bool m_touchPressed;
4656fbaea61d241814b015fd7e022796e68d8ef3e8eBen Murdoch#if PLATFORM(ANDROID)
4666fbaea61d241814b015fd7e022796e68d8ef3e8eBen Murdoch    RefPtr<Node> m_capturingTouchEventsNode;
4676fbaea61d241814b015fd7e022796e68d8ef3e8eBen Murdoch#endif
468f5306da72ab6bb63f7ae07371e687f72a75c2fb2Ben Murdoch#endif
4692bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(GESTURE_RECOGNIZER)
4702bde8e466a4451c7319e3a072d118917957d6554Steve Block    OwnPtr<PlatformGestureRecognizer> m_gestureRecognizer;
4712bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // EventHandler_h
477