summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2022-02-02 11:52:32 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2022-02-03 14:39:42 +1000
commit146e8d340a09614c7b59275f48d0005a2e768767 (patch)
tree293aa9829c641ec077e383fa2652928bc5001ef7
parenta529e92b1144b59111a6a16e35169db128ce216f (diff)
downloadxf86-input-wacom-146e8d340a09614c7b59275f48d0005a2e768767.tar.gz
x11: handle valuators with a first_valuator != 0 correctly
xf86Post*EventP requires that the valuators array index 0 is whatever first_valuator is. Found in #222 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--src/x11/xf86Wacom.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/x11/xf86Wacom.c b/src/x11/xf86Wacom.c
index 36ee19e..6bbdf12 100644
--- a/src/x11/xf86Wacom.c
+++ b/src/x11/xf86Wacom.c
@@ -371,12 +371,11 @@ void wcmEmitKeycode(WacomDevicePtr priv, int keycode, int state)
}
static inline void
-convertAxes(const WacomAxisData *axes, int *first_out, int *num_out, int valuators[7])
+convertAxes(const WacomAxisData *axes, int *first_out, int *num_out, int valuators_out[7])
{
int first = 7;
int last = -1;
-
- memset(valuators, 0, 7 * sizeof(valuators[0]));
+ int valuators[7] = {0};
for (enum WacomAxisType which = _WACOM_AXIS_LAST; which > 0; which >>= 1)
{
@@ -415,13 +414,15 @@ convertAxes(const WacomAxisData *axes, int *first_out, int *num_out, int valuato
first = 0;
*first_out = first;
*num_out = last - first + 1;
+
+ memcpy(valuators_out, &valuators[first], *num_out * sizeof(valuators[0]));
}
void wcmEmitProximity(WacomDevicePtr priv, bool is_proximity_in,
const WacomAxisData *axes)
{
InputInfoPtr pInfo = priv->frontend;
- int valuators[7];
+ int valuators[7] = {0};
int first_val, num_vals;
convertAxes(axes, &first_val, &num_vals, valuators);
@@ -432,7 +433,7 @@ void wcmEmitProximity(WacomDevicePtr priv, bool is_proximity_in,
void wcmEmitMotion(WacomDevicePtr priv, bool is_absolute, const WacomAxisData *axes)
{
InputInfoPtr pInfo = priv->frontend;
- int valuators[7];
+ int valuators[7] = {0};
int first_val, num_vals;
convertAxes(axes, &first_val, &num_vals, valuators);
@@ -443,7 +444,7 @@ void wcmEmitMotion(WacomDevicePtr priv, bool is_absolute, const WacomAxisData *a
void wcmEmitButton(WacomDevicePtr priv, bool is_absolute, int button, bool is_press, const WacomAxisData *axes)
{
InputInfoPtr pInfo = priv->frontend;
- int valuators[7];
+ int valuators[7] = {0};
int first_val, num_vals;
convertAxes(axes, &first_val, &num_vals, valuators);