diff options
4 files changed, 20 insertions, 3 deletions
diff --git a/src/quick/items/qquickmultipointtoucharea.cpp b/src/quick/items/qquickmultipointtoucharea.cpp index 461c237657..8f27f04273 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<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*>()); } } diff --git a/tests/auto/qtquick2/qquickmultipointtoucharea/data/inFlickable.qml b/tests/auto/qtquick2/qquickmultipointtoucharea/data/inFlickable.qml index 53a2bf87f9..5db377011c 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 3a6aa86a1c..85f8cd6f39 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 230825011a..837c31f073 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); |