From 51b8427e60b857aa03388d1dde19cdc80c283480 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 22 Jan 2025 16:34:57 +0100 Subject: [PATCH] QmlDesigner: prioritize visible items when selecting Prioritize visible items over invisible ones when selecting. This check explicitly checks visibility. Items like MouseArea without content are still visible by default. Task-number: QDS-14210 Change-Id: I772586c24b6cd61ef00add6633815b5d9b43b666 Reviewed-by: Thomas Hartmann --- .../formeditor/abstractformeditortool.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp index b8913546647..9519b2b08f0 100644 --- a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.cpp @@ -176,17 +176,27 @@ FormEditorItem* AbstractFormEditorTool::nearestFormEditorItem(const QPointF &poi if (formEditorItem && formEditorItem->flowHitTest(point)) return formEditorItem; - if (!formEditorItem || !formEditorItem->qmlItemNode().isValid()) + if (!formEditorItem) + continue; + auto qmlItemNode = formEditorItem->qmlItemNode(); + if (!qmlItemNode.isValid()) continue; if (formEditorItem->parentItem() && !formEditorItem->parentItem()->isContentVisible()) continue; - if (formEditorItem && ModelUtils::isThisOrAncestorLocked(formEditorItem->qmlItemNode().modelNode())) + if (formEditorItem && ModelUtils::isThisOrAncestorLocked(qmlItemNode.modelNode())) continue; if (!nearestItem) nearestItem = formEditorItem; + + if (!qmlItemNode.instanceIsVisible() && nearestItem->qmlItemNode().instanceIsVisible()) + continue; + + if (qmlItemNode.instanceIsVisible() && !nearestItem->qmlItemNode().instanceIsVisible()) + nearestItem = formEditorItem; + else if (formEditorItem->selectionWeigth(point, 1) < nearestItem->selectionWeigth(point, 0)) nearestItem = formEditorItem; }