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 | 
