[PATCH 2/2] dix: Use XINotifyPassiveGrab/Ungrab on button passive grab crossings
Peter Hutterer
peter.hutterer at who-t.net
Mon Nov 25 20:07:06 PST 2013
On Mon, Nov 25, 2013 at 06:14:38PM +0100, carlosg at gnome.org wrote:
> From: Carlos Garnacho <carlosg at gnome.org>
>
> XI2 clients were getting crossing events with XINotifyGrab/Ungrab modes
> whenever a passive button grab was triggered, even though XI2 provides
> XINotifyPassiveGrab/Ungrab for these situations. Fix this by setting
> the right XI2 mode when that happens, DoEnterLeaveEvents will conveniently
> transform it to the right mode for Core events when those are emitted.
>
> https://bugs.freedesktop.org/show_bug.cgi?id=71762
>
> Signed-off-by: Carlos Garnacho <carlosg at gnome.org>
> ---
> dix/events.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/dix/events.c b/dix/events.c
> index 9260b45..6c83504 100644
> --- a/dix/events.c
> +++ b/dix/events.c
> @@ -1530,7 +1530,8 @@ ActivatePointerGrab(DeviceIntPtr mouse, GrabPtr grab,
> mouse->spriteInfo->sprite->hotPhys.y = 0;
> ConfineCursorToWindow(mouse, grab->confineTo, FALSE, TRUE);
> }
> - DoEnterLeaveEvents(mouse, mouse->id, oldWin, grab->window, NotifyGrab,
> + DoEnterLeaveEvents(mouse, mouse->id, oldWin, grab->window,
> + isPassive ? XINotifyPassiveGrab : XINotifyGrab,
> EVENT_CORE_MASK | EVENT_XI2_MASK);
> mouse->valuator->motionHintWindow = NullWindow;
> if (syncEvents.playingEvents)
> @@ -1598,7 +1599,8 @@ DeactivatePointerGrab(DeviceIntPtr mouse)
> dev->deviceGrab.sync.other = NullGrab;
> }
> DoEnterLeaveEvents(mouse, mouse->id, grab->window,
> - mouse->spriteInfo->sprite->win, NotifyUngrab,
> + mouse->spriteInfo->sprite->win,
> + wasPassive ? XINotifyPassiveUngrab : XINotifyUngrab,
> EVENT_CORE_MASK | EVENT_XI2_MASK);
> if (grab->confineTo)
> ConfineCursorToWindow(mouse, GetCurrentRootWindow(mouse), FALSE, FALSE);
> --
> 1.8.4.2
both merged, thanks.
Cheers,
Peter
More information about the xorg-devel
mailing list