Index: Source/WebCore/page/EventHandler.cpp |
diff --git a/Source/WebCore/page/EventHandler.cpp b/Source/WebCore/page/EventHandler.cpp |
index 603804f04a8863f1c31f72a769c775bee29c0bc2..8dba44f15ded101005bcefbad9e9cd801a34bf66 100644 |
--- a/Source/WebCore/page/EventHandler.cpp |
+++ b/Source/WebCore/page/EventHandler.cpp |
@@ -2476,61 +2476,79 @@ bool EventHandler::handleGestureTap(const PlatformGestureEvent& gestureEvent) |
bool EventHandler::handleGestureLongPress(const PlatformGestureEvent& gestureEvent) |
{ |
- if (m_frame->settings() && m_frame->settings()->touchDragDropEnabled() && m_frame->view()) { |
- IntPoint adjustedPoint = gestureEvent.position(); |
+ IntPoint adjustedPoint = gestureEvent.position(); |
#if ENABLE(TOUCH_ADJUSTMENT) |
- adjustGesturePosition(gestureEvent, adjustedPoint); |
+ adjustGesturePosition(gestureEvent, adjustedPoint); |
#endif |
+ PlatformMouseEvent mouseDown(adjustedPoint, gestureEvent.globalPosition(), LeftButton, PlatformEvent::MousePressed, 1, |
+ gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey(), gestureEvent.timestamp()); |
+ HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::DisallowShadowContent); |
hayato
2013/04/17 04:51:03
Could we remove DisallowShadowContent from this Hi
varunjain
2013/04/17 17:45:36
I am not sure but wouldnt DisallowShadowContent st
|
+ MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDown); |
+ RefPtr<Frame> subframe = subframeForHitTestResult(mev); |
+ if (subframe && subframe->eventHandler()->handleGestureLongPress(gestureEvent)) |
+ return true; |
+ |
+ m_didLongPressInvokeContextMenu = true; |
+ if (m_frame->settings() && m_frame->settings()->touchDragDropEnabled() && m_frame->view()) { |
PlatformMouseEvent mouseDragEvent(adjustedPoint, gestureEvent.globalPosition(), LeftButton, PlatformEvent::MouseMoved, 1, |
gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey(), WTF::currentTime()); |
HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::DisallowShadowContent); |
MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDragEvent); |
m_didStartDrag = false; |
- RefPtr<Frame> subframe = subframeForHitTestResult(mev); |
- if (subframe && subframe->eventHandler()->handleGestureLongPress(gestureEvent)) |
- return true; |
m_mouseDownMayStartDrag = true; |
dragState().m_dragSrc = 0; |
m_mouseDownPos = m_frame->view()->windowToContents(mouseDragEvent.position()); |
handleDrag(mev, DontCheckDragHysteresis); |
- if (m_didStartDrag) |
+ if (m_didStartDrag) { |
+ m_didLongPressInvokeContextMenu = false; |
return true; |
+ } |
+ } |
+ bool shouldLongPressSelectWord = m_frame->settings() && m_frame->settings()->touchEditingEnabled(); |
hayato
2013/04/17 04:51:03
Line 2507 to 2510 could be merged into #IF .. #ELS
varunjain
2013/04/17 17:45:36
Done.
|
+#if OS(ANDROID) |
+ shouldLongPressSelectWord = true; |
+#endif |
+ if (shouldLongPressSelectWord) { |
+ IntPoint hitTestPoint = m_frame->view()->windowToContents(gestureEvent.position()); |
+ HitTestResult result = hitTestResultAtPoint(hitTestPoint, HitTestRequest::ReadOnly | HitTestRequest::Active); |
+ Node* innerNode = result.targetNode(); |
+ if (!result.isLiveLink() && innerNode && (innerNode->isContentEditable() || innerNode->isTextNode())) { |
+ selectClosestWordFromHitTestResult(result, DontAppendTrailingWhitespace); |
+ if (m_frame->selection()->isRange()) |
+ return true; |
+ } |
} |
- return handleGestureForTextSelectionOrContextMenu(gestureEvent); |
+#if ENABLE(CONTEXT_MENUS) |
+ return sendContextMenuEventForGesture(gestureEvent); |
+#else |
+ return false; |
+#endif |
} |
bool EventHandler::handleGestureLongTap(const PlatformGestureEvent& gestureEvent) |
hayato
2013/04/17 04:51:03
It's optional, but looks like we can share some of
varunjain
2013/04/17 17:45:36
Done.
|
{ |
+ IntPoint adjustedPoint = gestureEvent.position(); |
+#if ENABLE(TOUCH_ADJUSTMENT) |
+ adjustGesturePosition(gestureEvent, adjustedPoint); |
+#endif |
+ PlatformMouseEvent mouseDown(adjustedPoint, gestureEvent.globalPosition(), LeftButton, PlatformEvent::MousePressed, 1, |
+ gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey(), gestureEvent.timestamp()); |
+ HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::DisallowShadowContent); |
+ MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDown); |
+ RefPtr<Frame> subframe = subframeForHitTestResult(mev); |
+ if (subframe && subframe->eventHandler()->handleGestureLongTap(gestureEvent)) |
+ return true; |
#if ENABLE(CONTEXT_MENUS) && !OS(ANDROID) |
if (!m_didLongPressInvokeContextMenu) |
return sendContextMenuEventForGesture(gestureEvent); |
+ m_didLongPressInvokeContextMenu = true; |
#endif |
return false; |
} |
-bool EventHandler::handleGestureForTextSelectionOrContextMenu(const PlatformGestureEvent& gestureEvent) |
-{ |
-#if OS(ANDROID) |
- IntPoint hitTestPoint = m_frame->view()->windowToContents(gestureEvent.position()); |
- HitTestResult result = hitTestResultAtPoint(hitTestPoint, HitTestRequest::ReadOnly | HitTestRequest::Active); |
- Node* innerNode = result.targetNode(); |
- if (!result.isLiveLink() && innerNode && (innerNode->isContentEditable() || innerNode->isTextNode())) { |
- selectClosestWordFromHitTestResult(result, DontAppendTrailingWhitespace); |
- if (m_frame->selection()->isRange()) |
- return true; |
- } |
-#endif |
-#if ENABLE(CONTEXT_MENUS) |
- m_didLongPressInvokeContextMenu = (gestureEvent.type() == PlatformEvent::GestureLongPress); |
- return sendContextMenuEventForGesture(gestureEvent); |
-#else |
- return false; |
-#endif |
-} |
- |
bool EventHandler::handleGestureTwoFingerTap(const PlatformGestureEvent& gestureEvent) |
{ |
- return handleGestureForTextSelectionOrContextMenu(gestureEvent); |
+ return sendContextMenuEventForGesture(gestureEvent); |
} |
bool EventHandler::passGestureEventToWidget(const PlatformGestureEvent& gestureEvent, Widget* widget) |