diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/kconfig.cpp | 9 | ||||
-rw-r--r-- | src/core/kconfig_p.h | 7 | ||||
-rw-r--r-- | src/core/kconfiggroup.cpp | 26 | ||||
-rw-r--r-- | src/core/kconfiggroup.h | 8 |
4 files changed, 48 insertions, 2 deletions
diff --git a/src/core/kconfig.cpp b/src/core/kconfig.cpp index 506e3f90..03ab67d3 100644 --- a/src/core/kconfig.cpp +++ b/src/core/kconfig.cpp @@ -1010,14 +1010,19 @@ void KConfigPrivate::revertEntry(const QByteArray &group, const char *key, KConf QByteArray KConfigPrivate::lookupData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags) const { + return lookupInternalEntry(group, key, flags).mValue; +} + +KEntry KConfigPrivate::lookupInternalEntry(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags) const +{ if (bReadDefaults) { flags |= KEntryMap::SearchDefaults; } const auto it = entryMap.constFindEntry(group, key, flags); if (it == entryMap.constEnd()) { - return QByteArray(); + return {}; } - return it->mValue; + return it.value(); } QString KConfigPrivate::lookupData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags, bool *expand) const diff --git a/src/core/kconfig_p.h b/src/core/kconfig_p.h index e5c9d869..60604477 100644 --- a/src/core/kconfig_p.h +++ b/src/core/kconfig_p.h @@ -34,8 +34,15 @@ public: bool canWriteEntry(const QByteArray &group, const char *key, bool isDefault = false) const; QString lookupData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags, bool *expand) const; QByteArray lookupData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags) const; + KEntry lookupInternalEntry(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags) const; void putData(const QByteArray &group, const char *key, const QByteArray &value, KConfigBase::WriteConfigFlags flags, bool expand = false); + void setEntryData(const QByteArray &group, const char *key, const QByteArray &value, KEntryMap::EntryOptions flags) + { + if (entryMap.setEntry(group, key, value, flags)) { + bDirty = true; + } + } void revertEntry(const QByteArray &group, const char *key, KConfigBase::WriteConfigFlags flags); QStringList groupList(const QByteArray &group) const; // copies the entries from @p source to @p otherGroup changing all occurrences diff --git a/src/core/kconfiggroup.cpp b/src/core/kconfiggroup.cpp index a15c45eb..be1f2b0e 100644 --- a/src/core/kconfiggroup.cpp +++ b/src/core/kconfiggroup.cpp @@ -1257,3 +1257,29 @@ void KConfigGroup::reparent(KConfigBase *parent, WriteConfigFlags pFlags) oldGroup.copyTo(this, pFlags); oldGroup.deleteGroup(); // so that the entries with the old group name are deleted on sync } + +void KConfigGroup::moveValuesTo(const QList<const char *> &keys, KConfigGroup &other, WriteConfigFlags pFlags) +{ + Q_ASSERT(isValid()); + Q_ASSERT(other.isValid()); + + for (const auto key : keys) { + const QByteArray groupName = name().toLocal8Bit(); + const auto entry = config()->d_ptr->lookupInternalEntry(groupName, key, KEntryMap::SearchLocalized); + + // Only write the entry if it is not null, if it is a global enry there is no point in moving it + if (!entry.mValue.isNull() && !entry.bGlobal) { + deleteEntry(key, pFlags); + KEntryMap::EntryOptions options = KEntryMap::EntryOption::EntryDirty; + if (entry.bDeleted) { + options |= KEntryMap::EntryDeleted; + } + + if (entry.bExpand) { + options |= KEntryMap::EntryExpansion; + } + + other.config()->d_ptr->setEntryData(other.name().toLocal8Bit(), key, entry.mValue, options); + } + } +} diff --git a/src/core/kconfiggroup.h b/src/core/kconfiggroup.h index 2584cb85..8a6243af 100644 --- a/src/core/kconfiggroup.h +++ b/src/core/kconfiggroup.h @@ -195,6 +195,14 @@ public: void reparent(KConfigBase *parent, WriteConfigFlags pFlags = Normal); /** + * Moves the key-value pairs from one config group to the other. + * In case the entries do not exist the key is ignored. + * + * @since 5.88 + */ + void moveValuesTo(const QList<const char *> &keys, KConfigGroup &other, WriteConfigFlags pFlags = Normal); + + /** * Returns the group that this group belongs to * * @return the parent group, or an invalid group if this is a top-level |