[PATCH 2/2] Xi: fix swapped grab mode args for keyboard devices in XIGrabDevice
Peter Hutterer
peter.hutterer at who-t.net
Sun Apr 14 18:23:16 PDT 2013
On Sat, Apr 13, 2013 at 04:22:54AM +0200, Rui Matos wrote:
> The protocol says that the grab_mode argument applies to the device
> being grabbed and paired_device_mode to the paired master
> device. GrabDevice() however takes in a pointer mode and a keyboard
> mode and so we have to swap the values according the type of device
> being grabbed.
thanks, good catch.
Please remember to sign-off your patches though
http://www.x.org/wiki/Development/Documentation/SubmittingPatches
Cheers,
Peter
>
> ---
> Xi/xigrabdev.c | 15 +++++++++++++--
> 1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/Xi/xigrabdev.c b/Xi/xigrabdev.c
> index 09186e8..63d95bc 100644
> --- a/Xi/xigrabdev.c
> +++ b/Xi/xigrabdev.c
> @@ -67,6 +67,8 @@ ProcXIGrabDevice(ClientPtr client)
> uint8_t status;
> GrabMask mask = { 0 };
> int mask_len;
> + unsigned int keyboard_mode;
> + unsigned int pointer_mode;
>
> REQUEST(xXIGrabDeviceReq);
> REQUEST_AT_LEAST_SIZE(xXIGrabDeviceReq);
> @@ -78,6 +80,15 @@ ProcXIGrabDevice(ClientPtr client)
> if (!IsMaster(dev))
> stuff->paired_device_mode = GrabModeAsync;
>
> + if (IsKeyboardDevice(dev)) {
> + keyboard_mode = stuff->grab_mode;
> + pointer_mode = stuff->paired_device_mode;
> + }
> + else {
> + keyboard_mode = stuff->paired_device_mode;
> + pointer_mode = stuff->grab_mode;
> + }
> +
> if (XICheckInvalidMaskBits(client, (unsigned char *) &stuff[1],
> stuff->mask_len * 4) != Success)
> return BadValue;
> @@ -91,8 +102,8 @@ ProcXIGrabDevice(ClientPtr client)
> xi2mask_set_one_mask(mask.xi2mask, dev->id, (unsigned char *) &stuff[1],
> mask_len);
>
> - ret = GrabDevice(client, dev, stuff->grab_mode,
> - stuff->paired_device_mode,
> + ret = GrabDevice(client, dev, pointer_mode,
> + keyboard_mode,
> stuff->grab_window,
> stuff->owner_events,
> stuff->time,
> --
> 1.8.1.4
More information about the xorg-devel
mailing list