From ca8e38fa18376f8ab37a941195933f1dddfb50f3 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 24 Mar 2015 14:32:42 +0100 Subject: [PATCH] Add 'Unload Core' option --- menu/menu_entries_cbs_ok.c | 8 ++++++++ retroarch.c | 10 +++++++--- retroarch.h | 1 + settings.c | 7 +++++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/menu/menu_entries_cbs_ok.c b/menu/menu_entries_cbs_ok.c index 09da37dd83..2acff3fe68 100644 --- a/menu/menu_entries_cbs_ok.c +++ b/menu/menu_entries_cbs_ok.c @@ -944,6 +944,12 @@ static int action_ok_disk_cycle_tray_status(const char *path, return generic_action_ok_command(RARCH_CMD_DISK_EJECT_TOGGLE); } +static int action_ok_unload_core(const char *path, + const char *label, unsigned type, size_t idx) +{ + return generic_action_ok_command(RARCH_CMD_UNLOAD_CORE); +} + static int action_ok_quit(const char *path, const char *label, unsigned type, size_t idx) { @@ -1197,6 +1203,8 @@ void menu_entries_cbs_init_bind_ok(menu_file_list_cbs_t *cbs, cbs->action_ok = action_ok_file_load_or_resume; else if (!strcmp(label, "quit_retroarch")) cbs->action_ok = action_ok_quit; + else if (!strcmp(label, "unload_core")) + cbs->action_ok = action_ok_unload_core; else if (!strcmp(label, "save_new_config")) cbs->action_ok = action_ok_save_new_config; else if (!strcmp(label, "help")) diff --git a/retroarch.c b/retroarch.c index 14aa9b4bbd..52d43d5bcc 100644 --- a/retroarch.c +++ b/retroarch.c @@ -1841,12 +1841,13 @@ static void init_system_av_info(void) runloop->frames.limit.last_time = rarch_get_time_usec(); } -static void deinit_core(void) +static void deinit_core(bool reinit) { pretro_unload_game(); pretro_deinit(); - rarch_main_command(RARCH_CMD_DRIVERS_DEINIT); + if (reinit) + rarch_main_command(RARCH_CMD_DRIVERS_DEINIT); uninit_libretro_sym(); } @@ -2394,6 +2395,9 @@ bool rarch_main_command(unsigned cmd) global->system.shutdown = false; } break; + case RARCH_CMD_UNLOAD_CORE: + rarch_main_command(RARCH_CMD_PREPARE_DUMMY); + break; case RARCH_CMD_QUIT: rarch_main_set_state(RARCH_ACTION_STATE_QUIT); break; @@ -2602,7 +2606,7 @@ bool rarch_main_command(unsigned cmd) global->core_info = core_info_list_new(settings->libretro_directory); break; case RARCH_CMD_CORE_DEINIT: - deinit_core(); + deinit_core(true); break; case RARCH_CMD_CORE_INIT: if (!init_core()) diff --git a/retroarch.h b/retroarch.h index 321a9600cf..db0fc91adb 100644 --- a/retroarch.h +++ b/retroarch.h @@ -36,6 +36,7 @@ enum basic_event RARCH_CMD_LOAD_CORE_DEINIT, RARCH_CMD_LOAD_CORE, RARCH_CMD_LOAD_CORE_PERSIST, + RARCH_CMD_UNLOAD_CORE, RARCH_CMD_LOAD_STATE, RARCH_CMD_SAVE_STATE, /* Takes screenshot. */ diff --git a/settings.c b/settings.c index 3a7572ab2f..d9e0ea4a7e 100644 --- a/settings.c +++ b/settings.c @@ -3373,6 +3373,12 @@ static bool setting_append_list_main_menu_options( (*list)[list_info->index - 1].change_handler = load_content_change_handler; settings_data_list_current_add_flags(list, list_info, SD_FLAG_BROWSER_ACTION); + CONFIG_ACTION( + "unload_core", + "Unload Core", + group_info.name, + subgroup_info.name); + settings_list_current_add_cmd(list, list_info, RARCH_CMD_UNLOAD_CORE); CONFIG_ACTION( "core_information", @@ -3482,6 +3488,7 @@ static bool setting_append_list_main_menu_options( group_info.name, subgroup_info.name); + #if !defined(IOS) /* Apple rejects iOS apps that lets you forcibly quit an application. */ CONFIG_ACTION(