From a68352f013514aeba8a1d1cc111eea181f035b85 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 17 Aug 2012 09:09:15 +0200 Subject: [PATCH] Change configuration saving * Save initial configuration after all the plugins are done with their delayed initialization * Save configuration when the autosave timer triggers. The disks are in use at that time anyway and saving can be turned off completely * Save settings when closing the options page dialog Change-Id: Idcf9ad61e8f9b94899c580d5a855a883a62f8dc0 Reviewed-by: Majid Khan Reviewed-by: Daniel Teske Reviewed-by: Orgad Shaneh --- src/libs/extensionsystem/pluginmanager.cpp | 1 + src/libs/extensionsystem/pluginmanager.h | 1 + src/plugins/coreplugin/dialogs/settingsdialog.cpp | 2 ++ .../coreplugin/editormanager/editormanager.cpp | 3 +++ src/plugins/coreplugin/icore.cpp | 13 +++++++++++++ src/plugins/coreplugin/icore.h | 2 ++ src/plugins/coreplugin/mainwindow.cpp | 10 +--------- src/plugins/coreplugin/mainwindow.h | 1 - 8 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp index d5ed52f199e..764d7879d87 100644 --- a/src/libs/extensionsystem/pluginmanager.cpp +++ b/src/libs/extensionsystem/pluginmanager.cpp @@ -798,6 +798,7 @@ void PluginManagerPrivate::nextDelayedInitialize() if (delayedInitializeQueue.isEmpty()) { delete delayedInitializeTimer; delayedInitializeTimer = 0; + emit q->initializationDone(); } else { delayedInitializeTimer->start(); } diff --git a/src/libs/extensionsystem/pluginmanager.h b/src/libs/extensionsystem/pluginmanager.h index 9e1cdcde87e..c1dfd861b9e 100644 --- a/src/libs/extensionsystem/pluginmanager.h +++ b/src/libs/extensionsystem/pluginmanager.h @@ -135,6 +135,7 @@ signals: void aboutToRemoveObject(QObject *obj); void pluginsChanged(); + void initializationDone(); public slots: void remoteArguments(const QString &serializedArguments); diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.cpp b/src/plugins/coreplugin/dialogs/settingsdialog.cpp index 7d1fb44f8ac..ba6c8c72925 100644 --- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp +++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp @@ -542,6 +542,8 @@ void SettingsDialog::done(int val) settings->setValue(QLatin1String(categoryKeyC), m_currentCategory); settings->setValue(QLatin1String(pageKeyC), m_currentPage); + ICore::saveSettings(); // save all settings + // exit all additional event loops, see comment in execDialog() QListIterator it(m_eventLoops); it.toBack(); diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 54762d9bc5a..c0d9eeced8a 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -1506,6 +1506,9 @@ void EditorManager::autoSave() if (!errors.isEmpty()) QMessageBox::critical(ICore::mainWindow(), tr("File Error"), errors.join(QLatin1String("\n"))); + + // Also save settings while accessing the disk anyway: + ICore::saveSettings(); } MakeWritableResult EditorManager::makeFileWritable(IDocument *document) diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp index b9ad7f93015..0e1bca08461 100644 --- a/src/plugins/coreplugin/icore.cpp +++ b/src/plugins/coreplugin/icore.cpp @@ -30,6 +30,8 @@ #include "icore.h" +#include + /*! \namespace Core \brief The Core namespace contains all classes that make up the Core plugin @@ -373,6 +375,9 @@ ICore::ICore(MainWindow *mainwindow) { m_instance = this; m_mainwindow = mainwindow; + // Save settings once after all plugins are initialized: + connect(ExtensionSystem::PluginManager::instance(), SIGNAL(initializationDone()), + this, SIGNAL(saveSettingsRequested())); } ICore::~ICore() @@ -553,4 +558,12 @@ void ICore::emitNewItemsDialogRequested() emit m_instance->newItemsDialogRequested(); } +void ICore::saveSettings() +{ + emit m_instance->saveSettingsRequested(); + + ICore::settings(QSettings::SystemScope)->sync(); + ICore::settings(QSettings::UserScope)->sync(); +} + } // namespace Core diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h index a954b6f76a1..a7be701e214 100644 --- a/src/plugins/coreplugin/icore.h +++ b/src/plugins/coreplugin/icore.h @@ -134,6 +134,8 @@ public: static void emitNewItemsDialogRequested(); + static void saveSettings(); + signals: void coreAboutToOpen(); void coreOpened(); diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index 03ea45e3d7e..fffab92b842 100644 --- a/src/plugins/coreplugin/mainwindow.cpp +++ b/src/plugins/coreplugin/mainwindow.cpp @@ -233,11 +233,6 @@ MainWindow::MainWindow() : #if defined(Q_OS_MAC) MacFullScreen::addFullScreen(this); #endif - - m_autoSaveSessionTimer = new QTimer(this); - m_autoSaveSessionTimer->setInterval(10000); - connect(m_autoSaveSessionTimer, SIGNAL(timeout()), - m_coreImpl, SIGNAL(saveSettingsRequested())); } void MainWindow::setSidebarVisible(bool visible) @@ -377,13 +372,11 @@ void MainWindow::extensionsInitialized() emit m_coreImpl->coreAboutToOpen(); show(); emit m_coreImpl->coreOpened(); - m_autoSaveSessionTimer->start(); } void MainWindow::closeEvent(QCloseEvent *event) { - m_autoSaveSessionTimer->stop(); - emit m_coreImpl->saveSettingsRequested(); + ICore::saveSettings(); // Save opened files bool cancelled; @@ -979,7 +972,6 @@ bool MainWindow::showOptionsDialog(const QString &category, void MainWindow::saveAll() { DocumentManager::saveModifiedDocumentsSilently(DocumentManager::modifiedDocuments()); - emit m_coreImpl->saveSettingsRequested(); } void MainWindow::exit() diff --git a/src/plugins/coreplugin/mainwindow.h b/src/plugins/coreplugin/mainwindow.h index 8a6c5ef3502..fcfc7fab5ee 100644 --- a/src/plugins/coreplugin/mainwindow.h +++ b/src/plugins/coreplugin/mainwindow.h @@ -229,7 +229,6 @@ private: QColor m_overrideColor; QStringList m_filesToOpenDelayed; - QTimer *m_autoSaveSessionTimer; }; } // namespace Internal