瀏覽代碼

Merge pull request #39982 from hinlopen/create-dialog-preferred

Add Control to preferred types in Create Dialog
Rémi Verschelde 5 年之前
父節點
當前提交
dffb8824db
共有 1 個文件被更改,包括 12 次插入7 次删除
  1. 12 7
      editor/scene_tree_dock.cpp

+ 12 - 7
editor/scene_tree_dock.cpp

@@ -350,17 +350,22 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
 			if (!profile_allow_editing) {
 				break;
 			}
-			String preferred = "";
-			Node *current_edited_scene_root = EditorNode::get_singleton()->get_edited_scene();
 
+			// Prefer nodes that inherit from the current scene root.
+			Node *current_edited_scene_root = EditorNode::get_singleton()->get_edited_scene();
 			if (current_edited_scene_root) {
-				if (ClassDB::is_parent_class(current_edited_scene_root->get_class_name(), "Node2D")) {
-					preferred = "Node2D";
-				} else if (ClassDB::is_parent_class(current_edited_scene_root->get_class_name(), "Node3D")) {
-					preferred = "Node3D";
+				static const String preferred_types[] = { "Node2D", "Node3D", "Control" };
+
+				StringName root_class = current_edited_scene_root->get_class_name();
+
+				for (int i = 0; i < preferred_types->size(); i++) {
+					if (ClassDB::is_parent_class(root_class, preferred_types[i])) {
+						create_dialog->set_preferred_search_result_type(preferred_types[i]);
+						break;
+					}
 				}
 			}
-			create_dialog->set_preferred_search_result_type(preferred);
+
 			create_dialog->popup_create(true);
 		} break;
 		case TOOL_INSTANCE: {