diff --git a/autotests/kconfigtest.cpp b/autotests/kconfigtest.cpp --- a/autotests/kconfigtest.cpp +++ b/autotests/kconfigtest.cpp @@ -1926,6 +1926,15 @@ QCOMPARE(watcherSpy[0][0].value().name(), QStringLiteral("TopLevelGroup")); QCOMPARE(watcherSpy[0][1].value(), QByteArrayList({"entryA"})); + //revert to default an entry + watcherSpy.clear(); + myConfigGroup.revertToDefault("entryA", KConfig::Persistent | KConfig::Notify); + config.sync(); + watcherSpy.wait(); + QCOMPARE(watcherSpy.count(), 1); + QCOMPARE(watcherSpy[0][0].value().name(), QStringLiteral("TopLevelGroup")); + QCOMPARE(watcherSpy[0][1].value(), QByteArrayList({"entryA"})); + //deleting a group, should notify that every entry in that group has changed watcherSpy.clear(); myConfigGroup.deleteGroup("aSubGroup", KConfig::Persistent | KConfig::Notify); diff --git a/autotests/kentrymaptest.cpp b/autotests/kentrymaptest.cpp --- a/autotests/kentrymaptest.cpp +++ b/autotests/kentrymaptest.cpp @@ -123,11 +123,11 @@ QCOMPARE(entry1->mValue, entry2->mValue); // revert entry1 - map.revertEntry(group1, key1); + map.revertEntry(group1, key1, EntryOptions()); QCOMPARE(defaultEntry->mValue, entry1->mValue); // revert entry2, no default --> should be marked as deleted - map.revertEntry(group1, key2); + map.revertEntry(group1, key2, EntryOptions()); QCOMPARE(entry2->mValue, QByteArray()); QVERIFY(entry2->bDirty); QVERIFY(entry2->bReverted); diff --git a/src/core/kconfig.cpp b/src/core/kconfig.cpp --- a/src/core/kconfig.cpp +++ b/src/core/kconfig.cpp @@ -1011,9 +1011,11 @@ } } -void KConfigPrivate::revertEntry(const QByteArray &group, const char *key) +void KConfigPrivate::revertEntry(const QByteArray &group, const char *key, KConfigBase::WriteConfigFlags flags) { - bool dirtied = entryMap.revertEntry(group, key); + KEntryMap::EntryOptions options = convertToOptions(flags); + + bool dirtied = entryMap.revertEntry(group, key, options); if (dirtied) { bDirty = true; } diff --git a/src/core/kconfig_p.h b/src/core/kconfig_p.h --- a/src/core/kconfig_p.h +++ b/src/core/kconfig_p.h @@ -50,7 +50,8 @@ void putData(const QByteArray &group, const char *key, const QByteArray &value, KConfigBase::WriteConfigFlags flags, bool expand = false); - void revertEntry(const QByteArray &group, const char *key); + 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 // of @p source with @p destination diff --git a/src/core/kconfigdata.h b/src/core/kconfigdata.h --- a/src/core/kconfigdata.h +++ b/src/core/kconfigdata.h @@ -223,7 +223,7 @@ setEntryOption(findEntry(group, key, flags), option, bf); } - bool revertEntry(const QByteArray &group, const QByteArray &key, SearchFlags flags = SearchFlags()); + bool revertEntry(const QByteArray &group, const QByteArray &key, EntryOptions options, SearchFlags flags = SearchFlags()); }; Q_DECLARE_OPERATORS_FOR_FLAGS(KEntryMap::SearchFlags) Q_DECLARE_OPERATORS_FOR_FLAGS(KEntryMap::EntryOptions) diff --git a/src/core/kconfigdata.cpp b/src/core/kconfigdata.cpp --- a/src/core/kconfigdata.cpp +++ b/src/core/kconfigdata.cpp @@ -309,7 +309,7 @@ } } -bool KEntryMap::revertEntry(const QByteArray &group, const QByteArray &key, KEntryMap::SearchFlags flags) +bool KEntryMap::revertEntry(const QByteArray &group, const QByteArray &key, KEntryMap::EntryOptions options, KEntryMap::SearchFlags flags) { Q_ASSERT((flags & KEntryMap::SearchDefaults) == 0); Iterator entry = findEntry(group, key, flags); @@ -330,6 +330,7 @@ } else { entry->mValue = QByteArray(); } + entry->bNotify = entry->bNotify || (options & EntryNotify); entry->bDirty = true; entry->bReverted = true; // skip it when writing out to disk diff --git a/src/core/kconfiggroup.h b/src/core/kconfiggroup.h --- a/src/core/kconfiggroup.h +++ b/src/core/kconfiggroup.h @@ -578,9 +578,14 @@ * * @param key The key of the entry to revert. */ + // TODO KF6 merge with the other one void revertToDefault(const QString &key); + void revertToDefault(const QString &key, WriteConfigFlags pFlag); + /** Overload for revertToDefault(const QString&) */ + // TODO KF6 merge with the other one void revertToDefault(const char *key); + void revertToDefault(const char *key, WriteConfigFlags pFlag); /** * Whether a default is specified for an entry in either the diff --git a/src/core/kconfiggroup.cpp b/src/core/kconfiggroup.cpp --- a/src/core/kconfiggroup.cpp +++ b/src/core/kconfiggroup.cpp @@ -1163,16 +1163,26 @@ } void KConfigGroup::revertToDefault(const char *key) +{ + revertToDefault(key, WriteConfigFlags()); +} + +void KConfigGroup::revertToDefault(const char *key, WriteConfigFlags flags) { Q_ASSERT_X(isValid(), "KConfigGroup::revertToDefault", "accessing an invalid group"); Q_ASSERT_X(!d->bConst, "KConfigGroup::revertToDefault", "writing to a read-only group"); - config()->d_func()->revertEntry(d->fullName(), key); + config()->d_func()->revertEntry(d->fullName(), key, flags); } void KConfigGroup::revertToDefault(const QString &key) { - revertToDefault(key.toUtf8().constData()); + revertToDefault(key, WriteConfigFlags()); +} + +void KConfigGroup::revertToDefault(const QString &key, WriteConfigFlags flags) +{ + revertToDefault(key.toUtf8().constData(), flags); } bool KConfigGroup::hasDefault(const char *key) const