Create RARCH_CTL_IS_INITED, RARCH_CTL_SET_INITED, RARCH_CTL_UNSET_INITED

This commit is contained in:
twinaphex 2016-01-19 23:26:47 +01:00
parent 5643b7d3d8
commit 01d58f8681
12 changed files with 34 additions and 19 deletions

View File

@ -200,7 +200,6 @@ bool main_load_content(int argc, char **argv, void *args,
char *argv_copy [MAX_ARGS] = {NULL}; char *argv_copy [MAX_ARGS] = {NULL};
char **rarch_argv_ptr = (char**)argv; char **rarch_argv_ptr = (char**)argv;
int *rarch_argc_ptr = (int*)&argc; int *rarch_argc_ptr = (int*)&argc;
global_t *global = global_get_ptr();
struct rarch_main_wrap *wrap_args = (struct rarch_main_wrap*) struct rarch_main_wrap *wrap_args = (struct rarch_main_wrap*)
calloc(1, sizeof(*wrap_args)); calloc(1, sizeof(*wrap_args));
@ -224,7 +223,7 @@ bool main_load_content(int argc, char **argv, void *args,
rarch_argc_ptr = (int*)&rarch_argc; rarch_argc_ptr = (int*)&rarch_argc;
} }
if (global->inited.main) if (rarch_ctl(RARCH_CTL_IS_INITED, NULL))
rarch_main_deinit(); rarch_main_deinit();
if ((ret = rarch_main_init(*rarch_argc_ptr, rarch_argv_ptr))) if ((ret = rarch_main_init(*rarch_argc_ptr, rarch_argv_ptr)))

View File

@ -1325,7 +1325,7 @@ static int mui_list_push(void *data, void *userdata,
case DISPLAYLIST_MAIN_MENU: case DISPLAYLIST_MAIN_MENU:
menu_entries_clear(info->list); menu_entries_clear(info->list);
if (global->inited.main && (global->inited.core.type != CORE_TYPE_DUMMY)) if (rarch_ctl(RARCH_CTL_IS_INITED, NULL) && (global->inited.core.type != CORE_TYPE_DUMMY))
menu_displaylist_parse_settings(menu, info, menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_CONTENT_SETTINGS), PARSE_ACTION, false); menu_hash_to_str(MENU_LABEL_CONTENT_SETTINGS), PARSE_ACTION, false);

View File

@ -2568,7 +2568,7 @@ static int xmb_list_push(void *data, void *userdata, menu_displaylist_info_t *in
case DISPLAYLIST_MAIN_MENU: case DISPLAYLIST_MAIN_MENU:
menu_entries_clear(info->list); menu_entries_clear(info->list);
if (global->inited.main && (global->inited.core.type != CORE_TYPE_DUMMY)) if (rarch_ctl(RARCH_CTL_IS_INITED, NULL) && (global->inited.core.type != CORE_TYPE_DUMMY))
menu_displaylist_parse_settings(menu, info, menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_CONTENT_SETTINGS), PARSE_ACTION, false); menu_hash_to_str(MENU_LABEL_CONTENT_SETTINGS), PARSE_ACTION, false);

View File

@ -18,6 +18,7 @@
#include <gfx/math/matrix_4x4.h> #include <gfx/math/matrix_4x4.h>
#include "../../config.def.h" #include "../../config.def.h"
#include "../../content.h"
#include "../../gfx/font_driver.h" #include "../../gfx/font_driver.h"
#include "../../gfx/video_context_driver.h" #include "../../gfx/video_context_driver.h"
#include "../../gfx/d3d/d3d.h" #include "../../gfx/d3d/d3d.h"
@ -199,7 +200,7 @@ static void menu_display_d3d_draw_bg(
menu_display_ctl(MENU_DISPLAY_CTL_SET_VIEWPORT, NULL); menu_display_ctl(MENU_DISPLAY_CTL_SET_VIEWPORT, NULL);
if ((settings->menu.pause_libretro if ((settings->menu.pause_libretro
|| !global->inited.main || (global->inited.core.type == CORE_TYPE_DUMMY)) || !rarch_ctl(RARCH_CTL_IS_INITED, NULL) || (global->inited.core.type == CORE_TYPE_DUMMY))
&& !force_transparency && !force_transparency
&& texture) && texture)
coords.color = (const float*)coord_color2; coords.color = (const float*)coord_color2;

View File

@ -16,6 +16,7 @@
#include <retro_miscellaneous.h> #include <retro_miscellaneous.h>
#include "../../config.def.h" #include "../../config.def.h"
#include "../../retroarch.h"
#include "../../gfx/font_driver.h" #include "../../gfx/font_driver.h"
#include "../../gfx/video_context_driver.h" #include "../../gfx/video_context_driver.h"
#include "../../gfx/video_shader_driver.h" #include "../../gfx/video_shader_driver.h"
@ -165,7 +166,7 @@ static void menu_display_gl_draw_bg(
menu_display_ctl(MENU_DISPLAY_CTL_SET_VIEWPORT, NULL); menu_display_ctl(MENU_DISPLAY_CTL_SET_VIEWPORT, NULL);
if ((settings->menu.pause_libretro if ((settings->menu.pause_libretro
|| !global->inited.main || (global->inited.core.type == CORE_TYPE_DUMMY)) || !rarch_ctl(RARCH_CTL_IS_INITED, NULL) || (global->inited.core.type == CORE_TYPE_DUMMY))
&& !force_transparency && !force_transparency
&& texture) && texture)
coords.color = (const float*)coord_color2; coords.color = (const float*)coord_color2;

View File

@ -21,6 +21,7 @@
#include <formats/image.h> #include <formats/image.h>
#include "../config.def.h" #include "../config.def.h"
#include "../retroarch.h"
#include "../configuration.h" #include "../configuration.h"
#include "../runloop.h" #include "../runloop.h"
#include "../gfx/video_thread_wrapper.h" #include "../gfx/video_thread_wrapper.h"
@ -308,7 +309,7 @@ bool menu_display_ctl(enum menu_display_ctl_state state, void *data)
{ {
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
if (!settings->menu.pause_libretro) if (!settings->menu.pause_libretro)
if (global->inited.main && (global->inited.core.type != CORE_TYPE_DUMMY)) if (rarch_ctl(RARCH_CTL_IS_INITED, NULL) && (global->inited.core.type != CORE_TYPE_DUMMY))
return true; return true;
} }
break; break;

View File

@ -1721,7 +1721,7 @@ static int menu_displaylist_parse_load_content_settings(menu_displaylist_info_t
if (!menu) if (!menu)
return -1; return -1;
if (global->inited.main && (global->inited.core.type != CORE_TYPE_DUMMY)) if (rarch_ctl(RARCH_CTL_IS_INITED, NULL) && (global->inited.core.type != CORE_TYPE_DUMMY))
{ {
rarch_system_info_t *system = NULL; rarch_system_info_t *system = NULL;
@ -1819,7 +1819,7 @@ static int menu_displaylist_parse_horizontal_content_actions(menu_displaylist_in
runloop_ctl(RUNLOOP_CTL_GET_CONTENT_PATH, &fullpath); runloop_ctl(RUNLOOP_CTL_GET_CONTENT_PATH, &fullpath);
if (global->inited.main && (global->inited.core.type != CORE_TYPE_DUMMY) if (rarch_ctl(RARCH_CTL_IS_INITED, NULL) && (global->inited.core.type != CORE_TYPE_DUMMY)
&& !strcmp(menu->deferred_path, fullpath)) && !strcmp(menu->deferred_path, fullpath))
menu_displaylist_parse_load_content_settings(info); menu_displaylist_parse_load_content_settings(info);
else else
@ -2599,7 +2599,7 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type)
info->need_push = true; info->need_push = true;
break; break;
case DISPLAYLIST_MAIN_MENU: case DISPLAYLIST_MAIN_MENU:
if (global->inited.main && (global->inited.core.type != CORE_TYPE_DUMMY)) if (rarch_ctl(RARCH_CTL_IS_INITED, NULL) && (global->inited.core.type != CORE_TYPE_DUMMY))
menu_displaylist_parse_settings(menu, info, menu_displaylist_parse_settings(menu, info,
menu_hash_to_str(MENU_LABEL_CONTENT_SETTINGS), PARSE_ACTION, false); menu_hash_to_str(MENU_LABEL_CONTENT_SETTINGS), PARSE_ACTION, false);

View File

@ -1198,13 +1198,12 @@ int rarch_main_init(int argc, char *argv[])
event_command(EVENT_CMD_SET_PER_GAME_RESOLUTION); event_command(EVENT_CMD_SET_PER_GAME_RESOLUTION);
rarch_ctl(RARCH_CTL_UNSET_ERROR_ON_INIT, NULL); rarch_ctl(RARCH_CTL_UNSET_ERROR_ON_INIT, NULL);
global->inited.main = true; rarch_ctl(RARCH_CTL_SET_INITED, NULL);
return 0; return 0;
error: error:
event_command(EVENT_CMD_CORE_DEINIT); event_command(EVENT_CMD_CORE_DEINIT);
rarch_ctl(RARCH_CTL_UNSET_INITED, NULL);
global->inited.main = false;
return 1; return 1;
} }
@ -1285,6 +1284,7 @@ void rarch_main_init_wrap(const struct rarch_main_wrap *args,
bool rarch_ctl(enum rarch_ctl_state state, void *data) bool rarch_ctl(enum rarch_ctl_state state, void *data)
{ {
static bool rarch_is_inited = false;
static bool rarch_error_on_init = false; static bool rarch_error_on_init = false;
static bool rarch_block_config_read = false; static bool rarch_block_config_read = false;
static bool rarch_force_fullscreen = false; static bool rarch_force_fullscreen = false;
@ -1293,7 +1293,16 @@ bool rarch_ctl(enum rarch_ctl_state state, void *data)
switch(state) switch(state)
{ {
case RARCH_CTL_IS_INITED:
return rarch_is_inited;
case RARCH_CTL_UNSET_INITED:
rarch_is_inited = false;
break;
case RARCH_CTL_SET_INITED:
rarch_is_inited = true;
break;
case RARCH_CTL_DESTROY: case RARCH_CTL_DESTROY:
rarch_is_inited = false;
rarch_error_on_init = false; rarch_error_on_init = false;
rarch_block_config_read = false; rarch_block_config_read = false;
rarch_force_fullscreen = false; rarch_force_fullscreen = false;
@ -1312,7 +1321,7 @@ bool rarch_ctl(enum rarch_ctl_state state, void *data)
bool inited = false; bool inited = false;
if (!global) if (!global)
return false; return false;
inited = global->inited.main; inited = rarch_ctl(RARCH_CTL_IS_INITED, NULL);
if (!inited) if (!inited)
return false; return false;
@ -1522,7 +1531,7 @@ void rarch_main_deinit(void)
event_command(EVENT_CMD_SUBSYSTEM_FULLPATHS_DEINIT); event_command(EVENT_CMD_SUBSYSTEM_FULLPATHS_DEINIT);
event_command(EVENT_CMD_SAVEFILES_DEINIT); event_command(EVENT_CMD_SAVEFILES_DEINIT);
global->inited.main = false; rarch_ctl(RARCH_CTL_UNSET_INITED, NULL);
} }
/** /**

View File

@ -61,6 +61,12 @@ enum rarch_ctl_state
/* Initialize all drivers. */ /* Initialize all drivers. */
RARCH_CTL_INIT, RARCH_CTL_INIT,
RARCH_CTL_UNSET_INITED,
RARCH_CTL_SET_INITED,
RARCH_CTL_IS_INITED,
RARCH_CTL_PREINIT, RARCH_CTL_PREINIT,
RARCH_CTL_DESTROY, RARCH_CTL_DESTROY,

View File

@ -1331,7 +1331,7 @@ int runloop_iterate(unsigned *sleep_ms)
{ {
if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL)) if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL))
{ {
if (global->inited.main && (global->inited.core.type != CORE_TYPE_DUMMY)) if (rarch_ctl(RARCH_CTL_IS_INITED, NULL) && (global->inited.core.type != CORE_TYPE_DUMMY))
rarch_ctl(RARCH_CTL_MENU_RUNNING_FINISHED, NULL); rarch_ctl(RARCH_CTL_MENU_RUNNING_FINISHED, NULL);
} }
else else

View File

@ -284,7 +284,6 @@ typedef struct global
struct struct
{ {
bool main;
struct struct
{ {
enum rarch_core_type type; enum rarch_core_type type;

View File

@ -246,9 +246,8 @@ static void poll_iteration(void)
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{ {
NSApplicationTerminateReply reply = NSTerminateNow; NSApplicationTerminateReply reply = NSTerminateNow;
global_t *global = global_get_ptr();
if (global && global->inited.main) if (rarch_ctl(RARCH_CTL_IS_INITED, NULL))
reply = NSTerminateCancel; reply = NSTerminateCancel;
ui_companion_event_command(EVENT_CMD_QUIT); ui_companion_event_command(EVENT_CMD_QUIT);