From 1aa4c048957c498b3138b14ff75769c1f250f2b9 Mon Sep 17 00:00:00 2001 From: Elise Date: Sun, 4 May 2025 20:49:58 +1000 Subject: [PATCH] Fix for Node3D request gizmos multiple times This can result in multiple gizmos being created for the same nodes in some circumstances --- scene/3d/node_3d.cpp | 9 +++++++-- scene/3d/node_3d.h | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/scene/3d/node_3d.cpp b/scene/3d/node_3d.cpp index 50537139031..77d4ce1deba 100644 --- a/scene/3d/node_3d.cpp +++ b/scene/3d/node_3d.cpp @@ -229,7 +229,8 @@ void Node3D::_notification(int p_what) { } #ifdef TOOLS_ENABLED - if (is_part_of_edited_scene()) { + if (is_part_of_edited_scene() && !data.gizmos_requested) { + data.gizmos_requested = true; get_tree()->call_group_flags(SceneTree::GROUP_CALL_DEFERRED, SceneStringName(_spatial_editor_group), SNAME("_request_gizmo_for_id"), get_instance_id()); } #endif @@ -753,7 +754,10 @@ void Node3D::update_gizmos() { } if (data.gizmos.is_empty()) { - get_tree()->call_group_flags(SceneTree::GROUP_CALL_DEFERRED, SceneStringName(_spatial_editor_group), SNAME("_request_gizmo_for_id"), get_instance_id()); + if (!data.gizmos_requested) { + data.gizmos_requested = true; + get_tree()->call_group_flags(SceneTree::GROUP_CALL_DEFERRED, SceneStringName(_spatial_editor_group), SNAME("_request_gizmo_for_id"), get_instance_id()); + } return; } if (data.gizmos_dirty) { @@ -1450,6 +1454,7 @@ Node3D::Node3D() : data.fti_frame_xform_force_update = false; #ifdef TOOLS_ENABLED + data.gizmos_requested = false; data.gizmos_disabled = false; data.gizmos_dirty = false; data.transform_gizmo_visible = true; diff --git a/scene/3d/node_3d.h b/scene/3d/node_3d.h index 87363059489..13627306053 100644 --- a/scene/3d/node_3d.h +++ b/scene/3d/node_3d.h @@ -154,6 +154,7 @@ private: #ifdef TOOLS_ENABLED Vector> gizmos; + bool gizmos_requested : 1; bool gizmos_disabled : 1; bool gizmos_dirty : 1; bool transform_gizmo_visible : 1;