summaryrefslogtreecommitdiffstats
path: root/WebCore/page
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/page')
-rw-r--r--WebCore/page/EventHandler.cpp21
-rw-r--r--WebCore/page/EventHandler.h8
2 files changed, 22 insertions, 7 deletions
diff --git a/WebCore/page/EventHandler.cpp b/WebCore/page/EventHandler.cpp
index 51cf675..2563149 100644
--- a/WebCore/page/EventHandler.cpp
+++ b/WebCore/page/EventHandler.cpp
@@ -2595,6 +2595,20 @@ bool EventHandler::handleTouchEvent(const PlatformTouchEvent& event)
int adjustedPageX = lroundf(pagePoint.x() / m_frame->pageZoomFactor());
int adjustedPageY = lroundf(pagePoint.y() / m_frame->pageZoomFactor());
+ // ANDROID
+ // The touch event should act on the originating touch target, not the current target
+ // TODO: Upstream this fix to webkit.org (see webkit bug 34585)
+ int touchPointId = point.id();
+ if (point.state() == PlatformTouchPoint::TouchPressed)
+ m_originatingTouchPointTargets.set(touchPointId, target);
+
+ EventTarget* touchTarget = m_originatingTouchPointTargets.get(touchPointId).get();
+ ASSERT(touchTarget);
+
+ RefPtr<Touch> touch = Touch::create(doc->frame(), touchTarget, touchPointId,
+ point.screenPos().x(), point.screenPos().y(),
+ adjustedPageX, adjustedPageY);
+
if ((event.type() == TouchStart
#if PLATFORM(ANDROID)
|| event.type() == TouchDoubleTap
@@ -2606,13 +2620,6 @@ bool EventHandler::handleTouchEvent(const PlatformTouchEvent& event)
m_firstTouchPagePos = pagePoint;
}
- // ANDROID
- // The touch event should act on m_touchEventTarget, not target
- // TODO: Upstream this fix to webkit.org
- RefPtr<Touch> touch = Touch::create(doc->frame(), m_touchEventTarget.get(), point.id(),
- point.screenPos().x(), point.screenPos().y(),
- adjustedPageX, adjustedPageY);
-
if (point.state() == PlatformTouchPoint::TouchReleased)
releasedTouches->append(touch);
else if (point.state() == PlatformTouchPoint::TouchCancelled)
diff --git a/WebCore/page/EventHandler.h b/WebCore/page/EventHandler.h
index 861dce9..e871f61 100644
--- a/WebCore/page/EventHandler.h
+++ b/WebCore/page/EventHandler.h
@@ -37,12 +37,17 @@
class NSView;
#endif
+#if ENABLE(TOUCH_EVENTS) // ANDROID addition, needs to be upstreamed. (see webkit bug 34585)
+#include <wtf/HashMap.h>
+#endif
+
namespace WebCore {
class AtomicString;
class Clipboard;
class Cursor;
class Event;
+class EventTarget;
class FloatPoint;
class Frame;
class HitTestRequest;
@@ -423,6 +428,9 @@ private:
int m_activationEventNumber;
#endif
#if ENABLE(TOUCH_EVENTS)
+ // ANDROID fix to be upstreamed, see webkit bug 34585.
+ typedef HashMap<int, RefPtr<EventTarget> > TouchTargetMap;
+ TouchTargetMap m_originatingTouchPointTargets;
RefPtr<Node> m_touchEventTarget;
IntPoint m_firstTouchScreenPos;
IntPoint m_firstTouchPagePos;