From 1089bc11459589a6b77dd14f7ef4211b264646c7 Mon Sep 17 00:00:00 2001 From: David Snopek Date: Tue, 10 Sep 2024 17:43:24 -0500 Subject: [PATCH] Fix project manager stealing focus on i3 (cherry picked from commit b1871cdabf9ab8cbf4147ca67336f2d99028ac37) --- platform/linuxbsd/x11/display_server_x11.cpp | 6 +++++- scene/gui/text_edit.cpp | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/platform/linuxbsd/x11/display_server_x11.cpp b/platform/linuxbsd/x11/display_server_x11.cpp index 8a2f83be2d9..0ecbe0aaa06 100644 --- a/platform/linuxbsd/x11/display_server_x11.cpp +++ b/platform/linuxbsd/x11/display_server_x11.cpp @@ -2998,7 +2998,11 @@ bool DisplayServerX11::window_is_focused(WindowID p_window) const { const WindowData &wd = windows[p_window]; - return wd.focused; + Window focused_window; + int focus_ret_state; + XGetInputFocus(x11_display, &focused_window, &focus_ret_state); + + return wd.x11_window == focused_window; } bool DisplayServerX11::window_can_draw(WindowID p_window) const { diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index ac6ebd5cc1f..2d5ba6a4797 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -2896,7 +2896,7 @@ void TextEdit::_close_ime_window() { void TextEdit::_update_ime_window_position() { DisplayServer::WindowID wid = get_window() ? get_window()->get_window_id() : DisplayServer::INVALID_WINDOW_ID; - if (wid == DisplayServer::INVALID_WINDOW_ID || !DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_IME)) { + if (wid == DisplayServer::INVALID_WINDOW_ID || !DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_IME) || !DisplayServer::get_singleton()->window_is_focused(wid)) { return; } DisplayServer::get_singleton()->window_set_ime_active(true, wid);