diff --git a/driver.c b/driver.c index ab06831c6c..117d4e03ee 100644 --- a/driver.c +++ b/driver.c @@ -133,6 +133,11 @@ int find_driver_index(const char * label, const char *drv) return -1; } +bool find_first_driver(const char *label, char *str, size_t sizeof_str) +{ + find_driver_nonempty(label, 0, str, sizeof_str); + return true; +} /** * find_prev_driver: @@ -167,7 +172,7 @@ bool find_prev_driver(const char *label, char *str, size_t sizeof_str) bool find_next_driver(const char *label, char *str, size_t sizeof_str) { int i = find_driver_index(label, str); - if (i >= 0) + if (i >= 0 && (strcmp(str, "null") != 0)) find_driver_nonempty(label, i + 1, str, sizeof_str); else { diff --git a/driver.h b/driver.h index e2ef62040d..b47f743cb0 100644 --- a/driver.h +++ b/driver.h @@ -322,6 +322,8 @@ void init_drivers_pre(void); **/ void uninit_drivers(int flags); +bool find_first_driver(const char *label, char *str, size_t sizeof_str); + /** * find_prev_driver: * @label : string of driver type to be found. diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 906079a4c7..5cd1d9e5f6 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -54,7 +54,7 @@ static void setting_handler(rarch_setting_t *setting, unsigned action) case MENU_ACTION_LEFT: case MENU_ACTION_RIGHT: if (setting->action_toggle) - setting->action_toggle(setting, action, false); + setting->action_toggle(setting, action, true); break; case MENU_ACTION_OK: if (setting->action_ok) diff --git a/settings_data.c b/settings_data.c index 263e39b1fc..33c98d3e93 100644 --- a/settings_data.c +++ b/settings_data.c @@ -756,10 +756,20 @@ static int setting_data_string_action_toggle_driver(void *data, switch (action) { case MENU_ACTION_LEFT: - find_prev_driver(setting->name, setting->value.string, setting->size); + if (!find_prev_driver(setting->name, setting->value.string, setting->size)) + { +#if 0 + if (wraparound) + find_last_driver(setting->name, setting->value.string, setting->size); +#endif + } break; case MENU_ACTION_RIGHT: - find_next_driver(setting->name, setting->value.string, setting->size); + if (!find_next_driver(setting->name, setting->value.string, setting->size)) + { + if (wraparound) + find_first_driver(setting->name, setting->value.string, setting->size); + } break; }