ソースを参照

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();
     hwdata->instance_id = SDL_GetNextJoystickInstanceID();
 
 
     /* Add virtual joystick to SDL-global lists */
     /* 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);
     SDL_PrivateJoystickAdded(hwdata->instance_id);
 
 
     /* Return the new virtual-device's index */
     /* Return the new virtual-device's index */

+ 1 - 1
test/testgamecontroller.c

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