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 <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2017-10-04 15:11:47 +02:00
parent 56086d6bb5
commit 033b641373

View File

@@ -364,7 +364,7 @@ void SessionManager::setActiveDeployConfiguration(Target *target, DeployConfigur
void SessionManager::setStartupProject(Project *startupProject) void SessionManager::setStartupProject(Project *startupProject)
{ {
QTC_ASSERT(!startupProject QTC_ASSERT((!startupProject && d->m_projects.isEmpty())
|| (startupProject && d->m_projects.contains(startupProject)), return); || (startupProject && d->m_projects.contains(startupProject)), return);
if (d->m_startupProject == startupProject) if (d->m_startupProject == startupProject)
@@ -495,7 +495,6 @@ bool SessionManager::save()
*/ */
void SessionManager::closeAllProjects() void SessionManager::closeAllProjects()
{ {
setStartupProject(nullptr);
removeProjects(projects()); removeProjects(projects());
} }
@@ -1011,23 +1010,10 @@ bool SessionManager::loadSession(const QString &session)
return false; return false;
} }
setStartupProject(nullptr); // find a list of projects to close later
const QList<Project *> oldProjects = Utils::filtered(projects(), [&fileList](Project *p) {
QList<Project *> oldProjects = projects(); return !fileList.contains(p->projectFilePath().toString());
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);
d->m_failedProjects.clear(); d->m_failedProjects.clear();
d->m_depMap.clear(); d->m_depMap.clear();
@@ -1071,6 +1057,9 @@ bool SessionManager::loadSession(const QString &session)
d->sessionLoadingProgress(); d->sessionLoadingProgress();
d->restoreDependencies(reader); d->restoreDependencies(reader);
d->restoreStartupProject(reader); d->restoreStartupProject(reader);
removeProjects(oldProjects); // only remove old projects now that the startup project is set!
d->restoreEditors(reader); d->restoreEditors(reader);
d->m_future.reportFinished(); d->m_future.reportFinished();