summaryrefslogtreecommitdiff
path: root/Source/WebKit/chromium/src/WebViewImpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit/chromium/src/WebViewImpl.cpp')
-rw-r--r--Source/WebKit/chromium/src/WebViewImpl.cpp60
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;
}