From 7aec4d9bd0829fab0f3bd2b11095d23ef00adc98 Mon Sep 17 00:00:00 2001 From: dt <qtc-committer@nokia.com> Date: Mon, 11 Oct 2010 16:35:09 +0200 Subject: [PATCH] ProjectExplorer: Fix connnect/disconnect RunConfiguration::isEnabled() Reviewed-By: ck Task-Nr: QTCREATORBUG-2653 --- .../projectexplorer/projectexplorer.cpp | 65 +++++++++++++------ src/plugins/projectexplorer/projectexplorer.h | 3 + 2 files changed, 48 insertions(+), 20 deletions(-) diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 0d1837596e8..77112737a57 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -1789,37 +1789,62 @@ void ProjectExplorerPlugin::startupProjectChanged() d->m_projectsMode->setEnabled(project); if (previousStartupProject) { - disconnect(previousStartupProject->activeTarget(), SIGNAL(activeRunConfigurationChanged(ProjectExplorer::RunConfiguration*)), - this, SLOT(updateRunActions())); - disconnect(previousStartupProject, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)), - this, SLOT(updateDeployActions())); - disconnect(previousStartupProject->activeTarget()->activeRunConfiguration(), - SIGNAL(isEnabledChanged(bool)), this, SLOT(updateRunActions())); - - foreach (Target *t, previousStartupProject->targets()) - disconnect(t, SIGNAL(activeRunConfigurationChanged(ProjectExplorer::RunConfiguration*)), - this, SLOT(updateActions())); + this, SLOT(activeTargetChanged())); } previousStartupProject = project; if (project) { connect(project, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)), - this, SLOT(updateDeployActions())); + this, SLOT(activeTargetChanged())); + } - connect(project->activeTarget(), SIGNAL(activeRunConfigurationChanged(ProjectExplorer::RunConfiguration*)), - this, SLOT(updateRunActions())); + activeTargetChanged(); - if (project->activeTarget()->activeRunConfiguration()) { - connect(project->activeTarget()->activeRunConfiguration(), SIGNAL(isEnabledChanged(bool)), - this, SLOT(updateRunActions())); - foreach (Target *t, project->targets()) - connect(t, SIGNAL(activeRunConfigurationChanged(ProjectExplorer::RunConfiguration*)), - this, SLOT(updateActions())); - } + updateRunActions(); +} + +void ProjectExplorerPlugin::activeTargetChanged() +{ + static QPointer<Target> previousTarget = 0; + Target *target = 0; + if (startupProject()) + target = startupProject()->activeTarget(); + if (target == previousTarget) + return; + + if (previousTarget) { + disconnect(previousTarget, SIGNAL(activeRunConfigurationChanged(ProjectExplorer::RunConfiguration*)), + this, SLOT(activeRunConfigurationChanged())); + } + previousTarget = target; + if (target) { + connect(target, SIGNAL(activeRunConfigurationChanged(ProjectExplorer::RunConfiguration*)), + this, SLOT(activeRunConfigurationChanged())); } + updateDeployActions(); + activeRunConfigurationChanged(); +} + +void ProjectExplorerPlugin::activeRunConfigurationChanged() +{ + static QPointer<RunConfiguration> previousRunConfiguration = 0; + RunConfiguration *rc = 0; + if (startupProject() && startupProject()->activeTarget()) + rc = startupProject()->activeTarget()->activeRunConfiguration(); + if (rc == previousRunConfiguration) + return; + if (previousRunConfiguration) { + disconnect(previousRunConfiguration, SIGNAL(isEnabledChanged(bool)), + this, SLOT(updateRunActions())); + } + previousRunConfiguration = rc; + if (rc) { + connect(rc, SIGNAL(isEnabledChanged(bool)), + this, SLOT(updateRunActions())); + } updateRunActions(); } diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index 1a76e2cf434..292735c9f15 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -190,6 +190,9 @@ private slots: void runControlFinished(); void startupProjectChanged(); // Calls updateRunAction + void activeTargetChanged(); + void activeRunConfigurationChanged(); + void updateDeployActions(); void updateRunActions(); -- GitLab