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 <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2017-09-28 17:59:16 +02:00
parent f8ded0df26
commit 7ae35898b5

View File

@@ -2629,8 +2629,16 @@ void ProjectExplorerPluginPrivate::projectAdded(Project *pro)
m_projectsMode->setEnabled(true); m_projectsMode->setEnabled(true);
// more specific action en and disabling ? // more specific action en and disabling ?
pro->subscribeSignal(&BuildConfiguration::enabledChanged, this, [this]() { pro->subscribeSignal(&BuildConfiguration::enabledChanged, this, [this]() {
if (static_cast<BuildConfiguration *>(sender())->isActive()) auto bc = qobject_cast<BuildConfiguration *>(sender());
if (bc && bc->isActive() && bc->project() == SessionManager::startupProject()) {
updateActions(); updateActions();
emit m_instance->updateRunActions();
}
});
pro->subscribeSignal(&RunConfiguration::requestRunActionsUpdate, this, [this]() {
auto rc = qobject_cast<RunConfiguration *>(sender());
if (rc && rc->isActive() && rc->project() == SessionManager::startupProject())
emit m_instance->updateRunActions();
}); });
} }
@@ -2708,15 +2716,6 @@ void ProjectExplorerPluginPrivate::activeRunConfigurationChanged()
rc = startupProject->activeTarget()->activeRunConfiguration(); rc = startupProject->activeTarget()->activeRunConfiguration();
if (rc == previousRunConfiguration) if (rc == previousRunConfiguration)
return; 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(); emit m_instance->updateRunActions();
} }
@@ -2729,15 +2728,7 @@ void ProjectExplorerPluginPrivate::activeBuildConfigurationChanged()
bc = startupProject->activeTarget()->activeBuildConfiguration(); bc = startupProject->activeTarget()->activeBuildConfiguration();
if (bc == previousBuildConfiguration) if (bc == previousBuildConfiguration)
return; return;
if (previousBuildConfiguration) { updateActions();
disconnect(previousBuildConfiguration.data(), &BuildConfiguration::enabledChanged,
m_instance, &ProjectExplorerPlugin::updateRunActions);
}
previousBuildConfiguration = bc;
if (bc) {
connect(bc, &BuildConfiguration::enabledChanged,
m_instance, &ProjectExplorerPlugin::updateRunActions);
}
emit m_instance->updateRunActions(); emit m_instance->updateRunActions();
} }