diff --git a/dix/getevents.c b/dix/getevents.c index 25889de46..9feb2166b 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -1104,18 +1104,26 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons, if (!pDev->enabled) return 0; + if (!scr || !pDev->valuator) + return 0; + + switch (type) + { + case MotionNotify: + if (!mask_in || valuator_mask_num_valuators(mask_in) <= 0) + return 0; + break; + case ButtonPress: + case ButtonRelease: + if (!pDev->button || !buttons) + return 0; + break; + default: + return 0; + } + ms = GetTimeInMillis(); /* before pointer update to help precision */ - if (!scr || !pDev->valuator || - (type != MotionNotify && type != ButtonPress && type != ButtonRelease) || - (type != MotionNotify && !pDev->button) || - ((type == ButtonPress || type == ButtonRelease) && !buttons)) - return 0; - - if (type == MotionNotify && - (!mask_in || valuator_mask_num_valuators(mask_in) <= 0)) - return 0; - events = UpdateFromMaster(events, pDev, DEVCHANGE_POINTER_EVENT, &num_events); raw = (RawDeviceEvent*)events->event;