From 124c62a5a0bca8d64c26a64478b9875664d9fb9c Mon Sep 17 00:00:00 2001 From: Yasser Grimes Date: Wed, 28 Feb 2024 11:55:31 +0200 Subject: [PATCH] McuSupport: Fix kit creation dialog crash Use copies of messages to avoid their reference going out of scope Fix increment current message index for when there is only one message Fixes: QTCREATORBUG-30360 Change-Id: I26fac50ed171aaed7d178cc8f97ace401bf49e7c Reviewed-by: Eike Ziller --- .../mcusupport/dialogs/mcukitcreationdialog.cpp | 10 ++++++++-- src/plugins/mcusupport/mcusupportoptions.cpp | 4 ++-- src/plugins/mcusupport/mcusupportoptions.h | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/plugins/mcusupport/dialogs/mcukitcreationdialog.cpp b/src/plugins/mcusupport/dialogs/mcukitcreationdialog.cpp index 897fcd0aa14..4100052cbd5 100644 --- a/src/plugins/mcusupport/dialogs/mcukitcreationdialog.cpp +++ b/src/plugins/mcusupport/dialogs/mcukitcreationdialog.cpp @@ -78,12 +78,18 @@ McuKitCreationDialog::McuKitCreationDialog(const MessagesList &messages, QPushButton *fixButton = buttonBox->addButton(Tr::tr("Fix"), QDialogButtonBox::ActionRole); QPushButton *helpButton = buttonBox->addButton(Tr::tr("Help"), QDialogButtonBox::HelpRole); - if (messages.size() == 1) { + if (messages.empty()) { + fixButton->setVisible(false); + m_informationLabel->setText( + QCoreApplication::translate("QtC::Autotest", "No errors detected")); + } + + if (messages.size() < 2) { m_nextButton->setVisible(false); m_previousButton->setVisible(false); } //display first message - if (messages.size() > 1) + if (!messages.empty()) updateMessage(1); if (qtMCUPackage->isValidStatus()) diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 187591298cf..a8b25013546 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -255,7 +255,7 @@ McuKitManager::UpgradeOption McuSupportOptions::askForKitUpgrades() return McuKitManager::UpgradeOption::Ignore; } -void McuSupportOptions::displayKitCreationMessages(const MessagesList &messages, +void McuSupportOptions::displayKitCreationMessages(const MessagesList messages, const SettingsHandler::Ptr &settingsHandler, McuPackagePtr qtMCUsPackage) { @@ -269,7 +269,7 @@ void McuSupportOptions::displayKitCreationMessages(const MessagesList &messages, Tr::tr("Errors while creating Qt for MCUs kits"), Utils::InfoBarEntry::GlobalSuppression::Enabled); - info.addCustomButton(Tr::tr("Details"), [=] { + info.addCustomButton(Tr::tr("Details"), [messages, &settingsHandler, qtMCUsPackage] { auto popup = new McuKitCreationDialog(messages, settingsHandler, qtMCUsPackage); popup->exec(); delete popup; diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index d8a5c3fdbf4..1c0a902ba14 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -59,7 +59,7 @@ public: [[nodiscard]] Utils::FilePath qulDirFromSettings() const; [[nodiscard]] Utils::FilePath qulDocsDir() const; static McuKitManager::UpgradeOption askForKitUpgrades(); - static void displayKitCreationMessages(const MessagesList &messages, + static void displayKitCreationMessages(const MessagesList messages, const SettingsHandler::Ptr &settingsHandler, McuPackagePtr qtMCUsPackage);