aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml
diff options
context:
space:
mode:
authorMatthew Vogt <matthew.vogt@nokia.com>2012-07-13 10:44:39 +1000
committerQt by Nokia <qt-info@nokia.com>2012-07-13 08:06:06 +0200
commitd166e34bade3b7c82f610f5df209b6418df9e178 (patch)
treec8a9eca854635a25245994db852c0e452849e87d /src/qml/qml
parentcf507172d6aa281036cde02ded9493535685fd80 (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.cpp18
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;