aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickmousearea
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2012-03-05 15:07:27 +1000
committerQt by Nokia <qt-info@nokia.com>2012-03-05 23:31:48 +0100
commit3f62886ac84b31c5c8f90205583dc65e811ad20b (patch)
tree5e78818004f64e491621265d7af8a73ee5b9712c /tests/auto/quick/qquickmousearea
parent43ffdc3fc02eb058d7d458cb16a9c3cf07ea68eb (diff)
Handle MouseArea.enabled = false after mouse is pressed.
Currently this leaves the MouseArea in a broken state, i.e. still in pressed state, and the next press after it is re-enabled is ignored. In this case we now allow subsequent mouse move or release events to continue. Following the release, no further press will be accepted. Change-Id: I65a890da90e2166ad568505fffdbd3db6c97165b Reviewed-by: Andrew den Exter <andrew.den-exter@nokia.com>
Diffstat (limited to 'tests/auto/quick/qquickmousearea')
-rw-r--r--tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp105
1 files changed, 105 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
index 0fb82a66bc..4375e835aa 100644
--- a/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
+++ b/tests/auto/quick/qquickmousearea/tst_qquickmousearea.cpp
@@ -72,6 +72,7 @@ private slots:
void hoverPosition();
void hoverPropagation();
void hoverVisible();
+ void disableAfterPress();
private:
QQuickView *createView();
@@ -801,6 +802,110 @@ void tst_QQuickMouseArea::hoverVisible()
delete canvas;
}
+void tst_QQuickMouseArea::disableAfterPress()
+{
+ QQuickView *canvas = createView();
+ canvas->setSource(testFileUrl("dragging.qml"));
+ canvas->show();
+ canvas->requestActivateWindow();
+ QTest::qWait(20);
+ QVERIFY(canvas->rootObject() != 0);
+
+ QQuickMouseArea *mouseArea = canvas->rootObject()->findChild<QQuickMouseArea*>("mouseregion");
+ QQuickDrag *drag = mouseArea->drag();
+ QVERIFY(mouseArea != 0);
+ QVERIFY(drag != 0);
+
+ QSignalSpy mousePositionSpy(mouseArea, SIGNAL(positionChanged(QQuickMouseEvent*)));
+ QSignalSpy mousePressSpy(mouseArea, SIGNAL(pressed(QQuickMouseEvent*)));
+ QSignalSpy mouseReleaseSpy(mouseArea, SIGNAL(released(QQuickMouseEvent*)));
+
+ // target
+ QQuickItem *blackRect = canvas->rootObject()->findChild<QQuickItem*>("blackrect");
+ QVERIFY(blackRect != 0);
+ QVERIFY(blackRect == drag->target());
+
+ QVERIFY(!drag->active());
+
+ QTest::mousePress(canvas, Qt::LeftButton, 0, QPoint(100,100));
+
+ QTRY_COMPARE(mousePressSpy.count(), 1);
+
+ QVERIFY(!drag->active());
+ QCOMPARE(blackRect->x(), 50.0);
+ QCOMPARE(blackRect->y(), 50.0);
+
+ // First move event triggers drag, second is acted upon.
+ // This is due to possibility of higher stacked area taking precedence.
+
+ QTest::mouseMove(canvas, QPoint(111,111));
+ QTest::qWait(50);
+ QTest::mouseMove(canvas, QPoint(122,122));
+
+ QTRY_COMPARE(mousePositionSpy.count(), 2);
+
+ QVERIFY(drag->active());
+ QCOMPARE(blackRect->x(), 72.0);
+ QCOMPARE(blackRect->y(), 72.0);
+
+ mouseArea->setEnabled(false);
+
+ // move should still be acted upon
+ QTest::mouseMove(canvas, QPoint(133,133));
+ QTest::qWait(50);
+ QTest::mouseMove(canvas, QPoint(144,144));
+
+ QTRY_COMPARE(mousePositionSpy.count(), 4);
+
+ QVERIFY(drag->active());
+ QCOMPARE(blackRect->x(), 94.0);
+ QCOMPARE(blackRect->y(), 94.0);
+
+ QVERIFY(mouseArea->pressed());
+ QVERIFY(mouseArea->hovered());
+
+ QTest::mouseRelease(canvas, Qt::LeftButton, 0, QPoint(144,144));
+
+ QTRY_COMPARE(mouseReleaseSpy.count(), 1);
+
+ QVERIFY(!drag->active());
+ QCOMPARE(blackRect->x(), 94.0);
+ QCOMPARE(blackRect->y(), 94.0);
+
+ QVERIFY(!mouseArea->pressed());
+ QVERIFY(!mouseArea->hovered()); // since hover is not enabled
+
+ // Next press will be ignored
+ blackRect->setX(50);
+ blackRect->setY(50);
+
+ mousePressSpy.clear();
+ mousePositionSpy.clear();
+ mouseReleaseSpy.clear();
+
+ QTest::mousePress(canvas, Qt::LeftButton, 0, QPoint(100,100));
+ QTest::qWait(50);
+ QCOMPARE(mousePressSpy.count(), 0);
+
+ QTest::mouseMove(canvas, QPoint(111,111));
+ QTest::qWait(50);
+ QTest::mouseMove(canvas, QPoint(122,122));
+ QTest::qWait(50);
+
+ QCOMPARE(mousePositionSpy.count(), 0);
+
+ QVERIFY(!drag->active());
+ QCOMPARE(blackRect->x(), 50.0);
+ QCOMPARE(blackRect->y(), 50.0);
+
+ QTest::mouseRelease(canvas, Qt::LeftButton, 0, QPoint(122,122));
+ QTest::qWait(50);
+
+ QCOMPARE(mouseReleaseSpy.count(), 0);
+
+ delete canvas;
+}
+
QTEST_MAIN(tst_QQuickMouseArea)
#include "tst_qquickmousearea.moc"