diff --git a/frontend/frontend.c b/frontend/frontend.c index 01932c1727..778e226a63 100644 --- a/frontend/frontend.c +++ b/frontend/frontend.c @@ -69,10 +69,26 @@ #define MAX_ARGS 32 +int (*frontend_loop)(args_type() args); + static retro_keyboard_event_t key_event; +int main_entry_iterate_content(args_type() args) +{ + if (!rarch_main_iterate()) + { + rarch_main_set_state(RARCH_ACTION_STATE_RUNNING_FINISHED); + return 0; + } + + if (driver.frontend_ctx && driver.frontend_ctx->process_events) + driver.frontend_ctx->process_events(args); + + return 0; +} + #ifdef HAVE_MENU -static int main_entry_iterate_clear_input(args_type() args) +int main_entry_iterate_clear_input(args_type() args) { (void)args; @@ -102,21 +118,8 @@ static int main_entry_iterate_shutdown(args_type() args) return 0; } -static int main_entry_iterate_content(args_type() args) -{ - if (!rarch_main_iterate()) - { - rarch_main_set_state(RARCH_ACTION_STATE_RUNNING_FINISHED); - return 0; - } - if (driver.frontend_ctx && driver.frontend_ctx->process_events) - driver.frontend_ctx->process_events(args); - - return 0; -} - -static int main_entry_iterate_load_content(args_type() args) +int main_entry_iterate_load_content(args_type() args) { if (!load_menu_content()) { @@ -131,7 +134,7 @@ static int main_entry_iterate_load_content(args_type() args) return 0; } -static int main_entry_iterate_menu_preinit(args_type() args) +int main_entry_iterate_menu_preinit(args_type() args) { int i; @@ -164,7 +167,7 @@ static int main_entry_iterate_menu_preinit(args_type() args) return 0; } -static int main_entry_iterate_menu(args_type() args) +int main_entry_iterate_menu(args_type() args) { if (menu_iterate()) { @@ -190,18 +193,9 @@ int main_entry_iterate(signature(), args_type() args) { if (g_extern.system.shutdown) return main_entry_iterate_shutdown(args); - if (g_extern.lifecycle_state & (1ULL << MODE_CLEAR_INPUT)) - return main_entry_iterate_clear_input(args); - if (g_extern.lifecycle_state & (1ULL << MODE_LOAD_GAME)) - return main_entry_iterate_load_content(args); - if (g_extern.lifecycle_state & (1ULL << MODE_GAME)) - return main_entry_iterate_content(args); -#ifdef HAVE_MENU - if (g_extern.lifecycle_state & (1ULL << MODE_MENU_PREINIT)) - return main_entry_iterate_menu_preinit(args); - if (g_extern.lifecycle_state & (1ULL << MODE_MENU)) - return main_entry_iterate_menu(args); -#endif + if (frontend_loop) + return frontend_loop(args); + return 1; } #endif diff --git a/frontend/frontend.h b/frontend/frontend.h index babe917f4f..7fa9123ed2 100644 --- a/frontend/frontend.h +++ b/frontend/frontend.h @@ -23,16 +23,6 @@ #include "../boolean.h" #include "frontend_context.h" -#if defined(ANDROID) -#define args_type() struct android_app* -#define signature() void* data -#define returntype void -#else -#define args_type() void* -#define signature() int argc, char *argv[] -#define returntype int -#endif - #ifdef __cplusplus extern "C" { #endif diff --git a/frontend/frontend_context.h b/frontend/frontend_context.h index 21a7d69e4b..5ac6814443 100644 --- a/frontend/frontend_context.h +++ b/frontend/frontend_context.h @@ -24,6 +24,16 @@ #include "../config.h" #endif +#if defined(ANDROID) +#define args_type() struct android_app* +#define signature() void* data +#define returntype void +#else +#define args_type() void* +#define signature() int argc, char *argv[] +#define returntype int +#endif + #ifdef __cplusplus extern "C" { #endif @@ -61,6 +71,17 @@ extern const frontend_ctx_driver_t frontend_ctx_null; const frontend_ctx_driver_t *frontend_ctx_find_driver(const char *ident); // Finds driver with ident. Does not initialize. const frontend_ctx_driver_t *frontend_ctx_init_first(void); // Finds first suitable driver and initializes. +#ifdef HAVE_MENU +int main_entry_iterate_content(args_type() args); +int main_entry_iterate_menu_preinit(args_type() args); +int main_entry_iterate_menu(args_type() args); +int main_entry_iterate_clear_input(args_type() args); +int main_entry_iterate_load_content(args_type() args); +#endif + +extern int (*frontend_loop)(args_type() args); + + #ifdef __cplusplus } #endif diff --git a/retroarch.c b/retroarch.c index 56a54c8f63..2ad462029a 100644 --- a/retroarch.c +++ b/retroarch.c @@ -3303,6 +3303,9 @@ static inline void limit_frame_time(void) void rarch_main_set_state(unsigned cmd) { + + frontend_loop = NULL; + switch (cmd) { case RARCH_ACTION_STATE_MENU_PREINIT: @@ -3346,6 +3349,19 @@ void rarch_main_set_state(unsigned cmd) default: break; } + + if (g_extern.lifecycle_state & (1ULL << MODE_CLEAR_INPUT)) + frontend_loop = main_entry_iterate_clear_input; + else if (g_extern.lifecycle_state & (1ULL << MODE_LOAD_GAME)) + frontend_loop = main_entry_iterate_load_content; + else if (g_extern.lifecycle_state & (1ULL << MODE_GAME)) + frontend_loop = main_entry_iterate_content; +#ifdef HAVE_MENU + else if (g_extern.lifecycle_state & (1ULL << MODE_MENU_PREINIT)) + frontend_loop = main_entry_iterate_menu_preinit; + else if (g_extern.lifecycle_state & (1ULL << MODE_MENU)) + frontend_loop = main_entry_iterate_menu; +#endif } void rarch_main_command(unsigned cmd)