(menu_setting.c) Make it more robust

This commit is contained in:
twinaphex 2015-03-17 03:28:06 +01:00
parent cdb2a64cef
commit 221b27546b

View File

@ -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;
}