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