diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-09-26 14:10:14 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-09-26 14:13:35 +0200 |
commit | 11b066beb45e7da084c6f792cf9421d48d4b40bf (patch) | |
tree | 0a27017508682b812b9fa533a3cab95aeb3c33c6 /src/quicktemplates2/qquickoverlay.cpp | |
parent | f1eef22d0d1ddcc2ee48e45e522788eb97f429b0 (diff) | |
parent | d1efdcd2beac4d40d06ac7258b4d84e4376ab9d6 (diff) |
Merge remote-tracking branch 'origin/5.7' into 5.8
Conflicts:
examples/quickcontrols2/gallery/gallery.qrc
src/imports/controls/doc/src/qtquickcontrols2-styles.qdoc
src/quicktemplates2/qquickstackview_p.cpp
src/quicktemplates2/qquickstackview_p_p.h
tests/auto/controls/data/tst_stackview.qml
Change-Id: If451fe0e5653572d305b4de90a6d5cb878463e8d
Diffstat (limited to 'src/quicktemplates2/qquickoverlay.cpp')
-rw-r--r-- | src/quicktemplates2/qquickoverlay.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/quicktemplates2/qquickoverlay.cpp b/src/quicktemplates2/qquickoverlay.cpp index 9bdc9135..18500ae6 100644 --- a/src/quicktemplates2/qquickoverlay.cpp +++ b/src/quicktemplates2/qquickoverlay.cpp @@ -388,9 +388,19 @@ void QQuickOverlay::wheelEvent(QWheelEvent *event) bool QQuickOverlay::childMouseEventFilter(QQuickItem *item, QEvent *event) { Q_D(QQuickOverlay); - for (QQuickPopup *popup : qAsConst(d->allPopups)) { - QQuickItem *dimmer = QQuickPopupPrivate::get(popup)->dimmer; - if (item == dimmer) { + const auto popups = d->stackingOrderPopups(); + for (QQuickPopup *popup : popups) { + QQuickPopupPrivate *p = QQuickPopupPrivate::get(popup); + + // Stop filtering overlay events when reaching a popup item or an item + // that is inside the popup. Let the popup content handle its events. + if (item == p->popupItem || p->popupItem->isAncestorOf(item)) + break; + + // Let the popup try closing itself when pressing or releasing over its + // background dimming OR over another popup underneath, in case the popup + // does not have background dimming. + if (item == p->dimmer || !p->popupItem->isAncestorOf(item)) { switch (event->type()) { case QEvent::MouseButtonPress: emit pressed(); @@ -403,6 +413,7 @@ bool QQuickOverlay::childMouseEventFilter(QQuickItem *item, QEvent *event) return popup->overlayEvent(item, event); case QEvent::MouseButtonRelease: emit released(); + d->mouseGrabberPopup = nullptr; return popup->overlayEvent(item, event); default: break; |