summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface/SDL
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/SDL')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/SDL/SDL.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/SDL/SDL.cpp b/Source/Core/InputCommon/ControllerInterface/SDL/SDL.cpp
index b3f2147ae3..0aa36f82dc 100644
--- a/Source/Core/InputCommon/ControllerInterface/SDL/SDL.cpp
+++ b/Source/Core/InputCommon/ControllerInterface/SDL/SDL.cpp
@@ -246,6 +246,28 @@ void PopulateDevices()
Joystick::Joystick(SDL_Joystick* const joystick, const int sdl_index)
: m_joystick(joystick), m_name(StripSpaces(GetJoystickName(sdl_index)))
{
+ // really bad HACKS:
+ // to not use SDL for an XInput device
+ // too many people on the forums pick the SDL device and ask:
+ // "why don't my 360 gamepad triggers/rumble work correctly"
+ // XXX x360 controllers _should_ work on modern SDL2, so it's unclear why they're
+ // still broken. Perhaps it's because we're not pumping window messages, which SDL seems to
+ // expect.
+#ifdef _WIN32
+ // checking the name is probably good (and hacky) enough
+ // but I'll double check with the num of buttons/axes
+ std::string lcasename = GetName();
+ Common::ToLower(&lcasename);
+
+ if ((std::string::npos != lcasename.find("xbox 360")) &&
+ (11 == SDL_JoystickNumButtons(joystick)) && (6 == SDL_JoystickNumAxes(joystick)) &&
+ (1 == SDL_JoystickNumHats(joystick)) && (0 == SDL_JoystickNumBalls(joystick)))
+ {
+ // this device won't be used
+ return;
+ }
+#endif
+
if (SDL_JoystickNumButtons(joystick) > 255 || SDL_JoystickNumAxes(joystick) > 255 ||
SDL_JoystickNumHats(joystick) > 255 || SDL_JoystickNumBalls(joystick) > 255)
{