• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2001 Peter Kelly (pmk@post.com)
3  * Copyright (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de)
4  * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
5  * Copyright (C) 2003, 2005, 2006, 2008 Apple Inc. All rights reserved.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  */
22 
23 #include "config.h"
24 #include "core/events/Event.h"
25 
26 #include "core/dom/StaticNodeList.h"
27 #include "core/events/EventTarget.h"
28 #include "core/events/ThreadLocalEventNames.h"
29 #include "wtf/CurrentTime.h"
30 
31 namespace WebCore {
32 
EventInit()33 EventInit::EventInit()
34     : bubbles(false)
35     , cancelable(false)
36 {
37 }
38 
39 
Event()40 Event::Event()
41     : m_canBubble(false)
42     , m_cancelable(false)
43     , m_propagationStopped(false)
44     , m_immediatePropagationStopped(false)
45     , m_defaultPrevented(false)
46     , m_defaultHandled(false)
47     , m_cancelBubble(false)
48     , m_eventPhase(0)
49     , m_currentTarget(0)
50     , m_createTime(convertSecondsToDOMTimeStamp(currentTime()))
51     , m_eventPath(this)
52 {
53     ScriptWrappable::init(this);
54 }
55 
Event(const AtomicString & eventType,bool canBubbleArg,bool cancelableArg)56 Event::Event(const AtomicString& eventType, bool canBubbleArg, bool cancelableArg)
57     : m_type(eventType)
58     , m_canBubble(canBubbleArg)
59     , m_cancelable(cancelableArg)
60     , m_propagationStopped(false)
61     , m_immediatePropagationStopped(false)
62     , m_defaultPrevented(false)
63     , m_defaultHandled(false)
64     , m_cancelBubble(false)
65     , m_eventPhase(0)
66     , m_currentTarget(0)
67     , m_createTime(convertSecondsToDOMTimeStamp(currentTime()))
68     , m_eventPath(this)
69 {
70     ScriptWrappable::init(this);
71 }
72 
Event(const AtomicString & eventType,const EventInit & initializer)73 Event::Event(const AtomicString& eventType, const EventInit& initializer)
74     : m_type(eventType)
75     , m_canBubble(initializer.bubbles)
76     , m_cancelable(initializer.cancelable)
77     , m_propagationStopped(false)
78     , m_immediatePropagationStopped(false)
79     , m_defaultPrevented(false)
80     , m_defaultHandled(false)
81     , m_cancelBubble(false)
82     , m_eventPhase(0)
83     , m_currentTarget(0)
84     , m_createTime(convertSecondsToDOMTimeStamp(currentTime()))
85     , m_eventPath(this)
86 {
87     ScriptWrappable::init(this);
88 }
89 
~Event()90 Event::~Event()
91 {
92 }
93 
initEvent(const AtomicString & eventTypeArg,bool canBubbleArg,bool cancelableArg)94 void Event::initEvent(const AtomicString& eventTypeArg, bool canBubbleArg, bool cancelableArg)
95 {
96     if (dispatched())
97         return;
98 
99     m_propagationStopped = false;
100     m_immediatePropagationStopped = false;
101     m_defaultPrevented = false;
102 
103     m_type = eventTypeArg;
104     m_canBubble = canBubbleArg;
105     m_cancelable = cancelableArg;
106 }
107 
interfaceName() const108 const AtomicString& Event::interfaceName() const
109 {
110     return EventNames::Event;
111 }
112 
hasInterface(const AtomicString & name) const113 bool Event::hasInterface(const AtomicString& name) const
114 {
115     return interfaceName() == name;
116 }
117 
isUIEvent() const118 bool Event::isUIEvent() const
119 {
120     return false;
121 }
122 
isMouseEvent() const123 bool Event::isMouseEvent() const
124 {
125     return false;
126 }
127 
isFocusEvent() const128 bool Event::isFocusEvent() const
129 {
130     return false;
131 }
132 
isKeyboardEvent() const133 bool Event::isKeyboardEvent() const
134 {
135     return false;
136 }
137 
isTouchEvent() const138 bool Event::isTouchEvent() const
139 {
140     return false;
141 }
142 
isGestureEvent() const143 bool Event::isGestureEvent() const
144 {
145     return false;
146 }
147 
isWheelEvent() const148 bool Event::isWheelEvent() const
149 {
150     return false;
151 }
152 
isDragEvent() const153 bool Event::isDragEvent() const
154 {
155     return false;
156 }
157 
isClipboardEvent() const158 bool Event::isClipboardEvent() const
159 {
160     return false;
161 }
162 
isBeforeTextInsertedEvent() const163 bool Event::isBeforeTextInsertedEvent() const
164 {
165     return false;
166 }
167 
isBeforeUnloadEvent() const168 bool Event::isBeforeUnloadEvent() const
169 {
170     return false;
171 }
172 
setTarget(PassRefPtr<EventTarget> target)173 void Event::setTarget(PassRefPtr<EventTarget> target)
174 {
175     if (m_target == target)
176         return;
177 
178     m_target = target;
179     if (m_target)
180         receivedTarget();
181 }
182 
receivedTarget()183 void Event::receivedTarget()
184 {
185 }
186 
setUnderlyingEvent(PassRefPtr<Event> ue)187 void Event::setUnderlyingEvent(PassRefPtr<Event> ue)
188 {
189     // Prohibit creation of a cycle -- just do nothing in that case.
190     for (Event* e = ue.get(); e; e = e->underlyingEvent())
191         if (e == this)
192             return;
193     m_underlyingEvent = ue;
194 }
195 
path() const196 PassRefPtr<NodeList> Event::path() const
197 {
198     if (!m_currentTarget || !m_currentTarget->toNode())
199         return StaticNodeList::createEmpty();
200     Node* node = m_currentTarget->toNode();
201     size_t eventPathSize = m_eventPath.size();
202     for (size_t i = 0; i < eventPathSize; ++i) {
203         if (node == m_eventPath[i].node()) {
204             ASSERT(m_eventPath[i].eventPath());
205             return m_eventPath[i].eventPath();
206         }
207     }
208     return StaticNodeList::createEmpty();
209 }
210 
211 } // namespace WebCore
212