diff options
Diffstat (limited to 'src/quick/items/qquickflickable.cpp')
-rw-r--r-- | src/quick/items/qquickflickable.cpp | 13 |
1 files changed, 8 insertions, 5 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); |