From 3b6eeee177b64eebe240d51be0c7bb5f031471d8 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Thu, 14 Sep 2017 13:24:42 +0200 Subject: Fix execution of deferred properties When deferred properties were assigned in multiple contexts, only the outermost context was executed. Any deferred property assignments in other inner contexts were never executed. Collect the deferred data to a container to be able to execute them all. Task-number: QTBUG-63200 Change-Id: I88fab27c1f81b5188430ada086dcc19842507e99 Reviewed-by: Lars Knoll --- src/qml/qml/qqmlobjectcreator.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/qml/qml/qqmlobjectcreator.cpp') diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp index 07a90d4d63..b2f1421bcb 100644 --- a/src/qml/qml/qqmlobjectcreator.cpp +++ b/src/qml/qml/qqmlobjectcreator.cpp @@ -233,10 +233,10 @@ QObject *QQmlObjectCreator::create(int subComponentIndex, QObject *parent, QQmlI return instance; } -bool QQmlObjectCreator::populateDeferredProperties(QObject *instance) +bool QQmlObjectCreator::populateDeferredProperties(QObject *instance, QQmlData::DeferredData *deferredData) { QQmlData *declarativeData = QQmlData::get(instance); - context = declarativeData->deferredData->context; + context = deferredData->context; sharedState->rootContext = context; QObject *bindingTarget = instance; @@ -260,7 +260,7 @@ bool QQmlObjectCreator::populateDeferredProperties(QObject *instance) qSwap(_propertyCache, cache); qSwap(_qobject, instance); - int objectIndex = declarativeData->deferredData->deferredIdx; + int objectIndex = deferredData->deferredIdx; qSwap(_compiledObjectIndex, objectIndex); const QV4::CompiledData::Object *obj = qmlUnit->objectAt(_compiledObjectIndex); @@ -1347,7 +1347,7 @@ bool QQmlObjectCreator::populateInstance(int index, QObject *instance, QObject * deferData->compilationUnit = compilationUnit; deferData->compilationUnit->addref(); deferData->context = context; - _ddata->deferredData = deferData; + _ddata->deferredData.append(deferData); } if (_compiledObject->nFunctions > 0) -- cgit v1.2.3