diff --git a/menu/menu.c b/menu/menu.c index 0a90cf50df..fd9866d97a 100644 --- a/menu/menu.c +++ b/menu/menu.c @@ -258,6 +258,21 @@ void menu_free(menu_handle_t *menu) free(menu); } +int menu_refresh(void) +{ + menu_handle_t *menu = menu_driver_get_ptr(); + if (!menu->need_refresh) + return -1; + if (menu->nonblocking_refresh) + return -1; + if (menu->input.joypad == MENU_ACTION_MESSAGE) + return -1; + + menu_entry_iterate(MENU_ACTION_REFRESH); + + return 0; +} + /** * menu_iterate: * @input : input sample for this frame @@ -275,7 +290,6 @@ int menu_iterate(retro_input_t input, static retro_time_t last_clock_update = 0; int32_t ret = 0; unsigned action = 0; - runloop_t *runloop = rarch_main_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr(); settings_t *settings = config_get_ptr(); @@ -297,16 +311,8 @@ int menu_iterate(retro_input_t input, action = menu->input.joypad; - if (menu->need_refresh && !menu->nonblocking_refresh && action != MENU_ACTION_MESSAGE) - action = MENU_ACTION_REFRESH; - menu_entry_iterate(action); - if (runloop->is_menu && !runloop->is_idle) - menu_display_fb(); - - menu_driver_set_texture(); - if (ret) return -1; diff --git a/menu/menu.h b/menu/menu.h index 577713391e..9d563fafe1 100644 --- a/menu/menu.h +++ b/menu/menu.h @@ -154,6 +154,8 @@ typedef enum **/ void *menu_init(const void *data); +int menu_refresh(void); + /** * menu_iterate: * @input : input sample for this frame diff --git a/menu/menu_display.c b/menu/menu_display.c index 14d879e1a6..c7fae9277d 100644 --- a/menu/menu_display.c +++ b/menu/menu_display.c @@ -206,3 +206,13 @@ void menu_display_unset_viewport(void) video_driver_set_viewport(global->video_data.width, global->video_data.height, false, true); } + +void menu_display_frame(void) +{ + runloop_t *runloop = rarch_main_get_ptr(); + + if (runloop->is_menu && !runloop->is_idle) + menu_display_fb(); + + menu_driver_set_texture(); +} diff --git a/menu/menu_display.h b/menu/menu_display.h index c80ffd6d9c..8aeb10b6bb 100644 --- a/menu/menu_display.h +++ b/menu/menu_display.h @@ -54,6 +54,8 @@ void menu_display_set_viewport(void); void menu_display_unset_viewport(void); +void menu_display_frame(void); + #ifdef __cplusplus } #endif diff --git a/runloop.c b/runloop.c index 5a68951982..24919fbfdd 100644 --- a/runloop.c +++ b/runloop.c @@ -29,6 +29,7 @@ #ifdef HAVE_MENU #include "menu/menu.h" +#include "menu/menu_display.h" #endif #ifdef HAVE_NETPLAY @@ -1113,15 +1114,20 @@ int rarch_main_iterate(void) rarch_main_data_iterate(); #ifdef HAVE_MENU - if (runloop->is_menu) + if (menu_refresh() == -1) { - menu_handle_t *menu = menu_driver_get_ptr(); - if (menu) + if (runloop->is_menu) + { if (menu_iterate(input, old_input, trigger_input) == -1) rarch_main_set_state(RARCH_ACTION_STATE_MENU_RUNNING_FINISHED); + } + } + if (runloop->is_menu) + { if (!input && settings->menu.pause_libretro) - ret = 1; + ret = 1; + menu_display_frame(); goto success; } #endif