mutter/src/tests/stacking
Marco Trevisan (Treviño) 6d8293a422 window-x11: Use any focusable window as fallback delayed focus window
As per commit f71151a5 we focus an input window if no take-focus-window accepts
it. This might lead to an infinite loop if there are various focusable but
non-input windows in the stack.

When the current focus window is unmanaging and we're trying to focus a
WM_TAKE_FOCUS window, we intent to give the focus to the first focusable input
window in the stack.

However, if an application (such as the Java ones) only uses non-input
WM_TAKE_FOCUS windows, are not requesting these ones to get the focus. This
might lead to a state where no window is focused, or a wrong one is.

So, instead of only focus the first eventually input window available, try to
request to all the take-focus windows that are in the stack between the
destroyed one and the first input one to acquire the input focus.
Use a queue to keep track of those windows, that is passed around stealing
ownership, while we protect for unmanaged queued windows.

Also, reduce the default timeout value, as the previous one might lead to an
excessive long wait.

Added metatests verifying these situations.

Closes: https://gitlab.gnome.org/GNOME/mutter/issues/660
https://gitlab.gnome.org/GNOME/mutter/merge_requests/669
2019-07-08 11:46:52 +02:00
..
basic-wayland.metatest Add a test framework and stacking tests 2014-09-12 13:14:51 -04:00
basic-x11.metatest Add a test framework and stacking tests 2014-09-12 13:14:51 -04:00
client-side-decorated.metatest Don't restack windows while we are unmanaging them 2014-09-16 13:44:42 -04:00
closed-transient-no-input-no-take-focus-parent.metatest tests: Verify focused window in closed-transient tests 2019-06-24 09:42:07 +00:00
closed-transient-no-input-no-take-focus-parents.metatest tests: Verify focused window in closed-transient tests 2019-06-24 09:42:07 +00:00
closed-transient-no-input-parent-delayed-focus-default-cancelled.metatest metatest: Dispatch the destruction instead of sleeping after it 2019-07-08 11:21:17 +02:00
closed-transient-no-input-parent.metatest window-x11: Use any focusable window as fallback delayed focus window 2019-07-08 11:46:52 +02:00
closed-transient-no-input-parents-queued-default-focus-destroyed.metatest window-x11: Use any focusable window as fallback delayed focus window 2019-07-08 11:46:52 +02:00
closed-transient-no-input-parents.metatest window-x11: Use any focusable window as fallback delayed focus window 2019-07-08 11:46:52 +02:00
closed-transient-only-take-focus-parents.metatest window-x11: Use any focusable window as fallback delayed focus window 2019-07-08 11:46:52 +02:00
closed-transient.metatest tests: Add "closed-transient" test 2018-07-30 17:48:42 +00:00
minimized.metatest Add a test for stacking vs. minimization 2014-09-24 16:51:20 -04:00
mixed-windows.metatest Add a test framework and stacking tests 2014-09-12 13:14:51 -04:00
override-redirect.metatest test-runner: represent the guard window as '|' for assert_stacking 2014-09-24 16:26:17 -04:00
set-parent-exported.metatest tests: Add the "parent_exported" test 2018-07-18 14:31:38 +02:00
set-parent.metatest tests: Add test for testing that setting a parent affects the stack 2015-12-23 14:59:36 +08:00