diff --git a/menu/menu.c b/menu/menu.c index df5eb35bca..2a92919d09 100644 --- a/menu/menu.c +++ b/menu/menu.c @@ -100,7 +100,7 @@ bool menu_load_content(enum rarch_core_type type) if (disp) disp->msg_force = true; - menu_iterate(MENU_ACTION_NOOP); + menu_iterate(true, MENU_ACTION_NOOP); menu_iterate_main_render(); if (!(main_load_content(0, NULL, NULL, menu_environment_get, diff --git a/menu/menu.h b/menu/menu.h index 04152f3e3a..e04d8fc732 100644 --- a/menu/menu.h +++ b/menu/menu.h @@ -165,13 +165,14 @@ void *menu_init(const void *data); /** * menu_iterate: + * @render_this_frame : Render this frame or not * @action : Associated action for this frame * * Runs RetroArch menu for one frame. * * Returns: 0 on success, -1 if we need to quit out of the loop. **/ -int menu_iterate(unsigned action); +int menu_iterate(bool render_this_frame, unsigned action); int menu_iterate_main_render(void); diff --git a/menu/menu_iterate.c b/menu/menu_iterate.c index a1b8f5538b..53b7eddea3 100644 --- a/menu/menu_iterate.c +++ b/menu/menu_iterate.c @@ -423,7 +423,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(unsigned action) +int menu_iterate(bool render_this_frame, unsigned action) { menu_entry_t entry; enum action_iterate_type iterate_type; @@ -455,13 +455,17 @@ int menu_iterate(unsigned action) iterate_type = action_iterate_type(hash); if (action != MENU_ACTION_NOOP || menu_entries_needs_refresh() || menu_display_update_pending()) - menu->state.fb_is_dirty = true; + { + if (render_this_frame) + menu->state.fb_is_dirty = true; + } switch (iterate_type) { case ITERATE_TYPE_HELP: ret = action_iterate_help(menu->state.msg, sizeof(menu->state.msg), label); - menu->state.do_render = true; + if (render_this_frame) + menu->state.do_render = true; menu->state.pop_selected = NULL; menu->state.do_messagebox = true; menu->state.do_pop_stack = true; @@ -474,17 +478,20 @@ int menu_iterate(unsigned action) menu_list_pop_stack(menu_list); else menu->state.do_messagebox = true; - menu->state.do_render = true; + if (render_this_frame) + menu->state.do_render = true; break; case ITERATE_TYPE_VIEWPORT: ret = action_iterate_menu_viewport(menu->state.msg, sizeof(menu->state.msg), label, action, hash); - menu->state.do_render = true; + if (render_this_frame) + menu->state.do_render = true; menu->state.do_messagebox = true; break; case ITERATE_TYPE_INFO: ret = action_iterate_info(menu->state.msg, sizeof(menu->state.msg), label); menu->state.pop_selected = &nav->selection_ptr; - menu->state.do_render = true; + if (render_this_frame) + menu->state.do_render = true; menu->state.do_messagebox = true; menu->state.do_pop_stack = true; menu->state.do_post_iterate = true; @@ -507,7 +514,8 @@ int menu_iterate(unsigned action) goto end; menu->state.do_post_iterate = true; - menu->state.do_render = true; + if (render_this_frame) + menu->state.do_render = true; /* Have to defer it so we let settings refresh. */ if (menu->push_help_screen) diff --git a/runloop.c b/runloop.c index a68a04b59a..b1eb0d8e4c 100644 --- a/runloop.c +++ b/runloop.c @@ -1039,7 +1039,7 @@ int rarch_main_iterate(void) { menu_handle_t *menu = menu_driver_get_ptr(); if (menu) - if (menu_iterate(menu_input_frame(input, trigger_input)) == -1) + if (menu_iterate(true, menu_input_frame(input, trigger_input)) == -1) rarch_main_set_state(RARCH_ACTION_STATE_MENU_RUNNING_FINISHED); if (!input && settings->menu.pause_libretro) diff --git a/ui/drivers/ui_cocoatouch.m b/ui/drivers/ui_cocoatouch.m index 39143a0162..fe4e3b22a0 100644 --- a/ui/drivers/ui_cocoatouch.m +++ b/ui/drivers/ui_cocoatouch.m @@ -62,6 +62,8 @@ static void rarch_draw(void) bool iterate = iterate_observer && !(rarch_main_is_paused()); int ret = iterate ? rarch_main_iterate() : 0; + if (ret == 0) + menu_iterate(false, MENU_ACTION_NOOP); rarch_main_data_iterate(); if (ret == -1) @@ -478,7 +480,7 @@ static int ui_companion_cocoatouch_iterate(void *data, unsigned action) static int ui_companion_cocoatouch_iterate_menu(void *data, unsigned action) { - menu_iterate(MENU_ACTION_NOOP); + menu_iterate(false, MENU_ACTION_NOOP); rarch_main_set_state(RARCH_ACTION_STATE_MENU_RUNNING_FINISHED); return 0; }