aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/pointerhandlers
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@qt.io>2017-01-18 13:53:07 +0100
committerJan Arve Sæther <jan-arve.saether@qt.io>2017-02-07 16:30:18 +0000
commitfb8058e5bfbd412e4503eb280721e4875fda0936 (patch)
treee24830323e33f826071d28ba7f8c0e0160a8fa5d /tests/auto/quick/pointerhandlers
parente2fd141372335f917c2d216051abb00d8b15f87c (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.cpp18
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