aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlobjectcreator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/qml/qqmlobjectcreator.cpp')
-rw-r--r--src/qml/qml/qqmlobjectcreator.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp
index ac438b2b7c..150401a358 100644
--- a/src/qml/qml/qqmlobjectcreator.cpp
+++ b/src/qml/qml/qqmlobjectcreator.cpp
@@ -796,12 +796,6 @@ bool QQmlObjectCreator::setPropertyBinding(QQmlPropertyData *property, const QV4
groupObject = valueType;
valueTypeProperty = property;
} else {
- groupObjectPropertyCache = enginePrivate->propertyCacheForType(property->propType);
- if (!groupObjectPropertyCache) {
- recordError(binding->location, tr("Invalid grouped property access"));
- return false;
- }
-
void *argv[1] = { &groupObject };
QMetaObject::metacall(_qobject, QMetaObject::ReadProperty, property->coreIndex, argv);
if (!groupObject) {
@@ -809,6 +803,16 @@ bool QQmlObjectCreator::setPropertyBinding(QQmlPropertyData *property, const QV4
return false;
}
+ if (QQmlData *groupDeclarativeData = QQmlData::get(groupObject))
+ groupObjectPropertyCache = groupDeclarativeData->propertyCache;
+ if (!groupObjectPropertyCache)
+ groupObjectPropertyCache = enginePrivate->propertyCacheForType(property->propType);
+ if (!groupObjectPropertyCache) {
+ recordError(binding->location, tr("Invalid grouped property access"));
+ return false;
+ }
+
+
bindingTarget = groupObject;
}
@@ -1284,6 +1288,7 @@ bool QQmlObjectCreator::populateInstance(int index, QObject *instance, QQmlRefPo
vmeMetaObject = new QQmlVMEMetaObject(_qobject, _propertyCache, reinterpret_cast<const QQmlVMEMetaData*>(data.constData()));
if (_ddata->propertyCache)
_ddata->propertyCache->release();
+ Q_ASSERT(installPropertyCache);
scopeObjectProtector = _ddata->jsWrapper.value();
} else {
vmeMetaObject = QQmlVMEMetaObject::get(_qobject);