Project: Fix setActiveTarget()

Allow setting to nullptr if no target is available.

Change-Id: Id51a176185eeaa31fef827d9ca722da9e62b9232
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Tobias Hunger
2018-05-29 15:43:42 +02:00
parent ca2b9672db
commit 28a1ef8bab

View File

@@ -269,18 +269,13 @@ bool Project::removeTarget(Target *target)
if (BuildManager::isBuilding(target)) if (BuildManager::isBuilding(target))
return false; 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 aboutToRemoveProjectConfiguration(target);
emit aboutToRemoveTarget(target); emit aboutToRemoveTarget(target);
auto keep = Utils::take(d->m_targets, 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 removedTarget(target);
emit removedProjectConfiguration(target); emit removedProjectConfiguration(target);
@@ -299,8 +294,12 @@ Target *Project::activeTarget() const
void Project::setActiveTarget(Target *target) void Project::setActiveTarget(Target *target)
{ {
if ((!target && d->m_targets.size() > 0) || if (d->m_activeTarget == target)
(target && Utils::contains(d->m_targets, target) && 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; d->m_activeTarget = target;
emit activeProjectConfigurationChanged(d->m_activeTarget); emit activeProjectConfigurationChanged(d->m_activeTarget);
emit activeTargetChanged(d->m_activeTarget); emit activeTargetChanged(d->m_activeTarget);