diff options
Diffstat (limited to 'tests/auto/quick/touchmouse/tst_touchmouse.cpp')
| -rw-r--r-- | tests/auto/quick/touchmouse/tst_touchmouse.cpp | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/tests/auto/quick/touchmouse/tst_touchmouse.cpp b/tests/auto/quick/touchmouse/tst_touchmouse.cpp index d7820996be..179acbc728 100644 --- a/tests/auto/quick/touchmouse/tst_touchmouse.cpp +++ b/tests/auto/quick/touchmouse/tst_touchmouse.cpp @@ -244,6 +244,8 @@ private slots: void strayTouchDoesntAutograb(); + void noDoubleClickWithInterveningTouch(); + protected: bool eventFilter(QObject *, QEvent *event) override { @@ -1303,7 +1305,7 @@ void tst_TouchMouse::touchGrabCausesMouseUngrab() QVERIFY(leftItem); EventItem *rightItem = window.rootObject()->findChild<EventItem*>("rightItem"); - QVERIFY(leftItem); + QVERIFY(rightItem); // Send a touch to the leftItem. But leftItem accepts only mouse events, thus // a mouse event will be synthesized out of this touch and will get accepted by @@ -1660,6 +1662,58 @@ void tst_TouchMouse::strayTouchDoesntAutograb() // QTBUG-107867 QTest::touchEvent(&window, device).release(0, p1).release(1, p1); } +void tst_TouchMouse::noDoubleClickWithInterveningTouch() // QTBUG-116442 +{ + QQuickView window; + QVERIFY(QQuickTest::showView(window, testFileUrl("twosiblingitems.qml"))); + + EventItem *leftItem = window.rootObject()->findChild<EventItem*>("leftItem"); + QVERIFY(leftItem); + // simulate a MouseArea: don't accept touch + leftItem->setAcceptedMouseButtons(Qt::LeftButton); + leftItem->acceptMouse = true; + + EventItem *rightItem = window.rootObject()->findChild<EventItem*>("rightItem"); + QVERIFY(rightItem); + // simulate an item that reacts to either touch or mouse + rightItem->setAcceptedMouseButtons(Qt::LeftButton); + rightItem->acceptMouse = true; + rightItem->setAcceptTouchEvents(true); + rightItem->acceptTouch = true; + + const QPoint pLeft(80, 200); + const QPoint pRight(240, 200); + + // tap left + QTest::touchEvent(&window, device).press(1, pLeft, &window); + QTest::touchEvent(&window, device).release(1, pLeft, &window); + QQuickTouchUtils::flush(&window); + qCDebug(lcTests) << "left tap" << leftItem->eventList; + QCOMPARE(leftItem->eventList.size(), 3); + QCOMPARE(leftItem->eventList.at(0).type, QEvent::MouseButtonPress); + leftItem->eventList.clear(); + + // tap right + QTest::touchEvent(&window, device).press(1, pRight, &window); + QTest::touchEvent(&window, device).release(1, pRight, &window); + QQuickTouchUtils::flush(&window); + qCDebug(lcTests) << "right tap" << rightItem->eventList; + QCOMPARE(rightItem->eventList.size(), 2); + QCOMPARE(rightItem->eventList.at(0).type, QEvent::TouchBegin); + rightItem->eventList.clear(); + + // tap left again: this is NOT a double-click, even though it's within time and space limits + QTest::touchEvent(&window, device).press(3, pLeft, &window); + QTest::touchEvent(&window, device).release(3, pLeft, &window); + QQuickTouchUtils::flush(&window); + qCDebug(lcTests) << "left tap again" << leftItem->eventList; + QCOMPARE(leftItem->eventList.size(), 3); + QCOMPARE(leftItem->eventList.at(0).type, QEvent::MouseButtonPress); + QCOMPARE(leftItem->eventList.at(1).type, QEvent::MouseButtonRelease); + QCOMPARE(leftItem->eventList.at(2).type, QEvent::UngrabMouse); + leftItem->eventList.clear(); +} + QTEST_MAIN(tst_TouchMouse) #include "tst_touchmouse.moc" |
