diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2009-12-01 15:44:39 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2009-12-02 09:34:22 +1000 |
commit | 1b0df04abe329433658c95debdafdf1714173814 (patch) | |
tree | bb2c5b2e9672c91a10c069dc982118da6a250cde | |
parent | Only init the calibration property for absolute devices. (diff) | |
download | xf86-input-evdev-1b0df04abe329433658c95debdafdf1714173814.tar.gz xf86-input-evdev-1b0df04abe329433658c95debdafdf1714173814.tar.bz2 xf86-input-evdev-1b0df04abe329433658c95debdafdf1714173814.zip |
Fix up BTN_TOUCH handling for non-button tablets.
BTN_TOOL_* is treated as tool, just like before. BTN_TOUCH on the other hand
may need to be treated as a button left press. This again requires a button
class.
Tested on an HP Touchsmart and a Wacom tablet.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | src/evdev.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/evdev.c b/src/evdev.c index 85503bf..17c0f01 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -552,7 +552,6 @@ EvdevProcessKeyEvent(InputInfoPtr pInfo, struct input_event *ev) return; switch (ev->code) { - case BTN_TOUCH: case BTN_TOOL_PEN: case BTN_TOOL_RUBBER: case BTN_TOOL_BRUSH: @@ -562,7 +561,11 @@ EvdevProcessKeyEvent(InputInfoPtr pInfo, struct input_event *ev) case BTN_TOOL_MOUSE: case BTN_TOOL_LENS: pEvdev->tool = value ? ev->code : 0; - if (!(pEvdev->flags & EVDEV_TOUCHSCREEN)) + break; + + case BTN_TOUCH: + pEvdev->tool = value ? ev->code : 0; + if (!(pEvdev->flags & (EVDEV_TOUCHSCREEN | EVDEV_TABLET))) break; /* Treat BTN_TOUCH from devices that only have BTN_TOUCH as * BTN_LEFT. */ @@ -1844,6 +1847,11 @@ EvdevProbe(InputInfoPtr pInfo) { xf86Msg(X_INFO, "%s: Found absolute tablet.\n", pInfo->name); pEvdev->flags |= EVDEV_TABLET; + if (!pEvdev->num_buttons) + { + pEvdev->num_buttons = 7; /* LMR + scroll wheels */ + pEvdev->flags |= EVDEV_BUTTON_EVENTS; + } } else if (TestBit(ABS_PRESSURE, pEvdev->abs_bitmask) || TestBit(BTN_TOUCH, pEvdev->key_bitmask)) { if (num_buttons || TestBit(BTN_TOOL_FINGER, pEvdev->key_bitmask)) { |