From 218f3e5d5f42f2c86201f8918f06b07f1d24420c Mon Sep 17 00:00:00 2001 From: Nilsen Filc Date: Wed, 18 Mar 2015 18:20:18 +0100 Subject: [PATCH] joystick connection accounting fix Tested with 3 simultaneous joypads and deconnection+reconnection scenario. Thanks to Alan McCosh for pointing this out. --- legacy/project/src/sdl2/SDL2Stage.cpp | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/legacy/project/src/sdl2/SDL2Stage.cpp b/legacy/project/src/sdl2/SDL2Stage.cpp index 30ae5a00b..86fa31a86 100644 --- a/legacy/project/src/sdl2/SDL2Stage.cpp +++ b/legacy/project/src/sdl2/SDL2Stage.cpp @@ -1360,9 +1360,9 @@ void ProcessEvent(SDL_Event &inEvent) int joyId = -1; for (int i = 0; i < sgJoysticksId.size(); i++) { - if (sgJoysticksIndex[i] == i) + if (sgJoysticksIndex[i] == inEvent.jdevice.which) { - joyId = i; + joyId = inEvent.jdevice.which; break; } } @@ -1592,20 +1592,9 @@ void CreateMainFrame(FrameCreationCallback inOnFrame, int inWidth, int inHeight, sgSDLFrame = new SDLFrame(window, renderer, windowFlags, opengl, width, height); inOnFrame(sgSDLFrame); - + int numJoysticks = SDL_NumJoysticks(); - if (sgJoystickEnabled && numJoysticks > 0) { - SDL_JoystickEventState(SDL_TRUE); - for (int i = 0; i < numJoysticks; i++) { - sgJoystick = SDL_JoystickOpen(i); - Event joystick(etJoyDeviceAdded); - joystick.id = SDL_JoystickInstanceID(sgJoystick); - sgJoysticks.push_back(sgJoystick); - sgJoysticksId.push_back(joystick.id); - sgJoysticksIndex.push_back(i); - sgSDLFrame->ProcessEvent(joystick); - } - } + SDL_JoystickEventState(SDL_TRUE); StartAnimation(); }