From 28a1ef8bab554a76523f5990dbb7468ea107e81e Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Tue, 29 May 2018 15:43:42 +0200 Subject: [PATCH] Project: Fix setActiveTarget() Allow setting to nullptr if no target is available. Change-Id: Id51a176185eeaa31fef827d9ca722da9e62b9232 Reviewed-by: Eike Ziller --- src/plugins/projectexplorer/project.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 895be479c40..803dd3be672 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -269,18 +269,13 @@ bool Project::removeTarget(Target *target) if (BuildManager::isBuilding(target)) return false; - if (target == activeTarget()) { - if (d->m_targets.size() == 1) - SessionManager::setActiveTarget(this, nullptr, SetActive::Cascade); - else if (d->m_targets.at(0).get() == target) - SessionManager::setActiveTarget(this, d->m_targets.at(1).get(), SetActive::Cascade); - else - SessionManager::setActiveTarget(this, d->m_targets.at(0).get(), SetActive::Cascade); - } - emit aboutToRemoveProjectConfiguration(target); emit aboutToRemoveTarget(target); auto keep = Utils::take(d->m_targets, target); + if (target == d->m_activeTarget) { + Target *newActiveTarget = (d->m_targets.size() == 0 ? nullptr : d->m_targets.at(0).get()); + SessionManager::setActiveTarget(this, newActiveTarget, SetActive::Cascade); + } emit removedTarget(target); emit removedProjectConfiguration(target); @@ -299,8 +294,12 @@ Target *Project::activeTarget() const void Project::setActiveTarget(Target *target) { - if ((!target && d->m_targets.size() > 0) || - (target && Utils::contains(d->m_targets, target) && d->m_activeTarget != target)) { + if (d->m_activeTarget == target) + return; + + // Allow to set nullptr just before the last target is removed or when no target exists. + if ((!target && d->m_targets.size() == 0) || + (target && Utils::contains(d->m_targets, target))) { d->m_activeTarget = target; emit activeProjectConfigurationChanged(d->m_activeTarget); emit activeTargetChanged(d->m_activeTarget);