diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp index b5fddb74ce232e11ddcb4b95021cf465d47dae22..2b77aaf43a4f37e56ed5dc51db2566f0fd4de2d8 100644 --- a/src/plugins/projectexplorer/session.cpp +++ b/src/plugins/projectexplorer/session.cpp @@ -1017,10 +1017,15 @@ bool SessionManager::loadSession(const QString &session) } // find a list of projects to close later - const QList<Project *> oldProjects = Utils::filtered(projects(), [&fileList](Project *p) { - return !fileList.contains(p->projectFilePath().toString()); + const QList<Project *> projectsToRemove = Utils::filtered(projects(), [&fileList](Project *p) { + return !fileList.contains(p->projectFilePath().toString()); + }); + const QList<Project *> openProjects = projects(); + const QStringList projectPathsToLoad = Utils::filtered(fileList, [&openProjects](const QString &path) { + return !Utils::contains(openProjects, [&path](Project *p) { + return p->projectFilePath().toString() == path; + }); }); - d->m_failedProjects.clear(); d->m_depMap.clear(); d->m_values.clear(); @@ -1052,19 +1057,19 @@ bool SessionManager::loadSession(const QString &session) if (c.isValid()) StyleHelper::setBaseColor(c); - d->m_future.setProgressRange(0, fileList.count() + 1/*initialization above*/ + 1/*editors*/); + d->m_future.setProgressRange(0, projectPathsToLoad.count() + 1/*initialization above*/ + 1/*editors*/); d->m_future.setProgressValue(1); // if one processEvents doesn't get the job done // just use two! QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); - d->restoreProjects(fileList); + d->restoreProjects(projectPathsToLoad); d->sessionLoadingProgress(); d->restoreDependencies(reader); d->restoreStartupProject(reader); - removeProjects(oldProjects); // only remove old projects now that the startup project is set! + removeProjects(projectsToRemove); // only remove old projects now that the startup project is set! d->restoreEditors(reader); @@ -1079,6 +1084,7 @@ bool SessionManager::loadSession(const QString &session) ModeManager::activateMode(modeId); ModeManager::setFocusToCurrentMode(); } else { + removeProjects(projects()); ModeManager::activateMode(Id(Core::Constants::MODE_EDIT)); ModeManager::setFocusToCurrentMode(); }