Xi: allow XIQueryPointer requests for master pointers and floating slaves.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
8e396f2b80
commit
e4ea91a02d
|
@ -91,7 +91,8 @@ ProcXIQueryPointer(ClientPtr client)
|
|||
return rc;
|
||||
}
|
||||
|
||||
if (pDev->valuator == NULL)
|
||||
if (pDev->valuator == NULL || IsKeyboardDevice(pDev) ||
|
||||
(!IsMaster(pDev) && pDev->u.master)) /* no attached devices */
|
||||
{
|
||||
client->errorValue = stuff->deviceid;
|
||||
return BadDevice;
|
||||
|
@ -108,9 +109,14 @@ ProcXIQueryPointer(ClientPtr client)
|
|||
if (pDev->valuator->motionHintWindow)
|
||||
MaybeStopHint(pDev, client);
|
||||
|
||||
if (IsMaster(pDev))
|
||||
kbd = GetPairedDevice(pDev);
|
||||
else
|
||||
kbd = (pDev->key) ? pDev : NULL;
|
||||
|
||||
pSprite = pDev->spriteInfo->sprite;
|
||||
|
||||
memset(&rep, 0, sizeof(rep));
|
||||
rep.repType = X_Reply;
|
||||
rep.RepType = X_XIQueryPointer;
|
||||
rep.length = 5;
|
||||
|
@ -120,6 +126,8 @@ ProcXIQueryPointer(ClientPtr client)
|
|||
rep.root_y = FP1616(pSprite->hot.y, 0);
|
||||
rep.child = None;
|
||||
|
||||
if (kbd)
|
||||
{
|
||||
state = &kbd->key->xkbInfo->prev_state;
|
||||
rep.mods.base_mods = state->base_mods;
|
||||
rep.mods.latched_mods = state->latched_mods;
|
||||
|
@ -128,6 +136,7 @@ ProcXIQueryPointer(ClientPtr client)
|
|||
rep.group.base_group = state->base_group;
|
||||
rep.group.latched_group = state->latched_group;
|
||||
rep.group.locked_group = state->locked_group;
|
||||
}
|
||||
|
||||
if (pDev->button)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue