diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2017-01-18 13:53:07 +0100 |
---|---|---|
committer | Jan Arve Sæther <jan-arve.saether@qt.io> | 2017-02-07 16:30:18 +0000 |
commit | fb8058e5bfbd412e4503eb280721e4875fda0936 (patch) | |
tree | e24830323e33f826071d28ba7f8c0e0160a8fa5d /tests/auto/quick/pointerhandlers | |
parent | e2fd141372335f917c2d216051abb00d8b15f87c (diff) |
QQuickWindow: use QVector eventDeliveryTargets to avoid repeated delivery
If no handler or item accepts a newly-pressed point, the event will be
re-delivered in deliverTouchEvent(). It doesn't make sense to
re-deliver to the same handlers though.
A temporary QSet isn't cheap to create, whereas it seems we will need
to keep track of handlers which have already been visited, in order to
avoid visiting passively-grabbing handlers multiple times. Since both
a QVector and a QSet are heap-allocated, and we expect to have a limited
quantity of handlers grabbing at one time, a retained QVector (cleared
between events) seems to be the cheapest data structure.
Change-Id: I831e9a2576b2fcb9095e065795f2baff58115a49
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Diffstat (limited to 'tests/auto/quick/pointerhandlers')
-rw-r--r-- | tests/auto/quick/pointerhandlers/qquickpointerhandler/tst_qquickpointerhandler.cpp | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/tests/auto/quick/pointerhandlers/qquickpointerhandler/tst_qquickpointerhandler.cpp b/tests/auto/quick/pointerhandlers/qquickpointerhandler/tst_qquickpointerhandler.cpp index 8f65ec6d7f..a7237e7af3 100644 --- a/tests/auto/quick/pointerhandlers/qquickpointerhandler/tst_qquickpointerhandler.cpp +++ b/tests/auto/quick/pointerhandlers/qquickpointerhandler/tst_qquickpointerhandler.cpp @@ -238,20 +238,19 @@ void tst_PointerHandlers::touchEventDelivery() QPoint p1 = QPoint(20, 20); QTest::touchEvent(window, touchDevice).press(0, p1, window); QQuickTouchUtils::flush(window); - QTRY_COMPARE(eventItem1->eventList.size(), 4); + QTRY_COMPARE(eventItem1->eventList.size(), 3); QCOMPARE(eventItem1->eventList.at(0).type, QEvent::Pointer); QCOMPARE(eventItem1->eventList.at(1).type, QEvent::TouchBegin); QCOMPARE(eventItem1->eventList.at(2).type, QEvent::MouseButtonPress); - QCOMPARE(eventItem1->eventList.at(3).type, QEvent::Pointer); p1 += QPoint(10, 0); QTest::touchEvent(window, touchDevice).move(0, p1, window); QQuickTouchUtils::flush(window); - QCOMPARE(eventItem1->eventList.size(), 5); - QCOMPARE(eventItem1->eventList.at(4).type, QEvent::Pointer); + QCOMPARE(eventItem1->eventList.size(), 4); + QCOMPARE(eventItem1->eventList.at(3).type, QEvent::Pointer); QTest::touchEvent(window, touchDevice).release(0, p1, window); QQuickTouchUtils::flush(window); - QCOMPARE(eventItem1->eventList.size(), 6); - QCOMPARE(eventItem1->eventList.at(5).type, QEvent::Pointer); + QCOMPARE(eventItem1->eventList.size(), 5); + QCOMPARE(eventItem1->eventList.at(4).type, QEvent::Pointer); eventItem1->eventList.clear(); // Accept touch @@ -326,19 +325,18 @@ void tst_PointerHandlers::touchEventDelivery() p1 = QPoint(20, 20); QTest::touchEvent(window, touchDevice).press(0, p1, window); QQuickTouchUtils::flush(window); - QCOMPARE(eventItem1->eventList.size(), 4); + QCOMPARE(eventItem1->eventList.size(), 3); QCOMPARE(eventItem1->eventList.at(0).type, QEvent::Pointer); QCOMPARE(eventItem1->eventList.at(1).type, QEvent::TouchBegin); QCOMPARE(eventItem1->eventList.at(2).type, QEvent::MouseButtonPress); - QCOMPARE(eventItem1->eventList.at(3).type, QEvent::Pointer); QCOMPARE(pointerEvent->point(0)->grabber(), nullptr); p1 += QPoint(10, 0); QTest::touchEvent(window, touchDevice).move(0, p1, window); QQuickTouchUtils::flush(window); - QCOMPARE(eventItem1->eventList.size(), 5); + QCOMPARE(eventItem1->eventList.size(), 4); QTest::touchEvent(window, touchDevice).release(0, p1, window); QQuickTouchUtils::flush(window); - QCOMPARE(eventItem1->eventList.size(), 6); + QCOMPARE(eventItem1->eventList.size(), 5); eventItem1->eventList.clear(); // wait to avoid getting a double click event |