فهرست منبع

Add new virtual joysticks to the end of the list

This guarantees that the device index that's returned is stable, as long as no joystick hotplug events occur.
Sam Lantinga 3 سال پیش
والد
کامیت
1f2a241688
2فایلهای تغییر یافته به همراه11 افزوده شده و 3 حذف شده
  1. 10 2
      src/joystick/virtual/SDL_virtualjoystick.c
  2. 1 1
      test/testgamecontroller.c

+ 10 - 2
src/joystick/virtual/SDL_virtualjoystick.c

@@ -245,8 +245,16 @@ SDL_JoystickAttachVirtualInner(const SDL_VirtualJoystickDesc *desc)
     hwdata->instance_id = SDL_GetNextJoystickInstanceID();
 
     /* Add virtual joystick to SDL-global lists */
-    hwdata->next = g_VJoys;
-    g_VJoys = hwdata;
+    if (g_VJoys) {
+        joystick_hwdata *last;
+
+        for (last = g_VJoys; last->next; last = last->next) {
+            continue;
+        }
+        last->next = hwdata;
+    } else {
+        g_VJoys = hwdata;
+    }
     SDL_PrivateJoystickAdded(hwdata->instance_id);
 
     /* Return the new virtual-device's index */

+ 1 - 1
test/testgamecontroller.c

@@ -365,7 +365,7 @@ static void CloseVirtualController()
 {
     int i;
 
-    for (i = 0; i < SDL_NumJoysticks(); ++i) {
+    for (i = SDL_NumJoysticks(); i--; ) {
         if (SDL_JoystickIsVirtual(i)) {
             SDL_JoystickDetachVirtual(i);
         }