summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/render_widget_host_view_qt.cpp14
-rw-r--r--src/core/render_widget_host_view_qt.h2
-rw-r--r--src/core/web_event_factory.cpp2
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp32
4 files changed, 43 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;
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
index 331c15ab8..4d073e94c 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
@@ -205,6 +205,7 @@ private Q_SLOTS:
void toPlainTextLoadFinishedRace();
void setZoomFactor();
void mouseButtonTranslation();
+ void mouseMovementProperties();
void printToPdf();
void viewSource();
@@ -4754,6 +4755,37 @@ void tst_QWebEnginePage::mouseButtonTranslation()
QCOMPARE(evaluateJavaScriptSync(view.page(), "lastEvent.buttons").toInt(), 3);
}
+void tst_QWebEnginePage::mouseMovementProperties()
+{
+ QWebEngineView view;
+ ConsolePage page;
+ view.setPage(&page);
+ view.show();
+ QTest::qWaitForWindowExposed(&view);
+
+ QSignalSpy loadFinishedSpy(&page, SIGNAL(loadFinished(bool)));
+ page.setHtml(QStringLiteral(
+ "<html><head><script>\
+ function onMouseMove(event) { console.log(event.movementX + \", \" + event.movementY); }; \
+ </script></head>\
+ <body>\
+ <div style=\"height:600px;\" onmousemove=\"onMouseMove(event)\">\
+ </div>\
+ </body></html>"));
+ loadFinishedSpy.wait();
+
+ QTest::mouseMove(&view, QPoint(20, 20));
+ QTRY_COMPARE(page.messages.count(), 1);
+
+ QTest::mouseMove(&view, QPoint(30, 30));
+ QTRY_COMPARE(page.messages.count(), 2);
+ QTRY_COMPARE(page.messages[1], QString("10, 10"));
+
+ QTest::mouseMove(&view, QPoint(20, 20));
+ QTRY_COMPARE(page.messages.count(), 3);
+ QTRY_COMPARE(page.messages[2], QString("-10, -10"));
+}
+
QPoint tst_QWebEnginePage::elementCenter(QWebEnginePage *page, const QString &id)
{
QVariantList rectList = evaluateJavaScriptSync(page,