summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/projectexplorer/session.cpp34
-rw-r--r--src/plugins/projectexplorer/session.h3
2 files changed, 33 insertions, 4 deletions
diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp
index 4511e8f0c4..9f7ecb5459 100644
--- a/src/plugins/projectexplorer/session.cpp
+++ b/src/plugins/projectexplorer/session.cpp
@@ -54,6 +54,7 @@
#include <QtCore/QFileInfo>
#include <QtCore/QFuture>
#include <QtCore/QSettings>
+#include <QtCore/QTimer>
#include <QtGui/QApplication>
#include <QtGui/QMainWindow>
@@ -390,12 +391,28 @@ SessionManager::SessionManager(QObject *parent)
connect(m_core->modeManager(), SIGNAL(currentModeChanged(Core::IMode*)),
this, SLOT(saveActiveMode(Core::IMode*)));
- connect(m_core->editorManager(), SIGNAL(editorCreated(Core::IEditor *, QString)),
+
+ Core::EditorManager *em = m_core->editorManager();
+
+ connect(em, SIGNAL(editorCreated(Core::IEditor *, QString)),
this, SLOT(setEditorCodec(Core::IEditor *, QString)));
connect(ProjectExplorerPlugin::instance(), SIGNAL(currentProjectChanged(ProjectExplorer::Project *)),
this, SLOT(updateWindowTitle()));
- connect(m_core->editorManager(), SIGNAL(currentEditorChanged(Core::IEditor*)),
+ connect(em, SIGNAL(currentEditorChanged(Core::IEditor*)),
+ this, SLOT(handleCurrentEditorChange(Core::IEditor*)));
+ connect(em, SIGNAL(currentEditorChanged(Core::IEditor*)),
this, SLOT(handleCurrentEditorChange(Core::IEditor*)));
+ connect(em, SIGNAL(editorOpened(Core::IEditor*)),
+ this, SLOT(markSessionFileDirty()));
+ connect(em, SIGNAL(editorsClosed(QList<Core::IEditor*>)),
+ this, SLOT(markSessionFileDirty()));
+
+
+ m_autoSaveSessionTimer = new QTimer(this);
+ m_autoSaveSessionTimer->setSingleShot(true);
+ m_autoSaveSessionTimer->setInterval(10000);
+ connect(m_autoSaveSessionTimer, SIGNAL(timeout()),
+ m_core, SIGNAL(saveSettingsRequested()));
}
SessionManager::~SessionManager()
@@ -985,8 +1002,13 @@ void SessionManager::removeProjects(QList<Project *> remove)
void SessionManager::setValue(const QString &name, const QVariant &value)
{
- if (m_file)
- m_file->m_values.insert(name, value);
+ if (!m_file)
+ return;
+
+ if (m_file->m_values.value(name) == value)
+ return;
+ m_file->m_values.insert(name, value);
+ markSessionFileDirty();
}
QVariant SessionManager::value(const QString &name)
@@ -1113,5 +1135,9 @@ void SessionManager::reportProjectLoadingProgress()
m_file->sessionLoadingProgress();
}
+void SessionManager::markSessionFileDirty()
+{
+ m_autoSaveSessionTimer->start();
+}
#include "session.moc"
diff --git a/src/plugins/projectexplorer/session.h b/src/plugins/projectexplorer/session.h
index f158a04e3a..19be9aeda9 100644
--- a/src/plugins/projectexplorer/session.h
+++ b/src/plugins/projectexplorer/session.h
@@ -173,6 +173,8 @@ private slots:
void handleCurrentEditorChange(Core::IEditor *editor);
void updateWindowTitle();
+ void markSessionFileDirty();
+
private:
bool loadImpl(const QString &fileName);
bool createImpl(const QString &fileName);
@@ -197,6 +199,7 @@ private:
mutable QStringList m_sessions;
mutable QHash<Project *, QStringList> m_projectFileCache;
+ QTimer *m_autoSaveSessionTimer;
};
} // namespace ProjectExplorer