Windows: fix warning on opening FileDialog after changing filters

Destroy native file dialog on Windows as soon as it closes.
Currently the instance of native file dialog on Windows may stay live
even when a FileDialog control was closed and won't be opened anymore
in the app session. At the same time, when the FileDialog is opened
again, the instance of native file dialog is recreated so we don't
need to keep previous instance, because this may lead to situation
when QQuickFileDialog configures old instance of the native dialog,
which is causing problems.

Fixes: QTBUG-61042
Fixes: QTBUG-77211
Change-Id: Ia537264e8494b83dec7d5139744838242b281f1f
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
(cherry picked from commit de704b633d4f9469a868e86fc22b8d99ef61eacb)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Vladimir Belyavsky 2023-01-13 14:03:09 +03:00 committed by Qt Cherry-pick Bot
parent ba259ef0f3
commit b75ab76624

View File

@ -239,7 +239,7 @@ QWindowsNativeDialogBase *QWindowsDialogHelperBase<BaseClass>::ensureNativeDialo
// Create dialog and apply common settings. Check "executed" flag as well
// since for example IFileDialog::Show() works only once.
if (m_nativeDialog.isNull() || m_nativeDialog->executed())
m_nativeDialog = QWindowsNativeDialogBasePtr(createNativeDialog());
m_nativeDialog = QWindowsNativeDialogBasePtr(createNativeDialog(), &QObject::deleteLater);
return m_nativeDialog.data();
}
@ -324,12 +324,13 @@ void QWindowsDialogHelperBase<BaseClass>::stopTimer()
}
}
template <class BaseClass>
void QWindowsDialogHelperBase<BaseClass>::hide()
{
if (m_nativeDialog)
if (m_nativeDialog) {
m_nativeDialog->close();
m_nativeDialog.clear();
}
m_ownerWindow = nullptr;
}