From 6c9ded9461d749b80b221b2d2b24e2a796fb8116 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 8 Mar 2022 15:57:19 +0200 Subject: [PATCH] QmlDesigner: Block starting drag when clicking on non-draggable node Fixes: QDS-6415 Change-Id: I328e7715d2837d1126506a6fbbf4d1bf52cc250f Reviewed-by: Thomas Hartmann Reviewed-by: Mahmoud Badri Reviewed-by: --- .../components/navigator/navigatortreeview.cpp | 16 ++++++++++++++++ .../components/navigator/navigatortreeview.h | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp index 2d1ef6f554d..d679e6017d4 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp @@ -281,4 +281,20 @@ bool NavigatorTreeView::viewportEvent(QEvent *event) return QTreeView::viewportEvent(event); } +void NavigatorTreeView::mousePressEvent(QMouseEvent *event) +{ + // Block drag from starting if press was on an item that is not draggable. + // This is necessary as it is the selected items that are dragged and the pressed item may not + // be a selected item, e.g. when pressing on locked item, leading to unexpected drags. + m_dragAllowed = model()->flags(indexAt(event->pos())) & Qt::ItemIsDragEnabled; + + QTreeView::mousePressEvent(event); +} + +void NavigatorTreeView::startDrag(Qt::DropActions supportedActions) +{ + if (m_dragAllowed) + QTreeView::startDrag(supportedActions); +} + } diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreeview.h b/src/plugins/qmldesigner/components/navigator/navigatortreeview.h index 227746e207d..6f2211f82bd 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreeview.h +++ b/src/plugins/qmldesigner/components/navigator/navigatortreeview.h @@ -40,8 +40,13 @@ public: static void drawSelectionBackground(QPainter *painter, const QStyleOption &option); bool viewportEvent(QEvent *event) override; +protected: + void mousePressEvent(QMouseEvent *event) override; + void startDrag(Qt::DropActions supportedActions) override; + private: PreviewToolTip *m_previewToolTip = nullptr; qint32 m_previewToolTipNodeId = -1; + bool m_dragAllowed = true; }; }