From c73266783875e49dbb4722ff673119c8213f993e Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 4 Jul 2023 18:16:41 +0200 Subject: [PATCH] QmakeProjectManager: Prevent infinite loop on ABI change Fixes: QTCREATORBUG-29204 Change-Id: I6f4e4fa96f6c48dc83f0e5baf2205421b9ff67ca Reviewed-by: Eike Ziller Reviewed-by: --- src/plugins/qmakeprojectmanager/qmakestep.cpp | 17 +++++++++++++---- src/plugins/qmakeprojectmanager/qmakestep.h | 1 + 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/plugins/qmakeprojectmanager/qmakestep.cpp b/src/plugins/qmakeprojectmanager/qmakestep.cpp index 27e29e497e8..93e13f71f0c 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.cpp +++ b/src/plugins/qmakeprojectmanager/qmakestep.cpp @@ -510,9 +510,9 @@ QWidget *QMakeStep::createConfigWidget() widget, [this] { qtVersionChanged(); }); connect(abisListWidget, &QListWidget::itemChanged, this, [this] { - abisChanged(); - if (QmakeBuildConfiguration *bc = qmakeBuildConfiguration()) - BuildManager::buildLists({bc->cleanSteps()}); + if (m_ignoreChanges.isLocked()) + return; + handleAbiWidgetChange(); }); connect(widget, &QObject::destroyed, this, [this] { @@ -654,6 +654,8 @@ void QMakeStep::askForRebuild(const QString &title) void QMakeStep::updateAbiWidgets() { + const GuardLocker locker(m_ignoreChanges); + if (!abisLabel) return; @@ -702,7 +704,7 @@ void QMakeStep::updateAbiWidgets() item->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); item->setCheckState(selectedAbis.contains(param) ? Qt::Checked : Qt::Unchecked); } - abisChanged(); + handleAbiWidgetChange(); } } @@ -711,6 +713,13 @@ void QMakeStep::updateEffectiveQMakeCall() m_effectiveCall->setValue(effectiveQMakeCall()); } +void QMakeStep::handleAbiWidgetChange() +{ + abisChanged(); + if (QmakeBuildConfiguration *bc = qmakeBuildConfiguration()) + BuildManager::buildLists({bc->cleanSteps()}); +} + void QMakeStep::recompileMessageBoxFinished(int button) { if (button == QMessageBox::Yes) { diff --git a/src/plugins/qmakeprojectmanager/qmakestep.h b/src/plugins/qmakeprojectmanager/qmakestep.h index f72c48d4612..d977eedd904 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.h +++ b/src/plugins/qmakeprojectmanager/qmakestep.h @@ -155,6 +155,7 @@ private: void updateAbiWidgets(); void updateEffectiveQMakeCall(); + void handleAbiWidgetChange(); Utils::CommandLine m_qmakeCommand; Utils::CommandLine m_makeCommand;