Chromium Code Reviews| 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) |