]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev: don't assign INPUT_ID_MOUSE to a touchpad/joystick/touchscreen (#8259)
authorPeter Hutterer <peter.hutterer@who-t.net>
Fri, 23 Feb 2018 08:36:45 +0000 (18:36 +1000)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 23 Feb 2018 08:36:45 +0000 (09:36 +0100)
If a touchpad has MT axes only but not ABS_X/ABS_Y (DualShock 4 controller),
then we hit both the conditions is_touchpad and the later check for
!has_abs_axes here, assigning is_mouse and ID_INPUT_MOUSE later.

This is a bug, we historically only assigned either of of the pointing device
tags ID_INPUT_MOUSE/TOUCHPAD/JOYSTICK/TOUCHSCREEN, never multiple of them.

Note that we cannot just check for has_abs_axes and has_mt_coordinates because
the apple touch mouse has both. We really need to check if the device has
already been assigned something else.

https://bugs.freedesktop.org/show_bug.cgi?id=105050

src/udev/udev-builtin-input_id.c

index fa830213ffe14fac7948574ffe912e1aff71dca9..02b86cce239eb2ebbf80302c47ca9336b9882cac 100644 (file)
@@ -233,7 +233,8 @@ static bool test_pointers(struct udev_device *dev,
                         is_touchscreen = true;
         }
 
-        if (has_mouse_button &&
+        if (!is_tablet && !is_touchpad && !is_joystick &&
+            has_mouse_button &&
             (has_rel_coordinates ||
             !has_abs_coordinates)) /* mouse buttons and no axis */
                 is_mouse = true;