aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@qt.io>2022-08-15 13:52:56 +0200
committerShawn Rutledge <shawn.rutledge@qt.io>2022-10-23 18:42:07 +0200
commit1d1e590078b16b7ff4ea579535a75422201f8a57 (patch)
treece112ebe58860d7d850e4ee20739317c9d2eb00c
parent25ab62cce578d50ad7310ffe42b49a5921a8a8c7 (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.qml11
-rw-r--r--tests/auto/quickcontrols2/pointerhandlers/tst_pointerhandlers.cpp73
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"