diff options
author | Matthew Vogt <matthew.vogt@nokia.com> | 2012-07-13 10:44:39 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-07-13 08:06:06 +0200 |
commit | d166e34bade3b7c82f610f5df209b6418df9e178 (patch) | |
tree | c8a9eca854635a25245994db852c0e452849e87d /src/qml/qml | |
parent | cf507172d6aa281036cde02ded9493535685fd80 (diff) |
Update multiple value type properties despite interceptor
When an interceptor is present on a value type, ensure that multiple
properties of that value can be updated simultaneously.
Task-number: QTBUG-25139
Change-Id: I3042b9883d404aed4b6507e6d2f38a76caee1196
Reviewed-by: Glenn Watson <glenn.watson@nokia.com>
Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Diffstat (limited to 'src/qml/qml')
-rw-r--r-- | src/qml/qml/qqmlvmemetaobject.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/qml/qml/qqmlvmemetaobject.cpp b/src/qml/qml/qqmlvmemetaobject.cpp index c982856453..5dcff3ea24 100644 --- a/src/qml/qml/qqmlvmemetaobject.cpp +++ b/src/qml/qml/qqmlvmemetaobject.cpp @@ -665,13 +665,21 @@ int QQmlVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a) valueType->setValue(newValue); QVariant newComponentValue = valueProp.read(valueType); - valueProp.write(valueType, prevComponentValue); - valueType->write(object, id, QQmlPropertyPrivate::DontRemoveBinding | QQmlPropertyPrivate::BypassInterceptor); + // Don't apply the interceptor if the intercepted value has not changed + bool updated = false; + if (newComponentValue != prevComponentValue) { + valueProp.write(valueType, prevComponentValue); + valueType->write(object, id, QQmlPropertyPrivate::DontRemoveBinding | QQmlPropertyPrivate::BypassInterceptor); + + vi->write(newComponentValue); + updated = true; + } - vi->write(newComponentValue); + if (!ep) + delete valueType; - if (!ep) delete valueType; - return -1; + if (updated) + return -1; } else { vi->write(QVariant(type, a[0])); return -1; |