From 12f6c8f631f096bf44f737eded26d0adf187086b Mon Sep 17 00:00:00 2001 From: Thomas Hartmann <Thomas.Hartmann@nokia.com> Date: Fri, 8 Jan 2010 17:13:33 +0100 Subject: [PATCH] Qml Designer: fixes nasty crash bug in Navigator We have to use LinkAction instead of MoveAction otherwise the model and the ItemView executes the move/reparenting which turns the ItemModel invalid and results in a crash --- .../components/navigator/navigatortreemodel.cpp | 9 +++++---- .../qmldesigner/components/navigator/navigatorwidget.cpp | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp index ef9b8601439..e172f53cc04 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp @@ -48,7 +48,7 @@ NavigatorTreeModel::NavigatorTreeModel(QObject *parent) setHorizontalHeaderItem(1, new QStandardItem(tr("Type"))); setHorizontalHeaderItem(2, new QStandardItem(tr("Show in Editor"))); - setSupportedDragActions(Qt::MoveAction); + setSupportedDragActions(Qt::LinkAction); connect(this, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(handleChangedItem(QStandardItem*))); @@ -60,7 +60,7 @@ NavigatorTreeModel::~NavigatorTreeModel() Qt::DropActions NavigatorTreeModel::supportedDropActions() const { - return Qt::MoveAction; + return Qt::LinkAction; } QStringList NavigatorTreeModel::mimeTypes() const @@ -113,7 +113,7 @@ bool NavigatorTreeModel::dropMimeData(const QMimeData *data, { if (action == Qt::IgnoreAction) return true; - if (action != Qt::MoveAction) + if (action != Qt::LinkAction) return false; if (!data->hasFormat("application/vnd.modelnode.list")) return false; @@ -159,7 +159,8 @@ bool NavigatorTreeModel::dropMimeData(const QMimeData *data, if (!isAnchestorInList(node, nodeList)) { if (node.parentProperty().parentModelNode() != parentItemNode) { QmlItemNode itemNode(node); - itemNode.setParent(parentItemNode); + if (node != parentItemNode) + itemNode.setParent(parentItemNode); } if (node.parentProperty().isNodeListProperty()) { diff --git a/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp b/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp index 36a08386491..761b256c610 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatorwidget.cpp @@ -46,6 +46,7 @@ NavigatorWidget::NavigatorWidget(QWidget* parent) : m_treeView->setAcceptDrops(true); m_treeView->setSelectionMode(QAbstractItemView::ExtendedSelection); m_treeView->header()->setStretchLastSection(false); + m_treeView->setDefaultDropAction(Qt::LinkAction); QVBoxLayout *layout = new QVBoxLayout; layout->setSpacing(0); -- GitLab