summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/dom/EventTarget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/dom/EventTarget.cpp')
-rw-r--r--Source/WebCore/dom/EventTarget.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/Source/WebCore/dom/EventTarget.cpp b/Source/WebCore/dom/EventTarget.cpp
index d84d66b..c9cece2 100644
--- a/Source/WebCore/dom/EventTarget.cpp
+++ b/Source/WebCore/dom/EventTarget.cpp
@@ -326,6 +326,16 @@ bool EventTarget::fireEventListeners(Event* event)
EventListenerMap::iterator result = d->eventListenerMap.find(event->type());
if (result != d->eventListenerMap.end())
fireEventListeners(event, d, *result->second);
+
+#if ENABLE(TOUCH_EVENTS) && PLATFORM(ANDROID)
+ if (event->isTouchEvent() && !event->hitTouchHandler()) {
+ // Check for touchmove or touchend to see if we can skip
+ // the rest of the stream (we always get touchstart, don't need to check that)
+ if (d->eventListenerMap.contains(eventNames().touchmoveEvent)
+ || d->eventListenerMap.contains(eventNames().touchendEvent))
+ event->setHitTouchHandler();
+ }
+#endif
return !event->defaultPrevented();
}
@@ -334,6 +344,11 @@ void EventTarget::fireEventListeners(Event* event, EventTargetData* d, EventList
{
RefPtr<EventTarget> protect = this;
+#if ENABLE(TOUCH_EVENTS) && PLATFORM(ANDROID)
+ if (event->isTouchEvent())
+ event->setHitTouchHandler();
+#endif
+
// Fire all listeners registered for this event. Don't fire listeners removed
// during event dispatch. Also, don't fire event listeners added during event
// dispatch. Conveniently, all new event listeners will be added after 'end',