diff options
author | Szabolcs David <davidsz@inf.u-szeged.hu> | 2017-02-27 07:22:35 -0800 |
---|---|---|
committer | Tony Sarajärvi <tony.sarajarvi@qt.io> | 2017-03-24 11:01:49 +0000 |
commit | 3a463740b2026767b87662d70b9aa5a2c85115e5 (patch) | |
tree | 26edf9e21fb2c689021f4f75f46b3f33a14a66d3 /src/core | |
parent | 385eccbd607216d421f88c38951b00b922eeee50 (diff) |
Fix movementX and movementY properties of mouse events
Calculate movementX/movementY at every turn, not only when
the mouse is in locked state.
Task-number: QTBUG-59127
Change-Id: I362e055e6b5d6f831671604a093434373cedf19a
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/render_widget_host_view_qt.cpp | 14 | ||||
-rw-r--r-- | src/core/render_widget_host_view_qt.h | 2 | ||||
-rw-r--r-- | src/core/web_event_factory.cpp | 2 |
3 files changed, 11 insertions, 7 deletions
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index f1c69fca3..f96329139 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -422,7 +422,7 @@ void RenderWidgetHostViewQt::SetBackgroundColor(SkColor color) bool RenderWidgetHostViewQt::LockMouse() { mouse_locked_ = true; - m_lockedMousePosition = QCursor::pos(); + m_previousMousePosition = QCursor::pos(); m_delegate->lockMouse(); qApp->setOverrideCursor(Qt::BlankCursor); return true; @@ -938,11 +938,13 @@ void RenderWidgetHostViewQt::handleMouseEvent(QMouseEvent* event) m_clickHelper.lastPressPosition = QPointF(event->pos()).toPoint(); } - if (IsMouseLocked()) { - webEvent.movementX = -(m_lockedMousePosition.x() - event->globalX()); - webEvent.movementY = -(m_lockedMousePosition.y() - event->globalY()); - QCursor::setPos(m_lockedMousePosition); - } + webEvent.movementX = event->globalX() - m_previousMousePosition.x(); + webEvent.movementY = event->globalY() - m_previousMousePosition.y(); + + if (IsMouseLocked()) + QCursor::setPos(m_previousMousePosition); + else + m_previousMousePosition = event->globalPos(); if (m_imeInProgress && event->type() == QMouseEvent::MouseButtonPress) { m_imeInProgress = false; diff --git a/src/core/render_widget_host_view_qt.h b/src/core/render_widget_host_view_qt.h index 8871d88ce..1dae96a53 100644 --- a/src/core/render_widget_host_view_qt.h +++ b/src/core/render_widget_host_view_qt.h @@ -242,7 +242,7 @@ private: ui::TextInputType m_currentInputType; bool m_imeInProgress; bool m_receivedEmptyImeText; - QPoint m_lockedMousePosition; + QPoint m_previousMousePosition; bool m_initPending; diff --git a/src/core/web_event_factory.cpp b/src/core/web_event_factory.cpp index ff5cc99a8..2cd15aa58 100644 --- a/src/core/web_event_factory.cpp +++ b/src/core/web_event_factory.cpp @@ -1205,6 +1205,8 @@ WebMouseEvent WebEventFactory::toWebMouseEvent(QHoverEvent *ev, double dpiScale) webKitEvent.x = webKitEvent.windowX = ev->pos().x() / dpiScale; webKitEvent.y = webKitEvent.windowY = ev->pos().y() / dpiScale; + webKitEvent.movementX = ev->pos().x() - ev->oldPos().x(); + webKitEvent.movementY = ev->pos().y() - ev->oldPos().y(); webKitEvent.type = webEventTypeForEvent(ev); return webKitEvent; |