From 415ddc83e196f7adb63a960bfece7edfcc1b49cc Mon Sep 17 00:00:00 2001 From: Robert Yevdokimov <105675984+ryevdokimov@users.noreply.github.com> Date: Fri, 6 Feb 2026 23:28:59 -0500 Subject: [PATCH] Fix trackball not highlighting immediately when toggling `Use Trackball` --- editor/scene/3d/node_3d_editor_plugin.cpp | 10 ++++++++++ editor/scene/3d/node_3d_editor_plugin.h | 1 + 2 files changed, 11 insertions(+) diff --git a/editor/scene/3d/node_3d_editor_plugin.cpp b/editor/scene/3d/node_3d_editor_plugin.cpp index 3512210012..05cee7cff5 100644 --- a/editor/scene/3d/node_3d_editor_plugin.cpp +++ b/editor/scene/3d/node_3d_editor_plugin.cpp @@ -4717,6 +4717,13 @@ void Node3DEditorViewport::update_transform_gizmo_view() { rs->instance_set_visible(axis_gizmo_instance[2], show_axes && (_edit.plane == TRANSFORM_Z_AXIS || _edit.plane == TRANSFORM_XZ || _edit.plane == TRANSFORM_YZ)); } +void Node3DEditorViewport::update_transform_gizmo_highlight() { + if (!is_visible_in_tree() || !Rect2(Vector2(), surface->get_size()).has_point(surface->get_local_mouse_position())) { + return; + } + _transform_gizmo_select(surface->get_local_mouse_position(), true); +} + void Node3DEditorViewport::set_state(const Dictionary &p_state) { if (p_state.has("position")) { cursor.pos = p_state["position"]; @@ -7472,6 +7479,9 @@ void Node3DEditor::_menu_item_toggled(bool pressed, int p_option) { case MENU_TOOL_USE_TRACKBALL: { tool_option_button[TOOL_OPT_USE_TRACKBALL]->set_pressed(pressed); trackball_enabled = pressed; + for (uint32_t i = 0; i < VIEWPORTS_COUNT; i++) { + viewports[i]->update_transform_gizmo_highlight(); + } } break; } } diff --git a/editor/scene/3d/node_3d_editor_plugin.h b/editor/scene/3d/node_3d_editor_plugin.h index f3d1a984b8..1045157ae3 100644 --- a/editor/scene/3d/node_3d_editor_plugin.h +++ b/editor/scene/3d/node_3d_editor_plugin.h @@ -566,6 +566,7 @@ protected: public: void update_surface() { surface->queue_redraw(); } void update_transform_gizmo_view(); + void update_transform_gizmo_highlight(); void set_can_preview(Camera3D *p_preview); void set_state(const Dictionary &p_state);