diff --git a/configuration.c b/configuration.c index 28fd116e03..4439a078c3 100644 --- a/configuration.c +++ b/configuration.c @@ -2307,8 +2307,8 @@ bool config_load_override(void) strlcpy(buf, path_get(RARCH_PATH_CORE), sizeof(buf)); /* Toggle has_save_path to false so it resets */ - retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_STATE_PATH); - retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_SAVE_PATH); + retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_STATE_PATH, NULL); + retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_SAVE_PATH, NULL); if (!config_load_file(path_get(RARCH_PATH_CONFIG), false, config_get_ptr())) return false; @@ -2340,8 +2340,8 @@ bool config_unload_override(void) path_clear(RARCH_PATH_CONFIG_APPEND); /* Toggle has_save_path to false so it resets */ - retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_STATE_PATH); - retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_SAVE_PATH); + retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_STATE_PATH, NULL); + retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_SAVE_PATH, NULL); if (config_load_file(path_get(RARCH_PATH_CONFIG), false, config_get_ptr())) { diff --git a/menu/menu_setting.c b/menu/menu_setting.c index fff7702cb3..168a1a0d24 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -1601,7 +1601,7 @@ void general_write_handler(void *data) if (setting && *setting->value.target.boolean) retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_VERBOSITY, NULL); else - retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_VERBOSITY); + retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_VERBOSITY, NULL); } break; case MENU_ENUM_LABEL_VIDEO_SMOOTH: @@ -1650,7 +1650,7 @@ void general_write_handler(void *data) if (val) retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_NETPLAY_IP_ADDRESS, NULL); else - retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_NETPLAY_IP_ADDRESS); + retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_NETPLAY_IP_ADDRESS, NULL); } #endif break; @@ -1675,7 +1675,7 @@ void general_write_handler(void *data) if (val) retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_NETPLAY_DELAY_FRAMES, NULL); else - retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_NETPLAY_DELAY_FRAMES); + retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_NETPLAY_DELAY_FRAMES, NULL); } #endif break; @@ -1687,7 +1687,7 @@ void general_write_handler(void *data) if (val) retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_NETPLAY_CHECK_FRAMES, NULL); else - retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_NETPLAY_CHECK_FRAMES); + retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_NETPLAY_CHECK_FRAMES, NULL); } #endif default: diff --git a/retroarch.c b/retroarch.c index e9cafef3ab..60f1112ba5 100644 --- a/retroarch.c +++ b/retroarch.c @@ -1400,10 +1400,20 @@ void retroarch_override_setting_set(enum rarch_override_setting enum_idx, void * } } -void retroarch_override_setting_unset(enum rarch_override_setting enum_idx) +void retroarch_override_setting_unset(enum rarch_override_setting enum_idx, void *data) { switch (enum_idx) { + case RARCH_OVERRIDE_SETTING_LIBRETRO_DEVICE: + { + unsigned *val = (unsigned*)data; + if (val) + { + unsigned bit = *val; + BIT128_CLEAR(has_set_libretro_device, bit); + } + } + break; case RARCH_OVERRIDE_SETTING_VERBOSITY: has_set_verbosity = false; break; @@ -1453,7 +1463,16 @@ void retroarch_override_setting_free_state(void) { unsigned i; for (i = 0; i < RARCH_OVERRIDE_SETTING_LAST; i++) - retroarch_override_setting_unset((enum rarch_override_setting)(i)); + { + if (i == RARCH_OVERRIDE_SETTING_LIBRETRO_DEVICE) + { + unsigned j; + for (j = 0; j < MAX_USERS; j++) + retroarch_override_setting_unset((enum rarch_override_setting)(i), &j); + } + else + retroarch_override_setting_unset((enum rarch_override_setting)(i), NULL); + } } int retroarch_get_capabilities(enum rarch_capabilities type, diff --git a/retroarch.h b/retroarch.h index bd25d331ad..e8fb374033 100644 --- a/retroarch.h +++ b/retroarch.h @@ -160,7 +160,7 @@ int retroarch_get_capabilities(enum rarch_capabilities type, void retroarch_override_setting_set(enum rarch_override_setting enum_idx, void *data); -void retroarch_override_setting_unset(enum rarch_override_setting enum_idx); +void retroarch_override_setting_unset(enum rarch_override_setting enum_idx, void *data); void retroarch_override_setting_free_state(void); diff --git a/runloop.c b/runloop.c index 6dff25068c..112c46b482 100644 --- a/runloop.c +++ b/runloop.c @@ -762,6 +762,11 @@ bool runloop_ctl(enum runloop_ctl_state state, void *data) dir_clear(RARCH_DIR_RECORD_OUTPUT); dir_clear_all(); recording_driver_free_state(); + { + unsigned j; + for (j = 0; j < MAX_USERS; j++) + retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_LIBRETRO_DEVICE, &j); + } { global_t *global = global_get_ptr();