Avoid recursive parent chains in QQuickItem
authorGunnar Sletta <gunnar.sletta@nokia.com>
Mon, 6 Feb 2012 16:57:43 +0000 (17:57 +0100)
committerQt by Nokia <qt-info@nokia.com>
Tue, 7 Feb 2012 10:45:14 +0000 (11:45 +0100)
Change-Id: I47b666cfacd804c4302236f0a4b371ca7b382c3d
Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
src/quick/items/qquickitem.cpp

index 30a23db..166ffe8 100644 (file)
@@ -1869,6 +1869,17 @@ void QQuickItem::setParentItem(QQuickItem *parentItem)
     if (parentItem == d->parentItem)
         return;
 
+    if (parentItem) {
+        QQuickItem *itemAncestor = parentItem->parentItem();
+        while (itemAncestor != 0) {
+            if (itemAncestor == this) {
+                qWarning("QQuickItem::setParentItem: Parent is already part of this items subtree.");
+                return;
+            }
+            itemAncestor = itemAncestor->parentItem();
+        }
+    }
+
     d->removeFromDirtyList();
 
     QQuickItem *oldParentItem = d->parentItem;