From 9d735b09049f566920cdc172644ab715dc95d98d Mon Sep 17 00:00:00 2001 From: Adam Scott Date: Mon, 9 Sep 2024 14:17:42 -0400 Subject: [PATCH] Fix issue where editable children of 3D nodes would be selected --- editor/plugins/node_3d_editor_plugin.cpp | 10 +++------- editor/plugins/node_3d_editor_plugin.h | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index 44673e7224c..35a8741b199 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -810,7 +810,7 @@ ObjectID Node3DEditorViewport::_select_ray(const Point2 &p_pos) const { Vector nodes_with_gizmos = Node3DEditor::get_singleton()->gizmo_bvh_ray_query(pos, pos + ray * camera->get_far()); for (Node3D *spat : nodes_with_gizmos) { - if (!spat) { + if (!spat || _is_node_locked(spat)) { continue; } @@ -1557,7 +1557,7 @@ void Node3DEditorViewport::_surface_focus_exit() { view_menu->set_disable_shortcuts(true); } -bool Node3DEditorViewport ::_is_node_locked(const Node *p_node) { +bool Node3DEditorViewport::_is_node_locked(const Node *p_node) const { return p_node->get_meta("_edit_lock_", false); } @@ -1935,11 +1935,7 @@ void Node3DEditorViewport::_sinput(const Ref &p_event) { if (after != EditorPlugin::AFTER_GUI_INPUT_CUSTOM) { // Single item selection. - Vector<_RayResult> selection; - _find_items_at_pos(b->get_position(), selection, false); - if (!selection.is_empty()) { - clicked = selection[0].item->get_instance_id(); - } + clicked = _select_ray(b->get_position()); selection_in_progress = true; diff --git a/editor/plugins/node_3d_editor_plugin.h b/editor/plugins/node_3d_editor_plugin.h index 2cfe784ca68..c7e6420875e 100644 --- a/editor/plugins/node_3d_editor_plugin.h +++ b/editor/plugins/node_3d_editor_plugin.h @@ -460,7 +460,7 @@ private: bool previewing_camera = false; bool previewing_cinema = false; - bool _is_node_locked(const Node *p_node); + bool _is_node_locked(const Node *p_node) const; void _preview_exited_scene(); void _toggle_camera_preview(bool); void _toggle_cinema_preview(bool);