forked from qt-creator/qt-creator
SessionManager: Don't autosave the session while loading a session
Change-Id: I3ce769f9d9753b2771b349ad19a5b248a7f306d2 Reviewed-by: Eike Ziller <eike.ziller@nokia.com>
This commit is contained in:
@@ -1232,13 +1232,15 @@ void ProjectExplorerPlugin::savePersistentSettings()
|
|||||||
if (d->m_shuttingDown)
|
if (d->m_shuttingDown)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
foreach (Project *pro, d->m_session->projects())
|
if (!d->m_session->loadingSession()) {
|
||||||
pro->saveSettings();
|
foreach (Project *pro, d->m_session->projects())
|
||||||
|
pro->saveSettings();
|
||||||
|
|
||||||
if (d->m_session->isDefaultVirgin()) {
|
if (d->m_session->isDefaultVirgin()) {
|
||||||
// do not save new virgin default sessions
|
// do not save new virgin default sessions
|
||||||
} else {
|
} else {
|
||||||
d->m_session->save();
|
d->m_session->save();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QSettings *s = Core::ICore::settings();
|
QSettings *s = Core::ICore::settings();
|
||||||
@@ -1492,7 +1494,6 @@ void ProjectExplorerPlugin::restoreSession()
|
|||||||
|
|
||||||
Core::ICore::openFiles(combinedList, Core::ICore::OpenFilesFlags(Core::ICore::CanContainLineNumbers | Core::ICore::SwitchMode));
|
Core::ICore::openFiles(combinedList, Core::ICore::OpenFilesFlags(Core::ICore::CanContainLineNumbers | Core::ICore::SwitchMode));
|
||||||
updateActions();
|
updateActions();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProjectExplorerPlugin::loadSession(const QString &session)
|
void ProjectExplorerPlugin::loadSession(const QString &session)
|
||||||
|
@@ -93,6 +93,7 @@ SessionManager::SessionManager(QObject *parent)
|
|||||||
m_sessionNode(new SessionNode(this)),
|
m_sessionNode(new SessionNode(this)),
|
||||||
m_sessionName(QLatin1String("default")),
|
m_sessionName(QLatin1String("default")),
|
||||||
m_virginSession(true),
|
m_virginSession(true),
|
||||||
|
m_loadingSession(false),
|
||||||
m_startupProject(0)
|
m_startupProject(0)
|
||||||
{
|
{
|
||||||
connect(ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode*)),
|
connect(ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode*)),
|
||||||
@@ -291,6 +292,11 @@ void SessionManager::removeProject(Project *project)
|
|||||||
removeProjects(QList<Project*>() << project);
|
removeProjects(QList<Project*>() << project);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SessionManager::loadingSession()
|
||||||
|
{
|
||||||
|
return m_loadingSession;
|
||||||
|
}
|
||||||
|
|
||||||
bool SessionManager::save()
|
bool SessionManager::save()
|
||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
@@ -810,17 +816,23 @@ bool SessionManager::loadSession(const QString &session)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_loadingSession = true;
|
||||||
|
|
||||||
// Allow everyone to set something in the session and before saving
|
// Allow everyone to set something in the session and before saving
|
||||||
emit aboutToUnloadSession(m_sessionName);
|
emit aboutToUnloadSession(m_sessionName);
|
||||||
|
|
||||||
if (!isDefaultVirgin()) {
|
if (!isDefaultVirgin()) {
|
||||||
if (!save())
|
if (!save()) {
|
||||||
|
m_loadingSession = false;
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clean up
|
// Clean up
|
||||||
if (!ICore::editorManager()->closeAllEditors())
|
if (!ICore::editorManager()->closeAllEditors()) {
|
||||||
|
m_loadingSession = false;
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
setStartupProject(0);
|
setStartupProject(0);
|
||||||
removeProjects(projects());
|
removeProjects(projects());
|
||||||
@@ -872,6 +884,7 @@ bool SessionManager::loadSession(const QString &session)
|
|||||||
|
|
||||||
// Starts a event loop, better do that at the very end
|
// Starts a event loop, better do that at the very end
|
||||||
askUserAboutFailedProjects();
|
askUserAboutFailedProjects();
|
||||||
|
m_loadingSession = false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -123,6 +123,7 @@ public:
|
|||||||
QStringList projectsForSessionName(const QString &session) const;
|
QStringList projectsForSessionName(const QString &session) const;
|
||||||
|
|
||||||
void reportProjectLoadingProgress();
|
void reportProjectLoadingProgress();
|
||||||
|
bool loadingSession();
|
||||||
signals:
|
signals:
|
||||||
void projectAdded(ProjectExplorer::Project *project);
|
void projectAdded(ProjectExplorer::Project *project);
|
||||||
void singleProjectAdded(ProjectExplorer::Project *project);
|
void singleProjectAdded(ProjectExplorer::Project *project);
|
||||||
@@ -167,6 +168,7 @@ private:
|
|||||||
mutable QStringList m_sessions;
|
mutable QStringList m_sessions;
|
||||||
|
|
||||||
mutable QHash<Project *, QStringList> m_projectFileCache;
|
mutable QHash<Project *, QStringList> m_projectFileCache;
|
||||||
|
bool m_loadingSession;
|
||||||
|
|
||||||
Project *m_startupProject;
|
Project *m_startupProject;
|
||||||
QList<Project *> m_projects;
|
QList<Project *> m_projects;
|
||||||
|
Reference in New Issue
Block a user