fixed and added some range checks for joysticks
[rocksndiamonds.git] / src / tools.c
index f907d5dd2bf39816a2bc8ef2a8bbb78eef83147f..626cb8973a892c62612bf68454ebc6f488251ac7 100644 (file)
@@ -3887,16 +3887,16 @@ static int RequestHandleEvents(unsigned int req_state)
          }
 
 #if defined(TARGET_SDL2)
-      case SDL_WINDOWEVENT:
-       HandleWindowEvent((WindowEvent *) &event);
-       break;
+         case SDL_WINDOWEVENT:
+           HandleWindowEvent((WindowEvent *) &event);
+           break;
 
-      case SDL_APP_WILLENTERBACKGROUND:
-      case SDL_APP_DIDENTERBACKGROUND:
-      case SDL_APP_WILLENTERFOREGROUND:
-      case SDL_APP_DIDENTERFOREGROUND:
-       HandlePauseResumeEvent((PauseResumeEvent *) &event);
-       break;
+         case SDL_APP_WILLENTERBACKGROUND:
+         case SDL_APP_DIDENTERBACKGROUND:
+         case SDL_APP_WILLENTERFOREGROUND:
+         case SDL_APP_DIDENTERFOREGROUND:
+           HandlePauseResumeEvent((PauseResumeEvent *) &event);
+           break;
 #endif
 
          case EVENT_KEYPRESS:
@@ -3939,6 +3939,35 @@ static int RequestHandleEvents(unsigned int req_state)
            ClearPlayerAction();
            break;
 
+#if defined(TARGET_SDL2)
+         case SDL_CONTROLLERBUTTONDOWN:
+           switch (event.cbutton.button)
+           {
+             case SDL_CONTROLLER_BUTTON_A:
+             case SDL_CONTROLLER_BUTTON_X:
+             case SDL_CONTROLLER_BUTTON_LEFTSHOULDER:
+               result = 1;
+               break;
+
+             case SDL_CONTROLLER_BUTTON_B:
+             case SDL_CONTROLLER_BUTTON_Y:
+             case SDL_CONTROLLER_BUTTON_RIGHTSHOULDER:
+             case SDL_CONTROLLER_BUTTON_BACK:
+               result = 0;
+               break;
+           }
+
+           if (req_state & REQ_PLAYER)
+             result = 0;
+
+           break;
+
+         case SDL_CONTROLLERBUTTONUP:
+           HandleJoystickEvent(&event);
+           ClearPlayerAction();
+           break;
+#endif
+
          default:
            HandleOtherEvents(&event);
            break;