From: Dmitry Torokhov Date: Mon, 30 Nov 2009 22:03:05 +0000 (+0100) Subject: extras/input_id: Correctly identify touchpads X-Git-Tag: 174~701 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=e0ead3ba820956648d103de2cac642f7097b519d;ds=sidebyside extras/input_id: Correctly identify touchpads BTN_TOUCH (as well as ABS_PRESSURE) is used not only by touchpads but by touchscreens as well. The proper check for a touchpad is presence of BTN_TOOL_FINGER and absence of BTN_TOOL_PEN (the latter to filter out some tablets that use BTN_TOOL_FINGER). Tablet matching should be on either BTN_TOOL_PEN or BTN_STYLUS. --- diff --git a/extras/input_id/input_id.c b/extras/input_id/input_id.c index 393a05d53..2e143a562 100644 --- a/extras/input_id/input_id.c +++ b/extras/input_id/input_id.c @@ -75,13 +75,10 @@ static void test_pointers (const unsigned long* bitmask_abs, const unsigned long int is_mouse = 0; int is_touchpad = 0; - if (test_bit (ABS_PRESSURE, bitmask_abs)) - is_touchpad = 1; - if (test_bit (ABS_X, bitmask_abs) && test_bit (ABS_Y, bitmask_abs)) { - if (test_bit (BTN_STYLUS, bitmask_key)) + if (test_bit (BTN_STYLUS, bitmask_key) || test_bit (BTN_TOOL_PEN, bitmask_key)) puts("ID_INPUT_TABLET=1"); - else if (test_bit (BTN_TOUCH, bitmask_key)) + else if (test_bit (BTN_TOOL_FINGER, bitmask_key) && !test_bit (BTN_TOOL_PEN, bitmask_key)) is_touchpad = 1; else if (test_bit (BTN_TRIGGER, bitmask_key) || test_bit (BTN_A, bitmask_key) ||