diff options
author | mae <qt-info@nokia.com> | 2010-03-03 15:54:32 +0100 |
---|---|---|
committer | mae <qt-info@nokia.com> | 2010-03-03 15:57:10 +0100 |
commit | d2bb23e62f1609a453f8cc8405e8029fc56e67c6 (patch) | |
tree | d41030e21ddf09ef82ba25602ef6069127525eba /src | |
parent | df2075d68c519017f74d00814bd09dbdf6de99b0 (diff) | |
download | qt-creator-d2bb23e62f1609a453f8cc8405e8029fc56e67c6.tar.gz |
Make creator auto-save the session state when something changed
Currently the 10second auto-save timer is started when an editor
is opened or close, or when a bookmark or breakpoint is set or
removed.
The change ensures that users do not lose their session state
should creator crash (e.g. when a laptop runs out of battery)
Task-number: QTCREATORBUG-188
Reviewed-by: con
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/projectexplorer/session.cpp | 34 | ||||
-rw-r--r-- | src/plugins/projectexplorer/session.h | 3 |
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 |