diff --git a/menu/menu_entry.c b/menu/menu_entry.c index 49c45eea10..3d3b0cb29b 100644 --- a/menu/menu_entry.c +++ b/menu/menu_entry.c @@ -43,7 +43,7 @@ int menu_entry_go_back(void) if (!menu_list) return -1; - menu_setting_apply_deferred(); + menu_settings_apply_deferred(); menu_list_pop_stack(menu_list); if (menu_entries_needs_refresh()) diff --git a/menu/menu_setting.c b/menu/menu_setting.c index a7d0247fff..255b6887b4 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -363,7 +363,62 @@ int menu_setting_set(unsigned type, const char *label, return ret; } -void menu_setting_apply_deferred(void) +int menu_setting_apply_deferred(rarch_setting_t *setting) +{ + if (!setting) + return -1; + + if (setting->type >= ST_GROUP) + return -1; + + if (!(setting->flags & SD_FLAG_IS_DEFERRED)) + return -1; + + switch (setting->type) + { + case ST_BOOL: + if (*setting->value.boolean != setting->original_value.boolean) + { + setting->original_value.boolean = *setting->value.boolean; + setting->deferred_handler(setting); + } + break; + case ST_INT: + if (*setting->value.integer != setting->original_value.integer) + { + setting->original_value.integer = *setting->value.integer; + setting->deferred_handler(setting); + } + break; + case ST_UINT: + if (*setting->value.unsigned_integer != setting->original_value.unsigned_integer) + { + setting->original_value.unsigned_integer = *setting->value.unsigned_integer; + setting->deferred_handler(setting); + } + break; + case ST_FLOAT: + if (*setting->value.fraction != setting->original_value.fraction) + { + setting->original_value.fraction = *setting->value.fraction; + setting->deferred_handler(setting); + } + break; + case ST_PATH: + case ST_DIR: + case ST_STRING: + case ST_BIND: + /* Always run the deferred write handler */ + setting->deferred_handler(setting); + break; + default: + break; + } + + return 0; +} + +void menu_settings_apply_deferred(void) { rarch_setting_t *setting = menu_setting_get_ptr(); @@ -371,54 +426,7 @@ void menu_setting_apply_deferred(void) return; for (; setting->type != ST_NONE; setting++) - { - if (setting->type >= ST_GROUP) - continue; - - if (!(setting->flags & SD_FLAG_IS_DEFERRED)) - continue; - - switch (setting->type) - { - case ST_BOOL: - if (*setting->value.boolean != setting->original_value.boolean) - { - setting->original_value.boolean = *setting->value.boolean; - setting->deferred_handler(setting); - } - break; - case ST_INT: - if (*setting->value.integer != setting->original_value.integer) - { - setting->original_value.integer = *setting->value.integer; - setting->deferred_handler(setting); - } - break; - case ST_UINT: - if (*setting->value.unsigned_integer != setting->original_value.unsigned_integer) - { - setting->original_value.unsigned_integer = *setting->value.unsigned_integer; - setting->deferred_handler(setting); - } - break; - case ST_FLOAT: - if (*setting->value.fraction != setting->original_value.fraction) - { - setting->original_value.fraction = *setting->value.fraction; - setting->deferred_handler(setting); - } - break; - case ST_PATH: - case ST_DIR: - case ST_STRING: - case ST_BIND: - /* Always run the deferred write handler */ - setting->deferred_handler(setting); - break; - default: - break; - } - } + menu_setting_apply_deferred(setting); } diff --git a/menu/menu_setting.h b/menu/menu_setting.h index e0957c9ecf..ce98bb2031 100644 --- a/menu/menu_setting.h +++ b/menu/menu_setting.h @@ -216,7 +216,9 @@ typedef struct rarch_setting -void menu_setting_apply_deferred(void); +int menu_setting_apply_deferred(rarch_setting_t *setting); + +void menu_settings_apply_deferred(void); int menu_setting_set_flags(rarch_setting_t *setting); diff --git a/retroarch.c b/retroarch.c index 41adaff453..7771071c71 100644 --- a/retroarch.c +++ b/retroarch.c @@ -1427,7 +1427,7 @@ void rarch_main_set_state(unsigned cmd) break; case RARCH_ACTION_STATE_MENU_RUNNING_FINISHED: #ifdef HAVE_MENU - menu_setting_apply_deferred(); + menu_settings_apply_deferred(); menu_driver_toggle(false); menu_driver_unset_alive();