diff options
author | Liang Qi <liang.qi@qt.io> | 2017-10-23 12:09:30 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-10-24 11:13:09 +0200 |
commit | 15dd1b7883f5dbe66266aeb588381f85f3532ab9 (patch) | |
tree | 1fa8caa8ec0f38aef39bcf920e3d5c7efeae5cb9 /src/qml/qml/qqmlcomponent.cpp | |
parent | f82c4de515223574bcc510de0d993426b22bccbe (diff) | |
parent | ebceda0cad6d86f6d6fe5efbf85a3b06fb4222b0 (diff) |
Merge remote-tracking branch 'origin/5.9' into 5.10
Conflicts:
src/qml/qml/qqmlimport.cpp
src/qml/qml/qqmlimport_p.h
src/qml/qml/qqmltypenamecache.cpp
Done-with: Ulf Hermann<ulf.hermann@qt.io>
Change-Id: I41ba7a592b2659ddf53da6952ea3b456a7bba319
Diffstat (limited to 'src/qml/qml/qqmlcomponent.cpp')
-rw-r--r-- | src/qml/qml/qqmlcomponent.cpp | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/src/qml/qml/qqmlcomponent.cpp b/src/qml/qml/qqmlcomponent.cpp index e7a45482e6..8ec8669c60 100644 --- a/src/qml/qml/qqmlcomponent.cpp +++ b/src/qml/qml/qqmlcomponent.cpp @@ -878,19 +878,33 @@ QQmlComponentPrivate::beginCreate(QQmlContextData *context) } void QQmlComponentPrivate::beginDeferred(QQmlEnginePrivate *enginePriv, - QObject *object, ConstructionState *state) + QObject *object, DeferredState *deferredState) { - enginePriv->inProgressCreations++; - state->errors.clear(); - state->completePending = true; - QQmlData *ddata = QQmlData::get(object); - Q_ASSERT(ddata->deferredData); - QQmlData::DeferredData *deferredData = ddata->deferredData; - QQmlContextData *creationContext = 0; - state->creator.reset(new QQmlObjectCreator(deferredData->context->parent, deferredData->compilationUnit, creationContext)); - if (!state->creator->populateDeferredProperties(object)) - state->errors << state->creator->errors; + Q_ASSERT(!ddata->deferredData.isEmpty()); + + deferredState->constructionStates.reserve(ddata->deferredData.size()); + + for (QQmlData::DeferredData *deferredData : qAsConst(ddata->deferredData)) { + enginePriv->inProgressCreations++; + + ConstructionState *state = new ConstructionState; + state->completePending = true; + + QQmlContextData *creationContext = nullptr; + state->creator.reset(new QQmlObjectCreator(deferredData->context->parent, deferredData->compilationUnit, creationContext)); + + if (!state->creator->populateDeferredProperties(object, deferredData)) + state->errors << state->creator->errors; + + deferredState->constructionStates += state; + } +} + +void QQmlComponentPrivate::completeDeferred(QQmlEnginePrivate *enginePriv, QQmlComponentPrivate::DeferredState *deferredState) +{ + for (ConstructionState *state : qAsConst(deferredState->constructionStates)) + complete(enginePriv, state); } void QQmlComponentPrivate::complete(QQmlEnginePrivate *enginePriv, ConstructionState *state) |