From 5f9f81a1d43fd840d37982aadbe49f7343c3cbaa Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Sat, 3 Sep 2016 19:47:35 +0200 Subject: QQuickOverlay: keep track of all popups Required by the subsequent patches. Done separately keep the other patches smaller and easier to review. Change-Id: I60212451cf53443ae7abd58b8eaad94b66984e03 Reviewed-by: Mitch Curtis --- src/quicktemplates2/qquickoverlay.cpp | 10 ++++++++++ src/quicktemplates2/qquickoverlay_p_p.h | 4 ++++ src/quicktemplates2/qquickpopup.cpp | 14 +++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/quicktemplates2/qquickoverlay.cpp b/src/quicktemplates2/qquickoverlay.cpp index e98544cd..ae90a5f8 100644 --- a/src/quicktemplates2/qquickoverlay.cpp +++ b/src/quicktemplates2/qquickoverlay.cpp @@ -175,6 +175,16 @@ QQuickOverlayPrivate::QQuickOverlayPrivate() : { } +void QQuickOverlayPrivate::addPopup(QQuickPopup *popup) +{ + allPopups += popup; +} + +void QQuickOverlayPrivate::removePopup(QQuickPopup *popup) +{ + allPopups.removeOne(popup); +} + QQuickOverlay::QQuickOverlay(QQuickItem *parent) : QQuickItem(*(new QQuickOverlayPrivate), parent) { diff --git a/src/quicktemplates2/qquickoverlay_p_p.h b/src/quicktemplates2/qquickoverlay_p_p.h index 0b6ba21c..a3d2cda7 100644 --- a/src/quicktemplates2/qquickoverlay_p_p.h +++ b/src/quicktemplates2/qquickoverlay_p_p.h @@ -70,6 +70,9 @@ public: return overlay->d_func(); } + void addPopup(QQuickPopup *popup); + void removePopup(QQuickPopup *popup); + void popupAboutToShow(); void popupAboutToHide(); @@ -86,6 +89,7 @@ public: QQmlComponent *modeless; QVector drawers; QVector popups; + QVector allPopups; QPointer mouseGrabberPopup; int modalPopups; }; diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index fa5864df..6c184243 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -37,7 +37,7 @@ #include "qquickpopup_p.h" #include "qquickpopup_p_p.h" #include "qquickapplicationwindow_p.h" -#include "qquickoverlay_p.h" +#include "qquickoverlay_p_p.h" #include "qquickcontrol_p_p.h" #include @@ -304,6 +304,18 @@ void QQuickPopupPrivate::setWindow(QQuickWindow *newWindow) if (window == newWindow) return; + if (window) { + QQuickOverlay *overlay = QQuickOverlay::overlay(window); + if (overlay) + QQuickOverlayPrivate::get(overlay)->removePopup(q); + } + + if (newWindow) { + QQuickOverlay *overlay = QQuickOverlay::overlay(newWindow); + if (overlay) + QQuickOverlayPrivate::get(overlay)->addPopup(q); + } + window = newWindow; emit q->windowChanged(newWindow); } -- cgit v1.2.3