Skip to content
  • Samuel Thibault's avatar
    dix: do not send focus event when grab actually does not change · 271934db
    Samuel Thibault authored and Matthieu Herrb's avatar Matthieu Herrb committed
    c67f2eac
    
     ("dix: always send focus event on grab change") made dix
    always sent events when it's a NotifyGrab or NotifyUngrab, even if
    from == to, because 'from' can just come from a previous XSetInputFocus
    call.
    
    However, when an application calls XGrabKeyboard several times on
    the same window, we are now sending spurious FocusOut+FocusIn with
    NotifyGrab, even if the grab does not actually change. This makes screen
    readers for blind people spuriously emit activity events which disturb
    screen reading workflow when e.g. switching between menus.
    
    This commit avoids calling DoFocusEvents in that precise case, i.e. when
    oldWin is a previous grab and the new grab is the same window.
    
    Signed-off-by: default avatarSamuel Thibault <samuel.thibault@ens-lyon.org>
    Reviewed-by: default avatarAdam Jackson <ajax@redhat.com>
    (cherry picked from commit 364d6498)
    271934db