From 1f3713a2b40a467e8a8c552d0980dbdd9f7a1ab4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Arve=20S=C3=A6ther?= Date: Fri, 11 May 2018 13:36:52 +0200 Subject: Fix bug where Ungrab event was not sent clearGrabbers() will also clear QQuickWindow::mouseGrabberItem(), so we have to retrieve a copy of the mouse grabber item in advance of calling clearGrabbers(). This could happen when a filtering parent actually called grabMouse() on mouse release(!) event. Change-Id: I287214dbdff802707be625d73c38dd9c5d723aef Task-number: QTBUG-68030 Reviewed-by: Shawn Rutledge --- src/quick/items/qquickwindow.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/quick/items/qquickwindow.cpp') diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index 48eba6a7a0..0f617733c4 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -2311,8 +2311,9 @@ void QQuickWindowPrivate::deliverPointerEvent(QQuickPointerEvent *event) deliverMouseEvent(event->asPointerMouseEvent()); // failsafe: never allow any kind of grab to persist after release if (event->isReleaseEvent() && event->buttons() == Qt::NoButton) { + QQuickItem *oldGrabber = q->mouseGrabberItem(); event->clearGrabbers(); - sendUngrabEvent(q->mouseGrabberItem(), false); + sendUngrabEvent(oldGrabber, false); } } else if (event->asPointerTouchEvent()) { deliverTouchEvent(event->asPointerTouchEvent()); -- cgit v1.2.3 From a6b740869d369dacb8700042aa5da35183a03b5a Mon Sep 17 00:00:00 2001 From: Tasuku Suzuki Date: Wed, 9 May 2018 14:00:07 +0900 Subject: Fix build without features.gestures Change-Id: Id2fb6419be9a35ddaa24106d3022e72070cb908d Reviewed-by: Shawn Rutledge Reviewed-by: Oswald Buddenhagen --- src/quick/items/qquickwindow.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/quick/items/qquickwindow.cpp') diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index 0f617733c4..535770e9f9 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -2225,8 +2225,10 @@ QQuickPointerEvent *QQuickWindowPrivate::queryPointerEventInstance(QQuickPointer for (QQuickPointerEvent *e : pointerEventInstances) { // If device can generate native gestures (e.g. a trackpad), there might be two QQuickPointerEvents: // QQuickPointerNativeGestureEvent and QQuickPointerTouchEvent. Use eventType to disambiguate. +#if QT_CONFIG(gestures) if (eventType == QEvent::NativeGesture && !qobject_cast(e)) continue; +#endif // Otherwise we assume there's only one event type per device. // More disambiguation tests might need to be added above if that changes later. if (e->device() == device) @@ -2250,9 +2252,11 @@ QQuickPointerEvent *QQuickWindowPrivate::pointerEventInstance(QQuickPointerDevic break; case QQuickPointerDevice::TouchPad: case QQuickPointerDevice::TouchScreen: +#if QT_CONFIG(gestures) if (eventType == QEvent::NativeGesture) ev = new QQuickPointerNativeGestureEvent(q, device); else // assume QEvent::Type is one of TouchBegin/Update/End +#endif ev = new QQuickPointerTouchEvent(q, device); break; default: @@ -2287,9 +2291,11 @@ QQuickPointerEvent *QQuickWindowPrivate::pointerEventInstance(QEvent *event) con dev = QQuickPointerDevice::touchDevice(static_cast(event)->device()); break; // TODO tablet event types +#if QT_CONFIG(gestures) case QEvent::NativeGesture: dev = QQuickPointerDevice::touchDevice(static_cast(event)->device()); break; +#endif default: break; } -- cgit v1.2.3