diff options
author | Benjamin Port <benjamin.port@enioka.com> | 2020-03-17 15:13:11 +0100 |
---|---|---|
committer | Benjamin Port <benjamin.port@enioka.com> | 2020-04-17 14:48:42 +0200 |
commit | be28e096c5337b61a5e2f6e048ea297b2cc4b916 (patch) | |
tree | f3aac7a7d8ed5b8e90f65a86f44bb2e7e5e8057b /src | |
parent | 65cc12ab3ec8ca313d0e9d9b6d506e9fa9042bc1 (diff) | |
download | kconfig-be28e096c5337b61a5e2f6e048ea297b2cc4b916.tar.gz kconfig-be28e096c5337b61a5e2f6e048ea297b2cc4b916.tar.bz2 |
Add force save behavior to KEntryMap
Summary:
Fix the following bug, if an entry is set on HOME/.config/kdeglobals and on a specific config file like kcmfonts
When you hit restore defaults button and apply, value will be not wrote on the specific file, but then the value is the one from kdeglobals
This patch ensure we write the key to the specific configuration file on those case with an empty value. KConfig will take default value automatically
Test Plan:
Added a test to ensure flag is working
Tested using some KCM to ensure all is working fine
Reviewers: ervin, dfaure, meven, crossi, hchain
Reviewed By: ervin, dfaure, meven
Subscribers: kde-frameworks-devel
Tags: #frameworks
Differential Revision: https://phabricator.kde.org/D28128
Diffstat (limited to 'src')
-rw-r--r-- | src/core/kconfigdata.cpp | 4 | ||||
-rw-r--r-- | src/core/kconfigdata.h | 7 | ||||
-rw-r--r-- | src/core/kconfigini.cpp | 5 |
3 files changed, 14 insertions, 2 deletions
diff --git a/src/core/kconfigdata.cpp b/src/core/kconfigdata.cpp index bfa662a0..5ead8167 100644 --- a/src/core/kconfigdata.cpp +++ b/src/core/kconfigdata.cpp @@ -100,6 +100,10 @@ bool KEntryMap::setEntry(const QByteArray &group, const QByteArray &key, const Q k = it.key(); e = *it; //qDebug() << "found existing entry for key" << k; + // If overridden entry is global and not default. And it's overridden by a non global + if (e.bGlobal && !(options & EntryGlobal) && !k.bDefault) { + e.bOverridesGlobal = true; + } } else { // make sure the group marker is in the map KEntryMap const *that = this; diff --git a/src/core/kconfigdata.h b/src/core/kconfigdata.h index d92076d9..2f36b1bb 100644 --- a/src/core/kconfigdata.h +++ b/src/core/kconfigdata.h @@ -24,7 +24,7 @@ struct KEntry { KEntry() : mValue(), bDirty(false), bGlobal(false), bImmutable(false), bDeleted(false), bExpand(false), bReverted(false), - bLocalizedCountry(false), bNotify(false) {} + bLocalizedCountry(false), bNotify(false), bOverridesGlobal(false) {} /** @internal */ QByteArray mValue; /** @@ -58,6 +58,11 @@ struct KEntry { bool bLocalizedCountry: 1; bool bNotify: 1; + + /** + * Entry will need to be written on a non global file even if it matches default value + */ + bool bOverridesGlobal: 1; }; // These operators are used to check whether an entry which is about diff --git a/src/core/kconfigini.cpp b/src/core/kconfigini.cpp index 2cea7338..9601d036 100644 --- a/src/core/kconfigini.cpp +++ b/src/core/kconfigini.cpp @@ -429,7 +429,10 @@ bool KConfigIniBackend::writeConfig(const QByteArray &locale, KEntryMap &entryMa // only write entries that have the same "globality" as the file if (it->bGlobal == bGlobal) { - if (it->bReverted) { + if (it->bReverted && it->bOverridesGlobal) { + it->bDeleted = true; + writeMap[key] = *it; + } else if (it->bReverted) { writeMap.remove(key); } else if (!it->bDeleted) { writeMap[key] = *it; |