diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-09-03 19:47:35 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-09-05 16:35:54 +0000 |
commit | 5f9f81a1d43fd840d37982aadbe49f7343c3cbaa (patch) | |
tree | 555ab461a281fda7c344a01360037517aa901d7b | |
parent | aa4964843f2faca2d52469edc2ba899f9b11e15c (diff) |
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 <mitch.curtis@qt.io>
-rw-r--r-- | src/quicktemplates2/qquickoverlay.cpp | 10 | ||||
-rw-r--r-- | src/quicktemplates2/qquickoverlay_p_p.h | 4 | ||||
-rw-r--r-- | src/quicktemplates2/qquickpopup.cpp | 14 |
3 files changed, 27 insertions, 1 deletions
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<QQuickDrawer *> drawers; QVector<QQuickPopup *> popups; + QVector<QQuickPopup *> allPopups; QPointer<QQuickPopup> 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 <QtQml/qqmlinfo.h> @@ -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); } |