forked from qt-creator/qt-creator
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:
@@ -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();
|
||||||
|
Reference in New Issue
Block a user