mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-25 03:40:05 +01:00
Xi: fix swapped grab mode args for keyboard devices in XIGrabDevice
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.
Signed-off-by: Rui Matos <tiagomatos@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 9003399708)
This commit is contained in:
parent
0899823078
commit
2cc81338d1
1 changed files with 13 additions and 2 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue