diff options
| author | Ed Cooke <ed.cooke@qt.io> | 2024-08-22 13:19:54 +0200 |
|---|---|---|
| committer | Ed Cooke <ed.cooke@qt.io> | 2024-09-06 00:54:21 +0200 |
| commit | 1f9d7d2daa6541aab2e830e16523253232625145 (patch) | |
| tree | 1e596bb43e2b7d449090add41541b775f3590805 | |
| parent | c5f50cf7deda4330c569fe28ba1d015898b7cdbf (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.cpp | 21 | ||||
| -rw-r--r-- | tests/auto/quickdialogs/qquickfiledialogimpl/tst_qquickfiledialogimpl.cpp | 3 |
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())); |
