diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2021-12-07 23:02:03 +0100 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2021-12-11 00:51:10 +0100 |
commit | 9da1f6b6080b667f7e879f953441b713ccff656b (patch) | |
tree | ac3bde4f50f599cec222126418e8423deb6f8f74 /tests | |
parent | 4229de1685dd0a671f332faf7bfed3ffe5cd8a87 (diff) |
Fix widget gesture grabbing
After 7369c31ca1f446e81eda1c93ba13767ffcd83efe, unaccepted touch points
were not grabbed anymore in calls to activateImplicitTouchGrab. However,
gesture recognition relies that widgets for which a gesture has been
partially recognized grab also unaccepted touch points.
Add a parameter to allow the implicit grabbing to take place also for
unaccepted event points.
Add test case that replays touch events similar to what Squish is doing,
and fails without this fix.
Pick-to: 6.2
Change-Id: Idb0b20301b1827be57a03013a59043d97c2ee7b6
Reviewed-by: Stefan Gehn <stefan.gehn@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/widgets/kernel/qgesturerecognizer/tst_qgesturerecognizer.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/auto/widgets/kernel/qgesturerecognizer/tst_qgesturerecognizer.cpp b/tests/auto/widgets/kernel/qgesturerecognizer/tst_qgesturerecognizer.cpp index b65f6a5ff6..9687601158 100644 --- a/tests/auto/widgets/kernel/qgesturerecognizer/tst_qgesturerecognizer.cpp +++ b/tests/auto/widgets/kernel/qgesturerecognizer/tst_qgesturerecognizer.cpp @@ -53,6 +53,7 @@ private Q_SLOTS: void pinchGesture(); void swipeGesture_data(); void swipeGesture(); + void touchReplay(); #endif // !QT_NO_GESTURES private: @@ -326,6 +327,25 @@ void tst_QGestureRecognizer::swipeGesture() } } +void tst_QGestureRecognizer::touchReplay() +{ + const Qt::GestureType gestureType = Qt::TapGesture; + QWidget parent; + TestWidget widget(GestureTypeVector(1, gestureType)); + widget.setParent(&parent); + widget.setGeometry(0, 0, 100, 100); + parent.adjustSize(); + parent.show(); + QVERIFY(QTest::qWaitForWindowActive(&parent)); + + QWindow* windowHandle = parent.window()->windowHandle(); + const QPoint globalPos = QPoint(42, 16); + QTest::touchEvent(windowHandle, m_touchDevice).press(1, globalPos); + QTest::touchEvent(windowHandle, m_touchDevice).release(1, globalPos); + + QVERIFY(widget.gestureReceived(gestureType)); +} + #endif // !QT_NO_GESTURES QTEST_MAIN(tst_QGestureRecognizer) |