Create rarch_main_iterate_quit

This commit is contained in:
twinaphex 2015-01-11 17:33:05 +01:00
parent 90a32b022d
commit b53e8f6437
2 changed files with 41 additions and 18 deletions

View File

@ -59,19 +59,7 @@
**/ **/
int main_entry_decide(signature(), args_type() args) int main_entry_decide(signature(), args_type() args)
{ {
if (rarch_main_iterate() == 0) return rarch_main_iterate();
return 0;
if (g_extern.core_shutdown_initiated
&& g_settings.load_dummy_on_core_shutdown)
{
/* Load dummy core instead of exiting RetroArch completely. */
rarch_main_command(RARCH_CMD_PREPARE_DUMMY);
g_extern.core_shutdown_initiated = false;
return 0;
}
return -1;
} }
/** /**

View File

@ -834,12 +834,39 @@ static bool input_flush(retro_input_t *input)
return true; return true;
} }
/**
* rarch_main_load_dummy_core:
*
* Quits out of RetroArch main loop.
*
* On special case, loads dummy core
* instead of exiting RetroArch completely.
* Aborts core shutdown if invoked.
*
* Returns: -1 if we are about to quit, otherwise 0.
**/
static int rarch_main_iterate_quit(void)
{
if (g_extern.core_shutdown_initiated
&& g_settings.load_dummy_on_core_shutdown)
{
if (!rarch_main_command(RARCH_CMD_PREPARE_DUMMY))
return -1;
g_extern.core_shutdown_initiated = false;
return 0;
}
return -1;
}
/** /**
* rarch_main_iterate: * rarch_main_iterate:
* *
* Run Libretro core in RetroArch for one frame. * Run Libretro core in RetroArch for one frame.
* *
* Returns: 0 on successful run, 1 if we have to wait until button input in order * Returns: 0 on success, 1 if we have to wait until button input in order
* to wake up the loop, -1 if we forcibly quit out of the RetroArch iteration loop. * to wake up the loop, -1 if we forcibly quit out of the RetroArch iteration loop.
**/ **/
int rarch_main_iterate(void) int rarch_main_iterate(void)
@ -850,7 +877,6 @@ int rarch_main_iterate(void)
static retro_input_t last_input = 0; static retro_input_t last_input = 0;
retro_input_t old_input = last_input; retro_input_t old_input = last_input;
retro_input_t input = input_keys_pressed(); retro_input_t input = input_keys_pressed();
last_input = input; last_input = input;
if (driver.flushing_input) if (driver.flushing_input)
@ -859,7 +885,10 @@ int rarch_main_iterate(void)
trigger_input = input & ~old_input; trigger_input = input & ~old_input;
if (time_to_exit(input)) if (time_to_exit(input))
return -1; {
ret = -1;
goto quit;
}
if (g_extern.system.frame_time.callback) if (g_extern.system.frame_time.callback)
update_frame_time(); update_frame_time();
@ -881,7 +910,8 @@ int rarch_main_iterate(void)
if (g_extern.exec) if (g_extern.exec)
{ {
g_extern.exec = false; g_extern.exec = false;
return -1; ret = -1;
goto quit;
} }
if (do_state_checks(input, old_input, trigger_input)) if (do_state_checks(input, old_input, trigger_input))
@ -890,7 +920,8 @@ int rarch_main_iterate(void)
driver.retro_ctx.poll_cb(); driver.retro_ctx.poll_cb();
rarch_sleep(10); rarch_sleep(10);
return 1; ret = 1;
goto quit;
} }
#if defined(HAVE_THREADS) #if defined(HAVE_THREADS)
@ -952,5 +983,9 @@ success:
if (g_settings.fastforward_ratio_throttle_enable) if (g_settings.fastforward_ratio_throttle_enable)
limit_frame_time(); limit_frame_time();
quit:
if (ret == -1)
return rarch_main_iterate_quit();
return ret; return ret;
} }