From 29c2615352e2c2fa24d6f1ba2f8c09c971d87bd1 Mon Sep 17 00:00:00 2001 From: Saracen Date: Sun, 15 Oct 2023 05:58:19 +0100 Subject: [PATCH] Remove toggling of unique names in subscenes --- editor/gui/scene_tree_editor.cpp | 2 +- editor/scene_tree_dock.cpp | 25 ++++++++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/editor/gui/scene_tree_editor.cpp b/editor/gui/scene_tree_editor.cpp index 26fdb74bd1f..056e4f8d9d5 100644 --- a/editor/gui/scene_tree_editor.cpp +++ b/editor/gui/scene_tree_editor.cpp @@ -311,7 +311,7 @@ void SceneTreeEditor::_add_nodes(Node *p_node, TreeItem *p_parent) { } if (p_node->is_unique_name_in_owner()) { - item->add_button(0, get_editor_theme_icon(SNAME("SceneUniqueName")), BUTTON_UNIQUE, false, vformat(TTR("This node can be accessed from within anywhere in the scene by preceding it with the '%s' prefix in a node path.\nClick to disable this."), UNIQUE_NODE_PREFIX)); + item->add_button(0, get_editor_theme_icon(SNAME("SceneUniqueName")), BUTTON_UNIQUE, p_node->get_owner() != EditorNode::get_singleton()->get_edited_scene(), vformat(TTR("This node can be accessed from within anywhere in the scene by preceding it with the '%s' prefix in a node path.\nClick to disable this."), UNIQUE_NODE_PREFIX)); } int num_connections = p_node->get_persistent_signal_connection_count(); diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index 2b7e10de2c9..df891c31c49 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -1158,9 +1158,25 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { return; } } - bool enabling = !first_selected->get()->is_unique_name_in_owner(); List full_selection = editor_selection->get_full_selected_node_list(); + + // Check if all the nodes for this operation are invalid, and if they are, pop up a dialog and end here. + bool all_nodes_owner_invalid = true; + for (Node *node : full_selection) { + if (node->get_owner() == get_tree()->get_edited_scene_root()) { + all_nodes_owner_invalid = false; + break; + } + } + if (all_nodes_owner_invalid) { + accept->set_text(TTR("Can't toggle unique name for nodes in subscene!")); + accept->popup_centered(); + return; + } + + bool enabling = !first_selected->get()->is_unique_name_in_owner(); + EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); if (enabling) { @@ -1172,6 +1188,10 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { if (node->is_unique_name_in_owner()) { continue; } + if (node->get_owner() != get_tree()->get_edited_scene_root()) { + continue; + } + StringName name = node->get_name(); if (new_unique_names.find(name) != -1 || get_tree()->get_edited_scene_root()->get_node_or_null(UNIQUE_NODE_PREFIX + String(name)) != nullptr) { cant_be_set_unique_names.push_back(name); @@ -1205,6 +1225,9 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { if (!node->is_unique_name_in_owner()) { continue; } + if (node->get_owner() != get_tree()->get_edited_scene_root()) { + continue; + } undo_redo->add_do_method(node, "set_unique_name_in_owner", false); undo_redo->add_undo_method(node, "set_unique_name_in_owner", true); }