diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index 787431d26a..72f2edb5bd 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -1080,10 +1080,9 @@ static void mui_list_set_selection(file_list_t *list) mui_navigation_set(true); } -static void mui_navigation_clear(bool pending_push) +static void mui_navigation_clear(void *data, bool pending_push) { - menu_handle_t *menu = menu_driver_get_ptr(); - mui_handle_t *mui = menu ? (mui_handle_t*)menu->userdata : NULL; + mui_handle_t *mui = (mui_handle_t*)data; if (!mui) return; diff --git a/menu/drivers/rgui.c b/menu/drivers/rgui.c index 04107cc19a..4c764d8233 100644 --- a/menu/drivers/rgui.c +++ b/menu/drivers/rgui.c @@ -733,10 +733,9 @@ static void rgui_set_texture(void) video_driver_set_texture_frame(fb_data, false, fb_width, fb_height, 1.0f); } -static void rgui_navigation_clear(bool pending_push) +static void rgui_navigation_clear(void *data, bool pending_push) { - menu_handle_t *menu = menu_driver_get_ptr(); - rgui_t *rgui = menu ? (rgui_t*)menu->userdata : NULL; + rgui_t *rgui = (rgui_t*)data; if (!rgui) return; diff --git a/menu/drivers/rmenu_xui.cpp b/menu/drivers/rmenu_xui.cpp index 26f0679e35..9aac3dfc24 100644 --- a/menu/drivers/rmenu_xui.cpp +++ b/menu/drivers/rmenu_xui.cpp @@ -619,7 +619,7 @@ static void rmenu_xui_populate_entries(const char *path, XuiListSetCurSelVisible(m_menulist, selection); } -static void rmenu_xui_navigation_clear(bool pending_push) +static void rmenu_xui_navigation_clear(void *data, bool pending_push) { size_t selection; if (!menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &selection)) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 2d057887ea..fc580c2343 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -2225,10 +2225,9 @@ static void xmb_context_reset(void *data) xmb_update_boxart_image(xmb); } -static void xmb_navigation_clear(bool pending_push) +static void xmb_navigation_clear(void *data, bool pending_push) { - menu_handle_t *menu = menu_driver_get_ptr(); - xmb_handle_t *xmb = menu ? (xmb_handle_t*)menu->userdata : NULL; + xmb_handle_t *xmb = (xmb_handle_t*)data; if (!pending_push) xmb_selection_pointer_changed(xmb, true); } diff --git a/menu/menu_driver.c b/menu/menu_driver.c index 04cdca7c96..0046fe44cc 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -364,6 +364,17 @@ int menu_driver_pointer_tap(unsigned x, unsigned y, unsigned ptr, return ret; } +void menu_driver_navigation_clear(bool pending_push) +{ + const menu_ctx_driver_t *driver = menu_ctx_driver_get_ptr(); + + if (!menu_driver_data) + return; + + if (driver->navigation_clear) + driver->navigation_clear(menu_driver_data->userdata, pending_push); +} + static void menu_environment_get(int *argc, char *argv[], void *args, void *params_data) { diff --git a/menu/menu_driver.h b/menu/menu_driver.h index f88ece9b2c..713a89492c 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -261,7 +261,7 @@ typedef struct menu_ctx_driver const char *path, const char *label, unsigned k); void (*toggle)(void *userdata, bool); - void (*navigation_clear)(bool); + void (*navigation_clear)(void *, bool); void (*navigation_decrement)(void); void (*navigation_increment)(void); void (*navigation_set)(bool); @@ -370,6 +370,8 @@ int menu_driver_pointer_tap(unsigned x, unsigned y, unsigned ptr, menu_file_list_cbs_t *cbs, menu_entry_t *entry, unsigned action); +void menu_driver_navigation_clear(bool pending_push); + /* HACK */ extern unsigned int rdb_entry_start_game_selection_ptr; diff --git a/menu/menu_navigation.c b/menu/menu_navigation.c index 4a9f04bc4f..b40170ce70 100644 --- a/menu/menu_navigation.c +++ b/menu/menu_navigation.c @@ -78,8 +78,7 @@ bool menu_navigation_ctl(enum menu_navigation_ctl_state state, void *data) menu_navigation_ctl(MENU_NAVIGATION_CTL_SET_SELECTION, &idx); menu_navigation_ctl(MENU_NAVIGATION_CTL_SET, &scroll); - if (driver->navigation_clear) - driver->navigation_clear(*pending_push); + menu_driver_navigation_clear(*pending_push); } return true; case MENU_NAVIGATION_CTL_INCREMENT: