diff options
author | Andras Becsi <andras.becsi@digia.com> | 2014-02-19 14:04:28 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-19 16:58:57 +0100 |
commit | c00319052b7dafd76ea400a022afb15d4746453e (patch) | |
tree | 46d7e68e00568817b621da855bb48d9b7a8937cc /src/core/render_widget_host_view_qt.cpp | |
parent | 548c7eb37456c13fa16ca286016434cdcbdcf96a (diff) | |
download | qtwebengine-c00319052b7dafd76ea400a022afb15d4746453e.tar.gz |
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/core/render_widget_host_view_qt.cpp')
-rw-r--r-- | src/core/render_widget_host_view_qt.cpp | 24 |
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); } } |