diff options
-rw-r--r-- | src/quick/items/qquickflickable.cpp | 5 | ||||
-rw-r--r-- | tests/auto/quick/qquickflickable/data/hide.qml | 13 | ||||
-rw-r--r-- | tests/auto/quick/qquickflickable/tst_qquickflickable.cpp | 20 |
3 files changed, 37 insertions, 1 deletions
diff --git a/src/quick/items/qquickflickable.cpp b/src/quick/items/qquickflickable.cpp index 1e778306e0..537367b3a3 100644 --- a/src/quick/items/qquickflickable.cpp +++ b/src/quick/items/qquickflickable.cpp @@ -2307,8 +2307,11 @@ bool QQuickFlickable::filterMouseEvent(QQuickItem *receiver, QMouseEvent *event) bool QQuickFlickable::childMouseEventFilter(QQuickItem *i, QEvent *e) { Q_D(QQuickFlickable); - if (!isVisible() || !isEnabled() || !isInteractive()) + if (!isVisible() || !isEnabled() || !isInteractive()) { + d->cancelInteraction(); return QQuickItem::childMouseEventFilter(i, e); + } + switch (e->type()) { case QEvent::MouseButtonPress: case QEvent::MouseMove: diff --git a/tests/auto/quick/qquickflickable/data/hide.qml b/tests/auto/quick/qquickflickable/data/hide.qml new file mode 100644 index 0000000000..ab520549e2 --- /dev/null +++ b/tests/auto/quick/qquickflickable/data/hide.qml @@ -0,0 +1,13 @@ +import QtQuick 2.0 + +Flickable { + id: flickable + width: 200; height: 200 + contentWidth: 400; contentHeight: 400 + + MouseArea { + objectName: "mouseArea" + width: 400; height: 400 + onDoubleClicked: flickable.visible = false + } +} diff --git a/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp b/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp index 942e99018f..2555322e3e 100644 --- a/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp +++ b/tests/auto/quick/qquickflickable/tst_qquickflickable.cpp @@ -80,6 +80,7 @@ private slots: void disabled(); void flickVelocity(); void margins(); + void cancelOnHide(); void cancelOnMouseGrab(); void clickAndDragWhenTransformed(); void flickTwiceUsingTouches(); @@ -1422,6 +1423,25 @@ void tst_qquickflickable::margins() delete root; } +void tst_qquickflickable::cancelOnHide() +{ + QScopedPointer<QQuickView> window(new QQuickView); + window->setSource(testFileUrl("hide.qml")); + QTRY_COMPARE(window->status(), QQuickView::Ready); + QQuickViewTestUtil::centerOnScreen(window.data()); + QQuickViewTestUtil::moveMouseAway(window.data()); + window->show(); + QVERIFY(QTest::qWaitForWindowActive(window.data())); + QVERIFY(window->rootObject()); + + QQuickFlickable *flickable = qobject_cast<QQuickFlickable*>(window->rootObject()); + QVERIFY(flickable); + + QTest::mouseDClick(window.data(), Qt::LeftButton); + QVERIFY(!flickable->isVisible()); + QVERIFY(!QQuickFlickablePrivate::get(flickable)->pressed); +} + void tst_qquickflickable::cancelOnMouseGrab() { QScopedPointer<QQuickView> window(new QQuickView); |