diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2022-08-15 13:52:56 +0200 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2022-10-23 18:42:07 +0200 |
commit | 1d1e590078b16b7ff4ea579535a75422201f8a57 (patch) | |
tree | ce112ebe58860d7d850e4ee20739317c9d2eb00c | |
parent | 25ab62cce578d50ad7310ffe42b49a5921a8a8c7 (diff) |
Add interop test with DragHandler on Button
It's possible to drag a control by adding a DragHandler to it. After
68dc224920ddf3aeb67a87d9b983107a88fd7974 it works again as in 5.15.
Fixes: QTBUG-105610
Change-Id: I0e3bd3891e9c80b361c89a2127ccb9b7d4bb248a
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
(cherry picked from commit f74db4579edd62d2d092bffc098b5a06ac572462)
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
-rw-r--r-- | tests/auto/quickcontrols2/pointerhandlers/data/draggableButton.qml | 11 | ||||
-rw-r--r-- | tests/auto/quickcontrols2/pointerhandlers/tst_pointerhandlers.cpp | 73 |
2 files changed, 84 insertions, 0 deletions
diff --git a/tests/auto/quickcontrols2/pointerhandlers/data/draggableButton.qml b/tests/auto/quickcontrols2/pointerhandlers/data/draggableButton.qml new file mode 100644 index 0000000000..ca0c4263b1 --- /dev/null +++ b/tests/auto/quickcontrols2/pointerhandlers/data/draggableButton.qml @@ -0,0 +1,11 @@ +import QtQuick +import QtQuick.Controls + +Rectangle { + width: 150; height: 150 + Button { + text: "Drag me" + width: 150 // workaround for QTBUG-104954 + DragHandler { } + } +} diff --git a/tests/auto/quickcontrols2/pointerhandlers/tst_pointerhandlers.cpp b/tests/auto/quickcontrols2/pointerhandlers/tst_pointerhandlers.cpp index a51d667ebc..ffb57718e3 100644 --- a/tests/auto/quickcontrols2/pointerhandlers/tst_pointerhandlers.cpp +++ b/tests/auto/quickcontrols2/pointerhandlers/tst_pointerhandlers.cpp @@ -6,6 +6,7 @@ #include <QtQuick/qquickview.h> #include <QtQuick/private/qquickmousearea_p.h> +#include <QtQuick/private/qquickpointerhandler_p.h> #include <QtQuick/private/qquicktaphandler_p.h> #include <QtQml/qqmlengine.h> @@ -36,6 +37,8 @@ private slots: void hover_controlAndMouseArea(); void buttonTapHandler_data(); void buttonTapHandler(); + void buttonDragHandler_data(); + void buttonDragHandler(); private: QScopedPointer<QPointingDevice> touchscreen = QScopedPointer<QPointingDevice>(QTest::createTouchDevice()); @@ -216,6 +219,76 @@ void tst_pointerhandlers::buttonTapHandler() // QTBUG-105609 QCOMPARE(handler->isPressed(), false); } +void tst_pointerhandlers::buttonDragHandler_data() +{ + QTest::addColumn<QPointingDevice::DeviceType>("deviceType"); + + QTest::newRow("mouse") << QPointingDevice::DeviceType::Mouse; + QTest::newRow("touch") << QPointingDevice::DeviceType::TouchScreen; +} + +void tst_pointerhandlers::buttonDragHandler() // QTBUG-105610 +{ + QFETCH(QPointingDevice::DeviceType, deviceType); + + QQuickView window; + QVERIFY(QQuickTest::showView(window, testFileUrl("draggableButton.qml"))); + + const int dragThreshold = QGuiApplication::styleHints()->startDragDistance(); + + QPointer<QQuickPointerHandler> handler = window.rootObject()->findChild<QQuickPointerHandler*>(); + QVERIFY(handler); + QQuickItem *target = handler->target(); + QVERIFY(target); + QSignalSpy clickedSpy(target, SIGNAL(clicked())); + + QPoint dragPos(10, 10); + switch (static_cast<QPointingDevice::DeviceType>(deviceType)) { + case QPointingDevice::DeviceType::Mouse: + // click it + QTest::mouseClick(&window, Qt::LeftButton, Qt::NoModifier, dragPos); + QTRY_COMPARE(clickedSpy.count(), 1); + + // drag it + QTest::mousePress(&window, Qt::LeftButton, Qt::NoModifier, dragPos); + dragPos += QPoint(dragThreshold, dragThreshold); + QTest::mouseMove(&window, dragPos); + dragPos += QPoint(1, 1); + QTest::mouseMove(&window, dragPos); + qCDebug(lcPointerTests) << handler << "dragged" << target << "to" << target->position(); + QTRY_VERIFY(handler->active()); + QTest::mouseRelease(&window, Qt::LeftButton, Qt::NoModifier, dragPos); + break; + + case QPointingDevice::DeviceType::TouchScreen: { + QTest::QTouchEventSequence touch = QTest::touchEvent(&window, touchscreen.data()); + + // tap it + touch.press(0, dragPos, &window).commit(); + touch.release(0, dragPos, &window).commit(); + QTRY_COMPARE(clickedSpy.count(), 1); + + // drag it + touch.press(0, dragPos, &window).commit(); + dragPos += QPoint(dragThreshold, dragThreshold); + touch.move(0, dragPos, &window).commit(); + dragPos += QPoint(1, 1); + touch.move(0, dragPos, &window).commit(); + qCDebug(lcPointerTests) << handler << "dragged" << target << "to" << target->position(); + QTRY_VERIFY(handler->active()); + touch.release(0, dragPos, &window).commit(); + break; + } + default: + break; + } + QTRY_COMPARE(handler->active(), false); + + // click it again + QTest::mouseClick(&window, Qt::LeftButton, Qt::NoModifier, dragPos); + QTRY_COMPARE(clickedSpy.count(), 2); +} + QTEST_MAIN(tst_pointerhandlers) #include "tst_pointerhandlers.moc" |