From 85f79179113276b2b1b22cc1e67a3dbc54864f90 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 29 Jan 2024 09:39:20 +0100 Subject: [PATCH] Ios: Only ever show a single dialog for developer mode It can happen that this is triggered twice for the same device, or for other devices when the dialog is still open. This looks funny and is not necessary, so avoid it. Task-number: QTBUG-121557 Change-Id: I0329104b3825b68b565ca1f8e00d785952c9d767 Reviewed-by: Alexandru Croitor --- src/plugins/ios/iosdevice.cpp | 48 ++++++++++++++++++++--------------- src/plugins/ios/iosdevice.h | 2 ++ 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/plugins/ios/iosdevice.cpp b/src/plugins/ios/iosdevice.cpp index f76f41db976..85ff89bf4b5 100644 --- a/src/plugins/ios/iosdevice.cpp +++ b/src/plugins/ios/iosdevice.cpp @@ -10,6 +10,7 @@ #include "iostr.h" #include +#include #include #include @@ -302,26 +303,33 @@ void IosDeviceManager::deviceInfo(IosToolHandler *, const QString &uid, bool shouldIgnore = newDev->m_ignoreDevice; newDev->m_ignoreDevice = true; if (devStatus == QLatin1String("*off*")) { - if (!shouldIgnore && !IosConfigurations::ignoreAllDevices()) { - QMessageBox mBox; - mBox.setText(Tr::tr("An iOS device in user mode has been detected.")); - mBox.setInformativeText(Tr::tr("Do you want to see how to set it up for development?")); - mBox.setStandardButtons(QMessageBox::NoAll | QMessageBox::No | QMessageBox::Yes); - mBox.setDefaultButton(QMessageBox::Yes); - int ret = mBox.exec(); - switch (ret) { - case QMessageBox::Yes: - Core::HelpManager::showHelpUrl( - QLatin1String("qthelp://org.qt-project.qtcreator/doc/creator-developing-ios.html")); - break; - case QMessageBox::No: - break; - case QMessageBox::NoAll: - IosConfigurations::setIgnoreAllDevices(true); - break; - default: - break; - } + if (!m_devModeDialog && !shouldIgnore && !IosConfigurations::ignoreAllDevices()) { + m_devModeDialog = new QMessageBox(Core::ICore::dialogParent()); + m_devModeDialog->setText( + Tr::tr("An iOS device in user mode has been detected.")); + m_devModeDialog->setInformativeText( + Tr::tr("Do you want to see how to set it up for development?")); + m_devModeDialog->setStandardButtons(QMessageBox::NoAll | QMessageBox::No + | QMessageBox::Yes); + m_devModeDialog->setDefaultButton(QMessageBox::Yes); + m_devModeDialog->setAttribute(Qt::WA_DeleteOnClose); + connect(m_devModeDialog, &QDialog::finished, this, [](int result) { + switch (result) { + case QMessageBox::Yes: + Core::HelpManager::showHelpUrl( + QLatin1String("qthelp://org.qt-project.qtcreator/doc/" + "creator-developing-ios.html")); + break; + case QMessageBox::No: + break; + case QMessageBox::NoAll: + IosConfigurations::setIgnoreAllDevices(true); + break; + default: + break; + } + }); + m_devModeDialog->show(); } } if (!m_userModeDeviceIds.contains(uid)) diff --git a/src/plugins/ios/iosdevice.h b/src/plugins/ios/iosdevice.h index 24bee023de7..b5e8d55c6e2 100644 --- a/src/plugins/ios/iosdevice.h +++ b/src/plugins/ios/iosdevice.h @@ -8,6 +8,7 @@ #include #include +#include #include namespace Ios { @@ -83,6 +84,7 @@ private: IosDeviceManager(QObject *parent = nullptr); QTimer m_userModeDevicesTimer; QStringList m_userModeDeviceIds; + QPointer m_devModeDialog; }; } // namespace Internal