On Mon, 2009-01-19 at 23:23 +1100, Peter Hutterer wrote: > ATM, we are able to announce that a device has multiple axes, but clients have > to take educated guesses as to wether axis N is tilt, pressure, pan or > bananas. This patch introduces a set of default properties, initialized by the > server on init. Drivers can then take the AXIS_LABEL_PROP and fill it with the > matching labels to indicate to the client which axis does what. Clients can > query this property and adjust their user interface accordingly. > > The range of labels is taken from linux/input.h, presumably that's the ones at > least the Linux kernel can give us for a device. > > Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> > --- > Xi/xiproperty.c | 39 ++++++++++++++++++++++++++++++++- > include/xserver-properties.h | 49 > ++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 87 insertions(+), 1 deletions(-) > > diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c > index 53b2f6a..3bc2818 100644 > --- a/Xi/xiproperty.c > +++ b/Xi/xiproperty.c > @@ -54,7 +54,44 @@ static struct dev_properties > {0, ACCEL_PROP_PROFILE_NUMBER}, > {0, ACCEL_PROP_CONSTANT_DECELERATION}, > {0, ACCEL_PROP_ADAPTIVE_DECELERATION}, > - {0, ACCEL_PROP_VELOCITY_SCALING} > + {0, ACCEL_PROP_VELOCITY_SCALING}, > + {0, AXIS_LABEL_PROP}, > + {0, AXIS_LABEL_PROP_REL_X}, > + {0, AXIS_LABEL_PROP_REL_Y}, > + {0, AXIS_LABEL_PROP_REL_Z}, > + {0, AXIS_LABEL_PROP_REL_RX}, > + {0, AXIS_LABEL_PROP_REL_RY}, > + {0, AXIS_LABEL_PROP_REL_RZ}, > + {0, AXIS_LABEL_PROP_REL_HWHEEL}, > + {0, AXIS_LABEL_PROP_REL_DIAL}, > + {0, AXIS_LABEL_PROP_REL_WHEEL}, > + {0, AXIS_LABEL_PROP_REL_MISC}, > + {0, AXIS_LABEL_PROP_ABS_X}, > + {0, AXIS_LABEL_PROP_ABS_Y}, > + {0, AXIS_LABEL_PROP_ABS_Z}, > + {0, AXIS_LABEL_PROP_ABS_RX}, > + {0, AXIS_LABEL_PROP_ABS_RY}, > + {0, AXIS_LABEL_PROP_ABS_RZ}, > + {0, AXIS_LABEL_PROP_ABS_THROTTLE}, > + {0, AXIS_LABEL_PROP_ABS_RUDDER}, > + {0, AXIS_LABEL_PROP_ABS_WHEEL}, > + {0, AXIS_LABEL_PROP_ABS_GAS}, > + {0, AXIS_LABEL_PROP_ABS_BRAKE}, > + {0, AXIS_LABEL_PROP_ABS_HAT0X}, > + {0, AXIS_LABEL_PROP_ABS_HAT0Y}, > + {0, AXIS_LABEL_PROP_ABS_HAT1X}, > + {0, AXIS_LABEL_PROP_ABS_HAT1Y}, > + {0, AXIS_LABEL_PROP_ABS_HAT2X}, > + {0, AXIS_LABEL_PROP_ABS_HAT2Y}, > + {0, AXIS_LABEL_PROP_ABS_HAT3X}, > + {0, AXIS_LABEL_PROP_ABS_HAT3Y}, > + {0, AXIS_LABEL_PROP_ABS_PRESSURE}, > + {0, AXIS_LABEL_PROP_ABS_DISTANCE}, > + {0, AXIS_LABEL_PROP_ABS_TILT_X}, > + {0, AXIS_LABEL_PROP_ABS_TILT_Y}, > + {0, AXIS_LABEL_PROP_ABS_TOOL_WIDTH}, > + {0, AXIS_LABEL_PROP_ABS_VOLUME}, > + {0, AXIS_LABEL_PROP_ABS_MISC} > }; > > static long XIPropHandlerID = 1; > diff --git a/include/xserver-properties.h b/include/xserver-properties.h > index 1327e59..1ce37c5 100644 > --- a/include/xserver-properties.h > +++ b/include/xserver-properties.h > @@ -43,4 +43,53 @@ > /* FLOAT, format 32 */ > #define ACCEL_PROP_VELOCITY_SCALING "Device Accel Velocity Scaling" > > + > +/* Axis labels */ > +/* ATOM values, ideally one per axis */ > +#define AXIS_LABEL_PROP "Axis Labels" > + > +/* The following are for use in AXIS_LABEL_PROP only and do not have a > + * defined value that is parsed by the server. */ > +#define AXIS_LABEL_PROP_REL_X "Rel X" > +#define AXIS_LABEL_PROP_REL_Y "Rel Y" > +#define AXIS_LABEL_PROP_REL_Z "Rel Z" > +#define AXIS_LABEL_PROP_REL_RX "Rel Rotary X" > +#define AXIS_LABEL_PROP_REL_RY "Rel Rotary Y" > +#define AXIS_LABEL_PROP_REL_RZ "Rel Rotary Z" > +#define AXIS_LABEL_PROP_REL_HWHEEL "Rel Horiz Wheel" > +#define AXIS_LABEL_PROP_REL_DIAL "Rel Dial" > +#define AXIS_LABEL_PROP_REL_WHEEL "Rel Vert Wheel" > +#define AXIS_LABEL_PROP_REL_MISC "Rel Misc" > + > +/* > + * Absolute axes > + */ > + > +#define AXIS_LABEL_PROP_ABS_X "Abs X" > +#define AXIS_LABEL_PROP_ABS_Y "Abs Y" > +#define AXIS_LABEL_PROP_ABS_Z "Abs Z" > +#define AXIS_LABEL_PROP_ABS_RX "Abs Rotary X" > +#define AXIS_LABEL_PROP_ABS_RY "Abs Rotary Y" > +#define AXIS_LABEL_PROP_ABS_RZ "Abs Rotary Z" > +#define AXIS_LABEL_PROP_ABS_THROTTLE "Abs Throttle" > +#define AXIS_LABEL_PROP_ABS_RUDDER "Abs Rudder" > +#define AXIS_LABEL_PROP_ABS_WHEEL "Abs Wheel" > +#define AXIS_LABEL_PROP_ABS_GAS "Abs Gas" > +#define AXIS_LABEL_PROP_ABS_BRAKE "Abs Brake" > +#define AXIS_LABEL_PROP_ABS_HAT0X "Abs Hat 0 X" > +#define AXIS_LABEL_PROP_ABS_HAT0Y "Abs Hat 0 Y" > +#define AXIS_LABEL_PROP_ABS_HAT1X "Abs Hat 1 X" > +#define AXIS_LABEL_PROP_ABS_HAT1Y "Abs Hat 1 Y" > +#define AXIS_LABEL_PROP_ABS_HAT2X "Abs Hat 2 X" > +#define AXIS_LABEL_PROP_ABS_HAT2Y "Abs Hat 2 Y" > +#define AXIS_LABEL_PROP_ABS_HAT3X "Abs Hat 3 X" > +#define AXIS_LABEL_PROP_ABS_HAT3Y "Abs Hat 3 Y" > +#define AXIS_LABEL_PROP_ABS_PRESSURE "Abs Pressure" > +#define AXIS_LABEL_PROP_ABS_DISTANCE "Abs Distance" > +#define AXIS_LABEL_PROP_ABS_TILT_X "Abs Tilt X" > +#define AXIS_LABEL_PROP_ABS_TILT_Y "Abs Tilt Y" > +#define AXIS_LABEL_PROP_ABS_TOOL_WIDTH "Abs Tool Width" > +#define AXIS_LABEL_PROP_ABS_VOLUME "Abs Volume" > +#define AXIS_LABEL_PROP_ABS_MISC "Abs Misc" > + > #endif
A nit: "Rel" and "Abs" may be abbreviations end-users wouldn't recognize. Perhaps expanding them would be good. Cheers, -Matt Helsley _______________________________________________ xorg mailing list xorg@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/xorg