mirror of
https://github.com/godotengine/godot.git
synced 2025-01-24 03:24:32 -05:00
[X11] Partial Fix Godot Editor and Project Manager steals focus on a window manager on Linux
This is a workaround for the most critical portion of the WM focus bug described in #68305. On some specific X11 WM configurations, the editor's main window and any popups it creates will fight for focus, which causes a total system lockup due to mouse and keyboard input being stolen as well. Getting out of this infinite loop requires force restarting the system. It can be tested with the following shell script: ```bash !#/bin/sh godot4 & sleep 30 pkill -x godot4 ``` The workaround identified in #68305 is to remove the call to XSetInputFocus in the ConfigureNotify event handler, so I have removed the conditional block that calls this as well as the setup code above it since there is no need to allocate the memory for the variables if they won't be used in that call anymore. This is just a hack and is not a complete fix for #68305. Multiple developers are collaborating on a proper fix in the discussion in that issue, but time is a valuable resource that no one has enough of, so I am committing this workaround as a stop-gap to prevent the most critical problem while we work on a full solution for the underlying cause.
This commit is contained in:
parent
d3352813ea
commit
8a2e4409e6
1 changed files with 0 additions and 13 deletions
|
@ -4718,19 +4718,6 @@ void DisplayServerX11::process_events() {
|
|||
break;
|
||||
}
|
||||
|
||||
const WindowData &wd = windows[window_id];
|
||||
|
||||
XWindowAttributes xwa;
|
||||
XSync(x11_display, False);
|
||||
XGetWindowAttributes(x11_display, wd.x11_window, &xwa);
|
||||
|
||||
// Set focus when menu window is re-used.
|
||||
// RevertToPointerRoot is used to make sure we don't lose all focus in case
|
||||
// a subwindow and its parent are both destroyed.
|
||||
if ((xwa.map_state == IsViewable) && !wd.no_focus && !wd.is_popup && _window_focus_check()) {
|
||||
_set_input_focus(wd.x11_window, RevertToPointerRoot);
|
||||
}
|
||||
|
||||
_window_changed(&event);
|
||||
} break;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue