diff options
author | Yuri Sizov <yuris@humnom.net> | 2023-07-21 17:15:26 +0200 |
---|---|---|
committer | Yuri Sizov <yuris@humnom.net> | 2023-07-21 17:15:26 +0200 |
commit | 4d42d6fdf63ead3b193f4e1f30faa68b5e378df1 (patch) | |
tree | d93981485eb713c6fe88cf99618ba0be1aed4da0 /scene/main/node.cpp | |
parent | 8ac00453d9c5310bb5643a501e78c062e12a5612 (diff) | |
parent | 2c0caa5828386d158e89519b811bad661e3e2174 (diff) | |
download | redot-engine-4d42d6fdf63ead3b193f4e1f30faa68b5e378df1.tar.gz |
Merge pull request #78706 from RedworkDE/node-rename-inplace
Allow renaming child nodes in `_ready`
Diffstat (limited to 'scene/main/node.cpp')
-rw-r--r-- | scene/main/node.cpp | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/scene/main/node.cpp b/scene/main/node.cpp index 6b18e47f2d..cb72e4ec08 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -1139,7 +1139,6 @@ void Node::_set_name_nocheck(const StringName &p_name) { void Node::set_name(const String &p_name) { ERR_FAIL_COND_MSG(data.inside_tree && !Thread::is_main_thread(), "Changing the name to nodes inside the SceneTree is only allowed from the main thread. Use `set_name.call_deferred(new_name)`."); - ERR_FAIL_COND_MSG(data.parent && data.parent->data.blocked > 0, "Parent node is busy setting up children, `set_name(new_name)` failed. Consider using `set_name.call_deferred(new_name)` instead."); String name = p_name.validate_node_name(); ERR_FAIL_COND(name.is_empty()); @@ -1151,9 +1150,9 @@ void Node::set_name(const String &p_name) { data.name = name; if (data.parent) { - data.parent->data.children.erase(old_name); data.parent->_validate_child_name(this, true); - data.parent->data.children.insert(data.name, this); + bool success = data.parent->data.children.replace_key(old_name, data.name); + ERR_FAIL_COND_MSG(!success, "Renaming child in hashtable failed, this is a bug."); } if (data.unique_name_in_owner && data.owner) { |