diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp index e59a597caac..c926c6b68fa 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 acb4ad488e1..c44fbd519c0 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::recursiveDoComponentComplete(QGraphicsItem *item) +{ + QGraphicsObject *graphicsObject = item->toGraphicsObject(); + QDeclarativeItem *declarativeItem = qobject_cast(graphicsObject); + if (declarativeItem && !nodeInstanceServer()->hasInstanceForObject(declarativeItem)) { + if (QDeclarativeItemPrivate::get(qmlGraphicsItem())->componentComplete) + return; + static_cast(qmlGraphicsItem())->componentComplete(); + + foreach (QGraphicsItem *childItem, item->childItems()) + recursiveDoComponentComplete(childItem); + } +} + void QmlGraphicsItemNodeInstance::doComponentComplete() { if (qmlGraphicsItem()) { - if (static_cast(QGraphicsItemPrivate::get(qmlGraphicsItem()))->componentComplete) - return; - static_cast(qmlGraphicsItem())->componentComplete(); - QGraphicsItemPrivate::get(qmlGraphicsItem())->sendParentChangeNotification = 1; + 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 60d5a85f652..33b1ef3a613 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;