소스 검색

Emscripten: Fixed receiving joystick events after failed init or subsystem quit.

The callbacks used to receive the HTML events were not removed if the joystick
subsystem initialization failed or if the joystick subsystem was quit. Also, the
already connected joysticks were not deleted if the initialization failed later.
Philipp Wiesemann 11 년 전
부모
커밋
6dda14c0d8
1개의 변경된 파일5개의 추가작업 그리고 0개의 파일을 삭제
  1. 5 0
      src/joystick/emscripten/SDL_sysjoystick.c

+ 5 - 0
src/joystick/emscripten/SDL_sysjoystick.c

@@ -220,6 +220,7 @@ SDL_SYS_JoystickInit(void)
                                                       Emscripten_JoyStickConnected);
                                                       Emscripten_JoyStickConnected);
 
 
     if(retval != EMSCRIPTEN_RESULT_SUCCESS) {
     if(retval != EMSCRIPTEN_RESULT_SUCCESS) {
+        SDL_SYS_JoystickQuit();
         return -1;
         return -1;
     }
     }
 
 
@@ -227,6 +228,7 @@ SDL_SYS_JoystickInit(void)
                                                          0,
                                                          0,
                                                          Emscripten_JoyStickDisconnected);
                                                          Emscripten_JoyStickDisconnected);
     if(retval != EMSCRIPTEN_RESULT_SUCCESS) {
     if(retval != EMSCRIPTEN_RESULT_SUCCESS) {
+        SDL_SYS_JoystickQuit();
         return -1;
         return -1;
     }
     }
 
 
@@ -399,6 +401,9 @@ SDL_SYS_JoystickQuit(void)
 
 
     numjoysticks = 0;
     numjoysticks = 0;
     instance_counter = 0;
     instance_counter = 0;
+
+    emscripten_set_gamepadconnected_callback(NULL, 0, NULL);
+    emscripten_set_gamepaddisconnected_callback(NULL, 0, NULL);
 }
 }
 
 
 SDL_JoystickGUID SDL_SYS_JoystickGetDeviceGUID(int index)
 SDL_JoystickGUID SDL_SYS_JoystickGetDeviceGUID(int index)