aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/qml/qqmlobjectcreator.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp
index ca6fc7edf4..fe7995ea59 100644
--- a/src/qml/qml/qqmlobjectcreator.cpp
+++ b/src/qml/qml/qqmlobjectcreator.cpp
@@ -942,16 +942,26 @@ void QmlObjectCreator::setupBindings()
qSwap(_currentList, savedList);
QQmlPropertyData *property = 0;
+ bool defaultPropertyQueried = false;
+ QQmlPropertyData *defaultProperty = 0;
const QV4::CompiledData::Binding *binding = _compiledObject->bindingTable();
for (quint32 i = 0; i < _compiledObject->nBindings; ++i, ++binding) {
+ QString name = stringAt(binding->propertyNameIndex);
+ if (name.isEmpty())
+ property = 0;
+
if (!property || (i > 0 && (binding - 1)->propertyNameIndex != binding->propertyNameIndex)) {
- QString name = stringAt(binding->propertyNameIndex);
if (!name.isEmpty())
property = _propertyCache->property(name, _qobject, context);
- else
- property = 0;
+ else {
+ if (!defaultPropertyQueried) {
+ defaultProperty = _propertyCache->defaultProperty();
+ defaultPropertyQueried = true;
+ }
+ property = defaultProperty;
+ }
if (property && property->isQList()) {
void *argv[1] = { (void*)&_currentList };