From a294dd42ad447cfd6cc99b3ce22148041993cd0c Mon Sep 17 00:00:00 2001 From: Lukas Holecek Date: Sun, 13 Mar 2016 10:42:43 +0100 Subject: [PATCH] Fix settings options using config() --- src/gui/configurationmanager.cpp | 15 +++++++++++++++ src/gui/configurationmanager.h | 5 +++++ src/gui/mainwindow.cpp | 11 +++++++---- src/tests/tests.cpp | 1 - 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/gui/configurationmanager.cpp b/src/gui/configurationmanager.cpp index cba250cf8..e1cc57848 100644 --- a/src/gui/configurationmanager.cpp +++ b/src/gui/configurationmanager.cpp @@ -322,6 +322,21 @@ QString ConfigurationManager::optionValue(const QString &name) const return m_options.value(name).value().toString(); } +bool ConfigurationManager::setOptionValue(const QString &name, const QString &value) +{ + if ( !m_options.contains(name) ) + return false; + + const QString oldValue = optionValue(name); + m_options[name].setValue(value); + if ( optionValue(name) == oldValue ) + return false; + + AppConfig().setOption(name, m_options[name].value()); + emit configurationChanged(); + return true; +} + QString ConfigurationManager::optionToolTip(const QString &name) const { return m_options[name].tooltip(); diff --git a/src/gui/configurationmanager.h b/src/gui/configurationmanager.h index 6a34db395..67fc8c013 100644 --- a/src/gui/configurationmanager.h +++ b/src/gui/configurationmanager.h @@ -56,8 +56,13 @@ class ConfigurationManager : public QDialog /** Return list of options that can be set or view using command line. */ QStringList options() const; + /** Return value of an option. */ QString optionValue(const QString &name) const; + + /** Set value of an option and returns true only if the value changes. */ + bool setOptionValue(const QString &name, const QString &value); + /** Return tooltip text for option with given @a name. */ QString optionToolTip(const QString &name) const; diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 41cbc4ea6..e9d9f8525 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -352,6 +352,8 @@ MainWindow::MainWindow(ItemFactory *itemFactory, QWidget *parent) this, SLOT(updateIconSnip()) ); connect( qApp, SIGNAL(aboutToQuit()), this, SLOT(onAboutToQuit()) ); + connect( this, SIGNAL(configurationChanged()), + this, SLOT(loadSettings()) ); connect(&m_itemMenuCommandTester, SIGNAL(commandPassed(Command,bool)), SLOT(addCommandsToItemMenu(Command,bool))); @@ -1901,13 +1903,16 @@ QString MainWindow::getUserOptionsDescription() const QString MainWindow::getUserOptionValue(const QString &name) const { ConfigurationManager configurationManager(m_sharedData->itemFactory); + configurationManager.loadSettings(); return configurationManager.optionValue(name); } void MainWindow::setUserOptionValue(const QString &name, const QString &value) { - AppConfig().setOption(name, value); - emit configurationChanged(); + ConfigurationManager configurationManager(m_sharedData->itemFactory); + configurationManager.loadSettings(); + if ( configurationManager.setOptionValue(name, value) ) + emit configurationChanged(); } bool MainWindow::hasUserOption(const QString &name) const @@ -2278,8 +2283,6 @@ void MainWindow::openPreferences() // notify window if configuration changes connect( &configurationManager, SIGNAL(configurationChanged()), this, SIGNAL(configurationChanged()) ); - connect( this, SIGNAL(configurationChanged()), - this, SLOT(loadSettings()) ); connect( &configurationManager, SIGNAL(error(QString)), this, SLOT(showError(QString)) ); connect( &configurationManager, SIGNAL(openCommandDialogRequest()), diff --git a/src/tests/tests.cpp b/src/tests/tests.cpp index 2baedd5ed..65ee3df11 100644 --- a/src/tests/tests.cpp +++ b/src/tests/tests.cpp @@ -535,7 +535,6 @@ Tests::Tests(const TestInterfacePtr &test, QObject *parent) void Tests::initTestCase() { - TEST(m_test->init()); } void Tests::cleanupTestCase()