aboutsummaryrefslogtreecommitdiff
path: root/menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'menu.c')
-rw-r--r--menu.c43
1 files changed, 37 insertions, 6 deletions
diff --git a/menu.c b/menu.c
index fde7c10..bd00e52 100644
--- a/menu.c
+++ b/menu.c
@@ -8,12 +8,18 @@
#include "scale.h"
#include "util.h"
+#ifdef FUNKEY_S
+#include "funkey/fk_instant_play.h"
+#endif
+
static int drew_alt_bg = 0;
static char cores_path[MAX_PATH];
static struct dirent **corelist = NULL;
static int corelist_len = 0;
+static const char *new_fname = NULL;
+
#define MENU_ALIGN_LEFT 0
#define MENU_X2 0
@@ -306,7 +312,29 @@ static int menu_loop_select_content(int id, int keys) {
if (fname == NULL)
return -1;
- core_unload_content();
+ new_fname = fname;
+
+ return 1;
+}
+
+static void load_new_content(const char *fname) {
+ const struct core_override *override = get_overrides();
+
+ if (!override || override->needs_reopen) {
+#ifdef FUNKEY_S
+ FK_LoadNewGame(fname);
+ /* Does not return */
+#else
+ core_close();
+ core_open(core_path);
+#endif
+ } else {
+#ifdef FUNKEY_S
+ FK_Autosave();
+#endif
+ core_unload();
+ }
+ core_load();
content = content_init(fname);
if (!content) {
@@ -328,7 +356,9 @@ static int menu_loop_select_content(int id, int keys) {
state_resume();
}
- return 1;
+#ifdef FUNKEY_S
+ FK_Resume();
+#endif
}
static int menu_loop_disc(int id, int keys)
@@ -685,7 +715,6 @@ void menu_loop(void)
{
static int sel = 0;
bool needs_disc_ctrl = disc_get_count() > 1;
- const struct core_override *override = get_overrides();
plat_video_menu_enter(1);
@@ -697,9 +726,6 @@ void menu_loop(void)
me_enable(e_menu_main, MA_MAIN_DISC_CTRL, needs_disc_ctrl);
- if (override)
- me_enable(e_menu_main, MA_MAIN_CONTENT_SEL, !override->block_load_content);
-
#ifdef MMENU
if (state_allowed()) {
me_enable(e_menu_main, MA_MAIN_SAVE_STATE, mmenu == NULL);
@@ -712,6 +738,11 @@ void menu_loop(void)
while (in_menu_wait_any(NULL, 50) & (PBTN_MENU|PBTN_MOK|PBTN_MBACK))
;
+ if (new_fname) {
+ load_new_content(new_fname);
+ new_fname = NULL;
+ }
+
/* Force the hud to clear */
plat_video_set_msg(NULL, 0, 0);
plat_video_menu_leave();