From 8fb22881cc0a45d621ab00807d4f13b921f14933 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 8 Apr 2025 09:32:18 +0200 Subject: [PATCH] QProgressDialog: Set infinite minimum duration To suppress calls to QCoreApplication::processEvents() from inside QProgressDialog::setValue(). Otherwise it interfere with the task tree internals and may lead to crash. Fixes: QTCREATORBUG-32746 Change-Id: Ic6f42061fedd702aec070e667ecafe27e1a2158b Reviewed-by: Eike Ziller --- src/plugins/android/androidsdkdownloader.cpp | 1 + src/plugins/android/avdcreatordialog.cpp | 1 + src/plugins/extensionmanager/extensionmanagerwidget.cpp | 1 + src/plugins/projectexplorer/windowsappsdksettings.cpp | 1 + 4 files changed, 4 insertions(+) diff --git a/src/plugins/android/androidsdkdownloader.cpp b/src/plugins/android/androidsdkdownloader.cpp index 682692f7ede..93757e9f097 100644 --- a/src/plugins/android/androidsdkdownloader.cpp +++ b/src/plugins/android/androidsdkdownloader.cpp @@ -95,6 +95,7 @@ GroupItem downloadSdkRecipe() progressDialog.reset(new QProgressDialog(Tr::tr("Downloading SDK Tools package..."), Tr::tr("Cancel"), 0, 100, Core::ICore::dialogParent())); progressDialog->setWindowModality(Qt::ApplicationModal); + progressDialog->setMinimumDuration(INT_MAX); // In order to suppress calls to processEvents() from setValue() progressDialog->setWindowTitle(dialogTitle()); progressDialog->setFixedSize(progressDialog->sizeHint()); progressDialog->setAutoClose(false); diff --git a/src/plugins/android/avdcreatordialog.cpp b/src/plugins/android/avdcreatordialog.cpp index 8a18d9fde7e..3adf7d78b2d 100644 --- a/src/plugins/android/avdcreatordialog.cpp +++ b/src/plugins/android/avdcreatordialog.cpp @@ -317,6 +317,7 @@ void AvdDialog::createAvd() progressDialog.reset(new QProgressDialog(Core::ICore::dialogParent())); progressDialog->setRange(0, 0); progressDialog->setWindowModality(Qt::ApplicationModal); + progressDialog->setMinimumDuration(INT_MAX); // In order to suppress calls to processEvents() from setValue() progressDialog->setWindowTitle("Create new AVD"); progressDialog->setLabelText(Tr::tr("Creating new AVD device...")); progressDialog->setFixedSize(progressDialog->sizeHint()); diff --git a/src/plugins/extensionmanager/extensionmanagerwidget.cpp b/src/plugins/extensionmanager/extensionmanagerwidget.cpp index 786574f38e0..ce259e681b8 100644 --- a/src/plugins/extensionmanager/extensionmanagerwidget.cpp +++ b/src/plugins/extensionmanager/extensionmanagerwidget.cpp @@ -697,6 +697,7 @@ void ExtensionManagerWidget::fetchAndInstallPlugin(const QUrl &url, const QStrin Tr::tr("Downloading..."), Tr::tr("Cancel"), 0, 0, ICore::dialogParent())); progressDialog->setWindowTitle(Tr::tr("Download Extension")); progressDialog->setWindowModality(Qt::ApplicationModal); + progressDialog->setMinimumDuration(INT_MAX); // In order to suppress calls to processEvents() from setValue() progressDialog->setFixedSize(progressDialog->sizeHint()); progressDialog->setAutoClose(false); progressDialog->show(); // TODO: Should not be needed. Investigate possible QT_BUG diff --git a/src/plugins/projectexplorer/windowsappsdksettings.cpp b/src/plugins/projectexplorer/windowsappsdksettings.cpp index 7c6a3c9053e..a48a12038d3 100644 --- a/src/plugins/projectexplorer/windowsappsdksettings.cpp +++ b/src/plugins/projectexplorer/windowsappsdksettings.cpp @@ -318,6 +318,7 @@ GroupItem WindowsSettingsWidget::downloadNugetRecipe() Tr::tr("Cancel"), 0, 100, Core::ICore::dialogParent())); progressDialog->setWindowModality(Qt::ApplicationModal); + progressDialog->setMinimumDuration(INT_MAX); // In order to suppress calls to processEvents() from setValue() progressDialog->setWindowTitle(Tr::tr("Downloading")); progressDialog->setFixedSize(progressDialog->sizeHint()); progressDialog->setAutoClose(false);