We don't have an atom for relative pressure, so if the device is set to relative, we export the axis as REL_Z instead.
Signed-off-by: Peter Hutterer <[email protected]> --- compile-tested only. src/acecad.c | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/acecad.c b/src/acecad.c index 63c5aaf..24676f5 100644 --- a/src/acecad.c +++ b/src/acecad.c @@ -78,6 +78,11 @@ #endif #endif +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 +#include <X11/Xatom.h> +#include <xserver-properties.h> +#endif + /* Previously found in xf86Xinput.h */ #ifdef DBG #undef DBG @@ -627,13 +632,36 @@ DeviceInit (DeviceIntPtr dev) int rx, ry; LocalDevicePtr local = (LocalDevicePtr) dev->public.devicePrivate; AceCadPrivatePtr priv = (AceCadPrivatePtr) (local->private); - unsigned char map[] = - {0, 1, 2, 3}; + unsigned char map[] = {0, 1, 2, 3}; +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 + Atom btn_labels[3]; + Atom axes_labels[3]; + + btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT); + btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE); + btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT); + + if ((priv->flags & ABSOLUTE_FLAG)) + { + axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_X); + axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_Y); + axes_labels[2] = XIGetKnownProperty(AXIS_LABEL_PROP_ABS_PRESSURE); + } else + { + axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X); + axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y); + axes_labels[2] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Z); + } +#endif xf86MsgVerb(X_INFO, 4, "%s Init\n", local->name); /* 3 boutons */ - if (InitButtonClassDeviceStruct (dev, 3, map) == FALSE) + if (InitButtonClassDeviceStruct (dev, 3, +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 + btn_labels, +#endif + map) == FALSE) { xf86Msg(X_ERROR, "%s: unable to allocate ButtonClassDeviceStruct\n", local->name); return !Success; @@ -653,6 +681,9 @@ DeviceInit (DeviceIntPtr dev) /* 3 axes */ if (InitValuatorClassDeviceStruct (dev, 3, +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 + axes_labels, +#endif #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 3 xf86GetMotionEvents, #endif @@ -668,6 +699,9 @@ DeviceInit (DeviceIntPtr dev) InitValuatorAxisStruct(dev, 0, +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 + axes_labels[0], +#endif 0, /* min val */ #if XORG_BOTCHED_INPUT screenInfo.screens[0]->width, @@ -679,6 +713,9 @@ DeviceInit (DeviceIntPtr dev) 1000); /* max_res */ InitValuatorAxisStruct(dev, 1, +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 + axes_labels[1], +#endif 0, /* min val */ #if XORG_BOTCHED_INPUT screenInfo.screens[0]->height, @@ -690,6 +727,9 @@ DeviceInit (DeviceIntPtr dev) 1000); /* max_res */ InitValuatorAxisStruct(dev, 2, +#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 7 + axes_labels[2], +#endif 0, /* min val */ priv->acecadMaxZ, /* max val */ 1000, /* resolution */ -- 1.6.3.rc1.2.g0164.dirty _______________________________________________ xorg-devel mailing list [email protected] http://lists.x.org/mailman/listinfo/xorg-devel
