diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2017-09-26 14:14:26 +0200 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2017-10-17 12:30:29 +0000 |
commit | 32b73196594ade358e7b419b0a7563abcfe7266e (patch) | |
tree | 52c697cb9073bd44b0157b43f83c02a52e1acbea | |
parent | 96b2323355a082599b7191f3079e8363bee825e0 (diff) |
QQuickWindow: if an Item has PointerHandlers it's a delivery target
even if it does not accept mouse or touch itself.
Change-Id: I4f1a05231c0ff1e89b8f7f28f0760b3af49c78a8
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
-rw-r--r-- | src/quick/items/qquickitem.cpp | 5 | ||||
-rw-r--r-- | src/quick/items/qquickitem_p.h | 2 | ||||
-rw-r--r-- | src/quick/items/qquickwindow.cpp | 10 |
3 files changed, 13 insertions, 4 deletions
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index 0a5d7adf8b..bfe67a0dd4 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -7972,6 +7972,11 @@ QQuickItemLayer *QQuickItemPrivate::layer() const #endif } +bool QQuickItemPrivate::hasPointerHandlers() const +{ + return extra.isAllocated() && !extra->pointerHandlers.isEmpty(); +} + #if QT_CONFIG(quick_shadereffect) QQuickItemLayer::QQuickItemLayer(QQuickItem *item) : m_item(item) diff --git a/src/quick/items/qquickitem_p.h b/src/quick/items/qquickitem_p.h index 446a7d0945..2f0c316602 100644 --- a/src/quick/items/qquickitem_p.h +++ b/src/quick/items/qquickitem_p.h @@ -279,6 +279,8 @@ public: QQuickItemLayer *layer() const; + bool hasPointerHandlers() const; + // data property static void data_append(QQmlListProperty<QObject> *, QObject *); static int data_count(QQmlListProperty<QObject> *); diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index caa128d6e4..65d69a3bcf 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -2301,10 +2301,12 @@ QVector<QQuickItem *> QQuickWindowPrivate::pointerTargets(QQuickItem *item, cons } bool relevant = item->contains(itemPos); - if (relevant && checkMouseButtons && item->acceptedMouseButtons() == Qt::NoButton) - relevant = false; - if (relevant && checkAcceptsTouch && !(item->acceptTouchEvents() || item->acceptedMouseButtons())) - relevant = false; + if (!(itemPrivate->hasPointerHandlers())) { + if (relevant && checkMouseButtons && item->acceptedMouseButtons() == Qt::NoButton) + relevant = false; + if (relevant && checkAcceptsTouch && !(item->acceptTouchEvents() || item->acceptedMouseButtons())) + relevant = false; + } if (relevant) targets << item; // add this item last: children take precedence return targets; |