From 0e6395d93284422848ca3a5ffb88d48fbce7d471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 21 Dec 2022 15:09:11 +0100 Subject: [PATCH] x11/events: Do not update focus XWindow during grabs During grabs, it is expected that the X11 focus does not correspond to the display's focus window, as focus should be on the stage's XWindow instead. This still messes up the keyboard focus even after we stopped moving the X11 focus, because we end up with a presumed X11 focus window of None, and as a result the stage is considered unfocused. https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5932 Part-of: --- src/x11/events.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/x11/events.c b/src/x11/events.c index 7383451b3..9af71925c 100644 --- a/src/x11/events.c +++ b/src/x11/events.c @@ -1007,6 +1007,9 @@ handle_input_xevent (MetaX11Display *x11_display, break; case XI_FocusIn: case XI_FocusOut: + if (clutter_stage_get_grab_actor (stage) != NULL) + break; + if (handle_window_focus_event (x11_display, window, enter_event, serial) && enter_event->event == enter_event->root) { @@ -1942,7 +1945,8 @@ meta_x11_display_handle_xevent (MetaX11Display *x11_display, if (x11_display->focused_by_us && event->xany.serial > x11_display->focus_serial && display->focus_window && - !window_has_xwindow (display->focus_window, x11_display->server_focus_window)) + !window_has_xwindow (display->focus_window, x11_display->server_focus_window) && + meta_display_windows_are_interactable (display)) { meta_topic (META_DEBUG_FOCUS, "Earlier attempt to focus %s failed", display->focus_window->desc);