input: move proximity state into ProximityClassRec.

Previously the OutOfProximity bit in the valuator mode.

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 15:49:40 +10:00
parent e909af88bf
commit 5cf3b654fc
4 changed files with 12 additions and 5 deletions

View File

@ -891,9 +891,9 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
mask = PointerMotionMask | b->state | b->motionMask; mask = PointerMotionMask | b->state | b->motionMask;
SetMaskForEvent(device->id, mask, MotionNotify); SetMaskForEvent(device->id, mask, MotionNotify);
} else if (event->type == ET_ProximityIn) } else if (event->type == ET_ProximityIn)
device->valuator->mode &= ~OutOfProximity; device->proximity->in_proximity = TRUE;
else if (event->type == ET_ProximityOut) else if (event->type == ET_ProximityOut)
device->valuator->mode |= OutOfProximity; device->proximity->in_proximity = FALSE;
return DEFAULT; return DEFAULT;
} }
@ -1112,6 +1112,7 @@ InitProximityClassDeviceStruct(DeviceIntPtr dev)
if (!proxc) if (!proxc)
return FALSE; return FALSE;
proxc->sourceid = dev->id; proxc->sourceid = dev->id;
proxc->in_proximity = TRUE;
dev->proximity = proxc; dev->proximity = proxc;
return TRUE; return TRUE;
} }
@ -1145,6 +1146,9 @@ InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, Atom label, int minval, int
ax->max_resolution = max_res; ax->max_resolution = max_res;
ax->label = label; ax->label = label;
ax->mode = mode; ax->mode = mode;
if (mode & OutOfProximity)
dev->proximity->in_proximity = FALSE;
} }
static void static void

View File

@ -151,7 +151,7 @@ ProcXQueryDeviceState(ClientPtr client)
tv->class = ValuatorClass; tv->class = ValuatorClass;
tv->length = sizeof(xValuatorState) + v->numAxes * 4; tv->length = sizeof(xValuatorState) + v->numAxes * 4;
tv->num_valuators = v->numAxes; tv->num_valuators = v->numAxes;
tv->mode = v->mode; tv->mode |= (dev->proximity && !dev->proximity->in_proximity) ? OutOfProximity : 0;
buf += sizeof(xValuatorState); buf += sizeof(xValuatorState);
for (i = 0, values = v->axisVal; i < v->numAxes; i++) { for (i = 0, values = v->axisVal; i < v->numAxes; i++) {
if (rc != BadAccess) if (rc != BadAccess)

View File

@ -1251,9 +1251,12 @@ InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
valc->numMotionEvents = numMotionEvents; valc->numMotionEvents = numMotionEvents;
valc->motionHintWindow = NullWindow; valc->motionHintWindow = NullWindow;
valc->numAxes = numAxes; valc->numAxes = numAxes;
valc->mode = mode;
valc->axes = (AxisInfoPtr)(valc + 1); valc->axes = (AxisInfoPtr)(valc + 1);
valc->axisVal = (double *)(valc->axes + numAxes); valc->axisVal = (double *)(valc->axes + numAxes);
if (mode & OutOfProximity)
InitProximityClassDeviceStruct(dev);
dev->valuator = valc; dev->valuator = valc;
AllocateMotionHistory(dev); AllocateMotionHistory(dev);

View File

@ -273,7 +273,7 @@ typedef struct _FocusClassRec {
typedef struct _ProximityClassRec { typedef struct _ProximityClassRec {
int sourceid; int sourceid;
char pad; char in_proximity;
} ProximityClassRec, *ProximityClassPtr; } ProximityClassRec, *ProximityClassPtr;
typedef struct _AbsoluteClassRec { typedef struct _AbsoluteClassRec {