aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEd Cooke <ed.cooke@qt.io>2024-08-22 13:19:54 +0200
committerEd Cooke <ed.cooke@qt.io>2024-09-06 00:54:21 +0200
commit1f9d7d2daa6541aab2e830e16523253232625145 (patch)
tree1e596bb43e2b7d449090add41541b775f3590805
parentc5f50cf7deda4330c569fe28ba1d015898b7cdbf (diff)
Set visibility of popupItem to false when a popup window is not visible
When transitioning out of a popup with popupType set to Popup Window, the popupItem's visibility needs to be set to false so that listeners are notified of the change. Fixes: QTBUG-126815 Pick-to: 6.8 Change-Id: I2545e530fa22d14478ab90f0fc3da61ef79dc171 Reviewed-by: Oliver Eftevaag <oliver.eftevaag@qt.io>
-rw-r--r--src/quicktemplates/qquickpopup.cpp21
-rw-r--r--tests/auto/quickdialogs/qquickfiledialogimpl/tst_qquickfiledialogimpl.cpp3
2 files changed, 12 insertions, 12 deletions
diff --git a/src/quicktemplates/qquickpopup.cpp b/src/quicktemplates/qquickpopup.cpp
index 71662eb7b8..6f2276f545 100644
--- a/src/quicktemplates/qquickpopup.cpp
+++ b/src/quicktemplates/qquickpopup.cpp
@@ -826,7 +826,7 @@ void QQuickPopupPrivate::finalizeExitTransition()
{
Q_Q(QQuickPopup);
getPositioner()->setParentItem(nullptr);
- if (popupItem && !popupWindow) {
+ if (popupItem) {
popupItem->setParentItem(nullptr);
popupItem->setVisible(false);
}
@@ -1092,17 +1092,18 @@ void QQuickPopupPrivate::adjustPopupItemParentAndWindow()
}
if (usePopupWindow()) {
- if (!popupWindow) {
- popupWindow = new QQuickPopupWindow(q, window);
- popupWindow->setWidth(popupItem->width() + windowInsets().left() + windowInsets().right());
- popupWindow->setHeight(popupItem->height() + windowInsets().top() + windowInsets().bottom());
- popupWindow->setModality(modal ? Qt::ApplicationModal : Qt::NonModal);
- popupItem->resetTitle();
- popupWindow->setTitle(m_title);
+ if (visible) {
+ if (!popupWindow) {
+ popupWindow = new QQuickPopupWindow(q, window);
+ popupWindow->setWidth(popupItem->width() + windowInsets().left() + windowInsets().right());
+ popupWindow->setHeight(popupItem->height() + windowInsets().top() + windowInsets().bottom());
+ popupWindow->setModality(modal ? Qt::ApplicationModal : Qt::NonModal);
+ popupItem->resetTitle();
+ popupWindow->setTitle(m_title);
+ }
popupItem->setParentItem(popupWindow->contentItem());
popupItem->forceActiveFocus(Qt::PopupFocusReason);
}
- popupItem->setVisible(visible);
popupWindow->setVisible(visible);
} else {
if (visible) {
@@ -1129,8 +1130,8 @@ void QQuickPopupPrivate::adjustPopupItemParentAndWindow()
}
popupItem->setTitle(m_title);
- popupItem->setVisible(visible);
}
+ popupItem->setVisible(visible);
}
QQuickItem *QQuickPopupPrivate::createDimmer(QQmlComponent *component, QQuickPopup *popup, QQuickItem *parent) const
diff --git a/tests/auto/quickdialogs/qquickfiledialogimpl/tst_qquickfiledialogimpl.cpp b/tests/auto/quickdialogs/qquickfiledialogimpl/tst_qquickfiledialogimpl.cpp
index 860fb5c6c0..f0f1cca397 100644
--- a/tests/auto/quickdialogs/qquickfiledialogimpl/tst_qquickfiledialogimpl.cpp
+++ b/tests/auto/quickdialogs/qquickfiledialogimpl/tst_qquickfiledialogimpl.cpp
@@ -981,8 +981,7 @@ void tst_QQuickFileDialogImpl::changeNameFilters()
dialogHelper.dialog->close();
QVERIFY(!dialogHelper.dialog->isVisible());
QTRY_VERIFY(!dialogHelper.quickDialog->isVisible());
- QTRY_COMPARE(dialogHelper.popupWindow()->isVisible(), false);
- QTRY_COMPARE(dialogHelper.popupWindow()->isExposed(), false);
+ QTRY_VERIFY(!dialogHelper.popupWindow());
// Set .txt and .html filters.
QSignalSpy nameFiltersChangedSpy(dialogHelper.dialog, SIGNAL(nameFiltersChanged()));