You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-09 12:50:35 +00:00
Merge pull request #95420 from TokisanGames/fix-crash-selecting-notdescendant
Fix crash by ensuring selected node is a descendant of the edited scene
This commit is contained in:
@@ -1064,22 +1064,24 @@ void Node3DEditorViewport::_select_region() {
|
|||||||
if (found_nodes.has(sp)) {
|
if (found_nodes.has(sp)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
found_nodes.insert(sp);
|
found_nodes.insert(sp);
|
||||||
|
|
||||||
Node *node = Object::cast_to<Node>(sp);
|
Node *node = Object::cast_to<Node>(sp);
|
||||||
if (node != edited_scene) {
|
|
||||||
node = edited_scene->get_deepest_editable_node(node);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prevent selection of nodes not owned by the edited scene.
|
// Selection requires that the node is the edited scene or its descendant, and has an owner.
|
||||||
while (node && node != edited_scene->get_parent()) {
|
if (node != edited_scene) {
|
||||||
|
if (!node->get_owner() || !edited_scene->is_ancestor_of(node)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
node = edited_scene->get_deepest_editable_node(node);
|
||||||
|
while (node != edited_scene) {
|
||||||
Node *node_owner = node->get_owner();
|
Node *node_owner = node->get_owner();
|
||||||
if (node_owner == edited_scene || node == edited_scene || (node_owner != nullptr && edited_scene->is_editable_instance(node_owner))) {
|
if (node_owner == edited_scene || (node_owner != nullptr && edited_scene->is_editable_instance(node_owner))) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
node = node->get_parent();
|
node = node->get_parent();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Replace the node by the group if grouped
|
// Replace the node by the group if grouped
|
||||||
if (node->is_class("Node3D")) {
|
if (node->is_class("Node3D")) {
|
||||||
|
|||||||
Reference in New Issue
Block a user