diff options
Diffstat (limited to 'Source/WebKit/chromium/src/WebViewImpl.cpp')
-rw-r--r-- | Source/WebKit/chromium/src/WebViewImpl.cpp | 60 |
1 files changed, 36 insertions, 24 deletions
diff --git a/Source/WebKit/chromium/src/WebViewImpl.cpp b/Source/WebKit/chromium/src/WebViewImpl.cpp index 97416e024..764ae6dca 100644 --- a/Source/WebKit/chromium/src/WebViewImpl.cpp +++ b/Source/WebKit/chromium/src/WebViewImpl.cpp @@ -682,6 +682,7 @@ void WebViewImpl::scrollBy(const WebCore::IntPoint& delta) #if ENABLE(GESTURE_EVENTS) bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event) { + bool eventSwallowed = false; switch (event.type) { case WebInputEvent::GestureFlingStart: { m_client->cancelScheduledContentIntents(); @@ -692,18 +693,21 @@ bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event) OwnPtr<PlatformGestureCurve> flingCurve = PlatformGestureCurveFactory::get()->createCurve(event.data.flingStart.sourceDevice, FloatPoint(event.data.flingStart.velocityX, event.data.flingStart.velocityY)); m_gestureAnimation = ActivePlatformGestureAnimation::create(flingCurve.release(), this); scheduleAnimation(); - return true; + eventSwallowed = true; + break; } case WebInputEvent::GestureFlingCancel: if (m_gestureAnimation) { m_gestureAnimation.clear(); - return true; + eventSwallowed = true; } - return false; + break; case WebInputEvent::GestureTap: { m_client->cancelScheduledContentIntents(); - if (detectContentOnTouch(WebPoint(event.x, event.y), event.type)) - return true; + if (detectContentOnTouch(WebPoint(event.x, event.y), event.type)) { + eventSwallowed = true; + break; + } RefPtr<WebCore::PopupContainer> selectPopup; selectPopup = m_selectPopup; @@ -716,12 +720,14 @@ bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event) findGoodTouchTargets(boundingBox, mainFrameImpl()->frame(), pageScaleFactor(), goodTargets); // FIXME: replace touch adjustment code when numberOfGoodTargets == 1? // Single candidate case is currently handled by: https://bugs.webkit.org/show_bug.cgi?id=85101 - if (goodTargets.size() >= 2 && m_client && m_client->didTapMultipleTargets(event, goodTargets)) - return true; + if (goodTargets.size() >= 2 && m_client && m_client->didTapMultipleTargets(event, goodTargets)) { + eventSwallowed = true; + break; + } } PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), event); - bool gestureHandled = mainFrameImpl()->frame()->eventHandler()->handleGestureEvent(platformEvent); + eventSwallowed = mainFrameImpl()->frame()->eventHandler()->handleGestureEvent(platformEvent); if (m_selectPopup && m_selectPopup == selectPopup) { // That tap triggered a select popup which is the same as the one that @@ -731,23 +737,26 @@ bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event) hideSelectPopup(); } - return gestureHandled; + break; } case WebInputEvent::GestureTwoFingerTap: case WebInputEvent::GestureLongPress: { if (!mainFrameImpl() || !mainFrameImpl()->frameView()) - return false; + break; m_client->cancelScheduledContentIntents(); - if (detectContentOnTouch(WebPoint(event.x, event.y), event.type)) - return true; + if (detectContentOnTouch(WebPoint(event.x, event.y), event.type)) { + eventSwallowed = true; + break; + } m_page->contextMenuController()->clearContextMenu(); m_contextMenuAllowed = true; PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), event); - bool handled = mainFrameImpl()->frame()->eventHandler()->sendContextMenuEventForGesture(platformEvent); + eventSwallowed = mainFrameImpl()->frame()->eventHandler()->sendContextMenuEventForGesture(platformEvent); m_contextMenuAllowed = false; - return handled; + + break; } case WebInputEvent::GestureTapDown: { m_client->cancelScheduledContentIntents(); @@ -757,7 +766,8 @@ bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event) enableTouchHighlight(IntPoint(event.x, event.y)); #endif PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), event); - return mainFrameImpl()->frame()->eventHandler()->handleGestureEvent(platformEvent); + eventSwallowed = mainFrameImpl()->frame()->eventHandler()->handleGestureEvent(platformEvent); + break; } case WebInputEvent::GestureDoubleTap: case WebInputEvent::GestureScrollBegin: @@ -769,12 +779,14 @@ bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event) case WebInputEvent::GesturePinchEnd: case WebInputEvent::GesturePinchUpdate: { PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), event); - return mainFrameImpl()->frame()->eventHandler()->handleGestureEvent(platformEvent); + eventSwallowed = mainFrameImpl()->frame()->eventHandler()->handleGestureEvent(platformEvent); + break; } default: ASSERT_NOT_REACHED(); } - return false; + m_client->didHandleGestureEvent(event, eventSwallowed); + return eventSwallowed; } void WebViewImpl::transferActiveWheelFlingAnimation(const WebActiveWheelFlingParameters& parameters) @@ -2223,7 +2235,7 @@ WebTextInputType WebViewImpl::textInputType() return WebTextInputTypeNone; } -bool WebViewImpl::selectionBounds(WebRect& start, WebRect& end) const +bool WebViewImpl::selectionBounds(WebRect& anchor, WebRect& focus) const { const Frame* frame = focusedWebCoreFrame(); if (!frame) @@ -2233,7 +2245,7 @@ bool WebViewImpl::selectionBounds(WebRect& start, WebRect& end) const return false; if (selection->isCaret()) { - start = end = frame->view()->contentsToWindow(selection->absoluteCaretBounds()); + anchor = focus = frame->view()->contentsToWindow(selection->absoluteCaretBounds()); return true; } @@ -2246,20 +2258,20 @@ bool WebViewImpl::selectionBounds(WebRect& start, WebRect& end) const selectedRange->startOffset(), selectedRange->startContainer(), selectedRange->startOffset())); - start = frame->editor()->firstRectForRange(range.get()); + anchor = frame->editor()->firstRectForRange(range.get()); range = Range::create(selectedRange->endContainer()->document(), selectedRange->endContainer(), selectedRange->endOffset(), selectedRange->endContainer(), selectedRange->endOffset()); - end = frame->editor()->firstRectForRange(range.get()); + focus = frame->editor()->firstRectForRange(range.get()); - start = frame->view()->contentsToWindow(start); - end = frame->view()->contentsToWindow(end); + anchor = frame->view()->contentsToWindow(anchor); + focus = frame->view()->contentsToWindow(focus); if (!frame->selection()->selection().isBaseFirst()) - std::swap(start, end); + std::swap(anchor, focus); return true; } |