diff --git a/doc/classes/EditorInspector.xml b/doc/classes/EditorInspector.xml
index 644cbe5b5817..0bbd55f00757 100644
--- a/doc/classes/EditorInspector.xml
+++ b/doc/classes/EditorInspector.xml
@@ -51,6 +51,7 @@
+
diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp
index 58b02ed2b8a1..5818c863538b 100644
--- a/editor/editor_inspector.cpp
+++ b/editor/editor_inspector.cpp
@@ -918,6 +918,9 @@ void EditorProperty::gui_input(const Ref &p_event) {
if (me.is_valid()) {
Vector2 mpos = me->get_position();
+ if (bottom_child_rect.has_point(mpos)) {
+ return; // Makes child EditorProperties behave like sibling nodes when handling mouse events.
+ }
if (is_layout_rtl()) {
mpos.x = get_size().x - mpos.x;
}
@@ -2715,8 +2718,6 @@ VBoxContainer *EditorInspectorArray::get_vbox(int p_index) {
EditorInspectorArray::EditorInspectorArray(bool p_read_only) {
read_only = p_read_only;
- set_mouse_filter(Control::MOUSE_FILTER_STOP);
-
odd_style.instantiate();
even_style.instantiate();
@@ -3046,7 +3047,6 @@ 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) {
@@ -3075,7 +3075,7 @@ void EditorInspector::update_tree() {
_clear(!object);
if (!object) {
- get_root_inspector()->set_follow_focus(was_following);
+ get_root_inspector()->set_follow_focus(true);
return;
}
@@ -3954,7 +3954,7 @@ void EditorInspector::update_tree() {
EditorNode::get_singleton()->hide_unused_editors();
}
- get_root_inspector()->set_follow_focus(was_following);
+ get_root_inspector()->set_follow_focus(true);
}
void EditorInspector::update_property(const String &p_prop) {
@@ -4528,14 +4528,6 @@ void EditorInspector::_node_removed(Node *p_node) {
}
}
-void EditorInspector::_gui_focus_changed(Control *p_control) {
- if (!is_visible_in_tree() && !is_following_focus()) {
- return;
- }
- // Don't follow focus when the inspector nor any of its children is focused. Prevents potential jumping when gaining focus.
- set_follow_focus(has_focus() || child_has_focus());
-}
-
void EditorInspector::_update_current_favorites() {
current_favorites.clear();
if (!can_favorite) {
@@ -4733,10 +4725,6 @@ void EditorInspector::_notification(int p_what) {
if (!is_sub_inspector()) {
get_tree()->connect("node_removed", callable_mp(this, &EditorInspector::_node_removed));
}
-
- Viewport *viewport = get_viewport();
- ERR_FAIL_NULL(viewport);
- viewport->connect("gui_focus_changed", callable_mp(this, &EditorInspector::_gui_focus_changed));
} break;
case NOTIFICATION_PREDELETE: {
@@ -4975,6 +4963,7 @@ EditorInspector::EditorInspector() {
base_vbox->add_child(main_vbox);
set_horizontal_scroll_mode(SCROLL_MODE_DISABLED);
+ set_follow_focus(true);
changing = 0;
search_box = nullptr;
diff --git a/editor/editor_inspector.h b/editor/editor_inspector.h
index 9baf65444f27..ee82806003b2 100644
--- a/editor/editor_inspector.h
+++ b/editor/editor_inspector.h
@@ -606,7 +606,6 @@ class EditorInspector : public ScrollContainer {
void _clear_current_favorites();
void _node_removed(Node *p_node);
- void _gui_focus_changed(Control *p_control);
HashMap per_array_page;
void _page_change_request(int p_new_page, const StringName &p_array_prefix);
diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp
index 52780d7c5889..935915a0c080 100644
--- a/editor/editor_properties.cpp
+++ b/editor/editor_properties.cpp
@@ -3303,11 +3303,11 @@ void EditorPropertyResource::update_property() {
sub_inspector->set_use_folding(is_using_folding());
sub_inspector->set_draw_focus_border(false);
+ sub_inspector->set_focus_mode(FocusMode::FOCUS_NONE);
sub_inspector->set_use_filter(use_filter);
sub_inspector->register_text_enter(parent_inspector->search_box);
- sub_inspector->set_mouse_filter(MOUSE_FILTER_STOP);
add_child(sub_inspector);
set_bottom_editor(sub_inspector);
diff --git a/editor/editor_properties_array_dict.cpp b/editor/editor_properties_array_dict.cpp
index 93c5a70cf907..066c0d7d9e32 100644
--- a/editor/editor_properties_array_dict.cpp
+++ b/editor/editor_properties_array_dict.cpp
@@ -430,7 +430,6 @@ void EditorPropertyArray::update_property() {
if (!container) {
container = memnew(PanelContainer);
- container->set_mouse_filter(MOUSE_FILTER_STOP);
add_child(container);
set_bottom_editor(container);
@@ -1208,7 +1207,6 @@ void EditorPropertyDictionary::update_property() {
if (!container) {
container = memnew(PanelContainer);
- container->set_mouse_filter(MOUSE_FILTER_STOP);
add_child(container);
set_bottom_editor(container);
diff --git a/scene/gui/scroll_container.h b/scene/gui/scroll_container.h
index 408f70157dfe..ea6309f57e80 100644
--- a/scene/gui/scroll_container.h
+++ b/scene/gui/scroll_container.h
@@ -82,6 +82,7 @@ class ScrollContainer : public Container {
bool draw_focus_border = false;
bool focus_border_is_drawn = false;
+ bool child_has_focus();
protected:
Size2 get_minimum_size() const override;
@@ -98,7 +99,6 @@ class ScrollContainer : public Container {
public:
virtual void gui_input(const Ref &p_gui_input) override;
- bool child_has_focus();
void set_h_scroll(int p_pos);
int get_h_scroll() const;