• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
4  *           (C) 2001 Dirk Mueller (mueller@kde.org)
5  * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
6  * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
7  * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
8  * Copyright (C) 2011 Google Inc. All rights reserved.
9  *
10  * This library is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Library General Public
12  * License as published by the Free Software Foundation; either
13  * version 2 of the License, or (at your option) any later version.
14  *
15  * This library is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18  * Library General Public License for more details.
19  *
20  * You should have received a copy of the GNU Library General Public License
21  * along with this library; see the file COPYING.LIB.  If not, write to
22  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
23  * Boston, MA 02110-1301, USA.
24  */
25 
26 #ifndef EventDispatcher_h
27 #define EventDispatcher_h
28 
29 #include <wtf/Forward.h>
30 #include <wtf/Vector.h>
31 
32 namespace WebCore {
33 
34 class Event;
35 class EventContext;
36 class EventDispatchMediator;
37 class EventTarget;
38 class FrameView;
39 class Node;
40 class PlatformKeyboardEvent;
41 class PlatformMouseEvent;
42 class PlatformWheelEvent;
43 
44 enum EventDispatchBehavior {
45     RetargetEvent,
46     StayInsideShadowDOM
47 };
48 
49 class EventDispatcher {
50 public:
51     static bool dispatchEvent(Node*, const EventDispatchMediator&);
52     static void dispatchScopedEvent(Node*, PassRefPtr<Event>);
53 
54     static void dispatchSimulatedClick(Node*, PassRefPtr<Event> underlyingEvent, bool sendMouseEvents, bool showPressedLook);
55 
56     bool dispatchEvent(PassRefPtr<Event>);
57     PassRefPtr<EventTarget> adjustRelatedTarget(Event*, PassRefPtr<EventTarget>);
58     Node* node() const;
59 
60 private:
61     EventDispatcher(Node*);
62 
63     PassRefPtr<EventTarget> adjustToShadowBoundaries(PassRefPtr<Node> relatedTarget, const Vector<Node*> relatedTargetAncestors);
64     EventDispatchBehavior determineDispatchBehavior(Event*);
65     void ensureEventAncestors(Event*);
66     const EventContext* topEventContext();
67 
68     Vector<EventContext> m_ancestors;
69     RefPtr<Node> m_node;
70     RefPtr<EventTarget> m_originalTarget;
71     RefPtr<FrameView> m_view;
72     bool m_ancestorsInitialized;
73 };
74 
node()75 inline Node* EventDispatcher::node() const
76 {
77     return m_node.get();
78 }
79 
80 }
81 
82 #endif
83