Clear EV_ABS_V_USE_TOUCH for devices without a touch button

VMware's absolute pointing device does not have a pressure/touch button.
Although evdev correctly recognizes this, it sets "use_touch" for X and Y axes
regardless of the touch button. This patch clears the USE_TOUCH flag for the X
and Y axes if the device does not have a touch button.
master
Vinay Bondhugula 18 years ago
parent 5adbc6b98c
commit d032d3c8b4
  1. 13
      src/evdev_axes.c

@ -709,6 +709,7 @@ EvdevAxisAbsNew1(InputInfoPtr pInfo)
{
int btn;
int i;
s = xf86SetStrOption(pInfo->options, "AbsoluteTouch", "DIGI_Touch");
btn = EvdevBtnFind (pInfo, s);
@ -719,6 +720,18 @@ EvdevAxisAbsNew1(InputInfoPtr pInfo)
xf86Msg(X_ERROR, "%s: state->btn: %p.\n", pInfo->name, state->btn);
state->btn->callback[btn] = &EvdevAxesTouchCallback;
} else {
/*
* If the device does not have a touch button, then clear
* EV_ABS_V_USE_TOUCH which we may have set for the X and Y
* axes in EvdevAxisAbsNew.
*/
for (i = 0; i < ABS_MAX; i++) {
if ((i == ABS_X || i == ABS_Y) &&
state->abs->v_flags[i] & EV_ABS_V_PRESENT) {
state->abs->v_flags[i] &= ~EV_ABS_V_USE_TOUCH;
}
}
xf86Msg(X_ERROR, "%s: AbsoluteTouch: '%s' does not exist.\n", pInfo->name, s);
}
} else {

Loading…
Cancel
Save