summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qml/qml/qqmlobjectcreator.cpp22
-rw-r--r--src/qml/qml/qqmlobjectcreator_p.h5
2 files changed, 21 insertions, 6 deletions
diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp
index f0ed6abe7e..388ab89fa8 100644
--- a/src/qml/qml/qqmlobjectcreator.cpp
+++ b/src/qml/qml/qqmlobjectcreator.cpp
@@ -1177,11 +1177,10 @@ QObject *QQmlObjectCreator::createInstance(int index, QObject *parent, bool isCo
if (obj->flags & QV4::CompiledData::Object::IsComponent) {
isComponent = true;
- QQmlComponent *component = new QQmlComponent(engine, compilationUnit.data(), index, parent);
+ instance = createComponent(engine, compilationUnit.data(), index, parent, context);
typeName = QStringLiteral("<component>");
- QQmlComponentPrivate::get(component)->creationContext = context;
- instance = component;
- ddata = QQmlData::get(instance, /*create*/true);
+ ddata = QQmlData::get(instance);
+ Q_ASSERT(ddata); // we just created it inside createComponent
} else {
QV4::ResolvedTypeReference *typeRef = resolvedType(obj->inheritedTypeNameIndex);
Q_ASSERT(typeRef);
@@ -1685,8 +1684,19 @@ bool QQmlObjectCreator::populateInstance(int index, QObject *instance, QObject *
return errors.isEmpty();
}
-
-
+/*!
+ \internal
+*/
+QQmlComponent *QQmlObjectCreator::createComponent(QQmlEngine *engine,
+ QV4::ExecutableCompilationUnit *compilationUnit,
+ int index, QObject *parent,
+ const QQmlRefPointer<QQmlContextData> &context)
+{
+ QQmlComponent *component = new QQmlComponent(engine, compilationUnit, index, parent);
+ QQmlComponentPrivate::get(component)->creationContext = context;
+ QQmlData::get(component, /*create*/ true);
+ return component;
+}
QQmlObjectCreatorRecursionWatcher::QQmlObjectCreatorRecursionWatcher(QQmlObjectCreator *creator)
: sharedState(creator->sharedState)
diff --git a/src/qml/qml/qqmlobjectcreator_p.h b/src/qml/qml/qqmlobjectcreator_p.h
index 9d4022c522..e5af988748 100644
--- a/src/qml/qml/qqmlobjectcreator_p.h
+++ b/src/qml/qml/qqmlobjectcreator_p.h
@@ -152,6 +152,11 @@ public:
RequiredProperties &requiredProperties() {return sharedState->requiredProperties;}
bool componentHadRequiredProperties() const {return sharedState->hadRequiredProperties;}
+ static QQmlComponent *createComponent(QQmlEngine *engine,
+ QV4::ExecutableCompilationUnit *compilationUnit,
+ int index, QObject *parent,
+ const QQmlRefPointer<QQmlContextData> &context);
+
private:
QQmlObjectCreator(QQmlRefPointer<QQmlContextData> contextData,
const QQmlRefPointer<QV4::ExecutableCompilationUnit> &compilationUnit,