소스 검색

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);
         }