Fix gizmo update if select changes outside 3D view

This commit is contained in:
Kilian Hu
2025-06-12 17:50:24 +02:00
parent 8b2739ee55
commit 7c5bb585a5
2 changed files with 32 additions and 1 deletions

View File

@ -8043,9 +8043,37 @@ void Node3DEditor::_selection_changed() {
selected->update_gizmos();
selected = nullptr;
}
// Ensure gizmo updates are performed when the selection changes
// outside of the 3D view (see GH-106713).
if (!is_visible()) {
const List<Node *> &top_selected = editor_selection->get_top_selected_node_list();
if (top_selected.size() == 1) {
Node3D *new_selected = Object::cast_to<Node3D>(top_selected.back()->get());
if (new_selected != selected) {
gizmos_dirty = true;
}
}
}
update_transform_gizmo();
}
void Node3DEditor::refresh_dirty_gizmos() {
if (!gizmos_dirty) {
return;
}
const List<Node *> &top_selected = editor_selection->get_top_selected_node_list();
if (top_selected.size() == 1) {
Node3D *new_selected = Object::cast_to<Node3D>(top_selected.back()->get());
if (new_selected != selected) {
edit(new_selected);
}
}
gizmos_dirty = false;
}
void Node3DEditor::_refresh_menu_icons() {
bool all_locked = true;
bool all_grouped = true;
@ -9843,7 +9871,7 @@ void Node3DEditorPlugin::make_visible(bool p_visible) {
spatial_editor->show();
spatial_editor->set_process(true);
spatial_editor->set_physics_process(true);
spatial_editor->refresh_dirty_gizmos();
} else {
spatial_editor->hide();
spatial_editor->set_process(false);

View File

@ -833,6 +833,8 @@ private:
void _set_subgizmo_selection(Object *p_obj, Ref<Node3DGizmo> p_gizmo, int p_id, Transform3D p_transform = Transform3D());
void _clear_subgizmo_selection(Object *p_obj = nullptr);
bool gizmos_dirty = false;
static Node3DEditor *singleton;
void _node_added(Node *p_node);
@ -997,6 +999,7 @@ public:
bool is_subgizmo_selected(int p_id);
Vector<int> get_subgizmo_selection();
void clear_subgizmo_selection(Object *p_obj = nullptr);
void refresh_dirty_gizmos();
Ref<EditorNode3DGizmo> get_current_hover_gizmo() const { return current_hover_gizmo; }
void set_current_hover_gizmo(Ref<EditorNode3DGizmo> p_gizmo) { current_hover_gizmo = p_gizmo; }