From 922642440132bf7b070a16240c3a21d119584403 Mon Sep 17 00:00:00 2001 From: kobewi Date: Sat, 18 Jan 2025 20:27:51 +0100 Subject: [PATCH] Fix inspector jumping when gaining focus --- doc/classes/EditorInspector.xml | 1 - editor/editor_inspector.cpp | 15 ++++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/doc/classes/EditorInspector.xml b/doc/classes/EditorInspector.xml index 0bbd55f00757..644cbe5b5817 100644 --- a/doc/classes/EditorInspector.xml +++ b/doc/classes/EditorInspector.xml @@ -51,7 +51,6 @@ - diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp index 3f3b06b428a6..b79d1243ba6c 100644 --- a/editor/editor_inspector.cpp +++ b/editor/editor_inspector.cpp @@ -2996,6 +2996,7 @@ void EditorInspector::update_tree() { int current_focusable = -1; // Temporarily disable focus following on the root inspector to avoid jumping while the inspector is updating. + bool was_following = get_root_inspector()->is_following_focus(); get_root_inspector()->set_follow_focus(false); if (property_focusable != -1) { @@ -3024,7 +3025,7 @@ void EditorInspector::update_tree() { _clear(!object); if (!object) { - get_root_inspector()->set_follow_focus(true); + get_root_inspector()->set_follow_focus(was_following); return; } @@ -3890,7 +3891,7 @@ void EditorInspector::update_tree() { EditorNode::get_singleton()->hide_unused_editors(); } - get_root_inspector()->set_follow_focus(true); + get_root_inspector()->set_follow_focus(was_following); } void EditorInspector::update_property(const String &p_prop) { @@ -4742,6 +4743,15 @@ void EditorInspector::_notification(int p_what) { update_tree(); } } break; + + case NOTIFICATION_FOCUS_ENTER: { + set_follow_focus(true); + } break; + + case NOTIFICATION_FOCUS_EXIT: { + // Don't follow focus when the inspector is not focused. Prevents potential jumping when gaining focus. + set_follow_focus(false); + } break; } } @@ -4898,7 +4908,6 @@ EditorInspector::EditorInspector() { base_vbox->add_child(main_vbox); set_horizontal_scroll_mode(SCROLL_MODE_DISABLED); - set_follow_focus(true); changing = 0; search_box = nullptr;