summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libs/extensionsystem/pluginmanager.cpp1
-rw-r--r--src/libs/extensionsystem/pluginmanager.h1
-rw-r--r--src/plugins/coreplugin/dialogs/settingsdialog.cpp2
-rw-r--r--src/plugins/coreplugin/editormanager/editormanager.cpp3
-rw-r--r--src/plugins/coreplugin/icore.cpp13
-rw-r--r--src/plugins/coreplugin/icore.h2
-rw-r--r--src/plugins/coreplugin/mainwindow.cpp10
-rw-r--r--src/plugins/coreplugin/mainwindow.h1
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