diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 1dfde08313..81aa533697 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -863,12 +863,14 @@ static int generic_action_ok(const char *path, case ACTION_OK_LOAD_CORE: flush_char = NULL; flush_type = MENU_SETTINGS; - runloop_ctl(RUNLOOP_CTL_SET_LIBRETRO_PATH, action_path); - if (command_event(CMD_EVENT_LOAD_CORE, NULL)) + + if (task_push_content_load_default(action_path, + NULL, NULL, CORE_TYPE_PLAIN, + CONTENT_MODE_LOAD_NOTHING_WITH_NEW_CORE_FROM_MENU, + NULL, NULL)) { #ifndef HAVE_DYNAMIC - if (frontend_driver_set_fork(FRONTEND_FORK_CORE)) - ret = -1; + ret = -1; #endif } break; diff --git a/tasks/task_content.c b/tasks/task_content.c index 7ffe33ef43..63e6200ee1 100644 --- a/tasks/task_content.c +++ b/tasks/task_content.c @@ -1713,6 +1713,7 @@ bool task_push_content_load_default( /* First we determine if we are loading from a menu */ switch (mode) { + case CONTENT_MODE_LOAD_NOTHING_WITH_NEW_CORE_FROM_MENU: #if defined(HAVE_NETPLAY) && defined(HAVE_NETWORKGAMEPAD) case CONTENT_MODE_LOAD_NOTHING_WITH_NET_RETROPAD_CORE_FROM_MENU: #endif @@ -1782,6 +1783,7 @@ bool task_push_content_load_default( /* Set libretro core path */ switch (mode) { + case CONTENT_MODE_LOAD_NOTHING_WITH_NEW_CORE_FROM_MENU: case CONTENT_MODE_LOAD_CONTENT_WITH_NEW_CORE_FROM_MENU: case CONTENT_MODE_LOAD_CONTENT_WITH_NEW_CORE_FROM_COMPANION_UI: case CONTENT_MODE_LOAD_CONTENT_FROM_PLAYLIST_FROM_MENU: @@ -1822,17 +1824,29 @@ bool task_push_content_load_default( /* Load core */ switch (mode) { + case CONTENT_MODE_LOAD_NOTHING_WITH_NEW_CORE_FROM_MENU: +#ifdef HAVE_DYNAMIC case CONTENT_MODE_LOAD_CONTENT_WITH_NEW_CORE_FROM_MENU: case CONTENT_MODE_LOAD_CONTENT_WITH_NEW_CORE_FROM_COMPANION_UI: case CONTENT_MODE_LOAD_CONTENT_FROM_PLAYLIST_FROM_MENU: -#ifdef HAVE_DYNAMIC - command_event(CMD_EVENT_LOAD_CORE, NULL); #endif + command_event(CMD_EVENT_LOAD_CORE, NULL); break; default: break; } +#ifndef HAVE_DYNAMIC + /* Fork core? */ + switch (mode) + { + default: + if (!frontend_driver_set_fork(FRONTEND_FORK_CORE)) + return false; + break; + } +#endif + /* Preliminary stuff that has to be done before we * load the actual content. Can differ per mode. */ switch (mode) @@ -1898,6 +1912,8 @@ bool task_push_content_load_default( case CONTENT_MODE_LOAD_NOTHING_WITH_NET_RETROPAD_CORE_FROM_MENU: #endif break; + case CONTENT_MODE_LOAD_NOTHING_WITH_NEW_CORE_FROM_MENU: + break; default: #ifdef HAVE_MENU if (type != CORE_TYPE_DUMMY && mode != CONTENT_MODE_LOAD_FROM_CLI) diff --git a/tasks/tasks_internal.h b/tasks/tasks_internal.h index 1c8c7c8d59..4f4d3a9adc 100644 --- a/tasks/tasks_internal.h +++ b/tasks/tasks_internal.h @@ -36,6 +36,7 @@ enum content_mode_load CONTENT_MODE_LOAD_NOTHING_WITH_DUMMY_CORE, CONTENT_MODE_LOAD_FROM_CLI, CONTENT_MODE_LOAD_NOTHING_WITH_CURRENT_CORE_FROM_MENU, + CONTENT_MODE_LOAD_NOTHING_WITH_NEW_CORE_FROM_MENU, CONTENT_MODE_LOAD_NOTHING_WITH_NET_RETROPAD_CORE_FROM_MENU, CONTENT_MODE_LOAD_CONTENT_WITH_CURRENT_CORE_FROM_MENU, CONTENT_MODE_LOAD_CONTENT_WITH_NEW_CORE_FROM_MENU,