summaryrefslogtreecommitdiff
path: root/src/x11/events.c
diff options
context:
space:
mode:
authorFlorian Müllner <fmuellner@gnome.org>2022-12-21 15:09:11 +0100
committerMarge Bot <marge-bot@gnome.org>2023-01-25 13:31:49 +0000
commit0e6395d93284422848ca3a5ffb88d48fbce7d471 (patch)
treea57f1c990aed240d197bff2e062eea20cbac1492 /src/x11/events.c
parent7531669b4ffe90fcddb54efd51d2f1edf4e77430 (diff)
downloadmutter-0e6395d93284422848ca3a5ffb88d48fbce7d471.tar.gz
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: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2776>
Diffstat (limited to 'src/x11/events.c')
-rw-r--r--src/x11/events.c6
1 files changed, 5 insertions, 1 deletions
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);