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; return rc;
} }
if (pDev->valuator == NULL) if (pDev->valuator == NULL || IsKeyboardDevice(pDev) ||
(!IsMaster(pDev) && pDev->u.master)) /* no attached devices */
{ {
client->errorValue = stuff->deviceid; client->errorValue = stuff->deviceid;
return BadDevice; return BadDevice;
@ -108,9 +109,14 @@ ProcXIQueryPointer(ClientPtr client)
if (pDev->valuator->motionHintWindow) if (pDev->valuator->motionHintWindow)
MaybeStopHint(pDev, client); MaybeStopHint(pDev, client);
kbd = GetPairedDevice(pDev); if (IsMaster(pDev))
kbd = GetPairedDevice(pDev);
else
kbd = (pDev->key) ? pDev : NULL;
pSprite = pDev->spriteInfo->sprite; pSprite = pDev->spriteInfo->sprite;
memset(&rep, 0, sizeof(rep));
rep.repType = X_Reply; rep.repType = X_Reply;
rep.RepType = X_XIQueryPointer; rep.RepType = X_XIQueryPointer;
rep.length = 5; rep.length = 5;
@ -120,14 +126,17 @@ ProcXIQueryPointer(ClientPtr client)
rep.root_y = FP1616(pSprite->hot.y, 0); rep.root_y = FP1616(pSprite->hot.y, 0);
rep.child = None; rep.child = None;
state = &kbd->key->xkbInfo->prev_state; if (kbd)
rep.mods.base_mods = state->base_mods; {
rep.mods.latched_mods = state->latched_mods; state = &kbd->key->xkbInfo->prev_state;
rep.mods.locked_mods = state->locked_mods; rep.mods.base_mods = state->base_mods;
rep.mods.latched_mods = state->latched_mods;
rep.mods.locked_mods = state->locked_mods;
rep.group.base_group = state->base_group; rep.group.base_group = state->base_group;
rep.group.latched_group = state->latched_group; rep.group.latched_group = state->latched_group;
rep.group.locked_group = state->locked_group; rep.group.locked_group = state->locked_group;
}
if (pDev->button) if (pDev->button)
{ {