Skip to content
  • Marco Trevisan's avatar
    window-x11: Use any focusable window as fallback delayed focus window · 61691bac
    Marco Trevisan authored
    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: #660
    !669
    
    (cherry picked from commit 6d8293a4)
    61691bac