summaryrefslogtreecommitdiffstats
path: root/src/declarative/qml
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/qml')
-rw-r--r--src/declarative/qml/qmlbinding.cpp8
-rw-r--r--src/declarative/qml/qmlobjectscriptclass.cpp12
2 files changed, 15 insertions, 5 deletions
diff --git a/src/declarative/qml/qmlbinding.cpp b/src/declarative/qml/qmlbinding.cpp
index c0389a8..3e29a3c 100644
--- a/src/declarative/qml/qmlbinding.cpp
+++ b/src/declarative/qml/qmlbinding.cpp
@@ -147,7 +147,11 @@ void QmlBinding::update(QmlMetaProperty::WriteFlags flags)
bool isUndefined = false;
QVariant value = this->value(&isUndefined);
- if (isUndefined && !data->error.isValid()) {
+ if (isUndefined && !data->error.isValid() && data->property.isResettable()) {
+
+ data->property.reset();
+
+ } else if (isUndefined && !data->error.isValid()) {
QUrl url = QUrl(data->url);
int line = data->line;
@@ -159,7 +163,7 @@ void QmlBinding::update(QmlMetaProperty::WriteFlags flags)
data->error.setDescription(QLatin1String("Unable to assign [undefined] to ") + QLatin1String(QMetaType::typeName(data->property.propertyType())));
} else if (!isUndefined && data->property.object() &&
- !data->property.write(value, flags)) {
+ !data->property.write(value, flags)) {
QUrl url = QUrl(data->url);
int line = data->line;
diff --git a/src/declarative/qml/qmlobjectscriptclass.cpp b/src/declarative/qml/qmlobjectscriptclass.cpp
index 86f0afc..7194f33 100644
--- a/src/declarative/qml/qmlobjectscriptclass.cpp
+++ b/src/declarative/qml/qmlobjectscriptclass.cpp
@@ -352,12 +352,18 @@ void QmlObjectScriptClass::setProperty(QObject *obj,
evalContext = enginePriv->contextClass->contextFromValue(scopeNode);
}
- // ### Can well known types be optimized?
- QVariant v = QmlScriptClass::toVariant(engine, value);
QmlAbstractBinding *delBinding = QmlMetaPropertyPrivate::setBinding(obj, *lastData, 0);
if (delBinding)
delBinding->destroy();
- QmlMetaPropertyPrivate::write(obj, *lastData, v, evalContext);
+
+ if (value.isUndefined() && lastData->flags & QmlPropertyCache::Data::IsResettable) {
+ void *a[] = { 0 };
+ QMetaObject::metacall(obj, QMetaObject::ResetProperty, lastData->coreIndex, a);
+ } else {
+ // ### Can well known types be optimized?
+ QVariant v = QmlScriptClass::toVariant(engine, value);
+ QmlMetaPropertyPrivate::write(obj, *lastData, v, evalContext);
+ }
}
bool QmlObjectScriptClass::isQObject() const