aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/pointerhandlers
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-12-09 01:01:09 +0100
committerUlf Hermann <ulf.hermann@qt.io>2019-12-09 12:22:24 +0000
commit8182a8044f3b9e6c25c3b50b1c7f34d2900a3207 (patch)
tree22489011cb506ada47b8a71d403d3f128bad4f10 /tests/auto/quick/pointerhandlers
parent3c4247e1e021b6bcc480afc0716e0231575d0501 (diff)
parent51e02fdc02c3cc2dbf9d2ba0b3fb709a6cd4e32e (diff)
Merge remote-tracking branch 'origin/5.14' into 5.15
Conflicts: src/qml/common/qv4compileddata_p.h Change-Id: I1150c8cd0161f0e22137d383013751394ae64e18
Diffstat (limited to 'tests/auto/quick/pointerhandlers')
-rw-r--r--tests/auto/quick/pointerhandlers/mousearea_interop/tst_mousearea_interop.cpp28
-rw-r--r--tests/auto/quick/pointerhandlers/qquicktaphandler/data/Button.qml1
-rw-r--r--tests/auto/quick/pointerhandlers/qquicktaphandler/tst_qquicktaphandler.cpp22
3 files changed, 46 insertions, 5 deletions
diff --git a/tests/auto/quick/pointerhandlers/mousearea_interop/tst_mousearea_interop.cpp b/tests/auto/quick/pointerhandlers/mousearea_interop/tst_mousearea_interop.cpp
index 03cff92f46..794562fea0 100644
--- a/tests/auto/quick/pointerhandlers/mousearea_interop/tst_mousearea_interop.cpp
+++ b/tests/auto/quick/pointerhandlers/mousearea_interop/tst_mousearea_interop.cpp
@@ -51,6 +51,7 @@ public:
private slots:
void dragHandlerInSiblingStealingGrabFromMouseAreaViaMouse();
+ void dragHandlerInSiblingStealingGrabFromMouseAreaViaTouch_data();
void dragHandlerInSiblingStealingGrabFromMouseAreaViaTouch();
private:
@@ -110,8 +111,18 @@ void tst_MouseAreaInterop::dragHandlerInSiblingStealingGrabFromMouseAreaViaMouse
QCOMPARE(handler->active(), false);
}
-void tst_MouseAreaInterop::dragHandlerInSiblingStealingGrabFromMouseAreaViaTouch() // QTBUG-77624
+void tst_MouseAreaInterop::dragHandlerInSiblingStealingGrabFromMouseAreaViaTouch_data()
{
+ QTest::addColumn<bool>("preventStealing");
+
+ QTest::newRow("allow stealing") << false;
+ QTest::newRow("prevent stealing") << true;
+}
+
+void tst_MouseAreaInterop::dragHandlerInSiblingStealingGrabFromMouseAreaViaTouch() // QTBUG-77624 and QTBUG-79163
+{
+ QFETCH(bool, preventStealing);
+
const int dragThreshold = QGuiApplication::styleHints()->startDragDistance();
QScopedPointer<QQuickView> windowPtr;
createView(windowPtr, "dragTakeOverFromSibling.qml");
@@ -122,6 +133,7 @@ void tst_MouseAreaInterop::dragHandlerInSiblingStealingGrabFromMouseAreaViaTouch
QVERIFY(handler);
QQuickMouseArea *ma = window->rootObject()->findChild<QQuickMouseArea*>();
QVERIFY(ma);
+ ma->setPreventStealing(preventStealing);
QPoint p1(150, 150);
QTest::QTouchEventSequence touch = QTest::touchEvent(window, touchDevice);
@@ -135,7 +147,7 @@ void tst_MouseAreaInterop::dragHandlerInSiblingStealingGrabFromMouseAreaViaTouch
// Start dragging
// DragHandler keeps monitoring, due to its passive grab,
- // and eventually steals the exclusive grab from MA
+ // and eventually steals the exclusive grab from MA if MA allows it
int dragStoleGrab = 0;
for (int i = 0; i < 4; ++i) {
p1 += QPoint(dragThreshold / 2, 0);
@@ -146,9 +158,15 @@ void tst_MouseAreaInterop::dragHandlerInSiblingStealingGrabFromMouseAreaViaTouch
}
if (dragStoleGrab)
qCDebug(lcPointerTests, "DragHandler stole the grab after %d events", dragStoleGrab);
- QVERIFY(dragStoleGrab > 1);
- QCOMPARE(handler->active(), true);
- QCOMPARE(ma->pressed(), false);
+ if (preventStealing) {
+ QCOMPARE(dragStoleGrab, 0);
+ QCOMPARE(handler->active(), false);
+ QCOMPARE(ma->pressed(), true);
+ } else {
+ QVERIFY(dragStoleGrab > 1);
+ QCOMPARE(handler->active(), true);
+ QCOMPARE(ma->pressed(), false);
+ }
touch.release(1, p1).commit();
QQuickTouchUtils::flush(window);
diff --git a/tests/auto/quick/pointerhandlers/qquicktaphandler/data/Button.qml b/tests/auto/quick/pointerhandlers/qquicktaphandler/data/Button.qml
index 042b730799..800c25c77d 100644
--- a/tests/auto/quick/pointerhandlers/qquicktaphandler/data/Button.qml
+++ b/tests/auto/quick/pointerhandlers/qquicktaphandler/data/Button.qml
@@ -31,6 +31,7 @@ import QtQuick 2.12
Rectangle {
id: root
property alias label: label.text
+ property alias active: tap.active
property alias pressed: tap.pressed
property bool checked: false
property alias gesturePolicy: tap.gesturePolicy
diff --git a/tests/auto/quick/pointerhandlers/qquicktaphandler/tst_qquicktaphandler.cpp b/tests/auto/quick/pointerhandlers/qquicktaphandler/tst_qquicktaphandler.cpp
index e77ea97518..419afed3ac 100644
--- a/tests/auto/quick/pointerhandlers/qquicktaphandler/tst_qquicktaphandler.cpp
+++ b/tests/auto/quick/pointerhandlers/qquicktaphandler/tst_qquicktaphandler.cpp
@@ -600,10 +600,32 @@ void tst_TapHandler::buttonsMultiTouch()
touchSeq.stationary(1).press(2, p2, window).commit();
QQuickTouchUtils::flush(window);
QTRY_VERIFY(buttonWithinBounds->property("pressed").toBool());
+ QVERIFY(buttonWithinBounds->property("active").toBool());
QPoint p3 = buttonReleaseWithinBounds->mapToScene(QPointF(20, 20)).toPoint();
touchSeq.stationary(1).stationary(2).press(3, p3, window).commit();
QQuickTouchUtils::flush(window);
QTRY_VERIFY(buttonReleaseWithinBounds->property("pressed").toBool());
+ QVERIFY(buttonReleaseWithinBounds->property("active").toBool());
+ QVERIFY(buttonWithinBounds->property("pressed").toBool());
+ QVERIFY(buttonWithinBounds->property("active").toBool());
+ QVERIFY(buttonDragThreshold->property("pressed").toBool());
+
+ // combinations of small touchpoint movements and stationary points should not cause state changes
+ p1 += QPoint(2, 0);
+ p2 += QPoint(3, 0);
+ touchSeq.move(1, p1).move(2, p2).stationary(3).commit();
+ QVERIFY(buttonDragThreshold->property("pressed").toBool());
+ QVERIFY(buttonWithinBounds->property("pressed").toBool());
+ QVERIFY(buttonWithinBounds->property("active").toBool());
+ QVERIFY(buttonReleaseWithinBounds->property("pressed").toBool());
+ QVERIFY(buttonReleaseWithinBounds->property("active").toBool());
+ p3 += QPoint(4, 0);
+ touchSeq.stationary(1).stationary(2).move(3, p3).commit();
+ QVERIFY(buttonDragThreshold->property("pressed").toBool());
+ QVERIFY(buttonWithinBounds->property("pressed").toBool());
+ QVERIFY(buttonWithinBounds->property("active").toBool());
+ QVERIFY(buttonReleaseWithinBounds->property("pressed").toBool());
+ QVERIFY(buttonReleaseWithinBounds->property("active").toBool());
// can release top button and press again: others stay pressed the whole time
touchSeq.stationary(2).stationary(3).release(1, p1, window).commit();