diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index f9d02a83fa..e15a8e4870 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -2427,10 +2427,12 @@ void Viewport::_gui_control_grab_focus(Control *p_control) { return; } get_tree()->call_group("_viewports", "_gui_remove_focus_for_window", (Node *)get_base_window()); - gui.key_focus = p_control; - emit_signal(SNAME("gui_focus_changed"), p_control); - p_control->notification(Control::NOTIFICATION_FOCUS_ENTER); - p_control->queue_redraw(); + if (p_control->is_inside_tree() && p_control->get_viewport() == this) { + gui.key_focus = p_control; + emit_signal(SNAME("gui_focus_changed"), p_control); + p_control->notification(Control::NOTIFICATION_FOCUS_ENTER); + p_control->queue_redraw(); + } } void Viewport::_gui_accept_event() {