From b1dbd7e3580fb92879e0b3e0c9d21c1fd8dc4012 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 17 Jul 2019 17:16:07 +0200 Subject: [PATCH] ProjectExplorer: Update run config list centrally This prodecure requires no further information from the specific project managers, so we can start it from the ProjectExplorer itself. Also wait until after project parsing has officially finished and the run configurations have updated their "enabled" state. Otherwise, RunConfiguration::isEnabled() will always return false, potentially leading to the active run configuration getting switched unintentionally. Fixes: QTCREATORBUG-21692 Change-Id: I32f4f758b5baa6222329d07b811993568eff1ee3 Reviewed-by: hjk --- src/plugins/cmakeprojectmanager/cmakeproject.cpp | 2 -- src/plugins/projectexplorer/target.cpp | 6 ++++++ src/plugins/qbsprojectmanager/qbsproject.cpp | 2 -- src/plugins/qmakeprojectmanager/qmakeproject.cpp | 7 ------- src/plugins/qmakeprojectmanager/qmakeproject.h | 1 - 5 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 512e0124dec..9b66abfeee6 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -375,8 +375,6 @@ void CMakeProject::updateProjectData(CMakeBuildConfiguration *bc) Target *t = bc->target(); t->setApplicationTargets(bc->appTargets()); t->setDeploymentData(bc->deploymentData()); - - t->updateDefaultRunConfigurations(); } { diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp index ae7b563dbd2..1996d8c96fc 100644 --- a/src/plugins/projectexplorer/target.cpp +++ b/src/plugins/projectexplorer/target.cpp @@ -118,6 +118,12 @@ Target::Target(Project *project, Kit *k, _constructor_tag) : { QTC_CHECK(d->m_kit); connect(DeviceManager::instance(), &DeviceManager::updated, this, &Target::updateDeviceState); + connect(project, &Project::parsingFinished, this, [this](bool success) { + if (success && this->project() == SessionManager::startupProject() + && this == this->project()->activeTarget()) { + updateDefaultRunConfigurations(); + } + }, Qt::QueuedConnection); // Must wait for run configs to change their enabled state. setDisplayName(d->m_kit->displayName()); setToolTip(d->m_kit->toHtml()); diff --git a/src/plugins/qbsprojectmanager/qbsproject.cpp b/src/plugins/qbsprojectmanager/qbsproject.cpp index a634aaf3ca8..3d658ce8f7f 100644 --- a/src/plugins/qbsprojectmanager/qbsproject.cpp +++ b/src/plugins/qbsprojectmanager/qbsproject.cpp @@ -1199,8 +1199,6 @@ void QbsProject::updateBuildTargetData() OpTimer optimer("updateBuildTargetData"); updateApplicationTargets(); updateDeploymentInfo(); - if (activeTarget()) - activeTarget()->updateDefaultRunConfigurations(); } } // namespace Internal diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index c3426e9b417..281f88de579 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -348,12 +348,6 @@ void QmakeProject::updateQmlJSCodeModel() modelManager->updateProjectInfo(projectInfo, this); } -void QmakeProject::updateRunConfigurations() -{ - if (activeTarget()) - activeTarget()->updateDefaultRunConfigurations(); -} - void QmakeProject::scheduleAsyncUpdate(QmakeProFile *file, QmakeProFile::AsyncUpdateDelay delay) { if (m_asyncUpdateState == ShuttingDown) @@ -492,7 +486,6 @@ void QmakeProject::decrementPendingEvaluateFutures() updateBuildSystemData(); if (activeTarget()) activeTarget()->updateDefaultDeployConfigurations(); - updateRunConfigurations(); emitParsingFinished(true); // Qmake always returns (some) data, even when it failed:-) } } diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.h b/src/plugins/qmakeprojectmanager/qmakeproject.h index 835496d176a..4c3169716bb 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.h +++ b/src/plugins/qmakeprojectmanager/qmakeproject.h @@ -131,7 +131,6 @@ private: void setAllBuildConfigurationsEnabled(bool enabled); QString executableFor(const QmakeProFile *file); - void updateRunConfigurations(); void updateCppCodeModel(); void updateQmlJSCodeModel();