summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndras Becsi <andras.becsi@digia.com>2014-02-19 14:04:28 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-19 16:58:57 +0100
commitc00319052b7dafd76ea400a022afb15d4746453e (patch)
tree46d7e68e00568817b621da855bb48d9b7a8937cc /src
parent548c7eb37456c13fa16ca286016434cdcbdcf96a (diff)
Cancel ongoing "fling" animations on tap-down
Synthesize WebGestureEvent::GestureFlingCancel on if we receive a WebGestureEvent::GestureTapDown to stop the ongoing scroll animation. Change-Id: I5b500ebbde815a54a466736492c2b5781f5ef91e Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/render_widget_host_view_qt.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp
index 677f3cf11..3938b2a21 100644
--- a/src/core/render_widget_host_view_qt.cpp
+++ b/src/core/render_widget_host_view_qt.cpp
@@ -138,6 +138,15 @@ static void UpdateWebTouchEventAfterDispatch(WebKit::WebTouchEvent* event, WebKi
}
}
+static WebKit::WebGestureEvent createFlingCancelEvent(double time_stamp)
+{
+ WebKit::WebGestureEvent gesture_event;
+ gesture_event.timeStampSeconds = time_stamp;
+ gesture_event.type = WebKit::WebGestureEvent::GestureFlingCancel;
+ gesture_event.sourceDevice = WebKit::WebGestureEvent::Touchscreen;
+ return gesture_event;
+}
+
RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost* widget)
: m_host(content::RenderWidgetHostImpl::From(widget))
, m_gestureRecognizer(ui::GestureRecognizer::Create(this))
@@ -784,11 +793,18 @@ void RenderWidgetHostViewQt::ProcessGestures(ui::GestureRecognizer::Gestures *ge
for (ui::GestureRecognizer::Gestures::iterator g_it = gestures->begin(); g_it != gestures->end(); ++g_it) {
const ui::GestureEvent &uiGestureEvent = **g_it;
WebKit::WebGestureEvent webGestureEvent = content::MakeWebGestureEventFromUIEvent(uiGestureEvent);
- if (webGestureEvent.type != WebKit::WebInputEvent::Undefined) {
- webGestureEvent.x = uiGestureEvent.x();
- webGestureEvent.y = uiGestureEvent.y();
- m_host->ForwardGestureEvent(webGestureEvent);
+ if (webGestureEvent.type == WebKit::WebInputEvent::Undefined)
+ continue;
+
+ if (webGestureEvent.type == WebKit::WebGestureEvent::GestureTapDown) {
+ // Chromium does not stop a fling-scroll on tap-down.
+ // So explicitly send an event to stop any in-progress flings.
+ m_host->ForwardGestureEvent(createFlingCancelEvent(uiGestureEvent.time_stamp().InSecondsF()));
}
+
+ webGestureEvent.x = uiGestureEvent.x();
+ webGestureEvent.y = uiGestureEvent.y();
+ m_host->ForwardGestureEvent(webGestureEvent);
}
}