From 272e76409de4a957570191fe01823316388dda12 Mon Sep 17 00:00:00 2001
From: dt <qtc-committer@nokia.com>
Date: Thu, 18 Mar 2010 13:42:09 +0100
Subject: [PATCH] Make default virgin session check more robust.

Task-Nr: QTCREATORBUG-572
---
 src/plugins/projectexplorer/session.cpp | 20 +++++++++++++-------
 src/plugins/projectexplorer/session.h   |  3 ++-
 2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp
index 9203dd5f574..54618da9b24 100644
--- a/src/plugins/projectexplorer/session.cpp
+++ b/src/plugins/projectexplorer/session.cpp
@@ -370,7 +370,8 @@ SessionManager::SessionManager(QObject *parent)
     m_core(Core::ICore::instance()),
     m_file(new SessionFile),
     m_sessionNode(new Internal::SessionNodeImpl(this)),
-    m_currentEditor(0)
+    m_currentEditor(0),
+    m_defaultVirginSession(true)
 {
     // Create qtcreator dir if it doesn't yet exist
     QString configDir = QFileInfo(m_core->settings()->fileName()).path();
@@ -424,9 +425,7 @@ SessionManager::~SessionManager()
 
 bool SessionManager::isDefaultVirgin() const
 {
-    return isDefaultSession(m_sessionName)
-            && projects().isEmpty()
-            && m_core->editorManager()->openedEditors().isEmpty();
+    return m_defaultVirginSession;
 }
 
 bool SessionManager::isDefaultSession(const QString &session) const
@@ -564,6 +563,7 @@ void SessionManager::addProject(Project *project)
 
 void SessionManager::addProjects(const QList<Project*> &projects)
 {
+    m_defaultVirginSession = false;
     QList<Project*> clearedList;
     foreach (Project *pro, projects) {
         if (!m_file->m_projects.contains(pro)) {
@@ -594,6 +594,7 @@ void SessionManager::addProjects(const QList<Project*> &projects)
 
 void SessionManager::removeProject(Project *project)
 {
+    m_defaultVirginSession = false;
     if (project == 0) {
         qDebug() << "SessionManager::removeProject(0) ... THIS SHOULD NOT HAPPEN";
         return;
@@ -623,6 +624,8 @@ bool SessionManager::createImpl(const QString &fileName)
         setStartupProject(defaultStartupProject());
     }
 
+    m_defaultVirginSession = false;
+
     if (debug)
         qDebug() << "SessionManager - creating new session returns " << success;
 
@@ -642,7 +645,6 @@ bool SessionManager::loadImpl(const QString &fileName)
     bool success = true;
 
     if (!m_file->fileName().isEmpty()) {
-
         if (isDefaultVirgin()) {
             // do not save initial and virgin default session
         } else if (!save() || !clear()) {
@@ -650,6 +652,8 @@ bool SessionManager::loadImpl(const QString &fileName)
         }
     }
 
+    m_defaultVirginSession = false;
+
     if (success) {
         emit aboutToUnloadSession();
         delete m_file;
@@ -1008,7 +1012,7 @@ void SessionManager::setValue(const QString &name, const QVariant &value)
     if (m_file->m_values.value(name) == value)
         return;
     m_file->m_values.insert(name, value);
-    markSessionFileDirty();
+    markSessionFileDirty(false);
 }
 
 QVariant SessionManager::value(const QString &name)
@@ -1135,10 +1139,12 @@ void SessionManager::reportProjectLoadingProgress()
     m_file->sessionLoadingProgress();
 }
 
-void SessionManager::markSessionFileDirty()
+void SessionManager::markSessionFileDirty(bool makeDefaultVirginDirty)
 {
     if (m_file && !m_file->fileName().isEmpty())
         m_autoSaveSessionTimer->start();
+    if (makeDefaultVirginDirty)
+        m_defaultVirginSession = false;
 }
 
 #include "session.moc"
diff --git a/src/plugins/projectexplorer/session.h b/src/plugins/projectexplorer/session.h
index c0d7f767507..f7b5d246d68 100644
--- a/src/plugins/projectexplorer/session.h
+++ b/src/plugins/projectexplorer/session.h
@@ -173,7 +173,7 @@ private slots:
     void handleCurrentEditorChange(Core::IEditor *editor);
     void updateWindowTitle();
 
-    void markSessionFileDirty();
+    void markSessionFileDirty(bool makeDefaultVirginDirty = true);
 
 private:
     bool loadImpl(const QString &fileName);
@@ -195,6 +195,7 @@ private:
     QPointer<Core::IEditor> m_currentEditor;
     QString m_displayName;
     QString m_sessionName;
+    bool m_defaultVirginSession;
 
     mutable QStringList m_sessions;
 
-- 
GitLab