touchUpdated should be called for release and cancel.
authorMichael Brasser <michael.brasser@nokia.com>
Fri, 30 Dec 2011 03:45:40 +0000 (13:45 +1000)
committerQt by Nokia <qt-info@nokia.com>
Fri, 30 Dec 2011 06:28:39 +0000 (07:28 +0100)
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 <alan.alpert@nokia.com>
src/quick/items/qquickmultipointtoucharea.cpp
tests/auto/qtquick2/qquickmultipointtoucharea/data/inFlickable.qml
tests/auto/qtquick2/qquickmultipointtoucharea/data/signalTest.qml
tests/auto/qtquick2/qquickmultipointtoucharea/tst_qquickmultipointtoucharea.cpp

index 461c237..8f27f04 100644 (file)
@@ -281,7 +281,7 @@ void QQuickTouchPoint::setSceneY(qreal sceneY)
     \qmlsignal QtQuick2::MultiPointTouchArea::touchUpdated(list<TouchPoint> 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<QObject*>());
     }
 }
 
index 53a2bf8..5db3770 100644 (file)
@@ -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
     }
 }
 
index 3a6aa86..85f8cd6 100644 (file)
@@ -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
+    }
 }
index 2308250..837c31f 100644 (file)
@@ -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);