summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den.exter@jollamobile.com>2013-02-16 08:34:24 (GMT)
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-02-22 09:03:10 (GMT)
commitab0ed0dfcd0f47598761ab0c834dd47d8c9742cf (patch)
tree8759f2d389618a632937596281b3568699969c27 /tests/auto
parent72ad290bcb705a5ed89d57dce6665fe78bc3cf9f (diff)
downloadQt-ab0ed0dfcd0f47598761ab0c834dd47d8c9742cf.zip
Qt-ab0ed0dfcd0f47598761ab0c834dd47d8c9742cf.tar.gz
Qt-ab0ed0dfcd0f47598761ab0c834dd47d8c9742cf.tar.bz2
Flickable shouldn't grab the mouse until it starts an effective move.
If the boundBehavior prevents the flickable from moving its content item in response to a drag it shouldn't grab the mouse as that will prevent a parent MouseArea or Flickable from handling the drag. (cherry picked from commit e8ca72d484c0e56f030e4742bb5f92b6f0555146) Task-number: QTBUG-29718 Change-Id: Ief82ef7b898ea2581fd0b7e52548f451d887e2f1 Reviewed-by: Alan Alpert <aalpert@rim.com>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/declarative/qdeclarativeflickable/data/nestedStopAtBounds.qml38
-rw-r--r--tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp74
-rw-r--r--tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp4
3 files changed, 114 insertions, 2 deletions
diff --git a/tests/auto/declarative/qdeclarativeflickable/data/nestedStopAtBounds.qml b/tests/auto/declarative/qdeclarativeflickable/data/nestedStopAtBounds.qml
new file mode 100644
index 0000000..6b28edf
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeflickable/data/nestedStopAtBounds.qml
@@ -0,0 +1,38 @@
+import QtQuick 1.1
+
+Flickable {
+ id: outer
+ objectName: "outerFlickable"
+ width: 400
+ height: 400
+ contentX: 50
+ contentY: 50
+ contentWidth: 500
+ contentHeight: 500
+ flickableDirection: inner.flickableDirection
+
+ Rectangle {
+ x: 100
+ y: 100
+ width: 300
+ height: 300
+
+ color: "yellow"
+ Flickable {
+ id: inner
+ objectName: "innerFlickable"
+ anchors.fill: parent
+ contentX: 100
+ contentY: 100
+ contentWidth: 400
+ contentHeight: 400
+ boundsBehavior: Flickable.StopAtBounds
+
+ Rectangle {
+ anchors.fill: parent
+ anchors.margins: 100
+ color: "blue"
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp b/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp
index 73d7be5..01ab415 100644
--- a/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp
+++ b/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp
@@ -80,6 +80,8 @@ private slots:
void wheel();
void flickVelocity();
void disabled();
+ void nestedStopAtBounds();
+ void nestedStopAtBounds_data();
private:
QDeclarativeEngine engine;
@@ -574,6 +576,78 @@ void tst_qdeclarativeflickable::disabled()
QVERIFY(clickedToBool == true);
}
+void tst_qdeclarativeflickable::nestedStopAtBounds_data()
+{
+ QTest::addColumn<bool>("transpose");
+ QTest::addColumn<bool>("invert");
+
+ QTest::newRow("left") << false << false;
+ QTest::newRow("right") << false << true;
+ QTest::newRow("top") << true << false;
+ QTest::newRow("bottom") << true << true;
+}
+
+void tst_qdeclarativeflickable::nestedStopAtBounds()
+{
+ QFETCH(bool, transpose);
+ QFETCH(bool, invert);
+
+ QDeclarativeView view;
+ view.setSource(QUrl::fromLocalFile(SRCDIR "/data/nestedStopAtBounds.qml"));
+ view.show();
+ QTest::qWaitForWindowShown(&view);
+ QVERIFY(view.rootObject());
+
+ QDeclarativeFlickable *outer = qobject_cast<QDeclarativeFlickable*>(view.rootObject());
+ QVERIFY(outer);
+
+ QDeclarativeFlickable *inner = outer->findChild<QDeclarativeFlickable*>("innerFlickable");
+ QVERIFY(inner);
+ inner->setFlickableDirection(transpose ? QDeclarativeFlickable::VerticalFlick : QDeclarativeFlickable::HorizontalFlick);
+ inner->setContentX(invert ? 0 : 100);
+ inner->setContentY(invert ? 0 : 100);
+
+ const int threshold = QApplication::startDragDistance();
+
+ QPoint position(200, 200);
+ int &axis = transpose ? position.ry() : position.rx();
+
+ QGraphicsSceneMouseEvent moveEvent(QEvent::GraphicsSceneMouseMove);
+ moveEvent.setButton(Qt::LeftButton);
+ moveEvent.setButtons(Qt::LeftButton);
+
+ // drag toward the aligned boundary. Outer mouse area dragged.
+ QTest::mousePress(view.viewport(), Qt::LeftButton, 0, position);
+ QTest::qWait(10);
+ axis += invert ? threshold * 2 : -threshold * 2;
+ moveEvent.setScenePos(position);
+ QApplication::sendEvent(view.scene(), &moveEvent);
+ axis += invert ? threshold : -threshold;
+ moveEvent.setScenePos(position);
+ QApplication::sendEvent(view.scene(), &moveEvent);
+ QVERIFY(outer->contentX() != 50 || outer->contentY() != 50);
+ QVERIFY((inner->contentX() == 0 || inner->contentX() == 100)
+ && (inner->contentY() == 0 || inner->contentY() == 100));
+ QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, position);
+
+ axis = 200;
+ outer->setContentX(50);
+ outer->setContentY(50);
+
+ // drag away from the aligned boundary. Inner mouse area dragged.
+ QTest::mousePress(view.viewport(), Qt::LeftButton, 0, position);
+ QTest::qWait(10);
+ axis += invert ? -threshold * 2 : threshold * 2;
+ moveEvent.setScenePos(position);
+ QApplication::sendEvent(view.scene(), &moveEvent);
+ axis += invert ? -threshold : threshold;
+ moveEvent.setScenePos(position);
+ QApplication::sendEvent(view.scene(), &moveEvent);
+ QVERIFY(outer->contentX() == 50 && outer->contentY() == 50);
+ QVERIFY((inner->contentX() != 0 && inner->contentX() != 100)
+ || (inner->contentY() != 0 && inner->contentY() != 100));
+ QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, position);
+}
template<typename T>
T *tst_qdeclarativeflickable::findItem(QGraphicsObject *parent, const QString &objectName)
diff --git a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
index 41dcc81..9b4123f 100644
--- a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
+++ b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
@@ -602,8 +602,8 @@ void tst_QDeclarativeMouseArea::preventStealing()
QVERIFY(!mouseArea->pressed());
// Flickable content should have moved.
- QCOMPARE(flickable->contentX(), 10.);
- QCOMPARE(flickable->contentY(), 10.);
+ QCOMPARE(flickable->contentX(), 20.);
+ QCOMPARE(flickable->contentY(), 20.);
QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(50, 50)));