Browse Source

Fixed love.joystick.loadGamepadMappings to properly enable currently connected Joysticks as Gamepads when necessary.

Alex Szpakowski 11 years ago
parent
commit
42a565a0eb

+ 5 - 2
src/modules/joystick/JoystickModule.h

@@ -86,12 +86,15 @@ public:
 	virtual Joystick::JoystickInput getGamepadMapping(const std::string &pguid, Joystick::GamepadInput gpinput) = 0;
 	virtual Joystick::JoystickInput getGamepadMapping(const std::string &pguid, Joystick::GamepadInput gpinput) = 0;
 
 
 	/**
 	/**
-	 *
+	 * Loads a newline-separated list of virtual Gamepad mapping strings for
+	 * multiple joysticks at a time. The mapping strings must have been
+	 * generated with saveGamepadMapping, via Steam, or some other tool which
+	 * generates SDL GameController mappings.
 	 **/
 	 **/
 	virtual void loadGamepadMappings(const std::string &mappings) = 0;
 	virtual void loadGamepadMappings(const std::string &mappings) = 0;
 
 
 	/**
 	/**
-	 *
+	 * Gets the virtual Gamepad mapping string for the specified joystick GUID.
 	 **/
 	 **/
 	virtual std::string saveGamepadMapping(const std::string &pguid) = 0;
 	virtual std::string saveGamepadMapping(const std::string &pguid) = 0;
 
 

+ 8 - 0
src/modules/joystick/sdl/JoystickModule.cpp

@@ -496,6 +496,14 @@ void JoystickModule::loadGamepadMappings(const std::string &mappings)
 		}
 		}
 
 
 		success = success || (SDL_GameControllerAddMapping(mapping.c_str()) != -1);
 		success = success || (SDL_GameControllerAddMapping(mapping.c_str()) != -1);
+
+		if (success)
+		{
+			// FIXME: massive hack until missing APIs are added to SDL 2:
+			// https://bugzilla.libsdl.org/show_bug.cgi?id=1975
+			std::string guid = mapping.substr(0, mapping.find_first_of(','));
+			checkGamepads(guid);
+		}
 	}
 	}
 
 
 	if (!success)
 	if (!success)