diff --git a/src/plugins/qmldesigner/designercore/instances/graphicsobjectnodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/graphicsobjectnodeinstance.cpp index 6f0d2724e66d10aa2b97cc6b4890835f7b42b35e..f6e075020e5e27463ec1e19d7a0c6b528fdab68a 100644 --- a/src/plugins/qmldesigner/designercore/instances/graphicsobjectnodeinstance.cpp +++ b/src/plugins/qmldesigner/designercore/instances/graphicsobjectnodeinstance.cpp @@ -72,12 +72,36 @@ QList<ServerNodeInstance> GraphicsObjectNodeInstance::childItems() const QGraphicsObject *childObject = item->toGraphicsObject(); if (childObject && nodeInstanceServer()->hasInstanceForObject(childObject)) { instanceList.append(nodeInstanceServer()->instanceForObject(childObject)); + } else { //there might be an item in between the parent instance + //and the child instance. + //Popular example is flickable which has a viewport item between + //the flickable item and the flickable children + instanceList.append(childItemsForChild(item)); //In such a case we go deeper inside the item and + //search for child items with instances. } } return instanceList; } +QList<ServerNodeInstance> GraphicsObjectNodeInstance::childItemsForChild(QGraphicsItem *childItem) const +{ + QList<ServerNodeInstance> instanceList; + if (childItem) { + + foreach(QGraphicsItem *item, childItem->childItems()) + { + QGraphicsObject *childObject = item->toGraphicsObject(); + if (childObject && nodeInstanceServer()->hasInstanceForObject(childObject)) { + instanceList.append(nodeInstanceServer()->instanceForObject(childObject)); + } else { + instanceList.append(childItemsForChild(item)); + } + } + } + return instanceList; +} + void GraphicsObjectNodeInstance::setHasContent(bool hasContent) { m_hasContent = hasContent; diff --git a/src/plugins/qmldesigner/designercore/instances/graphicsobjectnodeinstance.h b/src/plugins/qmldesigner/designercore/instances/graphicsobjectnodeinstance.h index 333d0ceaabace9da279a2709b4ae91c20d95aef2..e6fa5060c918c336291beb01244e5e4f14fb0d9d 100644 --- a/src/plugins/qmldesigner/designercore/instances/graphicsobjectnodeinstance.h +++ b/src/plugins/qmldesigner/designercore/instances/graphicsobjectnodeinstance.h @@ -76,6 +76,7 @@ public: bool hasContent() const; QList<ServerNodeInstance> childItems() const; + QList<ServerNodeInstance> childItemsForChild(QGraphicsItem *childItem) const; void paintUpdate();