From e3e24bded7b39c787102fd11144e111474b59d4e Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 8 Nov 2013 14:04:59 -0800 Subject: [PATCH] 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. --- src/joystick/linux/SDL_sysjoystick.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/joystick/linux/SDL_sysjoystick.c b/src/joystick/linux/SDL_sysjoystick.c index 84511da02..43990b42f 100644 --- a/src/joystick/linux/SDL_sysjoystick.c +++ b/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;