diff --git a/src/quickaddons/configmodule.h b/src/quickaddons/configmodule.h --- a/src/quickaddons/configmodule.h +++ b/src/quickaddons/configmodule.h @@ -132,6 +132,7 @@ Q_PROPERTY(QQuickItem *mainUi READ mainUi CONSTANT) Q_PROPERTY(KQuickAddons::ConfigModule::Buttons buttons READ buttons WRITE setButtons NOTIFY buttonsChanged) Q_PROPERTY(bool needsSave READ needsSave WRITE setNeedsSave NOTIFY needsSaveChanged) + Q_PROPERTY(bool representsDefaults READ representsDefaults WRITE setRepresentsDefaults NOTIFY representsDefaultsChanged) Q_PROPERTY(QString name READ name CONSTANT) Q_PROPERTY(QString description READ description CONSTANT) Q_PROPERTY(QString quickHelp READ quickHelp WRITE setQuickHelp NOTIFY quickHelpChanged) @@ -279,6 +280,17 @@ */ bool needsSave(); + /** + * Set this property to true when the user sets the state of the module + * to the default settings (e.g. clicking Defaults would do nothing). + */ + void setRepresentsDefaults(bool defaults); + + /** + * True when the module state represents the default settings. + */ + bool representsDefaults(); + /** * Sets the buttons to display. * @@ -516,6 +528,13 @@ */ void needsSaveChanged(); + /** + * Indicate that the state of the modules contents has changed + * in a way that it might represents the defaults settings, or + * stopped representing them. + */ + void representsDefaultsChanged(); + /** * Emits this signal whenever the need for root authorization to save changes. */ diff --git a/src/quickaddons/configmodule.cpp b/src/quickaddons/configmodule.cpp --- a/src/quickaddons/configmodule.cpp +++ b/src/quickaddons/configmodule.cpp @@ -53,7 +53,8 @@ _about(nullptr), _useRootOnlyMessage(false), _needsAuthorization(false), - _needsSave(false) + _needsSave(false), + _representsDefaults(false) { } @@ -73,6 +74,7 @@ bool _needsAuthorization : 1; bool _needsSave :1; + bool _representsDefaults :1; QString _authActionName; static QHash s_rootObjects; @@ -463,6 +465,21 @@ return d->_needsSave; } +void ConfigModule::setRepresentsDefaults(bool defaults) +{ + if (defaults == d->_representsDefaults) { + return; + } + + d->_representsDefaults = defaults; + emit representsDefaultsChanged(); +} + +bool ConfigModule::representsDefaults() +{ + return d->_representsDefaults; +} + } #include "moc_configmodule.cpp" diff --git a/src/quickaddons/managedconfigmodule.cpp b/src/quickaddons/managedconfigmodule.cpp --- a/src/quickaddons/managedconfigmodule.cpp +++ b/src/quickaddons/managedconfigmodule.cpp @@ -123,24 +123,29 @@ QObject::connect(skeleton, changedSignal, _q, settingsChangedSlot); } } + + _k_settingsChanged(); } void ManagedConfigModulePrivate::_k_settingsChanged() { bool needsSave = false; + bool isDefaults = true; for (const auto skeleton : qAsConst(_skeletons)) { needsSave |= skeleton->isSaveNeeded(); - if (needsSave) { - break; - } + isDefaults &= skeleton->isDefaults(); } + if (!needsSave) { needsSave = _q->isSaveNeeded(); } - _q->setNeedsSave(needsSave); - // TODO: Also deal with defaults, once we got an equivalent to setNeedsSave - // in ConfigModule + if (isDefaults) { + isDefaults = _q->isDefaults(); + } + + _q->setRepresentsDefaults(isDefaults); + _q->setNeedsSave(needsSave); } }