Commit 5c43207fad3c18578846721642723545b9c276e3

Philipp Wiesemann 2015-02-22T21:00:35

Emscripten: Fixed sending button and motion events for not opened joysticks. SDL_SYS_JoystickUpdate() was implemented incorrectly. For every call to it all attached joysticks were checked. But actually only the given SDL_Joystick should be checked then. This allowed sending broken events for attached but not opened joysticks. It also checked the opened joysticks more often than actually needed.

diff --git a/src/joystick/emscripten/SDL_sysjoystick.c b/src/joystick/emscripten/SDL_sysjoystick.c
index cc5a6f6..4e48090 100644
--- a/src/joystick/emscripten/SDL_sysjoystick.c
+++ b/src/joystick/emscripten/SDL_sysjoystick.c
@@ -335,10 +335,10 @@ void
 SDL_SYS_JoystickUpdate(SDL_Joystick * joystick)
 {
     EmscriptenGamepadEvent gamepadState;
-    SDL_joylist_item *item = SDL_joylist;
+    SDL_joylist_item *item = (SDL_joylist_item *) joystick->hwdata;
     int i, result, buttonState;
 
-    while (item != NULL) {
+    if (item) {
         result = emscripten_get_gamepad_status(item->index, &gamepadState);
         if( result == EMSCRIPTEN_RESULT_SUCCESS) {
             if(gamepadState.timestamp == 0 || gamepadState.timestamp != item->timestamp) {
@@ -368,7 +368,6 @@ SDL_SYS_JoystickUpdate(SDL_Joystick * joystick)
                 }
             }
         }
-        item = item->next;
     }
 }