diff options
author | Frederik Gladhorn <frederik.gladhorn@theqtcompany.com> | 2016-10-03 17:04:00 +0200 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2016-10-04 05:10:57 +0000 |
commit | 3841055714208e6bd2e3a5efee89ecc20181d893 (patch) | |
tree | 9e2b72d108982ab92aa9eff4381ac282928c4e50 /src | |
parent | 8955df4ff28076fb2bc2d6f35de2a48a0d993975 (diff) |
Fix behavior of Flickable::setPressDelay
This expands the test and fixes the code.
Before this patch, items would see the press event, but get the press
stolen again immediately.
Change-Id: Iece1d5ffbc09a98fb4bec8d810c7ad78b0f50afe
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/quick/items/qquickwindow.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index 7dd567f90d..ada56fbc25 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -2253,6 +2253,10 @@ bool QQuickWindowPrivate::deliverMatchingPointsToItem(QQuickItem *item, QQuickPo auto point = event->point(0); if (point->isAccepted()) return false; + + // The only reason to already have a mouse grabber here is + // synthetic events - flickable sends one when setPressDelay is used. + auto oldMouseGrabber = q->mouseGrabberItem(); QPointF localPos = item->mapFromScene(point->scenePos()); Q_ASSERT(item->contains(localPos)); // transform is checked already QMouseEvent *me = event->asMouseEvent(localPos); @@ -2260,7 +2264,7 @@ bool QQuickWindowPrivate::deliverMatchingPointsToItem(QQuickItem *item, QQuickPo q->sendEvent(item, me); if (me->isAccepted()) { auto mouseGrabber = q->mouseGrabberItem(); - if (mouseGrabber && mouseGrabber != item) { + if (mouseGrabber && mouseGrabber != item && mouseGrabber != oldMouseGrabber) { item->mouseUngrabEvent(); } else { item->grabMouse(); |