diff --git a/menu/drivers/glui.c b/menu/drivers/glui.c index 6f8eef2be2..7c5e435fe2 100644 --- a/menu/drivers/glui.c +++ b/menu/drivers/glui.c @@ -836,6 +836,7 @@ static int glui_environ(menu_environ_cb_t type, void *data) menu_ctx_driver_t menu_ctx_glui = { NULL, glui_get_message, + generic_menu_iterate, glui_render, glui_frame, glui_init, diff --git a/menu/drivers/menu_generic.c b/menu/drivers/menu_generic.c index 31b3bbf4b8..a431077943 100644 --- a/menu/drivers/menu_generic.c +++ b/menu/drivers/menu_generic.c @@ -219,7 +219,7 @@ static enum action_iterate_type action_iterate_type(uint32_t hash) * * Returns: 0 on success, -1 if we need to quit out of the loop. **/ -int menu_iterate(bool render_this_frame, enum menu_action action) +int generic_menu_iterate(bool render_this_frame, enum menu_action action) { size_t selection; menu_entry_t entry; diff --git a/menu/drivers/menu_generic.h b/menu/drivers/menu_generic.h index 6cf9fde85f..da2cea02e9 100644 --- a/menu/drivers/menu_generic.h +++ b/menu/drivers/menu_generic.h @@ -20,6 +20,10 @@ #include +#include "../menu_input.h" + +int generic_menu_iterate(bool render_this_frame, enum menu_action action); + bool generic_menu_init_list(void *data); #endif diff --git a/menu/drivers/null.c b/menu/drivers/null.c index 5cfc17510b..c43cf2093d 100644 --- a/menu/drivers/null.c +++ b/menu/drivers/null.c @@ -26,6 +26,7 @@ menu_ctx_driver_t menu_ctx_null = { NULL, /* set_texture */ NULL, /* render_messagebox */ + NULL, /* iterate */ NULL, /* render */ NULL, /* frame */ NULL, /* init */ diff --git a/menu/drivers/rgui.c b/menu/drivers/rgui.c index 892354d00b..b885789933 100644 --- a/menu/drivers/rgui.c +++ b/menu/drivers/rgui.c @@ -851,6 +851,7 @@ static int rgui_environ(menu_environ_cb_t type, void *data) menu_ctx_driver_t menu_ctx_rgui = { rgui_set_texture, + generic_menu_iterate, rgui_set_message, rgui_render, NULL, diff --git a/menu/drivers/rmenu.c b/menu/drivers/rmenu.c index cf45ec825f..d35de0cece 100644 --- a/menu/drivers/rmenu.c +++ b/menu/drivers/rmenu.c @@ -328,6 +328,7 @@ static int rmenu_environ(menu_environ_cb_t type, void *data) menu_ctx_driver_t menu_ctx_rmenu = { rmenu_set_texture, rmenu_render_messagebox, + generic_menu_iterate, rmenu_render, NULL, rmenu_init, diff --git a/menu/drivers/rmenu_xui.cpp b/menu/drivers/rmenu_xui.cpp index 51254e2bb0..8c5f23baa6 100644 --- a/menu/drivers/rmenu_xui.cpp +++ b/menu/drivers/rmenu_xui.cpp @@ -695,6 +695,7 @@ static int rmenu_xui_environ(menu_environ_cb_t type, void *data) menu_ctx_driver_t menu_ctx_rmenu_xui = { NULL, rmenu_xui_render_messagebox, + generic_menu_iterate, rmenu_xui_render, rmenu_xui_frame, rmenu_xui_init, diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 35201adecb..8180afd641 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -2547,6 +2547,7 @@ static int xmb_list_bind_init(menu_file_list_cbs_t *cbs, menu_ctx_driver_t menu_ctx_xmb = { NULL, xmb_render_messagebox_internal, + generic_menu_iterate, xmb_render, xmb_frame, xmb_init, diff --git a/menu/drivers/zarch.c b/menu/drivers/zarch.c index e2e1ee9912..fef40e8c29 100644 --- a/menu/drivers/zarch.c +++ b/menu/drivers/zarch.c @@ -1008,6 +1008,7 @@ static void zarch_context_reset(void) menu_ctx_driver_t menu_ctx_zarch = { NULL, zarch_get_message, + generic_menu_iterate, zarch_render, zarch_frame, zarch_init, diff --git a/menu/menu.c b/menu/menu.c index 5c2c0d30b3..f8c9c306f2 100644 --- a/menu/menu.c +++ b/menu/menu.c @@ -94,8 +94,6 @@ bool menu_load_content(enum rarch_core_type type) /* redraw menu frame */ menu_display_ctl(MENU_DISPLAY_CTL_SET_MSG_FORCE, &msg_force); - - menu_iterate(true, MENU_ACTION_NOOP); menu_iterate_render(); if (!(main_load_content(0, NULL, NULL, menu_environment_get, diff --git a/menu/menu_driver.c b/menu/menu_driver.c index 668d34136b..54783b627b 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -331,6 +331,15 @@ bool menu_driver_alive(void) return menu_alive; } +int menu_driver_iterate(bool render, enum menu_action action) +{ + const menu_ctx_driver_t *driver = menu_ctx_driver_get_ptr(); + + if (driver->iterate) + return driver->iterate(render, action); + return -1; +} + void menu_driver_toggle(bool latch) { driver_t *driver = driver_get_ptr(); diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 5e3e55d36d..72eb42bd1b 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -108,6 +108,7 @@ typedef struct menu_ctx_driver { void (*set_texture)(void); void (*render_messagebox)(const char *msg); + int (*iterate)(bool render, enum menu_action action); void (*render)(void); void (*frame)(void); void* (*init)(void); @@ -218,6 +219,8 @@ size_t menu_driver_list_get_selection(void); bool menu_environment_cb(menu_environ_cb_t type, void *data); +int menu_driver_iterate(bool render, enum menu_action action); + int menu_driver_bind_init(menu_file_list_cbs_t *cbs, const char *path, const char *label, unsigned type, size_t idx, const char *elem0, const char *elem1, diff --git a/runloop.c b/runloop.c index ca97d09a2e..52600fec57 100644 --- a/runloop.c +++ b/runloop.c @@ -978,7 +978,7 @@ int rarch_main_iterate(unsigned *sleep_ms) #ifdef HAVE_MENU if (menu_driver_alive()) { - if (menu_iterate(true, (enum menu_action)menu_input_frame(input, trigger_input)) == -1) + if (menu_driver_iterate(true, (enum menu_action)menu_input_frame(input, trigger_input)) == -1) rarch_ctl(RARCH_ACTION_STATE_MENU_RUNNING_FINISHED, NULL); if (!input && settings->menu.pause_libretro)