From 6f6f460c2485d16d126a1ab5d939083c322dc3dd Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 22 Oct 2010 13:48:06 +1000 Subject: [PATCH] dix: send proximity events if one or more axes are Absolute. We only skip relative events for proximity, not absolute ones. Now with mixed mode, just unset those axes that are relative. Signed-off-by: Peter Hutterer Reviewed-by: Chase Douglas --- dix/getevents.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/dix/getevents.c b/dix/getevents.c index 0b6d6d39c..1d41fb7d9 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -1232,7 +1232,7 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons, int GetProximityEvents(EventList *events, DeviceIntPtr pDev, int type, const ValuatorMask *mask_in) { - int num_events = 1; + int num_events = 1, i; DeviceEvent *event; ValuatorMask mask; @@ -1248,9 +1248,13 @@ GetProximityEvents(EventList *events, DeviceIntPtr pDev, int type, const Valuato valuator_mask_copy(&mask, mask_in); - /* Do we need to send a DeviceValuator event? */ - if ((pDev->valuator->mode & 1) == Relative) - valuator_mask_zero(&mask); + /* ignore relative axes for proximity. */ + for (i = 0; i < valuator_mask_num_valuators(&mask); i++) + { + if (valuator_mask_isset(&mask, i) && + pDev->valuator->axes[i].mode == Relative) + valuator_mask_unset(&mask, i); + } events = UpdateFromMaster(events, pDev, DEVCHANGE_POINTER_EVENT, &num_events);