瀏覽代碼

Merge pull request #94773 from Hilderin/fix-add-child-node-problem-no-auto-expand

Fix scene node selection problem when no auto expand
Rémi Verschelde 1 年之前
父節點
當前提交
219eba940f
共有 1 個文件被更改,包括 18 次插入1 次删除
  1. 18 1
      editor/gui/scene_tree_editor.cpp

+ 18 - 1
editor/gui/scene_tree_editor.cpp

@@ -1000,6 +1000,7 @@ void SceneTreeEditor::set_selected(Node *p_node, bool p_emit_selected) {
 	TreeItem *item = p_node ? _find(tree->get_root(), p_node->get_path()) : nullptr;
 	TreeItem *item = p_node ? _find(tree->get_root(), p_node->get_path()) : nullptr;
 
 
 	if (item) {
 	if (item) {
+		selected = p_node;
 		if (auto_expand_selected) {
 		if (auto_expand_selected) {
 			// Make visible when it's collapsed.
 			// Make visible when it's collapsed.
 			TreeItem *node = item->get_parent();
 			TreeItem *node = item->get_parent();
@@ -1009,8 +1010,24 @@ void SceneTreeEditor::set_selected(Node *p_node, bool p_emit_selected) {
 			}
 			}
 			item->select(0);
 			item->select(0);
 			item->set_as_cursor(0);
 			item->set_as_cursor(0);
-			selected = p_node;
 			tree->ensure_cursor_is_visible();
 			tree->ensure_cursor_is_visible();
+		} else {
+			// Ensure the node is selected and visible for the user if the node
+			// is not collapsed.
+			bool collapsed = false;
+			TreeItem *node = item;
+			while (node && node != tree->get_root()) {
+				if (node->is_collapsed()) {
+					collapsed = true;
+					break;
+				}
+				node = node->get_parent();
+			}
+			if (!collapsed) {
+				item->select(0);
+				item->set_as_cursor(0);
+				tree->ensure_cursor_is_visible();
+			}
 		}
 		}
 	} else {
 	} else {
 		if (!p_node) {
 		if (!p_node) {