[mutter/wip/carlosg/focus-window-feedback-loop] x11: Update x11 focus before updating MetaDisplay focus



commit b3e0b77a71afe8d65260edcbaaa193b35c48542c
Author: Carlos Garnacho <carlosg gnome org>
Date:   Tue Oct 22 14:17:40 2019 +0200

    x11: Update x11 focus before updating MetaDisplay focus
    
    In a similar vein to commit 8fd55fef853. This notably failed with the
    when setting the focus on the stage (eg. to redirect key events to Clutter
    actors). Deeper in MetaDisplay focus updating machinery, it would check
    meta_stage_is_focused() which would still return FALSE at the time it's
    called.
    
    This would not typically have side effects, but our "App does not respond"
    dialogs see the focus change under their feet, so they try to bring
    themselves to focus again. This results in a feedback loop.
    
    Changing the order results in later checks on the X11 POV of the focus
    being correct, so focus is not mistakenly stolen from the close dialog,
    and it actually succeeds in keeping the key focus.
    
    Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/1607

 src/x11/meta-x11-display.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
---
diff --git a/src/x11/meta-x11-display.c b/src/x11/meta-x11-display.c
index 9fb3853bd..92ecb89da 100644
--- a/src/x11/meta-x11-display.c
+++ b/src/x11/meta-x11-display.c
@@ -1934,10 +1934,10 @@ meta_x11_display_set_input_focus_xwindow (MetaX11Display *x11_display,
 {
   gulong serial;
 
-  meta_display_unset_input_focus (x11_display->display, timestamp);
   serial = XNextRequest (x11_display->xdisplay);
   meta_x11_display_set_input_focus_internal (x11_display, window, timestamp);
   meta_x11_display_update_focus_window (x11_display, window, serial, TRUE);
+  meta_display_unset_input_focus (x11_display->display, timestamp);
 }
 
 static MetaX11DisplayLogicalMonitorData *


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]