From dc885e39c9e647ac8842fc92218e66e54e93bd43 Mon Sep 17 00:00:00 2001 From: Timur Pocheptsov Date: Thu, 17 Oct 2024 16:47:06 +0200 Subject: [PATCH] QFileDialog: disconnect nativeEnterDirectory in dtor QIOSFileDialog emits directoryEntered from its hide/setVisible after QFileDialog is a QDialog already (in the process of destruction). This results in an ssert: "ASSERT failure in QFileDialog: "Called object is not of the correct type (class destructor may have already run)"", Fixes: QTBUG-130133 Change-Id: I8471a8434f7ea854a91b989bb3a6f3b962143ea8 Reviewed-by: Christian Ehrlicher (cherry picked from commit 2083daf79bc53a65a821e1cd3463638ac0c65f2e) Reviewed-by: Qt Cherry-pick Bot --- src/widgets/dialogs/qfiledialog.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index 1d792fd89e5..d414cbf841f 100644 --- a/src/widgets/dialogs/qfiledialog.cpp +++ b/src/widgets/dialogs/qfiledialog.cpp @@ -373,10 +373,16 @@ QFileDialog::QFileDialog(const QFileDialogArgs &args) */ QFileDialog::~QFileDialog() { -#if QT_CONFIG(settings) Q_D(QFileDialog); +#if QT_CONFIG(settings) d->saveSettings(); #endif + if (QPlatformFileDialogHelper *platformHelper = d->platformFileDialogHelper()) { + // QIOSFileDialog emits directoryChanged while hiding, causing an assert + // because of a partially destroyed QFileDialog. + QObjectPrivate::disconnect(platformHelper, &QPlatformFileDialogHelper::directoryEntered, + d, &QFileDialogPrivate::nativeEnterDirectory); + } } /*!