xkb: allow pointer events to pass through for floating SDs without a key class.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2009-06-02 16:22:58 +10:00
parent 38df8351b3
commit b40289c876

View File

@ -687,21 +687,28 @@ void
ProcessPointerEvent( InternalEvent *ev,
DeviceIntPtr mouse)
{
DeviceIntPtr dev = GetPairedDevice(mouse);
XkbSrvInfoPtr xkbi = dev->key->xkbInfo;
DeviceIntPtr dev;
XkbSrvInfoPtr xkbi = NULL;
unsigned changed = 0;
ProcessInputProc backupproc;
xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEINFO(mouse);
DeviceEvent *event = (DeviceEvent*)ev;
xkbi->shiftKeyCount = 0;
xkbi->lastPtrEventTime= event->time;
dev = (IsMaster(mouse) || mouse->u.master) ? GetMaster(mouse, MASTER_KEYBOARD) : mouse;
if (dev && dev->key)
{
xkbi = dev->key->xkbInfo;
xkbi->shiftKeyCount = 0;
xkbi->lastPtrEventTime= event->time;
}
if (event->type == ET_ButtonPress) {
changed |= XkbPointerButtonMask;
}
else if (event->type == ET_ButtonRelease) {
xkbi->lockedPtrButtons&= ~(1 << (event->detail.key & 0x7));
if (xkbi)
xkbi->lockedPtrButtons&= ~(1 << (event->detail.key & 0x7));
changed |= XkbPointerButtonMask;
}
@ -726,6 +733,9 @@ DeviceEvent *event = (DeviceEvent*)ev;
COND_WRAP_PROCESS_INPUT_PROC(mouse, xkbPrivPtr,
backupproc, xkbUnwrapProc);
if (!xkbi)
return;
xkbi->state.ptr_buttons = (mouse->button) ? mouse->button->state : 0;
/* clear any latched modifiers */