mirror of
https://github.com/libretro/RetroArch
synced 2025-03-04 07:13:26 +00:00
Merge pull request #5164 from Grotke/fix-driver-wrap-left
Fix driver menu left wrap
This commit is contained in:
commit
c800477bc8
31
driver.c
31
driver.c
@ -168,6 +168,30 @@ static bool driver_find_first(const char *label, char *s, size_t len)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* driver_find_last:
|
||||||
|
* @label : string of driver type to be found.
|
||||||
|
* @s : identifier of driver to be found.
|
||||||
|
* @len : size of @s.
|
||||||
|
*
|
||||||
|
* Find last driver in driver array.
|
||||||
|
**/
|
||||||
|
static bool driver_find_last(const char *label, char *s, size_t len)
|
||||||
|
{
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
for (i = 0;
|
||||||
|
find_driver_nonempty(label, i, s, len) != NULL; i++)
|
||||||
|
{}
|
||||||
|
|
||||||
|
if (i)
|
||||||
|
find_driver_nonempty(label, i-1, s, len);
|
||||||
|
else
|
||||||
|
driver_find_first(label, s, len);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* driver_find_prev:
|
* driver_find_prev:
|
||||||
* @label : string of driver type to be found.
|
* @label : string of driver type to be found.
|
||||||
@ -475,6 +499,13 @@ bool driver_ctl(enum driver_ctl_state state, void *data)
|
|||||||
return false;
|
return false;
|
||||||
return driver_find_first(drv->label, drv->s, drv->len);
|
return driver_find_first(drv->label, drv->s, drv->len);
|
||||||
}
|
}
|
||||||
|
case RARCH_DRIVER_CTL_FIND_LAST:
|
||||||
|
{
|
||||||
|
driver_ctx_info_t *drv = (driver_ctx_info_t*)data;
|
||||||
|
if (!drv)
|
||||||
|
return false;
|
||||||
|
return driver_find_last(drv->label, drv->s, drv->len);
|
||||||
|
}
|
||||||
case RARCH_DRIVER_CTL_FIND_PREV:
|
case RARCH_DRIVER_CTL_FIND_PREV:
|
||||||
{
|
{
|
||||||
driver_ctx_info_t *drv = (driver_ctx_info_t*)data;
|
driver_ctx_info_t *drv = (driver_ctx_info_t*)data;
|
||||||
|
2
driver.h
2
driver.h
@ -93,6 +93,8 @@ enum driver_ctl_state
|
|||||||
|
|
||||||
RARCH_DRIVER_CTL_FIND_FIRST,
|
RARCH_DRIVER_CTL_FIND_FIRST,
|
||||||
|
|
||||||
|
RARCH_DRIVER_CTL_FIND_LAST,
|
||||||
|
|
||||||
RARCH_DRIVER_CTL_FIND_PREV,
|
RARCH_DRIVER_CTL_FIND_PREV,
|
||||||
|
|
||||||
RARCH_DRIVER_CTL_FIND_NEXT,
|
RARCH_DRIVER_CTL_FIND_NEXT,
|
||||||
|
@ -368,7 +368,17 @@ static int setting_string_action_left_driver(void *data,
|
|||||||
drv.len = setting->size;
|
drv.len = setting->size;
|
||||||
|
|
||||||
if (!driver_ctl(RARCH_DRIVER_CTL_FIND_PREV, &drv))
|
if (!driver_ctl(RARCH_DRIVER_CTL_FIND_PREV, &drv))
|
||||||
return -1;
|
{
|
||||||
|
settings_t *settings = config_get_ptr();
|
||||||
|
|
||||||
|
if (settings && settings->bools.menu_navigation_wraparound_enable)
|
||||||
|
{
|
||||||
|
drv.label = setting->name;
|
||||||
|
drv.s = setting->value.target.string;
|
||||||
|
drv.len = setting->size;
|
||||||
|
driver_ctl(RARCH_DRIVER_CTL_FIND_LAST, &drv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (setting->change_handler)
|
if (setting->change_handler)
|
||||||
setting->change_handler(setting);
|
setting->change_handler(setting);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user