diff --git a/driver.c b/driver.c index 0558a4ddf5..b7024289d2 100644 --- a/driver.c +++ b/driver.c @@ -311,8 +311,7 @@ void drivers_init(int flags) #ifdef HAVE_MENU /* By default, we want the menu to persist through driver reinits. */ - if (flags & DRIVER_MENU_MASK) - menu_driver_ctl(RARCH_MENU_CTL_SET_OWN_DRIVER, NULL); + menu_driver_ctl(RARCH_MENU_CTL_SET_OWN_DRIVER, NULL); #endif if (flags & (DRIVER_VIDEO_MASK | DRIVER_AUDIO_MASK)) @@ -397,7 +396,7 @@ static void uninit_drivers(int flags) core_info_free_current_core(); #ifdef HAVE_MENU - if (flags & DRIVER_MENU_MASK && !menu_driver_ctl(RARCH_MENU_CTL_OWNS_DRIVER, NULL)) + if (flags & DRIVER_MENU_MASK) menu_driver_ctl(RARCH_MENU_CTL_DEINIT, NULL); #endif diff --git a/menu/menu_driver.c b/menu/menu_driver.c index ba2360da22..6360e388c2 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -322,6 +322,25 @@ void menu_driver_frame(video_frame_info_t *video_info) menu_driver_ctx->frame(menu_userdata, video_info); } +/** + * menu_update_libretro_info: + * + * Update menu state which depends on config. + **/ +static void menu_update_libretro_info(void) +{ + struct retro_system_info *info = NULL; + + menu_driver_ctl(RARCH_MENU_CTL_SYSTEM_INFO_GET, + &info); + + if (!info) + return; + + command_event(CMD_EVENT_CORE_INFO_INIT, NULL); + command_event(CMD_EVENT_LOAD_CORE_PERSIST, NULL); +} + bool menu_driver_render(bool is_idle, bool rarch_is_inited, bool rarch_is_dummy_core) { @@ -447,9 +466,9 @@ static bool menu_driver_context_reset(bool video_is_threaded) static bool menu_driver_init_internal(bool video_is_threaded) { settings_t *settings = config_get_ptr(); - - command_event(CMD_EVENT_CORE_INFO_INIT, NULL); - command_event(CMD_EVENT_LOAD_CORE_PERSIST, NULL); + menu_update_libretro_info(); + if (menu_driver_data) + return true; menu_driver_data = (menu_handle_t*) menu_driver_ctx->init(&menu_userdata, video_is_threaded);