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 <thomas.hartmann@qt.io>
This commit is contained in:
Thomas Hartmann
2025-01-22 16:34:57 +01:00
committed by Thomas Hartmann
parent d5f1a49a7b
commit 51b8427e60

View File

@@ -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;
}