diff options
author | hjk <hjk@qt.io> | 2019-06-03 09:32:15 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2019-06-03 08:25:41 +0000 |
commit | 4742216febedb9f6fb6e8147e9a333abe236ab2f (patch) | |
tree | e30418351e14dfd8f50508d62b12743a109a6927 /src/plugins/coreplugin | |
parent | 23c222f61b260b56c10775197d6100f130d558b4 (diff) |
Core: Give a hint why saving of settings are requested
Not all requests are the same, handling code might want to act
differently on different request reasons.
Main driver here is the handling of the debugger/analyzer main window
state savings which depends on actual visibility of certain windows.
Change-Id: I87b2a9149e3d09d27bc14b44aace9f2e0686db04
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src/plugins/coreplugin')
-rw-r--r-- | src/plugins/coreplugin/dialogs/settingsdialog.cpp | 2 | ||||
-rw-r--r-- | src/plugins/coreplugin/icore.cpp | 6 | ||||
-rw-r--r-- | src/plugins/coreplugin/icore.h | 11 | ||||
-rw-r--r-- | src/plugins/coreplugin/mainwindow.cpp | 2 |
4 files changed, 14 insertions, 7 deletions
diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.cpp b/src/plugins/coreplugin/dialogs/settingsdialog.cpp index 596d498875a..8057a9e48ad 100644 --- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp +++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp @@ -726,7 +726,7 @@ void SettingsDialog::done(int val) QSettings *settings = ICore::settings(); settings->setValue(QLatin1String(pageKeyC), m_currentPage.toSetting()); - ICore::saveSettings(); // save all settings + ICore::saveSettings(ICore::SettingsDialogDone); // save all settings // exit event loops in reverse order of addition for (QEventLoop *eventLoop : m_eventLoops) diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp index 4a6066df0eb..63eba664ccd 100644 --- a/src/plugins/coreplugin/icore.cpp +++ b/src/plugins/coreplugin/icore.cpp @@ -330,7 +330,7 @@ ICore::ICore(MainWindow *mainwindow) m_mainwindow = mainwindow; // Save settings once after all plugins are initialized: connect(PluginManager::instance(), &PluginManager::initializationDone, - this, &ICore::saveSettings); + this, [] { ICore::saveSettings(ICore::InitializationDone); }); connect(PluginManager::instance(), &PluginManager::testsFinished, [this] (int failedTests) { emit coreAboutToClose(); if (failedTests != 0) @@ -690,9 +690,9 @@ void ICore::setupScreenShooter(const QString &name, QWidget *w, const QRect &rc) new ScreenShooter(w, name, rc); } -void ICore::saveSettings() +void ICore::saveSettings(SaveSettingsReason reason) { - emit m_instance->saveSettingsRequested(); + emit m_instance->saveSettingsRequested(reason); m_mainwindow->saveSettings(); ICore::settings(QSettings::SystemScope)->sync(); diff --git a/src/plugins/coreplugin/icore.h b/src/plugins/coreplugin/icore.h index 5125345cffd..04d501e1346 100644 --- a/src/plugins/coreplugin/icore.h +++ b/src/plugins/coreplugin/icore.h @@ -141,14 +141,21 @@ public: static QString systemInformation(); static void setupScreenShooter(const QString &name, QWidget *w, const QRect &rc = QRect()); + enum SaveSettingsReason { + InitializationDone, + SettingsDialogDone, + ModeChanged, + MainWindowClosing, + }; + public slots: - static void saveSettings(); + static void saveSettings(SaveSettingsReason reason); signals: void coreAboutToOpen(); void coreOpened(); void newItemDialogStateChanged(); - void saveSettingsRequested(); + void saveSettingsRequested(SaveSettingsReason reason); void coreAboutToClose(); void contextAboutToChange(const QList<Core::IContext *> &context); void contextChanged(const Core::Context &context); diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index d35477f6b57..dd724d9f9c7 100644 --- a/src/plugins/coreplugin/mainwindow.cpp +++ b/src/plugins/coreplugin/mainwindow.cpp @@ -322,7 +322,7 @@ void MainWindow::closeEvent(QCloseEvent *event) return; } - ICore::saveSettings(); + ICore::saveSettings(ICore::MainWindowClosing); // Save opened files if (!DocumentManager::saveAllModifiedDocuments()) { |