From dec7875a6e23212021e4d9080330a42832dfe02a Mon Sep 17 00:00:00 2001
From: Edward Rudd <urkle@outoforder.cc>
Date: Tue, 15 Jun 2021 01:40:19 +0000
Subject: [PATCH] update SDL soruce to 2.0.14

---
 source/src/core/linux/SDL_udev.c |   55 +++++--------------------------------------------------
 1 files changed, 5 insertions(+), 50 deletions(-)

diff --git a/source/src/core/linux/SDL_udev.c b/source/src/core/linux/SDL_udev.c
index 9c9e950..b45ed10 100644
--- a/source/src/core/linux/SDL_udev.c
+++ b/source/src/core/linux/SDL_udev.c
@@ -32,6 +32,7 @@
 #include <linux/input.h>
 
 #include "SDL_assert.h"
+#include "SDL_evdev_capabilities.h"
 #include "SDL_loadso.h"
 #include "SDL_timer.h"
 #include "SDL_hints.h"
@@ -291,12 +292,6 @@
     return retval;
 }
 
-#define BITS_PER_LONG           (sizeof(unsigned long) * 8)
-#define NBITS(x)                ((((x)-1)/BITS_PER_LONG)+1)
-#define OFF(x)                  ((x)%BITS_PER_LONG)
-#define LONG(x)                 ((x)/BITS_PER_LONG)
-#define test_bit(bit, array)    ((array[LONG(bit)] >> OFF(bit)) & 1)
-
 static void get_caps(struct udev_device *dev, struct udev_device *pdev, const char *attr, unsigned long *bitmask, size_t bitmask_len)
 {
     const char *value;
@@ -330,13 +325,11 @@
 static int
 guess_device_class(struct udev_device *dev)
 {
-    int devclass = 0;
     struct udev_device *pdev;
     unsigned long bitmask_ev[NBITS(EV_MAX)];
     unsigned long bitmask_abs[NBITS(ABS_MAX)];
     unsigned long bitmask_key[NBITS(KEY_MAX)];
     unsigned long bitmask_rel[NBITS(REL_MAX)];
-    unsigned long keyboard_mask;
 
     /* walk up the parental chain until we find the real input device; the
      * argument is very likely a subdevice of this, like eventN */
@@ -353,48 +346,10 @@
     get_caps(dev, pdev, "capabilities/rel", bitmask_rel, SDL_arraysize(bitmask_rel));
     get_caps(dev, pdev, "capabilities/key", bitmask_key, SDL_arraysize(bitmask_key));
 
-    if (test_bit(EV_ABS, bitmask_ev) &&
-        test_bit(ABS_X, bitmask_abs) && test_bit(ABS_Y, bitmask_abs)) {
-        if (test_bit(BTN_STYLUS, bitmask_key) || test_bit(BTN_TOOL_PEN, bitmask_key)) {
-            ; /* ID_INPUT_TABLET */
-        } else if (test_bit(BTN_TOOL_FINGER, bitmask_key) && !test_bit(BTN_TOOL_PEN, bitmask_key)) {
-            ; /* ID_INPUT_TOUCHPAD */
-        } else if (test_bit(BTN_MOUSE, bitmask_key)) {
-            devclass |= SDL_UDEV_DEVICE_MOUSE; /* ID_INPUT_MOUSE */
-        } else if (test_bit(BTN_TOUCH, bitmask_key)) {
-            /* TODO: better determining between touchscreen and multitouch touchpad,
-               see https://github.com/systemd/systemd/blob/master/src/udev/udev-builtin-input_id.c */
-            devclass |= SDL_UDEV_DEVICE_TOUCHSCREEN; /* ID_INPUT_TOUCHSCREEN */
-        }
-
-        if (test_bit(BTN_TRIGGER, bitmask_key) ||
-            test_bit(BTN_A, bitmask_key) ||
-            test_bit(BTN_1, bitmask_key) ||
-            test_bit(ABS_RX, bitmask_abs) ||
-            test_bit(ABS_RY, bitmask_abs) ||
-            test_bit(ABS_RZ, bitmask_abs) ||
-            test_bit(ABS_THROTTLE, bitmask_abs) ||
-            test_bit(ABS_RUDDER, bitmask_abs) ||
-            test_bit(ABS_WHEEL, bitmask_abs) ||
-            test_bit(ABS_GAS, bitmask_abs) ||
-            test_bit(ABS_BRAKE, bitmask_abs)) {
-            devclass |= SDL_UDEV_DEVICE_JOYSTICK; /* ID_INPUT_JOYSTICK */
-        }
-    }
-
-    if (test_bit(EV_REL, bitmask_ev) &&
-        test_bit(REL_X, bitmask_rel) && test_bit(REL_Y, bitmask_rel) &&
-        test_bit(BTN_MOUSE, bitmask_key)) {
-        devclass |= SDL_UDEV_DEVICE_MOUSE; /* ID_INPUT_MOUSE */
-    }
-
-    /* the first 32 bits are ESC, numbers, and Q to D; if we have any of
-     * those, consider it a keyboard device; do not test KEY_RESERVED, though */
-    keyboard_mask = 0xFFFFFFFE;
-    if ((bitmask_key[0] & keyboard_mask) != 0)
-        devclass |= SDL_UDEV_DEVICE_KEYBOARD; /* ID_INPUT_KEYBOARD */
-
-    return devclass;
+    return SDL_EVDEV_GuessDeviceClass(&bitmask_ev[0],
+                                      &bitmask_abs[0],
+                                      &bitmask_key[0],
+                                      &bitmask_rel[0]);
 }
 
 static void 

--
Gitblit v1.9.3