Forráskód Böngészése

evdev: correctly handle composite devices

These can be both mouse and keyboard and should be initialized and exposed to the application as both.
Sam Lantinga 9 hónapja
szülő
commit
6eca02a0e7
1 módosított fájl, 11 hozzáadás és 4 törlés
  1. 11 4
      src/core/linux/SDL_evdev.c

+ 11 - 4
src/core/linux/SDL_evdev.c

@@ -933,14 +933,18 @@ static bool SDL_EVDEV_device_added(const char *dev_path, int udev_class)
             SDL_free(item);
             SDL_free(item);
             return false;
             return false;
         }
         }
-    } else if (udev_class & SDL_UDEV_DEVICE_MOUSE) {
+    }
+
+    if (udev_class & SDL_UDEV_DEVICE_MOUSE) {
         if (!SDL_EVDEV_init_mouse(item, udev_class)) {
         if (!SDL_EVDEV_init_mouse(item, udev_class)) {
             close(item->fd);
             close(item->fd);
             SDL_free(item->path);
             SDL_free(item->path);
             SDL_free(item);
             SDL_free(item);
             return false;
             return false;
         }
         }
-    } else if (udev_class & SDL_UDEV_DEVICE_KEYBOARD) {
+    }
+
+    if (udev_class & SDL_UDEV_DEVICE_KEYBOARD) {
         if (!SDL_EVDEV_init_keyboard(item, udev_class)) {
         if (!SDL_EVDEV_init_keyboard(item, udev_class)) {
             close(item->fd);
             close(item->fd);
             SDL_free(item->path);
             SDL_free(item->path);
@@ -981,11 +985,14 @@ static bool SDL_EVDEV_device_removed(const char *dev_path)
             if (item == _this->last) {
             if (item == _this->last) {
                 _this->last = prev;
                 _this->last = prev;
             }
             }
+
             if (item->is_touchscreen) {
             if (item->is_touchscreen) {
                 SDL_EVDEV_destroy_touchscreen(item);
                 SDL_EVDEV_destroy_touchscreen(item);
-            } else if (item->udev_class & SDL_UDEV_DEVICE_MOUSE) {
+            }
+            if (item->udev_class & SDL_UDEV_DEVICE_MOUSE) {
                 SDL_EVDEV_destroy_mouse(item);
                 SDL_EVDEV_destroy_mouse(item);
-            } else if (item->udev_class & SDL_UDEV_DEVICE_KEYBOARD) {
+            }
+            if (item->udev_class & SDL_UDEV_DEVICE_KEYBOARD) {
                 SDL_EVDEV_destroy_keyboard(item);
                 SDL_EVDEV_destroy_keyboard(item);
             }
             }
             close(item->fd);
             close(item->fd);