summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--controller_info.c7
-rwxr-xr-xrender_sdl.c5
2 files changed, 12 insertions, 0 deletions
diff --git a/controller_info.c b/controller_info.c
index 554db56..f92b9dd 100644
--- a/controller_info.c
+++ b/controller_info.c
@@ -7,6 +7,7 @@
#include "config.h"
#include "util.h"
#include "blastem.h"
+#include "bindings.h"
typedef struct {
char const *name;
@@ -199,6 +200,7 @@ void save_controller_info(int joystick, controller_info *info)
existing = tern_insert_ptr(existing, "variant", strdup(variant_names[info->variant]));
info_config = tern_insert_node(info_config, guid_string, existing);
persist_config_at(config, info_config, "controller_types.cfg");
+ handle_joy_added(joystick);
#endif
}
@@ -211,6 +213,11 @@ void save_controller_mapping(int joystick, char *mapping_string)
existing = tern_insert_ptr(existing, "mapping", mapping_string);
info_config = tern_insert_node(info_config, guid_string, existing);
persist_config_at(config, info_config, "controller_types.cfg");
+ const char *parts[] = {guid_string, ",", mapping_string};
+ char * full = alloc_concat_m(3, parts);
+ SDL_GameControllerAddMapping(full);
+ free(full);
+ handle_joy_added(joystick);
#endif
}
diff --git a/render_sdl.c b/render_sdl.c
index 50e9019..f1c8153 100755
--- a/render_sdl.c
+++ b/render_sdl.c
@@ -950,6 +950,11 @@ int lock_joystick_index(int joystick, int desired_index)
joysticks[desired_index] = tmp_joy;
joystick_sdl_index[desired_index] = tmp_index;
joystick_index_locked[desired_index] = 1;
+ //update bindings as the controllers being swapped may have different mappings
+ handle_joy_added(desired_index);
+ if (joysticks[joystick]) {
+ handle_joy_added(joystick);
+ }
return desired_index;
}