aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Arve Sæther <jan-arve.saether@qt.io>2018-01-26 16:23:10 +0100
committerShawn Rutledge <shawn.rutledge@qt.io>2018-01-26 21:46:29 +0000
commite6d4df156e9aec62054740dc99ab8ba2855eaafc (patch)
treed8c8f3c9b3b404f438f6b83cf850e1e2f75ecdde
parent16cd1f8d24f011d30d3fc7baf7750700af14d9c5 (diff)
Make sure we send the UngrabMouse event when clearing grabbers
This caused a regression in QtLocation autotest declarative_ui\tst_map_mouse.qml where the sequence of tests test_basic_press_release() and test_enabled() caused test_enabled() to fail. Change-Id: I53621a9a18d0574163260674c11bdcb02c3e1218 Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io> Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
-rw-r--r--src/quick/items/qquickwindow.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp
index 8b8469f801..2d0f1218bf 100644
--- a/src/quick/items/qquickwindow.cpp
+++ b/src/quick/items/qquickwindow.cpp
@@ -2284,6 +2284,7 @@ QQuickPointerEvent *QQuickWindowPrivate::pointerEventInstance(QEvent *event) con
void QQuickWindowPrivate::deliverPointerEvent(QQuickPointerEvent *event)
{
+ Q_Q(QQuickWindow);
// If users spin the eventloop as a result of event delivery, we disable
// event compression and send events directly. This is because we consider
// the usecase a bit evil, but we at least don't want to lose events.
@@ -2293,8 +2294,11 @@ void QQuickWindowPrivate::deliverPointerEvent(QQuickPointerEvent *event)
if (event->asPointerMouseEvent()) {
deliverMouseEvent(event->asPointerMouseEvent());
// failsafe: never allow any kind of grab to persist after release
- if (event->isReleaseEvent() && event->buttons() == Qt::NoButton)
+ QQuickItem *grabber = q->mouseGrabberItem();
+ if (event->isReleaseEvent() && event->buttons() == Qt::NoButton && grabber) {
event->clearGrabbers();
+ sendUngrabEvent(grabber, false);
+ }
} else if (event->asPointerTouchEvent()) {
deliverTouchEvent(event->asPointerTouchEvent());
} else {