diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/graphicalnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/graphicalnodeinstance.cpp index 80f4b2126fe..561a333d4d4 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/graphicalnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/graphicalnodeinstance.cpp @@ -482,20 +482,6 @@ QPair GraphicalNodeInstance::anchor(const Prop } -static void doComponentCompleteRecursive(QQuickItem *item) -{ - if (item) { - if (DesignerSupport::isComponentComplete(item)) - return; - - foreach (QQuickItem *childItem, item->childItems()) - doComponentCompleteRecursive(childItem); - - static_cast(item)->componentComplete(); - } -} - - static void disableTextCursor(QQuickItem *item) { foreach (QQuickItem *childItem, item->childItems()) @@ -512,7 +498,7 @@ static void disableTextCursor(QQuickItem *item) void GraphicalNodeInstance::doComponentComplete() { - doComponentCompleteRecursive(quickItem()); + doComponentCompleteRecursive(quickItem(), nodeInstanceServer()); disableTextCursor(quickItem()); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp index 1373360f02a..e95664f4851 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp @@ -475,8 +475,13 @@ QList NodeInstanceServer::setupInstances(const CreateSceneC setInstanceAuxiliaryData(container); } - foreach (ServerNodeInstance instance, instanceList) + + QListIterator instanceListIterator(instanceList); + instanceListIterator.toBack(); + while (instanceListIterator.hasPrevious()) { + ServerNodeInstance instance = instanceListIterator.previous(); instance.doComponentComplete(); + } return instanceList; } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp index 3c21908da9f..46b90587b2c 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp @@ -1179,6 +1179,38 @@ QObject *ObjectNodeInstance::parentObject(QObject *object) return object->parent(); } +void ObjectNodeInstance::doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInstanceServer) +{ + if (object) { + QQuickItem *item = qobject_cast(object); + + if (item && DesignerSupport::isComponentComplete(item)) + return; + + QList childList = object->children(); + + if (item) { + foreach (QQuickItem *childItem, item->childItems()) { + if (!childList.contains(childItem)) + childList.append(childItem); + } + } + + foreach (QObject *child, childList) { + if (!nodeInstanceServer->hasInstanceForObject(child)) + doComponentCompleteRecursive(child, nodeInstanceServer); + } + + if (item) { + static_cast(item)->componentComplete(); + } else { + QQmlParserStatus *qmlParserStatus = dynamic_cast< QQmlParserStatus*>(object); + if (qmlParserStatus) + qmlParserStatus->componentComplete(); + } + } +} + ObjectNodeInstance::Pointer ObjectNodeInstance::parentInstance() const { QObject *parentHolder = parent(); @@ -1247,9 +1279,7 @@ bool ObjectNodeInstance::resetStateProperty(const ObjectNodeInstance::Pointer &/ void ObjectNodeInstance::doComponentComplete() { - QQmlParserStatus *qmlParserStatus = dynamic_cast< QQmlParserStatus*>(object()); - if (qmlParserStatus) - qmlParserStatus->componentComplete(); + doComponentCompleteRecursive(object(), nodeInstanceServer()); } bool ObjectNodeInstance::isRootNodeInstance() const diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h index a6db1584d01..6c9b0eb01e5 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.h @@ -196,6 +196,7 @@ protected: void deleteObjectsInList(const QQmlProperty &metaProperty); QVariant convertSpecialCharacter(const QVariant& value) const; static QObject *parentObject(QObject *object); + static void doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInstanceServer); private: QHash m_resetValueHash;