From 7ae35898b5aa2c94de459c58841dfc5b1cf2d71f Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Thu, 28 Sep 2017 17:59:16 +0200 Subject: [PATCH] ProjectExplorer: Make Run button state more robust Do not connect/disconnect all the time, just subscribe to the signals. Change-Id: I57023e9c0c758f5b09f6ef592fc2dd2a679f7c94 Reviewed-by: Tim Jenssen --- .../projectexplorer/projectexplorer.cpp | 29 +++++++------------ 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 2b27328ddbf..118d8f37b94 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -2629,8 +2629,16 @@ void ProjectExplorerPluginPrivate::projectAdded(Project *pro) m_projectsMode->setEnabled(true); // more specific action en and disabling ? pro->subscribeSignal(&BuildConfiguration::enabledChanged, this, [this]() { - if (static_cast(sender())->isActive()) + auto bc = qobject_cast(sender()); + if (bc && bc->isActive() && bc->project() == SessionManager::startupProject()) { updateActions(); + emit m_instance->updateRunActions(); + } + }); + pro->subscribeSignal(&RunConfiguration::requestRunActionsUpdate, this, [this]() { + auto rc = qobject_cast(sender()); + if (rc && rc->isActive() && rc->project() == SessionManager::startupProject()) + emit m_instance->updateRunActions(); }); } @@ -2708,15 +2716,6 @@ void ProjectExplorerPluginPrivate::activeRunConfigurationChanged() rc = startupProject->activeTarget()->activeRunConfiguration(); if (rc == previousRunConfiguration) return; - if (previousRunConfiguration) { - disconnect(previousRunConfiguration.data(), &RunConfiguration::requestRunActionsUpdate, - m_instance, &ProjectExplorerPlugin::updateRunActions); - } - previousRunConfiguration = rc; - if (rc) { - connect(rc, &RunConfiguration::requestRunActionsUpdate, - m_instance, &ProjectExplorerPlugin::updateRunActions); - } emit m_instance->updateRunActions(); } @@ -2729,15 +2728,7 @@ void ProjectExplorerPluginPrivate::activeBuildConfigurationChanged() bc = startupProject->activeTarget()->activeBuildConfiguration(); if (bc == previousBuildConfiguration) return; - if (previousBuildConfiguration) { - disconnect(previousBuildConfiguration.data(), &BuildConfiguration::enabledChanged, - m_instance, &ProjectExplorerPlugin::updateRunActions); - } - previousBuildConfiguration = bc; - if (bc) { - connect(bc, &BuildConfiguration::enabledChanged, - m_instance, &ProjectExplorerPlugin::updateRunActions); - } + updateActions(); emit m_instance->updateRunActions(); }