diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/quick/items/qquickflickable.cpp | 13 | ||||
-rw-r--r-- | src/quick/items/qquickwindow.cpp | 2 |
2 files changed, 9 insertions, 6 deletions
diff --git a/src/quick/items/qquickflickable.cpp b/src/quick/items/qquickflickable.cpp index 31c1c33b10..9e7b2a4f17 100644 --- a/src/quick/items/qquickflickable.cpp +++ b/src/quick/items/qquickflickable.cpp @@ -2529,12 +2529,15 @@ bool QQuickFlickable::childMouseEventFilter(QQuickItem *i, QEvent *e) return QQuickItem::childMouseEventFilter(i, e); } - if (e->isPointerEvent()) { + if (e->type() == QEvent::UngrabMouse) { + Q_ASSERT(e->isSinglePointEvent()); + auto spe = static_cast<QSinglePointEvent *>(e); + const QObject *grabber = spe->exclusiveGrabber(spe->points().first()); + qCDebug(lcFilter) << "filtering UngrabMouse" << spe->points().first() << "for" << i << "grabber is" << grabber; + if (grabber != this) + mouseUngrabEvent(); // A child has been ungrabbed + } else if (e->isPointerEvent()) { return filterPointerEvent(i, static_cast<QPointerEvent *>(e)); - } else if (e->type() == QEvent::UngrabMouse && d->window && - d->window->mouseGrabberItem() && d->window->mouseGrabberItem() != this) { - // The grab has been taken away from a child and given to some other item. - mouseUngrabEvent(); } return QQuickItem::childMouseEventFilter(i, e); diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index d613b7e4f5..8183988835 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -2605,7 +2605,7 @@ void QQuickWindowPrivate::onGrabChanged(QObject *grabber, QPointingDevice::GrabT if (isDeliveringTouchAsMouse() || point.device()->type() == QInputDevice::DeviceType::Mouse || point.device()->type() == QInputDevice::DeviceType::TouchPad) { - QEvent e(QEvent::UngrabMouse); + QMutableSinglePointEvent e(QEvent::UngrabMouse, point.device(), point); hasFiltered.clear(); filtered = sendFilteredMouseEvent(&e, item, item->parentItem()); if (!filtered) |