Hello, Ping?
Samuel Samuel Thibault, le mar. 30 oct. 2018 18:43:51 +0100, a ecrit: > c67f2eac5651 ("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.thiba...@ens-lyon.org> > > Index: xorg-server-1.19.2/dix/events.c > =================================================================== > --- xorg-server-1.19.2.orig/dix/events.c > +++ xorg-server-1.19.2/dix/events.c > @@ -1530,7 +1530,9 @@ ActivatePointerGrab(DeviceIntPtr mouse, > mouse->spriteInfo->sprite->hotPhys.y = 0; > ConfineCursorToWindow(mouse, grab->confineTo, FALSE, TRUE); > } > - DoEnterLeaveEvents(mouse, mouse->id, oldWin, grab->window, NotifyGrab); > + if (! (grabinfo->grab && oldWin == grabinfo->grab->window > + && oldWin == grab->window)) > + DoEnterLeaveEvents(mouse, mouse->id, oldWin, grab->window, > NotifyGrab); > mouse->valuator->motionHintWindow = NullWindow; > if (syncEvents.playingEvents) > grabinfo->grabTime = syncEvents.time; > @@ -1640,7 +1642,9 @@ ActivateKeyboardGrab(DeviceIntPtr keybd, > oldWin = keybd->focus->win; > if (keybd->valuator) > keybd->valuator->motionHintWindow = NullWindow; > - if (oldWin) > + if (oldWin && > + ! (grabinfo->grab && oldWin == grabinfo->grab->window > + && oldWin == grab->window)) > DoFocusEvents(keybd, oldWin, grab->window, NotifyGrab); > if (syncEvents.playingEvents) > grabinfo->grabTime = syncEvents.time; _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel