dix: do not send focus event when grab actually does not change

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: Samuel Thibault <samuel.thibault@ens-lyon.org>
Reviewed-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit 364d6498)
3 jobs for server-1.20-branch in 6 minutes and 7 seconds (queued for 1 second)
Status Job ID Name Coverage
  Docker Image
passed #2287863
debian-testing

00:00:33

 
  Build And Test
passed #2287864
autotools-build-and-test

00:05:34

passed #2287865
meson-build-and-test

00:02:43