summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter@cs.unisa.edu.au>2008-04-28 16:56:22 +0930
committerPeter Hutterer <peter@cs.unisa.edu.au>2008-04-29 11:18:35 +0930
commitf2a20294fe26f4c9d245d24d065331fefd8f830d (patch)
tree73b5d4cdb1d2ff47cb23e7c84fcf8787e3099162
parent53dba5381fdd8f644e16aaa0ecb05df4dc615b23 (diff)
dix: store all valuators as they come from the device in the valuator events.
The event's sequenceNumber is mis-used to determine whether the values are relative or absolute.
-rw-r--r--dix/getevents.c28
1 files changed, 12 insertions, 16 deletions
diff --git a/dix/getevents.c b/dix/getevents.c
index d352ebe78..0a44a809f 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -386,13 +386,15 @@ clipValuators(DeviceIntPtr pDev, int first_valuator, int num_valuators,
* Fills events with valuator events for pDev, as given by the other
* parameters.
*
+ * Note that we mis-use the sequence number to store the absolute bit.
+ *
* FIXME: Need to fix ValuatorClassRec to store all the valuators as
* last posted, not just x and y; otherwise relative non-x/y
* valuators, though a very narrow use case, will be broken.
*/
static EventList *
-getValuatorEvents(EventList *events, DeviceIntPtr pDev, int first_valuator,
- int num_valuators, int *valuators) {
+getValuatorEvents(EventList *events, DeviceIntPtr pDev, int absolute,
+ int first_valuator, int num_valuators, int *valuators) {
deviceValuator *xv;
int i = 0, final_valuator = first_valuator + num_valuators;
@@ -419,6 +421,8 @@ getValuatorEvents(EventList *events, DeviceIntPtr pDev, int first_valuator,
if (i + 6 < final_valuator)
xv->deviceid |= MORE_EVENTS;
+
+ xv->sequenceNumber = (absolute) ? Absolute : Relative;
}
return events;
@@ -561,8 +565,8 @@ GetKeyboardValuatorEvents(EventList *events, DeviceIntPtr pDev, int type,
if (num_valuators) {
kbp->deviceid |= MORE_EVENTS;
clipValuators(pDev, first_valuator, num_valuators, valuators);
- events = getValuatorEvents(events, pDev, first_valuator,
- num_valuators, valuators);
+ events = getValuatorEvents(events, pDev, FALSE /* relative */,
+ first_valuator, num_valuators, valuators);
}
return numEvents;
@@ -751,14 +755,6 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
* to the current screen. Right now, we only have one history buffer,
* so we don't set this for both the device and core.*/
miPointerSetPosition(pDev, &x, &y, ms);
-
- /* Drop x and y back into the valuators list, if they were originally
- * present. */
- if (first_valuator == 0 && num_valuators >= 1)
- valuators[0] = x;
- if (first_valuator <= 1 && num_valuators >= (2 - first_valuator))
- valuators[1 - first_valuator] = y;
-
updateMotionHistory(pDev, ms, first_valuator, num_valuators, valuators);
pDev->lastx = x;
@@ -791,8 +787,8 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
if (num_valuators) {
kbp->deviceid |= MORE_EVENTS;
clipValuators(pDev, first_valuator, num_valuators, valuators);
- events = getValuatorEvents(events, pDev, first_valuator,
- num_valuators, valuators);
+ events = getValuatorEvents(events, pDev, (flags & POINTER_ABSOLUTE),
+ first_valuator, num_valuators, valuators);
}
return num_events;
@@ -859,8 +855,8 @@ GetProximityEvents(EventList *events, DeviceIntPtr pDev, int type,
kbp->deviceid |= MORE_EVENTS;
events++;
clipValuators(pDev, first_valuator, num_valuators, valuators);
- events = getValuatorEvents(events, pDev, first_valuator,
- num_valuators, valuators);
+ events = getValuatorEvents(events, pDev, False /* relative */,
+ first_valuator, num_valuators, valuators);
}
return num_events;