فهرست منبع

Initialize udev before joystick manual scan so class lookup works

LINUX_JoystickInit does a manual scan first so devices are sorted.
If SDL_UDEV_Init hasn't run by then, then the product info cannot
be looked up by SDL_UDEV_GetProductInfo and the initial-plugged-
in-device classification falls back to heuristic guessing.

(cherry picked from commit 0963c11af84da275208edc00b3b8c2e12be396b6)
Tyson Whitehead 1 سال پیش
والد
کامیت
0ab5a8a413
1فایلهای تغییر یافته به همراه4 افزوده شده و 1 حذف شده
  1. 4 1
      src/joystick/linux/SDL_sysjoystick.c

+ 4 - 1
src/joystick/linux/SDL_sysjoystick.c

@@ -1037,6 +1037,9 @@ static SDL_bool LINUX_JoystickIsDevicePresent(Uint16 vendor_id, Uint16 product_i
 static int LINUX_JoystickInit(void)
 {
     const char *devices = SDL_GetHint(SDL_HINT_JOYSTICK_DEVICE);
+#ifdef SDL_USE_LIBUDEV
+    int udev_status = SDL_UDEV_Init();
+#endif
 
     SDL_classic_joysticks = SDL_GetHintBoolean(SDL_HINT_JOYSTICK_LINUX_CLASSIC, SDL_FALSE);
 
@@ -1087,7 +1090,7 @@ static int LINUX_JoystickInit(void)
     }
 
     if (enumeration_method == ENUMERATION_LIBUDEV) {
-        if (SDL_UDEV_Init() == 0) {
+        if (udev_status == 0) {
             /* Set up the udev callback */
             if (SDL_UDEV_AddCallback(joystick_udev_callback) < 0) {
                 SDL_UDEV_Quit();