summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2010-10-22 15:49:40 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2010-10-22 16:18:59 +1000
commit5cf3b654fccf09de63a3f983c85096cda78fb693 (patch)
tree52499ca647f1dc3fb510df4efdd017fbe0580972
parente909af88bf17dbadcc00d50c13a5bdb6001367be (diff)
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>
-rw-r--r--Xi/exevents.c8
-rw-r--r--Xi/queryst.c2
-rw-r--r--dix/devices.c5
-rw-r--r--include/inputstr.h2
4 files changed, 12 insertions, 5 deletions
diff --git a/Xi/exevents.c b/Xi/exevents.c
index 1f59001cf..9bff2b3d5 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -891,9 +891,9 @@ UpdateDeviceState(DeviceIntPtr device, DeviceEvent* event)
mask = PointerMotionMask | b->state | b->motionMask;
SetMaskForEvent(device->id, mask, MotionNotify);
} else if (event->type == ET_ProximityIn)
- device->valuator->mode &= ~OutOfProximity;
+ device->proximity->in_proximity = TRUE;
else if (event->type == ET_ProximityOut)
- device->valuator->mode |= OutOfProximity;
+ device->proximity->in_proximity = FALSE;
return DEFAULT;
}
@@ -1112,6 +1112,7 @@ InitProximityClassDeviceStruct(DeviceIntPtr dev)
if (!proxc)
return FALSE;
proxc->sourceid = dev->id;
+ proxc->in_proximity = TRUE;
dev->proximity = proxc;
return TRUE;
}
@@ -1145,6 +1146,9 @@ InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, Atom label, int minval, int
ax->max_resolution = max_res;
ax->label = label;
ax->mode = mode;
+
+ if (mode & OutOfProximity)
+ dev->proximity->in_proximity = FALSE;
}
static void
diff --git a/Xi/queryst.c b/Xi/queryst.c
index 65a43d1d2..9c9e4e096 100644
--- a/Xi/queryst.c
+++ b/Xi/queryst.c
@@ -151,7 +151,7 @@ ProcXQueryDeviceState(ClientPtr client)
tv->class = ValuatorClass;
tv->length = sizeof(xValuatorState) + v->numAxes * 4;
tv->num_valuators = v->numAxes;
- tv->mode = v->mode;
+ tv->mode |= (dev->proximity && !dev->proximity->in_proximity) ? OutOfProximity : 0;
buf += sizeof(xValuatorState);
for (i = 0, values = v->axisVal; i < v->numAxes; i++) {
if (rc != BadAccess)
diff --git a/dix/devices.c b/dix/devices.c
index 45edd375c..a4c8e76aa 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -1251,9 +1251,12 @@ InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
valc->numMotionEvents = numMotionEvents;
valc->motionHintWindow = NullWindow;
valc->numAxes = numAxes;
- valc->mode = mode;
valc->axes = (AxisInfoPtr)(valc + 1);
valc->axisVal = (double *)(valc->axes + numAxes);
+
+ if (mode & OutOfProximity)
+ InitProximityClassDeviceStruct(dev);
+
dev->valuator = valc;
AllocateMotionHistory(dev);
diff --git a/include/inputstr.h b/include/inputstr.h
index dfab791e6..cd668765d 100644
--- a/include/inputstr.h
+++ b/include/inputstr.h
@@ -273,7 +273,7 @@ typedef struct _FocusClassRec {
typedef struct _ProximityClassRec {
int sourceid;
- char pad;
+ char in_proximity;
} ProximityClassRec, *ProximityClassPtr;
typedef struct _AbsoluteClassRec {