diff --git a/menu/menu_setting.c b/menu/menu_setting.c index f2a67c210a..e521d7ed3e 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -39,43 +39,61 @@ int menu_setting_generic(rarch_setting_t *setting) return 0; } -static void setting_handler(rarch_setting_t *setting, unsigned action) +static int setting_handler(rarch_setting_t *setting, unsigned action) { + int ret = -1; if (!setting) - return; + return -1; switch (action) { case MENU_ACTION_UP: case MENU_ACTION_DOWN: if (setting->action_up_or_down) + { setting->action_up_or_down(setting, action); + ret = 0; + } break; case MENU_ACTION_LEFT: case MENU_ACTION_RIGHT: if (setting->action_toggle) + { setting->action_toggle(setting, action, true); + ret = 0; + } break; case MENU_ACTION_OK: if (setting->action_ok) + { setting->action_ok(setting, action); + ret = 0; + } break; case MENU_ACTION_CANCEL: if (setting->action_cancel) + { setting->action_cancel(setting, action); + ret = 0; + } break; case MENU_ACTION_START: if (setting->action_start) + { setting->action_start(setting); + ret = 0; + } break; } + + return ret; } int menu_setting_handler(rarch_setting_t *setting, unsigned action) { - setting_handler(setting, action); - - return menu_setting_generic(setting); + if (setting_handler(setting, action) == 0) + return menu_setting_generic(setting); + return -1; } static int menu_action_handle_setting(rarch_setting_t *setting, @@ -104,13 +122,12 @@ static int menu_action_handle_setting(rarch_setting_t *setting, case ST_DIR: case ST_BIND: case ST_ACTION: - setting_handler(setting, action); - break; + return menu_setting_handler(setting, action); default: break; } - return menu_setting_generic(setting); + return -1; } rarch_setting_t *menu_setting_find(const char *label) @@ -122,6 +139,7 @@ rarch_setting_t *menu_setting_find(const char *label) int menu_setting_set(unsigned type, const char *label, unsigned action, bool wraparound) { + int ret = 0; rarch_setting_t *setting = menu_setting_find( driver.menu->menu_list->selection_buf->list [driver.menu->navigation.selection_ptr].label); @@ -129,6 +147,10 @@ int menu_setting_set(unsigned type, const char *label, if (!setting) return 0; - return menu_action_handle_setting(setting, + ret = menu_action_handle_setting(setting, type, action, wraparound); + + if (ret == -1) + return 0; + return ret; }