From d032d3c8b40e152cc0fd8409f910f23559873aaf Mon Sep 17 00:00:00 2001 From: Vinay Bondhugula Date: Tue, 29 Jan 2008 22:15:22 -0800 Subject: 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. --- src/evdev_axes.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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 { -- cgit v1.2.1