From 033b641373ad69d04b267f9329c075bc35ff2664 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Wed, 4 Oct 2017 15:11:47 +0200 Subject: [PATCH] Session: Make sure startupProject is set whenever a project is open Never let the startupProject become nullptr while projects are still loaded. Change-Id: Ie442c3a9b6cc4a65564002edc45b60a7993d2a52 Reviewed-by: Tim Jenssen --- src/plugins/projectexplorer/session.cpp | 27 ++++++++----------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp index cc26b090136..f8ec0fb8b85 100644 --- a/src/plugins/projectexplorer/session.cpp +++ b/src/plugins/projectexplorer/session.cpp @@ -364,7 +364,7 @@ void SessionManager::setActiveDeployConfiguration(Target *target, DeployConfigur void SessionManager::setStartupProject(Project *startupProject) { - QTC_ASSERT(!startupProject + QTC_ASSERT((!startupProject && d->m_projects.isEmpty()) || (startupProject && d->m_projects.contains(startupProject)), return); if (d->m_startupProject == startupProject) @@ -495,7 +495,6 @@ bool SessionManager::save() */ void SessionManager::closeAllProjects() { - setStartupProject(nullptr); removeProjects(projects()); } @@ -1011,23 +1010,10 @@ bool SessionManager::loadSession(const QString &session) return false; } - setStartupProject(nullptr); - - QList oldProjects = projects(); - auto it = oldProjects.begin(); - auto end = oldProjects.end(); - - while (it != end) { - int index = fileList.indexOf((*it)->projectFilePath().toString()); - if (index != -1) { - fileList.removeAt(index); - it = oldProjects.erase(it); - } else { - ++it; - } - } - - removeProjects(oldProjects); + // find a list of projects to close later + const QList oldProjects = Utils::filtered(projects(), [&fileList](Project *p) { + return !fileList.contains(p->projectFilePath().toString()); + }); d->m_failedProjects.clear(); d->m_depMap.clear(); @@ -1071,6 +1057,9 @@ bool SessionManager::loadSession(const QString &session) d->sessionLoadingProgress(); d->restoreDependencies(reader); d->restoreStartupProject(reader); + + removeProjects(oldProjects); // only remove old projects now that the startup project is set! + d->restoreEditors(reader); d->m_future.reportFinished();