From 059a4feee45b91d819d7675fe5b3cc220f29c6ee Mon Sep 17 00:00:00 2001 From: Benjamin Port Date: Wed, 12 Feb 2020 10:51:32 +0100 Subject: Add setNotifyFunction to KPropertySkeletonItem Summary: This function will be called when the property value change Reviewers: ervin, meven, crossi Subscribers: kde-frameworks-devel Tags: #frameworks Differential Revision: https://phabricator.kde.org/D27342 --- src/core/kcoreconfigskeleton.cpp | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'src/core/kcoreconfigskeleton.cpp') diff --git a/src/core/kcoreconfigskeleton.cpp b/src/core/kcoreconfigskeleton.cpp index 7566301b..be2fe27c 100644 --- a/src/core/kcoreconfigskeleton.cpp +++ b/src/core/kcoreconfigskeleton.cpp @@ -205,7 +205,13 @@ QVariant KPropertySkeletonItem::property() const void KPropertySkeletonItem::setProperty(const QVariant &p) { Q_D(KPropertySkeletonItem); + if (d->mReference == p) { + return; + } d->mReference = p; + if (d->mNotifyFunction) { + d->mNotifyFunction(); + } } bool KPropertySkeletonItem::isEqual(const QVariant &p) const @@ -217,7 +223,7 @@ bool KPropertySkeletonItem::isEqual(const QVariant &p) const void KPropertySkeletonItem::readConfig(KConfig *) { Q_D(KPropertySkeletonItem); - d->mReference = d->mObject->property(d->mPropertyName.constData()); + setProperty(d->mObject->property(d->mPropertyName.constData())); d->mLoadedValue = d->mReference; } @@ -231,19 +237,31 @@ void KPropertySkeletonItem::writeConfig(KConfig *) void KPropertySkeletonItem::readDefault(KConfig *) { Q_D(KPropertySkeletonItem); - d->mReference = d->mConstDefaultValue; + setProperty(d->mConstDefaultValue); } void KPropertySkeletonItem::setDefault() { Q_D(KPropertySkeletonItem); - d->mReference = d->mDefaultValue; + setProperty(d->mDefaultValue); } void KPropertySkeletonItem::swapDefault() { Q_D(KPropertySkeletonItem); + if (d->mReference == d->mDefaultValue) { + return; + } std::swap(d->mReference, d->mDefaultValue); + if (d->mNotifyFunction) { + d->mNotifyFunction(); + } +} + +void KPropertySkeletonItem::setNotifyFunction(const std::function &impl) +{ + Q_D(KPropertySkeletonItem); + d->mNotifyFunction = impl; } KCoreConfigSkeleton::ItemString::ItemString(const QString &_group, const QString &_key, -- cgit v1.2.1