aboutsummaryrefslogtreecommitdiff
path: root/src/evdev_axes.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/evdev_axes.c')
-rw-r--r--src/evdev_axes.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/evdev_axes.c b/src/evdev_axes.c
index e967c61..5d196ab 100644
--- a/src/evdev_axes.c
+++ b/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 {