diff options
-rw-r--r-- | src/quick/items/qquickwindow.cpp | 5 | ||||
-rw-r--r-- | tests/auto/quick/pointerhandlers/flickableinterop/tst_flickableinterop.cpp | 14 |
2 files changed, 16 insertions, 3 deletions
diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index 8582dd8d2c..c981bfc67e 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -2294,10 +2294,9 @@ void QQuickWindowPrivate::deliverPointerEvent(QQuickPointerEvent *event) if (event->asPointerMouseEvent()) { deliverMouseEvent(event->asPointerMouseEvent()); // failsafe: never allow any kind of grab to persist after release - QQuickItem *grabber = q->mouseGrabberItem(); - if (event->isReleaseEvent() && event->buttons() == Qt::NoButton && grabber) { + if (event->isReleaseEvent() && event->buttons() == Qt::NoButton) { event->clearGrabbers(); - sendUngrabEvent(grabber, false); + sendUngrabEvent(q->mouseGrabberItem(), false); } } else if (event->asPointerTouchEvent()) { deliverTouchEvent(event->asPointerTouchEvent()); diff --git a/tests/auto/quick/pointerhandlers/flickableinterop/tst_flickableinterop.cpp b/tests/auto/quick/pointerhandlers/flickableinterop/tst_flickableinterop.cpp index 7862d72db8..c0b34f8246 100644 --- a/tests/auto/quick/pointerhandlers/flickableinterop/tst_flickableinterop.cpp +++ b/tests/auto/quick/pointerhandlers/flickableinterop/tst_flickableinterop.cpp @@ -544,6 +544,20 @@ void tst_FlickableInterop::mouseDragFlickableBehindItemWithHandlers() QCOMPARE(originP1 + QPoint(3*dragThreshold, 0), p1); } QTest::mouseRelease(window, Qt::LeftButton, Qt::NoModifier, p1); + // wait until flickable stops + QTRY_COMPARE(flickable->isMoving(), false); + + // After the mouse button has been released, move the mouse and ensure that nothing is moving + // because of that (this tests if all grabs are released when the mouse button is released). + p1 = rect->mapToScene(rect->clipRect().center()).toPoint(); + originP1 = p1; + for (int i = 0; i < 3; ++i) { + p1 += QPoint(dragThreshold, 0); + QTest::mouseMove(window, p1); + QQuickTouchUtils::flush(window); + } + QCOMPARE(flickable->isMoving(), false); + QCOMPARE(originP1, rect->mapToScene(rect->clipRect().center()).toPoint()); } QTEST_MAIN(tst_FlickableInterop) |