aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickoverlay.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-09-26 14:10:14 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2016-09-26 14:13:35 +0200
commit11b066beb45e7da084c6f792cf9421d48d4b40bf (patch)
tree0a27017508682b812b9fa533a3cab95aeb3c33c6 /src/quicktemplates2/qquickoverlay.cpp
parentf1eef22d0d1ddcc2ee48e45e522788eb97f429b0 (diff)
parentd1efdcd2beac4d40d06ac7258b4d84e4376ab9d6 (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.cpp17
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;