aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickoverlay.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-07-21 13:36:47 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2016-07-22 12:14:32 +0000
commit79cb8dcfcd9c1491cd0fa0699a0918e29183f6c7 (patch)
tree02248ad6d37c3dec52b611f56bfe4a042e4c3c86 /src/quicktemplates2/qquickoverlay.cpp
parent8231b5b0eb4afa385392fbe0259f9fecdb459907 (diff)
Popups: fix overlay visibility
Make sure popup overlay dimmers gets destroyed when popups are closed, and thus, re-parented out of the window overlay. The window overlay item is hidden when there are no child items, so this fixes the issue that the window overlay item was left visible after closing popups. Change-Id: Id2ffe43b706ffcc5cda83abd75354ef04f893745 Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickoverlay.cpp')
-rw-r--r--src/quicktemplates2/qquickoverlay.cpp21
1 files changed, 4 insertions, 17 deletions
diff --git a/src/quicktemplates2/qquickoverlay.cpp b/src/quicktemplates2/qquickoverlay.cpp
index 67eb3ceb..1aec823e 100644
--- a/src/quicktemplates2/qquickoverlay.cpp
+++ b/src/quicktemplates2/qquickoverlay.cpp
@@ -53,7 +53,6 @@ public:
void popupAboutToShow();
void popupAboutToHide();
- void popupClosed();
void createOverlay(QQuickPopup *popup);
void destroyOverlay(QQuickPopup *popup);
@@ -74,8 +73,6 @@ void QQuickOverlayPrivate::popupAboutToShow()
if (!popup || !popup->dim())
return;
- createOverlay(popup);
-
// use QQmlProperty instead of QQuickItem::setOpacity() to trigger QML Behaviors
QQuickPopupPrivate *p = QQuickPopupPrivate::get(popup);
if (p->dimmer)
@@ -95,16 +92,6 @@ void QQuickOverlayPrivate::popupAboutToHide()
QQmlProperty::write(p->dimmer, QStringLiteral("opacity"), 0.0);
}
-void QQuickOverlayPrivate::popupClosed()
-{
- Q_Q(QQuickOverlay);
- QQuickPopup *popup = qobject_cast<QQuickPopup *>(q->sender());
- if (!popup || !popup->dim())
- return;
-
- destroyOverlay(popup);
-}
-
static QQuickItem *createDimmer(QQmlComponent *component, QQuickPopup *popup, QQuickItem *parent)
{
if (!component)
@@ -139,6 +126,7 @@ void QQuickOverlayPrivate::destroyOverlay(QQuickPopup *popup)
{
QQuickPopupPrivate *p = QQuickPopupPrivate::get(popup);
if (p->dimmer) {
+ p->dimmer->setParentItem(nullptr);
p->dimmer->deleteLater();
p->dimmer = nullptr;
}
@@ -218,33 +206,32 @@ void QQuickOverlay::itemChange(ItemChange change, const ItemChangeData &data)
if (change == ItemChildAddedChange) {
d->popups.append(popup);
+ if (popup->dim())
+ d->createOverlay(popup);
QQuickDrawer *drawer = qobject_cast<QQuickDrawer *>(popup);
if (drawer) {
d->drawers.append(drawer);
- d->createOverlay(drawer);
} else {
if (popup->isModal())
++d->modalPopups;
QObjectPrivate::connect(popup, &QQuickPopup::aboutToShow, d, &QQuickOverlayPrivate::popupAboutToShow);
QObjectPrivate::connect(popup, &QQuickPopup::aboutToHide, d, &QQuickOverlayPrivate::popupAboutToHide);
- QObjectPrivate::connect(popup, &QQuickPopup::closed, d, &QQuickOverlayPrivate::popupClosed);
}
} else if (change == ItemChildRemovedChange) {
d->popups.removeOne(popup);
+ d->destroyOverlay(popup);
QQuickDrawer *drawer = qobject_cast<QQuickDrawer *>(popup);
if (drawer) {
d->drawers.removeOne(drawer);
- d->destroyOverlay(drawer);
} else {
if (popup->isModal())
--d->modalPopups;
QObjectPrivate::disconnect(popup, &QQuickPopup::aboutToShow, d, &QQuickOverlayPrivate::popupAboutToShow);
QObjectPrivate::disconnect(popup, &QQuickPopup::aboutToHide, d, &QQuickOverlayPrivate::popupAboutToHide);
- QObjectPrivate::disconnect(popup, &QQuickPopup::closed, d, &QQuickOverlayPrivate::popupClosed);
}
}
}