diff --git a/frontend/menu/menu_action.c b/frontend/menu/menu_action.c index 79d0dddcaa..005c23218d 100644 --- a/frontend/menu/menu_action.c +++ b/frontend/menu/menu_action.c @@ -150,19 +150,20 @@ int menu_action_handle_setting(rarch_setting_t *setting, switch (action) { case MENU_ACTION_START: - *setting->value.string = '\0'; - - if (setting->change_handler) - setting->change_handler(setting); - - if (setting->flags & SD_FLAG_EXIT - && setting->cmd_trigger.triggered) - { - setting->cmd_trigger.triggered = false; - return -1; - } + if (setting->action_start) + return setting->action_start(setting); break; } + + if (setting->change_handler) + setting->change_handler(setting); + + if (setting->flags & SD_FLAG_EXIT + && setting->cmd_trigger.triggered) + { + setting->cmd_trigger.triggered = false; + return -1; + } break; case ST_STRING: switch (action) diff --git a/settings_data.c b/settings_data.c index c9cde30aa9..87798786d3 100644 --- a/settings_data.c +++ b/settings_data.c @@ -735,6 +735,18 @@ static int setting_data_bool_action_start_default(void *data) return 0; } +static int setting_data_string_dir_action_start_default(void *data) +{ + rarch_setting_t *setting = (rarch_setting_t*)data; + + if (!setting) + return -1; + + *setting->value.string = '\0'; + + return 0; +} + static int setting_data_bool_action_toggle_default(void *data, unsigned action) { rarch_setting_t *setting = (rarch_setting_t*)data; @@ -1065,6 +1077,9 @@ rarch_setting_t setting_data_string_setting(enum setting_type type, result.value.string = target; result.default_value.string = default_value; + if (type == ST_DIR) + result.action_start = setting_data_string_dir_action_start_default; + return result; }