From 017a82c6702768aed68c34f319fa14da591f3df2 Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Fri, 30 Dec 2011 13:45:40 +1000 Subject: [PATCH] touchUpdated should be called for release and cancel. touchUpdated should be emitted whenever the touch is updated, even if the update means there are no longer any valid touch points. Change-Id: Iceac5a65094784928108acc764bbc1d5c2b9a08a Reviewed-by: Alan Alpert --- src/quick/items/qquickmultipointtoucharea.cpp | 5 +++-- tests/auto/qtquick2/qquickmultipointtoucharea/data/inFlickable.qml | 6 ++++++ tests/auto/qtquick2/qquickmultipointtoucharea/data/signalTest.qml | 7 ++++++- .../qquickmultipointtoucharea/tst_qquickmultipointtoucharea.cpp | 5 +++++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/quick/items/qquickmultipointtoucharea.cpp b/src/quick/items/qquickmultipointtoucharea.cpp index 461c237..8f27f04 100644 --- a/src/quick/items/qquickmultipointtoucharea.cpp +++ b/src/quick/items/qquickmultipointtoucharea.cpp @@ -281,7 +281,7 @@ void QQuickTouchPoint::setSceneY(qreal sceneY) \qmlsignal QtQuick2::MultiPointTouchArea::touchUpdated(list touchPoints) This handler is called when the touch points handled by the MultiPointTouchArea change. This includes adding new touch points, - removing previous touch points, as well as updating current touch point data. \a touchPoints is the list of all current touch + removing or canceling previous touch points, as well as updating current touch point data. \a touchPoints is the list of all current touch points. */ @@ -480,7 +480,7 @@ void QQuickMultiPointTouchArea::updateTouchData(QEvent *event) if (ended) emit touchPointsReleased(_releasedTouchPoints); if (moved) emit touchPointsUpdated(_movedTouchPoints); if (started) emit touchPointsPressed(_pressedTouchPoints); - if (!_touchPoints.isEmpty()) emit touchUpdated(_touchPoints.values()); + if (ended || moved || started) emit touchUpdated(_touchPoints.values()); } } @@ -597,6 +597,7 @@ void QQuickMultiPointTouchArea::ungrab() dtp->setInUse(false); } _touchPoints.clear(); + emit touchUpdated(QList()); } } diff --git a/tests/auto/qtquick2/qquickmultipointtoucharea/data/inFlickable.qml b/tests/auto/qtquick2/qquickmultipointtoucharea/data/inFlickable.qml index 53a2bf8..5db3770 100644 --- a/tests/auto/qtquick2/qquickmultipointtoucharea/data/inFlickable.qml +++ b/tests/auto/qtquick2/qquickmultipointtoucharea/data/inFlickable.qml @@ -7,6 +7,9 @@ Flickable { contentWidth: width contentHeight: height * 2 + property int cancelCount: 0 + property int touchCount: 0 + MultiPointTouchArea { anchors.fill: parent minimumTouchPoints: 2 @@ -20,6 +23,9 @@ Flickable { TouchPoint { id: point1; objectName: "point1" }, TouchPoint { id: point2; objectName: "point2" } ] + + onTouchPointsCanceled: cancelCount = touchPoints.length + onTouchUpdated: touchCount = touchPoints.length } } diff --git a/tests/auto/qtquick2/qquickmultipointtoucharea/data/signalTest.qml b/tests/auto/qtquick2/qquickmultipointtoucharea/data/signalTest.qml index 3a6aa86..85f8cd6 100644 --- a/tests/auto/qtquick2/qquickmultipointtoucharea/data/signalTest.qml +++ b/tests/auto/qtquick2/qquickmultipointtoucharea/data/signalTest.qml @@ -9,17 +9,22 @@ MultiPointTouchArea { touchPointUpdateCount = 0; touchPointReleaseCount = 0; touchCount = 0; + touchUpdatedHandled = false; } property int touchPointPressCount: 0 property int touchPointUpdateCount: 0 property int touchPointReleaseCount: 0 property int touchCount: 0 + property bool touchUpdatedHandled: false maximumTouchPoints: 5 onTouchPointsPressed: { touchPointPressCount = touchPoints.length } onTouchPointsUpdated: { touchPointUpdateCount = touchPoints.length } onTouchPointsReleased: { touchPointReleaseCount = touchPoints.length } - onTouchUpdated: { touchCount = touchPoints.length } + onTouchUpdated: { + touchCount = touchPoints.length + touchUpdatedHandled = true + } } diff --git a/tests/auto/qtquick2/qquickmultipointtoucharea/tst_qquickmultipointtoucharea.cpp b/tests/auto/qtquick2/qquickmultipointtoucharea/tst_qquickmultipointtoucharea.cpp index 2308250..837c31f 100644 --- a/tests/auto/qtquick2/qquickmultipointtoucharea/tst_qquickmultipointtoucharea.cpp +++ b/tests/auto/qtquick2/qquickmultipointtoucharea/tst_qquickmultipointtoucharea.cpp @@ -149,6 +149,7 @@ void tst_QQuickMultiPointTouchArea::signalTest() QCOMPARE(area->property("touchPointUpdateCount").toInt(), 0); QCOMPARE(area->property("touchPointReleaseCount").toInt(), 3); QCOMPARE(area->property("touchCount").toInt(), 0); + QCOMPARE(area->property("touchUpdatedHandled").toBool(), true); QMetaObject::invokeMethod(area, "clearCounts"); delete canvas; @@ -600,6 +601,8 @@ void tst_QQuickMultiPointTouchArea::inFlickable() QCOMPARE(point11->pressed(), true); QCOMPARE(point12->pressed(), true); + QCOMPARE(flickable->property("cancelCount").toInt(), 0); + QCOMPARE(flickable->property("touchCount").toInt(), 2); p1 += QPoint(0,15); p2 += QPoint(0,15); QTest::touchEvent(canvas, device).move(0, p1).move(1, p2); @@ -620,6 +623,8 @@ void tst_QQuickMultiPointTouchArea::inFlickable() QVERIFY(flickable->contentY() < 0); QCOMPARE(point11->pressed(), false); QCOMPARE(point12->pressed(), false); + QCOMPARE(flickable->property("cancelCount").toInt(), 2); + QCOMPARE(flickable->property("touchCount").toInt(), 0); QTest::touchEvent(canvas, device).release(0, p1).release(1, p2); QTest::mouseRelease(canvas,Qt::LeftButton, 0, p1); -- 2.7.4