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 <mkhan3189@gmail.com>
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
Tobias Hunger
2012-08-17 09:09:15 +02:00
parent e1ae73cf06
commit a68352f013
8 changed files with 23 additions and 10 deletions

View File

@@ -798,6 +798,7 @@ void PluginManagerPrivate::nextDelayedInitialize()
if (delayedInitializeQueue.isEmpty()) { if (delayedInitializeQueue.isEmpty()) {
delete delayedInitializeTimer; delete delayedInitializeTimer;
delayedInitializeTimer = 0; delayedInitializeTimer = 0;
emit q->initializationDone();
} else { } else {
delayedInitializeTimer->start(); delayedInitializeTimer->start();
} }

View File

@@ -135,6 +135,7 @@ signals:
void aboutToRemoveObject(QObject *obj); void aboutToRemoveObject(QObject *obj);
void pluginsChanged(); void pluginsChanged();
void initializationDone();
public slots: public slots:
void remoteArguments(const QString &serializedArguments); void remoteArguments(const QString &serializedArguments);

View File

@@ -542,6 +542,8 @@ void SettingsDialog::done(int val)
settings->setValue(QLatin1String(categoryKeyC), m_currentCategory); settings->setValue(QLatin1String(categoryKeyC), m_currentCategory);
settings->setValue(QLatin1String(pageKeyC), m_currentPage); settings->setValue(QLatin1String(pageKeyC), m_currentPage);
ICore::saveSettings(); // save all settings
// exit all additional event loops, see comment in execDialog() // exit all additional event loops, see comment in execDialog()
QListIterator<QEventLoop *> it(m_eventLoops); QListIterator<QEventLoop *> it(m_eventLoops);
it.toBack(); it.toBack();

View File

@@ -1506,6 +1506,9 @@ void EditorManager::autoSave()
if (!errors.isEmpty()) if (!errors.isEmpty())
QMessageBox::critical(ICore::mainWindow(), tr("File Error"), QMessageBox::critical(ICore::mainWindow(), tr("File Error"),
errors.join(QLatin1String("\n"))); errors.join(QLatin1String("\n")));
// Also save settings while accessing the disk anyway:
ICore::saveSettings();
} }
MakeWritableResult EditorManager::makeFileWritable(IDocument *document) MakeWritableResult EditorManager::makeFileWritable(IDocument *document)

View File

@@ -30,6 +30,8 @@
#include "icore.h" #include "icore.h"
#include <extensionsystem/pluginmanager.h>
/*! /*!
\namespace Core \namespace Core
\brief The Core namespace contains all classes that make up the Core plugin \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_instance = this;
m_mainwindow = mainwindow; m_mainwindow = mainwindow;
// Save settings once after all plugins are initialized:
connect(ExtensionSystem::PluginManager::instance(), SIGNAL(initializationDone()),
this, SIGNAL(saveSettingsRequested()));
} }
ICore::~ICore() ICore::~ICore()
@@ -553,4 +558,12 @@ void ICore::emitNewItemsDialogRequested()
emit m_instance->newItemsDialogRequested(); emit m_instance->newItemsDialogRequested();
} }
void ICore::saveSettings()
{
emit m_instance->saveSettingsRequested();
ICore::settings(QSettings::SystemScope)->sync();
ICore::settings(QSettings::UserScope)->sync();
}
} // namespace Core } // namespace Core

View File

@@ -134,6 +134,8 @@ public:
static void emitNewItemsDialogRequested(); static void emitNewItemsDialogRequested();
static void saveSettings();
signals: signals:
void coreAboutToOpen(); void coreAboutToOpen();
void coreOpened(); void coreOpened();

View File

@@ -233,11 +233,6 @@ MainWindow::MainWindow() :
#if defined(Q_OS_MAC) #if defined(Q_OS_MAC)
MacFullScreen::addFullScreen(this); MacFullScreen::addFullScreen(this);
#endif #endif
m_autoSaveSessionTimer = new QTimer(this);
m_autoSaveSessionTimer->setInterval(10000);
connect(m_autoSaveSessionTimer, SIGNAL(timeout()),
m_coreImpl, SIGNAL(saveSettingsRequested()));
} }
void MainWindow::setSidebarVisible(bool visible) void MainWindow::setSidebarVisible(bool visible)
@@ -377,13 +372,11 @@ void MainWindow::extensionsInitialized()
emit m_coreImpl->coreAboutToOpen(); emit m_coreImpl->coreAboutToOpen();
show(); show();
emit m_coreImpl->coreOpened(); emit m_coreImpl->coreOpened();
m_autoSaveSessionTimer->start();
} }
void MainWindow::closeEvent(QCloseEvent *event) void MainWindow::closeEvent(QCloseEvent *event)
{ {
m_autoSaveSessionTimer->stop(); ICore::saveSettings();
emit m_coreImpl->saveSettingsRequested();
// Save opened files // Save opened files
bool cancelled; bool cancelled;
@@ -979,7 +972,6 @@ bool MainWindow::showOptionsDialog(const QString &category,
void MainWindow::saveAll() void MainWindow::saveAll()
{ {
DocumentManager::saveModifiedDocumentsSilently(DocumentManager::modifiedDocuments()); DocumentManager::saveModifiedDocumentsSilently(DocumentManager::modifiedDocuments());
emit m_coreImpl->saveSettingsRequested();
} }
void MainWindow::exit() void MainWindow::exit()

View File

@@ -229,7 +229,6 @@ private:
QColor m_overrideColor; QColor m_overrideColor;
QStringList m_filesToOpenDelayed; QStringList m_filesToOpenDelayed;
QTimer *m_autoSaveSessionTimer;
}; };
} // namespace Internal } // namespace Internal