diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp index e59a597caac87c72880205bf08e4aa3ebc884641..c926c6b68fa3113452c4f21336d6f89e2bea723c 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp @@ -45,6 +45,7 @@ GraphicsObjectNodeInstance::GraphicsObjectNodeInstance(QGraphicsObject *graphics : ObjectNodeInstance(graphicsObject), m_isMovable(true) { + QGraphicsItemPrivate::get(graphicsObject)->sendParentChangeNotification = 1; } QGraphicsObject *GraphicsObjectNodeInstance::graphicsObject() const diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp index acb4ad488e1feb0c66204ad4216a5af9729968d9..c44fbd519c08d54b17238b37cc787047ad7198b8 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp @@ -207,13 +207,24 @@ void QmlGraphicsItemNodeInstance::refresh() repositioning(qmlGraphicsItem()); } -void QmlGraphicsItemNodeInstance::doComponentComplete() +void QmlGraphicsItemNodeInstance::recursiveDoComponentComplete(QGraphicsItem *item) { - if (qmlGraphicsItem()) { - if (static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(qmlGraphicsItem()))->componentComplete) + QGraphicsObject *graphicsObject = item->toGraphicsObject(); + QDeclarativeItem *declarativeItem = qobject_cast<QDeclarativeItem*>(graphicsObject); + if (declarativeItem && !nodeInstanceServer()->hasInstanceForObject(declarativeItem)) { + if (QDeclarativeItemPrivate::get(qmlGraphicsItem())->componentComplete) return; static_cast<QDeclarativeParserStatus*>(qmlGraphicsItem())->componentComplete(); - QGraphicsItemPrivate::get(qmlGraphicsItem())->sendParentChangeNotification = 1; + + foreach (QGraphicsItem *childItem, item->childItems()) + recursiveDoComponentComplete(childItem); + } +} + +void QmlGraphicsItemNodeInstance::doComponentComplete() +{ + if (qmlGraphicsItem()) { + recursiveDoComponentComplete(qmlGraphicsItem()); } graphicsObject()->update(); @@ -301,7 +312,9 @@ void QmlGraphicsItemNodeInstance::reparent(const ObjectNodeInstance::Pointer &ol setMovable(true); } + QDeclarativeItemPrivate::get(qmlGraphicsItem())->componentComplete = 1; GraphicsObjectNodeInstance::reparent(oldParentInstance, oldParentProperty, newParentInstance, newParentProperty); + QDeclarativeItemPrivate::get(qmlGraphicsItem())->componentComplete = 0; if (newParentInstance && newParentInstance->isPositioner()) { setInPositioner(true); diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.h index 60d5a85f652f34e9096fac624291cc062cfe1c44..33b1ef3a6139b72411ffe0e22a5af7936eb264ed 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.h +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.h @@ -85,6 +85,7 @@ protected: void resetHorizontal(); void resetVertical(); void refresh(); + void recursiveDoComponentComplete(QGraphicsItem *item); private: //variables bool m_hasHeight;