Pass userdata pointer to list_insert callback

This commit is contained in:
twinaphex 2015-12-10 19:08:28 +01:00
parent b42149c826
commit d6538bb7ae
5 changed files with 21 additions and 13 deletions

View File

@ -639,7 +639,8 @@ static void rmenu_xui_navigation_alphabet(size_t *ptr_out)
XuiListSetCurSelVisible(m_menulist, *ptr_out); XuiListSetCurSelVisible(m_menulist, *ptr_out);
} }
static void rmenu_xui_list_insert(file_list_t *list, static void rmenu_xui_list_insert(void *data,
file_list_t *list,
const char *path, const char *, size_t list_size) const char *path, const char *, size_t list_size)
{ {
wchar_t buf[PATH_MAX_LENGTH] = {0}; wchar_t buf[PATH_MAX_LENGTH] = {0};

View File

@ -2253,26 +2253,21 @@ static void xmb_navigation_alphabet(size_t *unused)
xmb_selection_pointer_changed(xmb, true); xmb_selection_pointer_changed(xmb, true);
} }
static void xmb_list_insert(file_list_t *list, static void xmb_list_insert(void *userdata,
file_list_t *list,
const char *path, const char *unused, size_t list_size) const char *path, const char *unused, size_t list_size)
{ {
size_t selection; size_t selection;
int current = 0; int current = 0;
int i = list_size; int i = list_size;
xmb_node_t *node = NULL; xmb_node_t *node = NULL;
xmb_handle_t *xmb = NULL; xmb_handle_t *xmb = (xmb_handle_t*)userdata;
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu) if (!xmb || !list)
return; return;
if (!menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &selection)) if (!menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &selection))
return; return;
xmb = (xmb_handle_t*)menu->userdata;
if (!list || !xmb)
return;
node = (xmb_node_t*)menu_entries_get_userdata_at_offset(list, i); node = (xmb_node_t*)menu_entries_get_userdata_at_offset(list, i);
if (!node) if (!node)

View File

@ -154,6 +154,15 @@ void init_menu(void)
retro_fail(1, "init_menu()"); retro_fail(1, "init_menu()");
} }
void menu_driver_list_insert(file_list_t *list, const char *path,
const char *label, size_t idx)
{
const menu_ctx_driver_t *driver = menu_ctx_driver_get_ptr();
if (driver->list_insert)
driver->list_insert(menu_driver_data ? menu_driver_data->userdata : NULL,
list, path, label, idx);
}
void menu_driver_list_free(file_list_t *list, size_t idx, size_t list_size) void menu_driver_list_free(file_list_t *list, size_t idx, size_t list_size)
{ {

View File

@ -269,7 +269,8 @@ typedef struct menu_ctx_driver
void (*navigation_descend_alphabet)(size_t *); void (*navigation_descend_alphabet)(size_t *);
void (*navigation_ascend_alphabet)(size_t *); void (*navigation_ascend_alphabet)(size_t *);
bool (*lists_init)(void*); bool (*lists_init)(void*);
void (*list_insert)(file_list_t *list, const char *, const char *, size_t); void (*list_insert)(void *userdata,
file_list_t *list, const char *, const char *, size_t);
void (*list_free)(file_list_t *list, size_t, size_t); void (*list_free)(file_list_t *list, size_t, size_t);
void (*list_clear)(file_list_t *list); void (*list_clear)(file_list_t *list);
void (*list_cache)(void *data, menu_list_type_t, unsigned); void (*list_cache)(void *data, menu_list_type_t, unsigned);
@ -370,6 +371,9 @@ int menu_driver_pointer_tap(unsigned x, unsigned y, unsigned ptr,
menu_file_list_cbs_t *cbs, menu_file_list_cbs_t *cbs,
menu_entry_t *entry, unsigned action); menu_entry_t *entry, unsigned action);
void menu_driver_list_insert(file_list_t *list, const char *path,
const char *label, size_t idx);
void menu_driver_navigation_clear(bool pending_push); void menu_driver_navigation_clear(bool pending_push);
/* HACK */ /* HACK */

View File

@ -587,8 +587,7 @@ void menu_entries_push(file_list_t *list, const char *path, const char *label,
idx = list->size - 1; idx = list->size - 1;
if (driver->list_insert) menu_driver_list_insert(list, path, label, idx);
driver->list_insert(list, path, label, idx);
file_list_free_actiondata(list, idx); file_list_free_actiondata(list, idx);
cbs = (menu_file_list_cbs_t*) cbs = (menu_file_list_cbs_t*)