From d853997f9985b5bd6144e8dd3df15e7e02938c64 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann <Thomas.Hartmann@nokia.com> Date: Fri, 15 Jul 2011 18:21:05 +0200 Subject: [PATCH] QmlDesigner.dragAndDrop: crash fix This fixes a crash if we drag in complex items with children. Change-Id: I0e924d3130cbd43dc9a20469576dce8a0f67f3df Reviewed-on: http://codereview.qt.nokia.com/1715 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Thomas Hartmann <Thomas.Hartmann@nokia.com> --- .../qmldesigner/components/formeditor/dragtool.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp index f2f95f52cd3..865583602f2 100644 --- a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp @@ -185,12 +185,20 @@ void DragTool::createQmlItemNodeFromImage(const QString &imageName, QmlItemNode m_selectionIndicator.setItems(scene()->itemsForQmlItemNodes(nodeList)); } +static inline bool isAncestorOf(FormEditorItem *formEditorItem, FormEditorItem *newParentItem) +{ + if (formEditorItem && newParentItem) + return formEditorItem->isAncestorOf(newParentItem); + return false; +} + FormEditorItem* DragTool::calculateContainer(const QPointF &point, FormEditorItem * currentItem) { QList<QGraphicsItem *> list = scene()->items(point); foreach (QGraphicsItem *item, list) { FormEditorItem *formEditorItem = FormEditorItem::fromQGraphicsItem(item); - if (formEditorItem && formEditorItem != currentItem && formEditorItem->isContainer()) + if (formEditorItem && formEditorItem != currentItem && formEditorItem->isContainer() + && !isAncestorOf(currentItem, formEditorItem)) return formEditorItem; } -- GitLab