mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 22:20:21 +00:00
(menu_setting.c) Make it more robust
This commit is contained in:
parent
cdb2a64cef
commit
221b27546b
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user