diff --git a/retroarch.c b/retroarch.c index 0b9b2a52ad..10b934c6ee 100644 --- a/retroarch.c +++ b/retroarch.c @@ -34986,9 +34986,13 @@ static void menu_input_key_event(bool down, unsigned keycode, * If the menu is off, then the menu will be started. */ static void menu_driver_toggle( - struct rarch_state *p_rarch, + video_driver_t *current_video, + void *video_driver_data, menu_handle_t *menu, + menu_input_t *menu_input, settings_t *settings, + bool menu_driver_alive, + bool overlay_alive, retro_keyboard_event_t *key_event, retro_keyboard_event_t *frontend_key_event, bool on) @@ -35010,10 +35014,8 @@ static void menu_driver_toggle( bool input_overlay_hide_in_menu = false; bool input_overlay_enable = false; #endif - bool overlay_alive = false; bool video_adaptive_vsync = false; bool video_swap_interval = false; - menu_input_t *menu_input = &p_rarch->menu_input_state; if (settings) { @@ -35027,18 +35029,11 @@ static void menu_driver_toggle( #ifdef HAVE_OVERLAY input_overlay_hide_in_menu = settings->bools.input_overlay_hide_in_menu; input_overlay_enable = settings->bools.input_overlay_enable; - overlay_alive = p_rarch->overlay_ptr && - p_rarch->overlay_ptr->alive; #endif video_adaptive_vsync = settings->bools.video_adaptive_vsync; video_swap_interval = settings->uints.video_swap_interval; } - if (menu->driver_ctx && menu->driver_ctx->toggle) - menu->driver_ctx->toggle(menu->userdata, on); - - p_rarch->menu_driver_alive = on; - if (on) { #ifdef HAVE_LAKKA @@ -35073,7 +35068,7 @@ static void menu_driver_toggle( #endif } - if (p_rarch->menu_driver_alive) + if (menu_driver_alive) { bool refresh = false; @@ -35085,9 +35080,9 @@ static void menu_driver_toggle( menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); /* Menu should always run with vsync on. */ - if (p_rarch->current_video->set_nonblock_state) - p_rarch->current_video->set_nonblock_state( - p_rarch->video_driver_data, + if (current_video->set_nonblock_state) + current_video->set_nonblock_state( + video_driver_data, false, video_driver_test_all_flags(GFX_CTX_FLAGS_ADAPTIVE_VSYNC) && video_adaptive_vsync, @@ -35159,11 +35154,30 @@ void retroarch_menu_running(void) #ifdef HAVE_MENU menu_handle_t *menu = p_rarch->menu_driver_data; struct menu_state *menu_st = &p_rarch->menu_driver_state; + menu_input_t *menu_input = &p_rarch->menu_input_state; if (menu) - menu_driver_toggle(p_rarch, menu, settings, + { + if (menu->driver_ctx && menu->driver_ctx->toggle) + menu->driver_ctx->toggle(menu->userdata, true); + + p_rarch->menu_driver_alive = true; + menu_driver_toggle( + p_rarch->current_video, + p_rarch->video_driver_data, + menu, + menu_input, + settings, + p_rarch->menu_driver_alive, +#ifdef HAVE_OVERLAY + p_rarch->overlay_ptr && + p_rarch->overlay_ptr->alive, +#else + false, +#endif &runloop_state.key_event, &runloop_state.frontend_key_event, true); + } /* Prevent stray input (for a single frame) */ p_rarch->input_driver_flushing_input = 1; @@ -35204,18 +35218,37 @@ void retroarch_menu_running(void) void retroarch_menu_running_finished(bool quit) { - struct rarch_state *p_rarch = &rarch_st; + struct rarch_state *p_rarch = &rarch_st; #if defined(HAVE_MENU) || defined(HAVE_OVERLAY) - settings_t *settings = p_rarch->configuration_settings; + settings_t *settings = p_rarch->configuration_settings; #endif #ifdef HAVE_MENU - menu_handle_t *menu = p_rarch->menu_driver_data; - struct menu_state *menu_st = &p_rarch->menu_driver_state; + menu_handle_t *menu = p_rarch->menu_driver_data; + struct menu_state *menu_st = &p_rarch->menu_driver_state; + menu_input_t *menu_input = &p_rarch->menu_input_state; if (menu) - menu_driver_toggle(p_rarch, menu, settings, + { + if (menu->driver_ctx && menu->driver_ctx->toggle) + menu->driver_ctx->toggle(menu->userdata, false); + + p_rarch->menu_driver_alive = false; + menu_driver_toggle( + p_rarch->current_video, + p_rarch->video_driver_data, + menu, + menu_input, + settings, + p_rarch->menu_driver_alive, +#ifdef HAVE_OVERLAY + p_rarch->overlay_ptr && + p_rarch->overlay_ptr->alive, +#else + false, +#endif &runloop_state.key_event, &runloop_state.frontend_key_event, false); + } /* Prevent stray input * (for a single frame) */