summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2022-02-08 22:07:41 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2022-02-09 12:04:01 +1000
commitae5ac76c4f07c5487e3bcad64ef1d80e9702d336 (patch)
tree4b8efc0de31c9b7905145bf14ba65293f6fb0c4b
parente30d23e4a1e26dd97c38d28e198cd0917f1b40e7 (diff)
downloadxf86-input-wacom-ae5ac76c4f07c5487e3bcad64ef1d80e9702d336.tar.gz
gwacom: make the enums GIR-compatible
GIR generation requires "typedef enum {} foo", with the first character of the enum names dropped. In the bindings, WFOO_BAR then turns into FOO_BAR on the enum object. This fixes an ABI issue with the WacomAxis struct - the enum (4 bytes) was previously exported as gpointer (8 bytes) in the bindings, causing garbage values to be read. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--src/gwacom/wacom-device.c22
-rw-r--r--src/gwacom/wacom-device.h68
-rw-r--r--tools/wacom-record.c76
3 files changed, 83 insertions, 83 deletions
diff --git a/src/gwacom/wacom-device.c b/src/gwacom/wacom-device.c
index 281a751..c32f226 100644
--- a/src/gwacom/wacom-device.c
+++ b/src/gwacom/wacom-device.c
@@ -45,7 +45,7 @@ struct _WacomDevice {
char *name;
char *path;
- enum WacomToolType type;
+ WacomToolType type;
gboolean enabled;
@@ -207,7 +207,7 @@ wacom_device_preinit(WacomDevice *device)
{
gboolean rc = wcmPreInit(device->priv) == Success;
- device->type = (enum WacomToolType)device->priv->type;
+ device->type = (WacomToolType)device->priv->type;
return rc;
}
@@ -492,12 +492,12 @@ void wcmEmitButton(WacomDevicePtr priv, bool is_absolute, int button, bool is_pr
void wcmEmitTouch(WacomDevicePtr priv, int type, unsigned int touchid, int x, int y)
{
WacomDevice *device = priv->frontend;
- enum WacomTouchState state;
+ WacomTouchState state;
switch (type) {
- case XI_TouchBegin: state = WACOM_TOUCH_BEGIN; break;
- case XI_TouchUpdate: state = WACOM_TOUCH_UPDATE; break;
- case XI_TouchEnd: state = WACOM_TOUCH_END; break;
+ case XI_TouchBegin: state = WTOUCH_BEGIN; break;
+ case XI_TouchUpdate: state = WTOUCH_UPDATE; break;
+ case XI_TouchEnd: state = WTOUCH_END; break;
default:
abort();
}
@@ -515,13 +515,13 @@ void wcmInitAxis(WacomDevicePtr priv, enum WacomAxisType type,
{
WacomDevice *device = priv->frontend;
WacomAxis ax = {
- .type = (enum WacomEventAxis)type,
+ .type = (WacomEventAxis)type,
.min = min,
.max = max,
.res = res,
};
device->axes[ffs(type)] = ax;
- device->axis_mask |= (enum WacomEventAxis)type;
+ device->axis_mask |= (WacomEventAxis)type;
}
bool wcmInitButtons(WacomDevicePtr priv, unsigned int nbuttons)
@@ -564,15 +564,15 @@ const char *wacom_device_get_name(WacomDevice *device)
return device->name;
}
-enum WacomToolType wacom_device_get_tool_type(WacomDevice *device)
+WacomToolType wacom_device_get_tool_type(WacomDevice *device)
{
return device->type;
}
const WacomAxis *wacom_device_get_axis(WacomDevice *device,
- enum WacomEventAxis which)
+ WacomEventAxis which)
{
- g_return_val_if_fail(which <= WACOM_RING2, NULL);
+ g_return_val_if_fail(which <= _WAXIS_LAST, NULL);
return (device->axis_mask & which) ? &device->axes[ffs(which)] : NULL;
}
diff --git a/src/gwacom/wacom-device.h b/src/gwacom/wacom-device.h
index d0143ec..532b425 100644
--- a/src/gwacom/wacom-device.h
+++ b/src/gwacom/wacom-device.h
@@ -72,37 +72,37 @@ void wacom_options_set(WacomOptions *opts, const char *key, const char *value);
#define WACOM_TYPE_DEVICE (wacom_device_get_type())
G_DECLARE_FINAL_TYPE (WacomDevice, wacom_device, WACOM, DEVICE, GObject)
-enum WacomToolType {
- WACOM_TOOL_INVALID = 0,
- WACOM_TOOL_STYLUS,
- WACOM_TOOL_ERASER,
- WACOM_TOOL_CURSOR,
- WACOM_TOOL_PAD,
- WACOM_TOOL_TOUCH,
-};
-
-enum WacomTouchState {
- WACOM_TOUCH_BEGIN,
- WACOM_TOUCH_UPDATE,
- WACOM_TOUCH_END,
-};
-
-enum WacomEventAxis {
- WACOM_X = (1 << 0),
- WACOM_Y = (1 << 1),
- WACOM_PRESSURE = (1 << 2),
- WACOM_TILT_X = (1 << 3),
- WACOM_TILT_Y = (1 << 4),
- WACOM_STRIP_X = (1 << 5),
- WACOM_STRIP_Y = (1 << 6),
- WACOM_ROTATION = (1 << 7),
- WACOM_THROTTLE = (1 << 8),
- WACOM_WHEEL = (1 << 9),
- WACOM_RING = (1 << 10),
- WACOM_RING2 = (1 << 11),
-
- _WACOM_EVENT_AXIS_LAST = WACOM_RING2,
-};
+typedef enum {
+ WTOOL_INVALID = 0,
+ WTOOL_STYLUS,
+ WTOOL_ERASER,
+ WTOOL_CURSOR,
+ WTOOL_PAD,
+ WTOOL_TOUCH,
+} WacomToolType;
+
+typedef enum {
+ WTOUCH_BEGIN,
+ WTOUCH_UPDATE,
+ WTOUCH_END,
+} WacomTouchState;
+
+typedef enum {
+ WAXIS_X = (1 << 0),
+ WAXIS_Y = (1 << 1),
+ WAXIS_PRESSURE = (1 << 2),
+ WAXIS_TILT_X = (1 << 3),
+ WAXIS_TILT_Y = (1 << 4),
+ WAXIS_STRIP_X = (1 << 5),
+ WAXIS_STRIP_Y = (1 << 6),
+ WAXIS_ROTATION = (1 << 7),
+ WAXIS_THROTTLE = (1 << 8),
+ WAXIS_WHEEL = (1 << 9),
+ WAXIS_RING = (1 << 10),
+ WAXIS_RING2 = (1 << 11),
+
+ _WAXIS_LAST = WAXIS_RING2,
+} WacomEventAxis;
/* The pointer argument to all the event signals. If the mask is set for
* a given axis, that value contains the current state of the axis */
@@ -126,7 +126,7 @@ void wacom_event_data_free(WacomEventData *data);
#define WACOM_TYPE_AXIS (wacom_axis_get_type())
typedef struct {
- enum WacomEventAxis type;
+ WacomEventAxis type;
int min, max;
int res;
} WacomAxis;
@@ -180,7 +180,7 @@ void wacom_device_disable(WacomDevice *device);
*/
guint wacom_device_get_id(WacomDevice *device);
const char *wacom_device_get_name(WacomDevice *device);
-enum WacomToolType wacom_device_get_tool_type(WacomDevice *device);
+WacomToolType wacom_device_get_tool_type(WacomDevice *device);
/* The following getters are only available after wacom_device_setup() */
@@ -200,6 +200,6 @@ int wacom_device_get_num_axes(WacomDevice *device);
* index.
*/
const WacomAxis* wacom_device_get_axis(WacomDevice *device,
- enum WacomEventAxis which);
+ WacomEventAxis which);
G_END_DECLS
diff --git a/tools/wacom-record.c b/tools/wacom-record.c
index d096653..fac4600 100644
--- a/tools/wacom-record.c
+++ b/tools/wacom-record.c
@@ -62,22 +62,22 @@ static inline void print_axes(const WacomEventData *data)
const char *prefix = "";
uint32_t mask = data->mask;
- for (uint32_t flag = 0x1; flag <= _WACOM_EVENT_AXIS_LAST; flag <<= 1) {
+ for (uint32_t flag = 0x1; flag <= _WAXIS_LAST; flag <<= 1) {
const char *name = "unknown axis";
if ((mask & flag) == 0)
continue;
switch (flag) {
- case WACOM_X: name = "x"; break;
- case WACOM_Y: name = "y"; break;
- case WACOM_PRESSURE: name = "pressure"; break;
- case WACOM_TILT_X: name = "tilt-x"; break;
- case WACOM_TILT_Y: name = "tilt-y"; break;
- case WACOM_ROTATION: name = "rotation"; break;
- case WACOM_THROTTLE: name = "throttle"; break;
- case WACOM_WHEEL: name = "wheel"; break;
- case WACOM_RING: name = "ring"; break;
- case WACOM_RING2: name = "ring"; break;
+ case WAXIS_X: name = "x"; break;
+ case WAXIS_Y: name = "y"; break;
+ case WAXIS_PRESSURE: name = "pressure"; break;
+ case WAXIS_TILT_X: name = "tilt-x"; break;
+ case WAXIS_TILT_Y: name = "tilt-y"; break;
+ case WAXIS_ROTATION: name = "rotation"; break;
+ case WAXIS_THROTTLE: name = "throttle"; break;
+ case WAXIS_WHEEL: name = "wheel"; break;
+ case WAXIS_RING: name = "ring"; break;
+ case WAXIS_RING2: name = "ring"; break;
}
g_assert_cmpint(strlen(buf) + strlen(prefix) + strlen(name), <, sizeof(buf));
@@ -89,14 +89,14 @@ static inline void print_axes(const WacomEventData *data)
printf(" mask: [ %s ]\n", buf);
printf(" axes: { x: %5d, y: %5d, pressure: %4d, tilt: [%3d,%3d], rotation: %3d, throttle: %3d, wheel: %3d, rings: [%3d, %3d] }\n",
data->x, data->y,
- (data->mask & WACOM_PRESSURE) ? data->pressure : 0,
- (data->mask & WACOM_TILT_X) ? data->tilt_x : 0,
- (data->mask & WACOM_TILT_Y) ? data->tilt_y : 0,
- (data->mask & WACOM_ROTATION) ? data->rotation : 0,
- (data->mask & WACOM_THROTTLE) ? data->throttle : 0,
- (data->mask & WACOM_WHEEL) ? data->wheel : 0,
- (data->mask & WACOM_RING) ? data->ring : 0,
- (data->mask & WACOM_RING2) ? data->ring2 : 0);
+ (data->mask & WAXIS_PRESSURE) ? data->pressure : 0,
+ (data->mask & WAXIS_TILT_X) ? data->tilt_x : 0,
+ (data->mask & WAXIS_TILT_Y) ? data->tilt_y : 0,
+ (data->mask & WAXIS_ROTATION) ? data->rotation : 0,
+ (data->mask & WAXIS_THROTTLE) ? data->throttle : 0,
+ (data->mask & WAXIS_WHEEL) ? data->wheel : 0,
+ (data->mask & WAXIS_RING) ? data->ring : 0,
+ (data->mask & WAXIS_RING2) ? data->ring2 : 0);
}
static void proximity(WacomDevice *device, gboolean is_prox_in, WacomEventData *data)
@@ -179,12 +179,12 @@ static void device_added(WacomDriver *driver, WacomDevice *device)
const char *typestr = NULL;
switch(wacom_device_get_tool_type(device)) {
- case WACOM_TOOL_INVALID: typestr = "invalid"; break;
- case WACOM_TOOL_STYLUS: typestr = "stylus"; break;
- case WACOM_TOOL_ERASER: typestr = "eraser"; break;
- case WACOM_TOOL_CURSOR: typestr = "cursor"; break;
- case WACOM_TOOL_PAD: typestr = "pad"; break;
- case WACOM_TOOL_TOUCH: typestr = "touch"; break;
+ case WTOOL_INVALID: typestr = "invalid"; break;
+ case WTOOL_STYLUS: typestr = "stylus"; break;
+ case WTOOL_ERASER: typestr = "eraser"; break;
+ case WTOOL_CURSOR: typestr = "cursor"; break;
+ case WTOOL_PAD: typestr = "pad"; break;
+ case WTOOL_TOUCH: typestr = "touch"; break;
}
@@ -201,7 +201,7 @@ static void device_added(WacomDriver *driver, WacomDevice *device)
wacom_device_get_num_touches(device),
wacom_device_get_num_axes(device));
printf(" axes:\n");
- for (enum WacomEventAxis which = WACOM_X; which <= WACOM_RING2; which <<= 1) {
+ for (WacomEventAxis which = WAXIS_X; which <= _WAXIS_LAST; which <<= 1) {
const WacomAxis *axis = wacom_device_get_axis(device, which);
const char *typestr = NULL;
@@ -209,18 +209,18 @@ static void device_added(WacomDriver *driver, WacomDevice *device)
continue;
switch (axis->type) {
- case WACOM_X: typestr = "x"; break;
- case WACOM_Y: typestr = "y"; break;
- case WACOM_PRESSURE: typestr = "pressure"; break;
- case WACOM_TILT_X: typestr = "tilt_x"; break;
- case WACOM_TILT_Y: typestr = "tilt_y"; break;
- case WACOM_STRIP_X: typestr = "strip_x"; break;
- case WACOM_STRIP_Y: typestr = "strip_y"; break;
- case WACOM_ROTATION: typestr = "rotation"; break;
- case WACOM_THROTTLE: typestr = "throttle"; break;
- case WACOM_WHEEL: typestr = "wheel"; break;
- case WACOM_RING: typestr = "ring"; break;
- case WACOM_RING2: typestr = "ring2"; break;
+ case WAXIS_X: typestr = "x"; break;
+ case WAXIS_Y: typestr = "y"; break;
+ case WAXIS_PRESSURE: typestr = "pressure"; break;
+ case WAXIS_TILT_X: typestr = "tilt_x"; break;
+ case WAXIS_TILT_Y: typestr = "tilt_y"; break;
+ case WAXIS_STRIP_X: typestr = "strip_x"; break;
+ case WAXIS_STRIP_Y: typestr = "strip_y"; break;
+ case WAXIS_ROTATION: typestr = "rotation"; break;
+ case WAXIS_THROTTLE: typestr = "throttle"; break;
+ case WAXIS_WHEEL: typestr = "wheel"; break;
+ case WAXIS_RING: typestr = "ring"; break;
+ case WAXIS_RING2: typestr = "ring2"; break;
}
printf(" - {type: %-12s, range: [%5d, %5d], resolution: %5d}\n",