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 <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
This commit is contained in:
Peter Hutterer 2010-10-22 13:48:06 +10:00
parent 65c0fc81eb
commit 6f6f460c24

View File

@ -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);