aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/touchmouse/tst_touchmouse.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/quick/touchmouse/tst_touchmouse.cpp')
-rw-r--r--tests/auto/quick/touchmouse/tst_touchmouse.cpp56
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"