[mutter/gnome-3-32] window-x11: Accept any focusable window as fallback focus



commit e50cdda4fffb976348e3f87c498af8a26e9f545b
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date:   Wed Jul 3 11:15:36 2019 +0200

    window-x11: Accept any focusable window as fallback focus
    
    As per commit f71151a5 we were ignoring WM_TAKE_FOCUS-only windows as focus
    targets, however this might end-up in an infinite loop if there are multiple
    non-input windows stacked.
    
    So, accept any focusable window as fallback focus target even if it's a
    take-focus one (that might not reply to the request).
    
    Added a stacking test to verify this.
    
    Closes: https://gitlab.gnome.org/GNOME/mutter/issues/660
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/669
    
    (cherry picked from commit c327b2df95ff9979dd22bca2e0d285e1b3ba0add)

 src/tests/meson.build                              |  1 +
 .../closed-transient-no-input-parents.metatest     | 46 ++++++++++++++++++++++
 src/x11/window-x11.c                               |  2 +-
 3 files changed, 48 insertions(+), 1 deletion(-)
---
diff --git a/src/tests/meson.build b/src/tests/meson.build
index ba534b639..026e6a908 100644
--- a/src/tests/meson.build
+++ b/src/tests/meson.build
@@ -109,6 +109,7 @@ stacking_tests = files([
   'stacking/closed-transient-no-input-no-take-focus-parents.metatest',
   'stacking/closed-transient-no-input-parent.metatest',
   'stacking/closed-transient-no-input-parent-delayed-focus-default-cancelled.metatest',
+  'stacking/closed-transient-no-input-parents.metatest',
   'stacking/minimized.metatest',
   'stacking/mixed-windows.metatest',
   'stacking/set-parent.metatest',
diff --git a/src/tests/stacking/closed-transient-no-input-parents.metatest 
b/src/tests/stacking/closed-transient-no-input-parents.metatest
new file mode 100644
index 000000000..e3ec2e84a
--- /dev/null
+++ b/src/tests/stacking/closed-transient-no-input-parents.metatest
@@ -0,0 +1,46 @@
+new_client 0 x11
+create 0/1
+show 0/1
+
+new_client 1 x11
+create 1/1
+show 1/1
+
+create 1/2 csd
+set_parent 1/2 1
+accept_focus 1/2 false
+show 1/2
+
+create 1/3 csd
+set_parent 1/3 2
+accept_focus 1/3 false
+show 1/3
+
+create 1/4 csd
+set_parent 1/4 3
+accept_focus 1/4 false
+show 1/4
+
+create 1/5 csd
+set_parent 1/5 3
+show 1/5
+
+wait
+assert_focused 1/5
+assert_stacking 0/1 1/1 1/2 1/3 1/4 1/5
+
+destroy 1/5
+dispatch
+
+assert_focused none
+assert_stacking 0/1 1/1 1/2 1/3 1/4
+
+sleep 250
+assert_focused none
+assert_stacking 0/1 1/1 1/2 1/3 1/4
+
+destroy 1/3
+wait
+
+assert_focused none
+assert_stacking 0/1 1/1 1/2 1/4
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
index 284823431..34ec465e9 100644
--- a/src/x11/window-x11.c
+++ b/src/x11/window-x11.c
@@ -907,7 +907,7 @@ meta_window_x11_focus (MetaWindow *window,
                       if (!focus_window)
                         break;
 
-                      if (focus_window->input)
+                      if (meta_window_is_focusable (focus_window))
                         break;
 
                       if (focus_window->shaded && focus_window->frame)


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