(Menu) Start undoing passing rgui pointer to every menu-related

function - the only functions where it should actually pass a
pointer instead of just grabbing a pointer from menu.driver should
be in the menu init/deinit functions
This commit is contained in:
twinaphex 2014-05-30 19:33:10 +02:00
parent 0ca79f964f
commit c57f780d9f
7 changed files with 118 additions and 103 deletions

View File

@ -98,7 +98,7 @@ static int main_entry_iterate_clear_input(args_type() args)
(void)args; (void)args;
rarch_input_poll(); rarch_input_poll();
if (!menu_input(driver.menu)) if (!menu_input())
{ {
// Restore libretro keyboard callback. // Restore libretro keyboard callback.
g_extern.system.key_event = key_event; g_extern.system.key_event = key_event;
@ -116,7 +116,7 @@ static int main_entry_iterate_shutdown(args_type() args)
#ifdef HAVE_MENU #ifdef HAVE_MENU
// Load dummy core instead of exiting RetroArch completely. // Load dummy core instead of exiting RetroArch completely.
if (g_settings.load_dummy_on_core_shutdown) if (g_settings.load_dummy_on_core_shutdown)
load_menu_game_prepare_dummy(driver.menu); load_menu_game_prepare_dummy();
else else
#endif #endif
return 1; return 1;
@ -146,9 +146,9 @@ static int main_entry_iterate_content(args_type() args)
static int main_entry_iterate_load_content(args_type() args) static int main_entry_iterate_load_content(args_type() args)
{ {
load_menu_game_prepare(driver.menu); load_menu_game_prepare();
if (load_menu_game(driver.menu)) if (load_menu_game())
{ {
g_extern.lifecycle_state |= (1ULL << MODE_GAME); g_extern.lifecycle_state |= (1ULL << MODE_GAME);
if (driver.video_data && driver.video_poke && driver.video_poke->set_aspect_ratio) if (driver.video_data && driver.video_poke && driver.video_poke->set_aspect_ratio)
@ -342,7 +342,7 @@ returntype main_entry(signature())
// If we started a ROM directly from command line, // If we started a ROM directly from command line,
// push it to ROM history. // push it to ROM history.
if (!g_extern.libretro_dummy) if (!g_extern.libretro_dummy)
menu_rom_history_push_current(driver.menu); menu_rom_history_push_current();
} }
while (!main_entry_iterate(signature_expand(), args)); while (!main_entry_iterate(signature_expand(), args));

View File

@ -56,9 +56,13 @@ static inline struct gfx_shader *shader_manager_get_current_shader(rgui_handle_t
static void menu_common_entries_init(void *data, unsigned menu_type) static void menu_common_entries_init(void *data, unsigned menu_type)
{ {
rgui_handle_t *rgui = (rgui_handle_t*)data;
unsigned i, last; unsigned i, last;
char tmp[256]; char tmp[256];
rgui_handle_t *rgui = (rgui_handle_t*)data;
if (!rgui)
return;
switch (menu_type) switch (menu_type)
{ {
#ifdef HAVE_SHADER_MANAGER #ifdef HAVE_SHADER_MANAGER
@ -447,7 +451,6 @@ static void menu_common_entries_init(void *data, unsigned menu_type)
if (driver.menu_ctx && driver.menu_ctx->populate_entries) if (driver.menu_ctx && driver.menu_ctx->populate_entries)
driver.menu_ctx->populate_entries(rgui, menu_type); driver.menu_ctx->populate_entries(rgui, menu_type);
} }
static int menu_start_screen_iterate(void *data, unsigned action) static int menu_start_screen_iterate(void *data, unsigned action)
@ -735,9 +738,9 @@ static int menu_settings_iterate(void *data, unsigned action)
|| menu_type == RGUI_SETTINGS_SHADER_PARAMETERS || menu_type == RGUI_SETTINGS_SHADER_PARAMETERS
|| menu_type == RGUI_SETTINGS_SHADER_PRESET_PARAMETERS || menu_type == RGUI_SETTINGS_SHADER_PRESET_PARAMETERS
) )
menu_common_entries_init(rgui, menu_type); menu_common_entries_init(driver.menu, menu_type);
else else
menu_common_entries_init(rgui, RGUI_SETTINGS); menu_common_entries_init(driver.menu, RGUI_SETTINGS);
} }
if (rgui) if (rgui)
@ -1168,6 +1171,7 @@ static void menu_parse_and_resolve(void *data, unsigned menu_type)
static int menu_custom_bind_iterate(void *data, unsigned action) static int menu_custom_bind_iterate(void *data, unsigned action)
{ {
rgui_handle_t *rgui = (rgui_handle_t*)data; rgui_handle_t *rgui = (rgui_handle_t*)data;
(void)action; // Have to ignore action here. Only bind that should work here is Quit RetroArch or something like that. (void)action; // Have to ignore action here. Only bind that should work here is Quit RetroArch or something like that.
if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render) if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render)
@ -1249,7 +1253,7 @@ static void menu_common_defer_decision_automatic(void *data)
if (!rgui) if (!rgui)
return; return;
menu_flush_stack_type(rgui, RGUI_SETTINGS); menu_flush_stack_type(RGUI_SETTINGS);
rgui->msg_force = true; rgui->msg_force = true;
} }
@ -1308,9 +1312,9 @@ static int menu_common_iterate(void *data, unsigned action)
else if (menu_type == RGUI_SETTINGS_CUSTOM_VIEWPORT || menu_type == RGUI_SETTINGS_CUSTOM_VIEWPORT_2) else if (menu_type == RGUI_SETTINGS_CUSTOM_VIEWPORT || menu_type == RGUI_SETTINGS_CUSTOM_VIEWPORT_2)
return menu_viewport_iterate(rgui, action); return menu_viewport_iterate(rgui, action);
else if (menu_type == RGUI_SETTINGS_CUSTOM_BIND) else if (menu_type == RGUI_SETTINGS_CUSTOM_BIND)
return menu_custom_bind_iterate(rgui, action); return menu_custom_bind_iterate(driver.menu, action);
else if (menu_type == RGUI_SETTINGS_CUSTOM_BIND_KEYBOARD) else if (menu_type == RGUI_SETTINGS_CUSTOM_BIND_KEYBOARD)
return menu_custom_bind_iterate_keyboard(rgui, action); return menu_custom_bind_iterate_keyboard(driver.menu, action);
if (rgui->need_refresh && action != RGUI_ACTION_MESSAGE) if (rgui->need_refresh && action != RGUI_ACTION_MESSAGE)
action = RGUI_ACTION_NOOP; action = RGUI_ACTION_NOOP;
@ -1414,7 +1418,7 @@ static int menu_common_iterate(void *data, unsigned action)
} }
// Pop stack until we hit shader manager again. // Pop stack until we hit shader manager again.
menu_flush_stack_type(rgui, RGUI_SETTINGS_SHADER_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_SHADER_OPTIONS);
} }
else else
#endif #endif
@ -1423,16 +1427,16 @@ static int menu_common_iterate(void *data, unsigned action)
// FIXME: Add for consoles. // FIXME: Add for consoles.
strlcpy(g_settings.libretro, path, sizeof(g_settings.libretro)); strlcpy(g_settings.libretro, path, sizeof(g_settings.libretro));
strlcpy(g_extern.fullpath, rgui->deferred_path, sizeof(g_extern.fullpath)); strlcpy(g_extern.fullpath, rgui->deferred_path, sizeof(g_extern.fullpath));
load_menu_game_new_core(rgui); load_menu_game_new_core();
rgui->msg_force = true; rgui->msg_force = true;
ret = -1; ret = -1;
menu_flush_stack_type(rgui, RGUI_SETTINGS); menu_flush_stack_type(RGUI_SETTINGS);
} }
else if (menu_type == RGUI_SETTINGS_CORE) else if (menu_type == RGUI_SETTINGS_CORE)
{ {
#if defined(HAVE_DYNAMIC) #if defined(HAVE_DYNAMIC)
fill_pathname_join(g_settings.libretro, dir, path, sizeof(g_settings.libretro)); fill_pathname_join(g_settings.libretro, dir, path, sizeof(g_settings.libretro));
menu_update_system_info(rgui, &rgui->load_no_rom); menu_update_system_info(driver.menu, &rgui->load_no_rom);
// No ROM needed for this core, load game immediately. // No ROM needed for this core, load game immediately.
if (rgui->load_no_rom) if (rgui->load_no_rom)
@ -1459,15 +1463,15 @@ static int menu_common_iterate(void *data, unsigned action)
ret = -1; ret = -1;
#endif #endif
menu_flush_stack_type(rgui, RGUI_SETTINGS); menu_flush_stack_type(RGUI_SETTINGS);
} }
else if (menu_type == RGUI_SETTINGS_CONFIG) else if (menu_type == RGUI_SETTINGS_CONFIG)
{ {
char config[PATH_MAX]; char config[PATH_MAX];
fill_pathname_join(config, dir, path, sizeof(config)); fill_pathname_join(config, dir, path, sizeof(config));
menu_flush_stack_type(rgui, RGUI_SETTINGS); menu_flush_stack_type(RGUI_SETTINGS);
rgui->msg_force = true; rgui->msg_force = true;
if (menu_replace_config(rgui, config)) if (menu_replace_config(config))
{ {
menu_clear_navigation(rgui); menu_clear_navigation(rgui);
ret = -1; ret = -1;
@ -1484,7 +1488,7 @@ static int menu_common_iterate(void *data, unsigned action)
if (!driver.overlay) if (!driver.overlay)
RARCH_ERR("Failed to load overlay.\n"); RARCH_ERR("Failed to load overlay.\n");
menu_flush_stack_type(rgui, RGUI_SETTINGS_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_OPTIONS);
} }
#endif #endif
else if (menu_type == RGUI_SETTINGS_DISK_APPEND) else if (menu_type == RGUI_SETTINGS_DISK_APPEND)
@ -1495,54 +1499,54 @@ static int menu_common_iterate(void *data, unsigned action)
g_extern.lifecycle_state |= 1ULL << MODE_GAME; g_extern.lifecycle_state |= 1ULL << MODE_GAME;
menu_flush_stack_type(rgui, RGUI_SETTINGS); menu_flush_stack_type(RGUI_SETTINGS);
ret = -1; ret = -1;
} }
else if (menu_type == RGUI_SETTINGS_OPEN_HISTORY) else if (menu_type == RGUI_SETTINGS_OPEN_HISTORY)
{ {
load_menu_game_history(rgui, rgui->selection_ptr); load_menu_game_history(rgui->selection_ptr);
menu_flush_stack_type(rgui, RGUI_SETTINGS); menu_flush_stack_type(RGUI_SETTINGS);
ret = -1; ret = -1;
} }
else if (menu_type == RGUI_BROWSER_DIR_PATH) else if (menu_type == RGUI_BROWSER_DIR_PATH)
{ {
strlcpy(g_settings.rgui_content_directory, dir, sizeof(g_settings.rgui_content_directory)); strlcpy(g_settings.rgui_content_directory, dir, sizeof(g_settings.rgui_content_directory));
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_PATH_OPTIONS);
} }
else if (menu_type == RGUI_CONTENT_DIR_PATH) else if (menu_type == RGUI_CONTENT_DIR_PATH)
{ {
strlcpy(g_settings.content_directory, dir, sizeof(g_settings.content_directory)); strlcpy(g_settings.content_directory, dir, sizeof(g_settings.content_directory));
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_PATH_OPTIONS);
} }
else if (menu_type == RGUI_ASSETS_DIR_PATH) else if (menu_type == RGUI_ASSETS_DIR_PATH)
{ {
strlcpy(g_settings.assets_directory, dir, sizeof(g_settings.assets_directory)); strlcpy(g_settings.assets_directory, dir, sizeof(g_settings.assets_directory));
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_PATH_OPTIONS);
} }
#ifdef HAVE_SCREENSHOTS #ifdef HAVE_SCREENSHOTS
else if (menu_type == RGUI_SCREENSHOT_DIR_PATH) else if (menu_type == RGUI_SCREENSHOT_DIR_PATH)
{ {
strlcpy(g_settings.screenshot_directory, dir, sizeof(g_settings.screenshot_directory)); strlcpy(g_settings.screenshot_directory, dir, sizeof(g_settings.screenshot_directory));
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_PATH_OPTIONS);
} }
#endif #endif
else if (menu_type == RGUI_SAVEFILE_DIR_PATH) else if (menu_type == RGUI_SAVEFILE_DIR_PATH)
{ {
strlcpy(g_extern.savefile_dir, dir, sizeof(g_extern.savefile_dir)); strlcpy(g_extern.savefile_dir, dir, sizeof(g_extern.savefile_dir));
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_PATH_OPTIONS);
} }
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
else if (menu_type == RGUI_OVERLAY_DIR_PATH) else if (menu_type == RGUI_OVERLAY_DIR_PATH)
{ {
strlcpy(g_extern.overlay_dir, dir, sizeof(g_extern.overlay_dir)); strlcpy(g_extern.overlay_dir, dir, sizeof(g_extern.overlay_dir));
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_PATH_OPTIONS);
} }
#endif #endif
else if (menu_type == RGUI_SETTINGS_VIDEO_SOFTFILTER) else if (menu_type == RGUI_SETTINGS_VIDEO_SOFTFILTER)
{ {
fill_pathname_join(g_settings.video.filter_path, dir, path, sizeof(g_settings.video.filter_path)); fill_pathname_join(g_settings.video.filter_path, dir, path, sizeof(g_settings.video.filter_path));
menu_reinit_context(rgui); menu_reinit_context(rgui);
menu_flush_stack_type(rgui, RGUI_SETTINGS_VIDEO_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_VIDEO_OPTIONS);
} }
else if (menu_type == RGUI_SETTINGS_AUDIO_DSP_FILTER) else if (menu_type == RGUI_SETTINGS_AUDIO_DSP_FILTER)
{ {
@ -1551,12 +1555,12 @@ static int menu_common_iterate(void *data, unsigned action)
#endif #endif
rarch_deinit_dsp_filter(); rarch_deinit_dsp_filter();
rarch_init_dsp_filter(); rarch_init_dsp_filter();
menu_flush_stack_type(rgui, RGUI_SETTINGS_AUDIO_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_AUDIO_OPTIONS);
} }
else if (menu_type == RGUI_SAVESTATE_DIR_PATH) else if (menu_type == RGUI_SAVESTATE_DIR_PATH)
{ {
strlcpy(g_extern.savestate_dir, dir, sizeof(g_extern.savestate_dir)); strlcpy(g_extern.savestate_dir, dir, sizeof(g_extern.savestate_dir));
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_PATH_OPTIONS);
} }
else if (menu_type == RGUI_LIBRETRO_DIR_PATH) else if (menu_type == RGUI_LIBRETRO_DIR_PATH)
{ {
@ -1564,13 +1568,13 @@ static int menu_common_iterate(void *data, unsigned action)
if (driver.menu_ctx && driver.menu_ctx->init_core_info) if (driver.menu_ctx && driver.menu_ctx->init_core_info)
driver.menu_ctx->init_core_info(rgui); driver.menu_ctx->init_core_info(rgui);
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_PATH_OPTIONS);
} }
#ifdef HAVE_DYNAMIC #ifdef HAVE_DYNAMIC
else if (menu_type == RGUI_CONFIG_DIR_PATH) else if (menu_type == RGUI_CONFIG_DIR_PATH)
{ {
strlcpy(g_settings.rgui_config_directory, dir, sizeof(g_settings.rgui_config_directory)); strlcpy(g_settings.rgui_config_directory, dir, sizeof(g_settings.rgui_config_directory));
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_PATH_OPTIONS);
} }
#endif #endif
else if (menu_type == RGUI_LIBRETRO_INFO_DIR_PATH) else if (menu_type == RGUI_LIBRETRO_INFO_DIR_PATH)
@ -1578,32 +1582,32 @@ static int menu_common_iterate(void *data, unsigned action)
strlcpy(g_settings.libretro_info_path, dir, sizeof(g_settings.libretro_info_path)); strlcpy(g_settings.libretro_info_path, dir, sizeof(g_settings.libretro_info_path));
if (driver.menu_ctx && driver.menu_ctx->init_core_info) if (driver.menu_ctx && driver.menu_ctx->init_core_info)
driver.menu_ctx->init_core_info(rgui); driver.menu_ctx->init_core_info(rgui);
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_PATH_OPTIONS);
} }
else if (menu_type == RGUI_SHADER_DIR_PATH) else if (menu_type == RGUI_SHADER_DIR_PATH)
{ {
strlcpy(g_settings.video.shader_dir, dir, sizeof(g_settings.video.shader_dir)); strlcpy(g_settings.video.shader_dir, dir, sizeof(g_settings.video.shader_dir));
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_PATH_OPTIONS);
} }
else if (menu_type == RGUI_FILTER_DIR_PATH) else if (menu_type == RGUI_FILTER_DIR_PATH)
{ {
strlcpy(g_settings.video.filter_dir, dir, sizeof(g_settings.video.filter_dir)); strlcpy(g_settings.video.filter_dir, dir, sizeof(g_settings.video.filter_dir));
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_PATH_OPTIONS);
} }
else if (menu_type == RGUI_DSP_FILTER_DIR_PATH) else if (menu_type == RGUI_DSP_FILTER_DIR_PATH)
{ {
strlcpy(g_settings.audio.filter_dir, dir, sizeof(g_settings.audio.filter_dir)); strlcpy(g_settings.audio.filter_dir, dir, sizeof(g_settings.audio.filter_dir));
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_PATH_OPTIONS);
} }
else if (menu_type == RGUI_SYSTEM_DIR_PATH) else if (menu_type == RGUI_SYSTEM_DIR_PATH)
{ {
strlcpy(g_settings.system_directory, dir, sizeof(g_settings.system_directory)); strlcpy(g_settings.system_directory, dir, sizeof(g_settings.system_directory));
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_PATH_OPTIONS);
} }
else if (menu_type == RGUI_AUTOCONFIG_DIR_PATH) else if (menu_type == RGUI_AUTOCONFIG_DIR_PATH)
{ {
strlcpy(g_settings.input.autoconfig_dir, dir, sizeof(g_settings.input.autoconfig_dir)); strlcpy(g_settings.input.autoconfig_dir, dir, sizeof(g_settings.input.autoconfig_dir));
menu_flush_stack_type(rgui, RGUI_SETTINGS_PATH_OPTIONS); menu_flush_stack_type(RGUI_SETTINGS_PATH_OPTIONS);
} }
else else
{ {
@ -1613,7 +1617,7 @@ static int menu_common_iterate(void *data, unsigned action)
if (ret == -1) if (ret == -1)
{ {
menu_update_system_info(rgui, &rgui->load_no_rom); menu_update_system_info(driver.menu, &rgui->load_no_rom);
if (driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->defer_decision_automatic) if (driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->defer_decision_automatic)
driver.menu_ctx->backend->defer_decision_automatic(rgui); driver.menu_ctx->backend->defer_decision_automatic(rgui);
} }
@ -1628,7 +1632,7 @@ static int menu_common_iterate(void *data, unsigned action)
fill_pathname_join(g_extern.fullpath, dir, path, sizeof(g_extern.fullpath)); fill_pathname_join(g_extern.fullpath, dir, path, sizeof(g_extern.fullpath));
g_extern.lifecycle_state |= (1ULL << MODE_LOAD_GAME); g_extern.lifecycle_state |= (1ULL << MODE_LOAD_GAME);
menu_flush_stack_type(rgui, RGUI_SETTINGS); menu_flush_stack_type(RGUI_SETTINGS);
rgui->msg_force = true; rgui->msg_force = true;
ret = -1; ret = -1;
} }
@ -1681,10 +1685,11 @@ static int menu_common_iterate(void *data, unsigned action)
static void menu_common_shader_manager_init(void *data) static void menu_common_shader_manager_init(void *data)
{ {
(void)data; rgui_handle_t *rgui = (rgui_handle_t*)data;
if (!rgui)
return;
#ifdef HAVE_SHADER_MANAGER #ifdef HAVE_SHADER_MANAGER
rgui_handle_t *rgui = (rgui_handle_t*)data;
memset(&rgui->shader, 0, sizeof(rgui->shader)); memset(&rgui->shader, 0, sizeof(rgui->shader));
config_file_t *conf = NULL; config_file_t *conf = NULL;
@ -2976,7 +2981,7 @@ static int menu_common_setting_set(void *data, unsigned setting, unsigned action
rgui->binds.last = RGUI_SETTINGS_BIND_LAST; rgui->binds.last = RGUI_SETTINGS_BIND_LAST;
file_list_push(rgui->menu_stack, "", RGUI_SETTINGS_CUSTOM_BIND_KEYBOARD, rgui->selection_ptr); file_list_push(rgui->menu_stack, "", RGUI_SETTINGS_CUSTOM_BIND_KEYBOARD, rgui->selection_ptr);
rgui->binds.timeout_end = rarch_get_time_usec() + RGUI_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000; rgui->binds.timeout_end = rarch_get_time_usec() + RGUI_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000;
input_keyboard_wait_keys(rgui, menu_custom_bind_keyboard_cb); input_keyboard_wait_keys(driver.menu, menu_custom_bind_keyboard_cb);
} }
else else
{ {
@ -3091,7 +3096,7 @@ static int menu_common_setting_set(void *data, unsigned setting, unsigned action
if (rgui->bind_mode_keyboard) if (rgui->bind_mode_keyboard)
{ {
rgui->binds.timeout_end = rarch_get_time_usec() + RGUI_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000; rgui->binds.timeout_end = rarch_get_time_usec() + RGUI_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000;
input_keyboard_wait_keys(rgui, menu_custom_bind_keyboard_cb); input_keyboard_wait_keys(driver.menu, menu_custom_bind_keyboard_cb);
} }
else else
{ {

View File

@ -120,7 +120,7 @@ static int menu_lakka_iterate(void *data, unsigned action)
strlcpy(g_settings.libretro, active_category->libretro, sizeof(g_settings.libretro)); strlcpy(g_settings.libretro, active_category->libretro, sizeof(g_settings.libretro));
#ifdef HAVE_DYNAMIC #ifdef HAVE_DYNAMIC
menu_update_system_info(rgui, &rgui->load_no_rom); menu_update_system_info(&rgui->load_no_rom);
g_extern.lifecycle_state |= (1ULL << MODE_LOAD_GAME); g_extern.lifecycle_state |= (1ULL << MODE_LOAD_GAME);
#else #else
rarch_environment_cb(RETRO_ENVIRONMENT_SET_LIBRETRO_PATH, (void*)g_settings.libretro); rarch_environment_cb(RETRO_ENVIRONMENT_SET_LIBRETRO_PATH, (void*)g_settings.libretro);

View File

@ -99,22 +99,25 @@ int menu_defer_core(void *info_, const char *dir, const char *path, char *deferr
return 0; return 0;
} }
void menu_rom_history_push(void *data, const char *path, void menu_rom_history_push(const char *path,
const char *core_path, const char *core_path,
const char *core_name) const char *core_name)
{ {
rgui_handle_t *rgui = (rgui_handle_t*)data; rgui_handle_t *rgui = (rgui_handle_t*)driver.menu;
if (rgui->history) if (rgui && rgui->history)
rom_history_push(rgui->history, path, core_path, core_name); rom_history_push(rgui->history, path, core_path, core_name);
} }
void menu_rom_history_push_current(void *data) void menu_rom_history_push_current(void)
{ {
// g_extern.fullpath can be relative here. // g_extern.fullpath can be relative here.
// Ensure we're pushing absolute path. // Ensure we're pushing absolute path.
char tmp[PATH_MAX]; char tmp[PATH_MAX];
rgui_handle_t *rgui = (rgui_handle_t*)data; rgui_handle_t *rgui = (rgui_handle_t*)driver.menu;
if (!rgui)
return;
strlcpy(tmp, g_extern.fullpath, sizeof(tmp)); strlcpy(tmp, g_extern.fullpath, sizeof(tmp));
@ -122,14 +125,17 @@ void menu_rom_history_push_current(void *data)
path_resolve_realpath(tmp, sizeof(tmp)); path_resolve_realpath(tmp, sizeof(tmp));
if (g_extern.system.no_game || *tmp) if (g_extern.system.no_game || *tmp)
menu_rom_history_push(rgui, *tmp ? tmp : NULL, menu_rom_history_push(*tmp ? tmp : NULL,
g_settings.libretro, g_settings.libretro,
g_extern.system.info.library_name); g_extern.system.info.library_name);
} }
void load_menu_game_prepare(void *data) void load_menu_game_prepare(void)
{ {
rgui_handle_t *rgui = (rgui_handle_t*)data; rgui_handle_t *rgui = (rgui_handle_t*)driver.menu;
if (!rgui)
return;
if (*g_extern.fullpath || (rgui && rgui->load_no_rom)) if (*g_extern.fullpath || (rgui && rgui->load_no_rom))
{ {
@ -146,12 +152,11 @@ void load_menu_game_prepare(void *data)
#ifdef RARCH_CONSOLE #ifdef RARCH_CONSOLE
if (g_extern.system.no_game || *g_extern.fullpath) if (g_extern.system.no_game || *g_extern.fullpath)
#endif #endif
menu_rom_history_push(rgui, *g_extern.fullpath ? g_extern.fullpath : NULL, menu_rom_history_push(*g_extern.fullpath ? g_extern.fullpath : NULL,
g_settings.libretro, g_settings.libretro,
rgui->info.library_name ? rgui->info.library_name : ""); rgui->info.library_name ? rgui->info.library_name : "");
} }
#ifdef HAVE_MENU
// redraw RGUI frame // redraw RGUI frame
rgui->old_input_state = rgui->trigger_state = 0; rgui->old_input_state = rgui->trigger_state = 0;
rgui->do_held = false; rgui->do_held = false;
@ -159,7 +164,6 @@ void load_menu_game_prepare(void *data)
if (driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->iterate) if (driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->iterate)
driver.menu_ctx->backend->iterate(rgui, RGUI_ACTION_NOOP); driver.menu_ctx->backend->iterate(rgui, RGUI_ACTION_NOOP);
#endif
// Draw frame for loading message // Draw frame for loading message
if (driver.video_data && driver.video_poke && driver.video_poke->set_texture_enable) if (driver.video_data && driver.video_poke && driver.video_poke->set_texture_enable)
@ -173,14 +177,12 @@ void load_menu_game_prepare(void *data)
MENU_TEXTURE_FULLSCREEN); MENU_TEXTURE_FULLSCREEN);
} }
void load_menu_game_history(void *data, unsigned game_index) void load_menu_game_history(unsigned game_index)
{ {
rgui_handle_t *rgui;
const char *path = NULL; const char *path = NULL;
const char *core_path = NULL; const char *core_path = NULL;
const char *core_name = NULL; const char *core_name = NULL;
rgui_handle_t *rgui = (rgui_handle_t*)driver.menu;
rgui = (rgui_handle_t*)data;
if (!rgui) if (!rgui)
return; return;
@ -208,7 +210,10 @@ static void menu_init_history(void *data)
{ {
rgui_handle_t *rgui = (rgui_handle_t*)data; rgui_handle_t *rgui = (rgui_handle_t*)data;
if (rgui && rgui->history) if (!rgui)
return;
if (rgui->history)
{ {
rom_history_free(rgui->history); rom_history_free(rgui->history);
rgui->history = NULL; rgui->history = NULL;
@ -250,9 +255,9 @@ static void menu_update_libretro_info(void *data)
menu_update_system_info(rgui, NULL); menu_update_system_info(rgui, NULL);
} }
void load_menu_game_prepare_dummy(void *data) void load_menu_game_prepare_dummy(void)
{ {
rgui_handle_t *rgui = (rgui_handle_t*)data; rgui_handle_t *rgui = (rgui_handle_t*)driver.menu;
if (!rgui) if (!rgui)
return; return;
@ -266,10 +271,11 @@ void load_menu_game_prepare_dummy(void *data)
g_extern.system.shutdown = false; g_extern.system.shutdown = false;
} }
bool load_menu_game(void *data) bool load_menu_game(void)
{ {
int ret;
struct rarch_main_wrap args = {0}; struct rarch_main_wrap args = {0};
rgui_handle_t *rgui = (rgui_handle_t*)data; rgui_handle_t *rgui = (rgui_handle_t*)driver.menu;
if (!rgui) if (!rgui)
return false; return false;
@ -286,10 +292,12 @@ bool load_menu_game(void *data)
args.rom_path = *g_extern.fullpath ? g_extern.fullpath : NULL; args.rom_path = *g_extern.fullpath ? g_extern.fullpath : NULL;
args.libretro_path = *g_settings.libretro ? g_settings.libretro : NULL; args.libretro_path = *g_settings.libretro ? g_settings.libretro : NULL;
if (rarch_main_init_wrap(&args) != 0) ret = rarch_main_init_wrap(&args);
rgui = (rgui_handle_t*)driver.menu;
if (ret != 0)
{ {
char name[PATH_MAX], msg[PATH_MAX]; char name[PATH_MAX], msg[PATH_MAX];
rgui = (rgui_handle_t*)driver.menu;
fill_pathname_base(name, g_extern.fullpath, sizeof(name)); fill_pathname_base(name, g_extern.fullpath, sizeof(name));
snprintf(msg, sizeof(msg), "Failed to load %s.\n", name); snprintf(msg, sizeof(msg), "Failed to load %s.\n", name);
@ -302,7 +310,7 @@ bool load_menu_game(void *data)
RARCH_LOG("rarch_main_init_wrap() succeeded.\n"); RARCH_LOG("rarch_main_init_wrap() succeeded.\n");
if ((rgui = (rgui_handle_t*)driver.menu)) if (rgui)
{ {
// Update menu state which depends on config. // Update menu state which depends on config.
menu_update_libretro_info(rgui); menu_update_libretro_info(rgui);
@ -419,24 +427,23 @@ void menu_ticker_line(char *buf, size_t len, unsigned index, const char *str, bo
} }
} }
#ifdef HAVE_MENU uint64_t menu_input(void)
uint64_t menu_input(void *data)
{ {
unsigned i; unsigned i;
uint64_t input_state; uint64_t input_state;
rgui_handle_t *rgui;
#ifdef RARCH_CONSOLE #ifdef RARCH_CONSOLE
static const struct retro_keybind *binds[] = { g_settings.input.menu_binds }; static const struct retro_keybind *binds[] = { g_settings.input.menu_binds };
#else #else
static const struct retro_keybind *binds[] = { g_settings.input.binds[0] }; static const struct retro_keybind *binds[] = { g_settings.input.binds[0] };
#endif #endif
rgui_handle_t *rgui = (rgui_handle_t*)driver.menu;
rgui = (rgui_handle_t*)data;
input_state = 0;
if (!rgui) if (!rgui)
return 0; return 0;
input_state = 0;
input_push_analog_dpad((struct retro_keybind*)binds[0], (g_settings.input.analog_dpad_mode[0] == ANALOG_DPAD_NONE) ? ANALOG_DPAD_LSTICK : g_settings.input.analog_dpad_mode[0]); input_push_analog_dpad((struct retro_keybind*)binds[0], (g_settings.input.analog_dpad_mode[0] == ANALOG_DPAD_NONE) ? ANALOG_DPAD_LSTICK : g_settings.input.analog_dpad_mode[0]);
for (i = 0; i < MAX_PLAYERS; i++) for (i = 0; i < MAX_PLAYERS; i++)
input_push_analog_dpad(g_settings.input.autoconf_binds[i], g_settings.input.analog_dpad_mode[i]); input_push_analog_dpad(g_settings.input.autoconf_binds[i], g_settings.input.analog_dpad_mode[i]);
@ -473,6 +480,10 @@ uint64_t menu_input(void *data)
bool menu_custom_bind_keyboard_cb(void *data, unsigned code) bool menu_custom_bind_keyboard_cb(void *data, unsigned code)
{ {
rgui_handle_t *rgui = (rgui_handle_t*)data; rgui_handle_t *rgui = (rgui_handle_t*)data;
if (!rgui)
return false;
rgui->binds.target->key = (enum retro_key)code; rgui->binds.target->key = (enum retro_key)code;
rgui->binds.begin++; rgui->binds.begin++;
rgui->binds.target++; rgui->binds.target++;
@ -480,10 +491,14 @@ bool menu_custom_bind_keyboard_cb(void *data, unsigned code)
return rgui->binds.begin <= rgui->binds.last; return rgui->binds.begin <= rgui->binds.last;
} }
void menu_flush_stack_type(void *data, unsigned final_type) void menu_flush_stack_type(unsigned final_type)
{ {
rgui_handle_t *rgui = (rgui_handle_t*)data;
unsigned type; unsigned type;
rgui_handle_t *rgui = (rgui_handle_t*)driver.menu;
if (!rgui)
return;
type = 0; type = 0;
rgui->need_refresh = true; rgui->need_refresh = true;
file_list_get_last(rgui->menu_stack, NULL, &type); file_list_get_last(rgui->menu_stack, NULL, &type);
@ -494,9 +509,9 @@ void menu_flush_stack_type(void *data, unsigned final_type)
} }
} }
void load_menu_game_new_core(void *data) void load_menu_game_new_core(void)
{ {
rgui_handle_t *rgui = (rgui_handle_t*)data; rgui_handle_t *rgui = (rgui_handle_t*)driver.menu;
if (!rgui) if (!rgui)
return; return;
@ -547,7 +562,7 @@ bool menu_iterate(void *data)
return false; return false;
} }
input_state = menu_input(rgui); input_state = menu_input();
if (rgui->do_held) if (rgui->do_held)
{ {
@ -643,17 +658,17 @@ bool menu_iterate(void *data)
return true; return true;
} }
#endif
// Quite intrusive and error prone. // Quite intrusive and error prone.
// Likely to have lots of small bugs. // Likely to have lots of small bugs.
// Cleanly exit the main loop to ensure that all the tiny details get set properly. // Cleanly exit the main loop to ensure that all the tiny details get set properly.
// This should mitigate most of the smaller bugs. // This should mitigate most of the smaller bugs.
bool menu_replace_config(void *data, const char *path) bool menu_replace_config(const char *path)
{ {
rgui_handle_t *rgui; rgui_handle_t *rgui = (rgui_handle_t*)driver.menu;
rgui = (rgui_handle_t*)data; if (!rgui)
return false;
if (strcmp(path, g_extern.config_path) == 0 || !rgui) if (strcmp(path, g_extern.config_path) == 0 || !rgui)
return false; return false;

View File

@ -192,24 +192,24 @@ void menu_free(void *data);
void menu_ticker_line(char *buf, size_t len, unsigned tick, const char *str, bool selected); void menu_ticker_line(char *buf, size_t len, unsigned tick, const char *str, bool selected);
void load_menu_game_prepare(void *data); void load_menu_game_prepare(void);
void load_menu_game_prepare_dummy(void *data); void load_menu_game_prepare_dummy(void);
bool load_menu_game(void *data); bool load_menu_game(void);
void load_menu_game_history(void *data, unsigned game_index); void load_menu_game_history(unsigned game_index);
extern void load_menu_game_new_core(void *data); extern void load_menu_game_new_core(void);
void menu_rom_history_push(void *data, const char *path, const char *core_path, void menu_rom_history_push(const char *path, const char *core_path,
const char *core_name); const char *core_name);
void menu_rom_history_push_current(void *data); void menu_rom_history_push_current(void);
bool menu_replace_config(void *data, const char *path); bool menu_replace_config(const char *path);
bool menu_save_new_config(void); bool menu_save_new_config(void);
int menu_defer_core(void *data, const char *dir, const char *path, char *deferred_path, size_t sizeof_deferred_path); int menu_defer_core(void *data, const char *dir, const char *path, char *deferred_path, size_t sizeof_deferred_path);
uint64_t menu_input(void *data); uint64_t menu_input(void);
void menu_flush_stack_type(void *data, unsigned final_type); void menu_flush_stack_type(unsigned final_type);
void menu_update_system_info(void *data, bool *load_no_rom); void menu_update_system_info(void *data, bool *load_no_rom);
void menu_build_scroll_indices(void *data, file_list_t *buf); void menu_build_scroll_indices(void *data, file_list_t *buf);

View File

@ -109,12 +109,8 @@ int apple_rarch_load_content(int argc, char* argv[])
if (rarch_main_init(argc, argv)) if (rarch_main_init(argc, argv))
return 1; return 1;
driver.menu = (rgui_handle_t*)menu_init(); if (!g_extern.libretro_dummy)
menu_rom_history_push_current();
rgui = (rgui_handle_t*)driver.menu;
if (!g_extern.libretro_dummy && rgui)
menu_rom_history_push_current(rgui);
g_extern.lifecycle_state |= 1ULL << MODE_GAME; g_extern.lifecycle_state |= 1ULL << MODE_GAME;

View File

@ -45,13 +45,12 @@ int main(int argc, char *argv[])
if ((init_ret = rarch_main_init(argc, argv))) return init_ret; if ((init_ret = rarch_main_init(argc, argv))) return init_ret;
#ifdef HAVE_MENU #ifdef HAVE_MENU
menu_init(driver.menu);
g_extern.lifecycle_state |= 1ULL << MODE_GAME; g_extern.lifecycle_state |= 1ULL << MODE_GAME;
// If we started a ROM directly from command line, // If we started a ROM directly from command line,
// push it to ROM history. // push it to ROM history.
if (!g_extern.libretro_dummy) if (!g_extern.libretro_dummy)
menu_rom_history_push_current(driver.menu); menu_rom_history_push_current();
#endif #endif
emscripten_set_main_loop(emscripten_mainloop, g_settings.video.vsync ? 0 : INT_MAX, 1); emscripten_set_main_loop(emscripten_mainloop, g_settings.video.vsync ? 0 : INT_MAX, 1);