aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickitem.cpp
diff options
context:
space:
mode:
authorShawn Rutledge <shawn.rutledge@qt.io>2016-09-01 06:16:18 +0200
committerShawn Rutledge <shawn.rutledge@qt.io>2017-02-02 19:17:35 +0000
commite2fd141372335f917c2d216051abb00d8b15f87c (patch)
tree8521c470e66d1a1badeb3c3020774abc66d639f7 /src/quick/items/qquickitem.cpp
parent73e9dc0667935b7b403c10736775d24d6e22eb8c (diff)
QQuickWindow: deliver updates to handlers even if they don't grab
The "weak grab" concept depends on this. First we deliver to grabbers, then we deliver to non-grabbing handlers (but not to non-grabbing items). Avoid re-delivering to grabbing handlers which already received the same event. Change-Id: If51e1cd9372e3bed1daea3758e9ef8e37c0ba5e3 Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Diffstat (limited to 'src/quick/items/qquickitem.cpp')
-rw-r--r--src/quick/items/qquickitem.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp
index 98cc3112df..46e381db7d 100644
--- a/src/quick/items/qquickitem.cpp
+++ b/src/quick/items/qquickitem.cpp
@@ -5091,15 +5091,20 @@ void QQuickItemPrivate::deliverShortcutOverrideEvent(QKeyEvent *event)
}
}
-void QQuickItemPrivate::handlePointerEvent(QQuickPointerEvent *event)
+bool QQuickItemPrivate::handlePointerEvent(QQuickPointerEvent *event, bool avoidGrabber)
{
Q_Q(QQuickItem);
+ bool delivered = false;
if (extra.isAllocated()) {
for (QQuickPointerHandler *handler : extra->pointerHandlers) {
qCDebug(lcPointerHandlerDispatch) << " delivering" << event << "to" << handler << "on" << q;
- handler->handlePointerEvent(event);
+ if (!avoidGrabber || !event->hasGrabber(handler)) {
+ handler->handlePointerEvent(event);
+ delivered = true;
+ }
}
}
+ return delivered;
}
/*!