aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-09-03 19:47:35 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2016-09-05 16:35:54 +0000
commit5f9f81a1d43fd840d37982aadbe49f7343c3cbaa (patch)
tree555ab461a281fda7c344a01360037517aa901d7b /src
parentaa4964843f2faca2d52469edc2ba899f9b11e15c (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>
Diffstat (limited to 'src')
-rw-r--r--src/quicktemplates2/qquickoverlay.cpp10
-rw-r--r--src/quicktemplates2/qquickoverlay_p_p.h4
-rw-r--r--src/quicktemplates2/qquickpopup.cpp14
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);
}