summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/gui/kernel/qwindow/tst_qwindow.cpp')
-rw-r--r--tests/auto/gui/kernel/qwindow/tst_qwindow.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
index a365d21d36..f2754de929 100644
--- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
+++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
@@ -106,6 +106,7 @@ private slots:
void flags();
void cleanup();
void testBlockingWindowShownAfterModalDialog();
+ void generatedMouseMove();
private:
QPoint m_availableTopLeft;
@@ -918,6 +919,7 @@ public:
}
}
void mouseMoveEvent(QMouseEvent *event) {
+ buttonStateInGeneratedMove = event->buttons();
if (ignoreMouse) {
event->ignore();
} else {
@@ -999,6 +1001,7 @@ public:
bool ignoreMouse, ignoreTouch;
bool spinLoopWhenPressed;
+ Qt::MouseButtons buttonStateInGeneratedMove;
};
void tst_QWindow::testInputEvents()
@@ -2316,6 +2319,56 @@ void tst_QWindow::testBlockingWindowShownAfterModalDialog()
QVERIFY(normalWindowAfter.gotBlocked);
}
+void tst_QWindow::generatedMouseMove()
+{
+ InputTestWindow w;
+ w.setGeometry(QRect(m_availableTopLeft + QPoint(100, 100), m_testWindowSize));
+ w.show();
+ QVERIFY(QTest::qWaitForWindowActive(&w));
+ QPoint point(10, 10);
+ QPoint step(2, 2);
+
+ QVERIFY(w.mouseMovedCount == 0);
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::NoButton, Qt::NoButton, QEvent::MouseMove);
+ QCoreApplication::processEvents();
+ QVERIFY(w.mouseMovedCount == 1);
+ // Press that does not change position should not generate mouse move
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::LeftButton, Qt::LeftButton, QEvent::MouseButtonPress);
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::LeftButton | Qt::RightButton, Qt::RightButton, QEvent::MouseButtonPress);
+ QCoreApplication::processEvents();
+ QVERIFY(w.mouseMovedCount == 1);
+
+ // Test moves generated for mouse release
+ point += step;
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::RightButton, Qt::LeftButton, QEvent::MouseButtonRelease);
+ QCoreApplication::processEvents();
+ QVERIFY(w.mouseMovedCount == 2);
+ QVERIFY(w.buttonStateInGeneratedMove == (Qt::LeftButton | Qt::RightButton));
+ point += step;
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::NoButton, Qt::RightButton, QEvent::MouseButtonRelease);
+ QCoreApplication::processEvents();
+ QVERIFY(w.mouseMovedCount == 3);
+ QVERIFY(w.buttonStateInGeneratedMove == Qt::RightButton);
+
+ // Test moves generated for mouse press
+ point += step;
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::LeftButton, Qt::LeftButton, QEvent::MouseButtonPress);
+ QCoreApplication::processEvents();
+ QVERIFY(w.mouseMovedCount == 4);
+ QVERIFY(w.buttonStateInGeneratedMove == Qt::NoButton);
+ point += step;
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::LeftButton | Qt::RightButton, Qt::RightButton, QEvent::MouseButtonPress);
+ QCoreApplication::processEvents();
+ QVERIFY(w.mouseMovedCount == 5);
+ QVERIFY(w.buttonStateInGeneratedMove == Qt::LeftButton);
+
+ // Release that does not change position should not generate mouse move
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::LeftButton, Qt::RightButton, QEvent::MouseButtonRelease);
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::NoButton, Qt::LeftButton, QEvent::MouseButtonRelease);
+ QCoreApplication::processEvents();
+ QVERIFY(w.mouseMovedCount == 5);
+}
+
#include <tst_qwindow.moc>
QTEST_MAIN(tst_QWindow)