diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/extensionsystem/pluginmanager.cpp | 1 | ||||
-rw-r--r-- | src/libs/extensionsystem/pluginmanager.h | 1 | ||||
-rw-r--r-- | src/plugins/coreplugin/dialogs/settingsdialog.cpp | 2 | ||||
-rw-r--r-- | src/plugins/coreplugin/editormanager/editormanager.cpp | 3 | ||||
-rw-r--r-- | src/plugins/coreplugin/icore.cpp | 13 | ||||
-rw-r--r-- | src/plugins/coreplugin/icore.h | 2 | ||||
-rw-r--r-- | src/plugins/coreplugin/mainwindow.cpp | 10 | ||||
-rw-r--r-- | 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 d5ed52f199..764d7879d8 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 9e1cdcde87..c1dfd861b9 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 7d1fb44f8a..ba6c8c7292 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<QEventLoop *> it(m_eventLoops); it.toBack(); diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 54762d9bc5..c0d9eeced8 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 b9ad7f9301..0e1bca0846 100644 --- a/src/plugins/coreplugin/icore.cpp +++ b/src/plugins/coreplugin/icore.cpp @@ -30,6 +30,8 @@ #include "icore.h" +#include <extensionsystem/pluginmanager.h> + /*! \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 a954b6f76a..a7be701e21 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 03ea45e3d7..fffab92b84 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 8a6c5ef350..fcfc7fab5e 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 |