diff --git a/changelog/next.md b/changelog/next.md index 3059cc9..88c7484 100644 --- a/changelog/next.md +++ b/changelog/next.md @@ -67,6 +67,7 @@ set shell id. - Fixed HyprlandFocusGrab crashing if windows were destroyed after being passed to it. - Fixed ScreencopyView pixelation when scaled. - Fixed JsonAdapter crashing and providing bad data on read when using JsonObject. +- Fixed JsonAdapter sending unnecessary property changes for primitive values. ## Packaging Changes diff --git a/src/io/jsonadapter.cpp b/src/io/jsonadapter.cpp index 68e85ab..9ca7060 100644 --- a/src/io/jsonadapter.cpp +++ b/src/io/jsonadapter.cpp @@ -154,13 +154,15 @@ void JsonAdapter::deserializeRec(const QJsonObject& json, QObject* obj, const QM auto jval = json.value(prop.name()); if (prop.metaType() == QMetaType::fromType()) { - auto variant = jval.toVariant(); - auto oldValue = prop.read(obj).value(); + auto newVariant = jval.toVariant(); + auto oldValue = prop.read(obj); + auto oldVariant = + oldValue.canConvert() ? oldValue.value().toVariant() : oldValue; // Calling prop.write with a new QJSValue will cause a property update // even if content is identical. - if (jval.toVariant() != oldValue.toVariant()) { - auto jsValue = qmlEngine(this)->fromVariant(jval.toVariant()); + if (newVariant != oldVariant) { + auto jsValue = qmlEngine(this)->fromVariant(newVariant); prop.write(obj, QVariant::fromValue(jsValue)); } } else if (QMetaType::canView(prop.metaType(), QMetaType::fromType())) {