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:
Peter Hutterer 2009-08-21 12:12:05 +10:00
parent 8e396f2b80
commit e4ea91a02d

View File

@ -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)
{