Explorar o código

Make sure the joystick count is correct when the added and removed events are dispatched, in case someone is watching for them with an event filter.

Sam Lantinga %!s(int64=12) %!d(string=hai) anos
pai
achega
e3e24bded7
Modificáronse 1 ficheiros con 8 adicións e 3 borrados
  1. 8 3
      src/joystick/linux/SDL_sysjoystick.c

+ 8 - 3
src/joystick/linux/SDL_sysjoystick.c

@@ -234,12 +234,15 @@ MaybeAddDevice(const char *path)
         SDL_joylist_tail = item;
     }
 
+    /* Need to increment the joystick count before we post the event */
+    ++numjoysticks;
+
     /* !!! FIXME: Move this to an SDL_PrivateJoyDeviceAdded() function? */
 #if !SDL_EVENTS_DISABLED
     event.type = SDL_JOYDEVICEADDED;
 
     if (SDL_GetEventState(event.type) == SDL_ENABLE) {
-        event.jdevice.which = numjoysticks;
+        event.jdevice.which = (numjoysticks - 1);
         if ( (SDL_EventOK == NULL) ||
              (*SDL_EventOK) (SDL_EventOKParam, &event) ) {
             SDL_PushEvent(&event);
@@ -247,7 +250,7 @@ MaybeAddDevice(const char *path)
     }
 #endif /* !SDL_EVENTS_DISABLED */
 
-    return numjoysticks++;
+    return numjoysticks;
 }
 
 #if SDL_USE_LIBUDEV
@@ -282,6 +285,9 @@ MaybeRemoveDevice(const char *path)
                 SDL_joylist_tail = prev;
             }
 
+            /* Need to decrement the joystick count before we post the event */
+            --numjoysticks;
+
             /* !!! FIXME: Move this to an SDL_PrivateJoyDeviceRemoved() function? */
 #if !SDL_EVENTS_DISABLED
             event.type = SDL_JOYDEVICEREMOVED;
@@ -298,7 +304,6 @@ MaybeRemoveDevice(const char *path)
             SDL_free(item->path);
             SDL_free(item->name);
             SDL_free(item);
-            numjoysticks--;
             return retval;
         }
         prev = item;