diff --git a/menu/menu_defines.h b/menu/menu_defines.h index 8456ee4dc4..a3e09c951b 100644 --- a/menu/menu_defines.h +++ b/menu/menu_defines.h @@ -62,9 +62,6 @@ enum rarch_menu_ctl_state RARCH_MENU_CTL_SET_PREVENT_POPULATE, RARCH_MENU_CTL_UNSET_PREVENT_POPULATE, RARCH_MENU_CTL_IS_PREVENT_POPULATE, - RARCH_MENU_CTL_IS_TOGGLE, - RARCH_MENU_CTL_SET_TOGGLE, - RARCH_MENU_CTL_UNSET_TOGGLE, RARCH_MENU_CTL_SET_OWN_DRIVER, RARCH_MENU_CTL_UNSET_OWN_DRIVER, RARCH_MENU_CTL_OWNS_DRIVER, diff --git a/menu/menu_driver.c b/menu/menu_driver.c index bfc2d03030..6f12d12f8b 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -197,10 +197,6 @@ static bool menu_driver_pending_quick_menu = false; static bool menu_driver_prevent_populate = false; -/* A menu toggle has been requested; if the menu was running, - * it will be closed; if the menu was not running, it will be opened */ -static bool menu_driver_toggled = false; - /* The menu driver owns the userdata */ static bool menu_driver_data_own = false; @@ -1838,110 +1834,6 @@ static bool menu_init(menu_handle_t *menu_data) return true; } -/* This callback gets triggered by the keyboard whenever - * we press or release a keyboard key. When a keyboard - * key is being pressed down, 'down' will be true. If it - * is being released, 'down' will be false. - */ -static void menu_input_key_event(bool down, unsigned keycode, - uint32_t character, uint16_t mod) -{ - (void)down; - (void)keycode; - (void)mod; - -#if 0 - RARCH_LOG("down: %d, keycode: %d, mod: %d, character: %d\n", - down, keycode, mod, character); -#endif - - menu_event_kb_set(down, (enum retro_key)keycode); -} - -/* Gets called when we want to toggle the menu. - * If the menu is already running, it will be turned off. - * If the menu is off, then the menu will be started. - */ -static void menu_driver_toggle(bool on) -{ - retro_keyboard_event_t *key_event = NULL; - retro_keyboard_event_t *frontend_key_event = NULL; - settings_t *settings = config_get_ptr(); - bool pause_libretro = settings ? - settings->bools.menu_pause_libretro : false; - bool enable_menu_sound = settings ? - settings->bools.audio_enable_menu : false; - - menu_driver_toggled = on; - - if (!on) - menu_display_toggle_set_reason(MENU_TOGGLE_REASON_NONE); - - if (menu_driver_ctx && menu_driver_ctx->toggle) - menu_driver_ctx->toggle(menu_userdata, on); - - menu_driver_set_alive(on); - - rarch_ctl(RARCH_CTL_FRONTEND_KEY_EVENT_GET, &frontend_key_event); - rarch_ctl(RARCH_CTL_KEY_EVENT_GET, &key_event); - - if (menu_driver_is_alive()) - { - bool refresh = false; - -#ifdef WIIU - /* Enable burn-in protection menu is running */ - IMEnableDim(); -#endif - - menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); - - /* Menu should always run with vsync on. */ - command_event(CMD_EVENT_VIDEO_SET_BLOCKING_STATE, NULL); - /* Stop all rumbling before entering the menu. */ - command_event(CMD_EVENT_RUMBLE_STOP, NULL); - - if (pause_libretro && !enable_menu_sound) - command_event(CMD_EVENT_AUDIO_STOP, NULL); - - /*if (settings->bools.audio_enable_menu && settings->bools.audio_enable_menu_bgm) - audio_driver_mixer_play_menu_sound_looped(AUDIO_MIXER_SYSTEM_SLOT_BGM);*/ - - /* Override keyboard callback to redirect to menu instead. - * We'll use this later for something ... */ - - if (key_event && frontend_key_event) - { - *frontend_key_event = *key_event; - *key_event = menu_input_key_event; - - rarch_ctl(RARCH_CTL_SET_FRAME_TIME_LAST, NULL); - } - } - else - { -#ifdef WIIU - /* Disable burn-in protection while core is running; this is needed - * because HID inputs don't count for the purpose of Wii U - * power-saving. */ - IMDisableDim(); -#endif - - if (!rarch_ctl(RARCH_CTL_IS_SHUTDOWN, NULL)) - driver_set_nonblock_state(); - - if (pause_libretro && !enable_menu_sound) - command_event(CMD_EVENT_AUDIO_START, NULL); - - /*if (settings->bools.audio_enable_menu && settings->bools.audio_enable_menu_bgm) - audio_driver_mixer_stop_stream(AUDIO_MIXER_SYSTEM_SLOT_BGM);*/ - - /* Restore libretro keyboard callback. */ - if (key_event && frontend_key_event) - *key_event = *frontend_key_event; - } -} - const char *menu_driver_ident(void) { if (!menu_driver_is_alive()) @@ -2288,14 +2180,6 @@ bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data) break; case RARCH_MENU_CTL_IS_PREVENT_POPULATE: return menu_driver_prevent_populate; - case RARCH_MENU_CTL_IS_TOGGLE: - return menu_driver_toggled; - case RARCH_MENU_CTL_SET_TOGGLE: - menu_driver_toggle(true); - break; - case RARCH_MENU_CTL_UNSET_TOGGLE: - menu_driver_toggle(false); - break; case RARCH_MENU_CTL_SET_OWN_DRIVER: menu_driver_data_own = true; break; diff --git a/menu/widgets/menu_dialog.c b/menu/widgets/menu_dialog.c index 9fa2d3a60c..b6fae2d490 100644 --- a/menu/widgets/menu_dialog.c +++ b/menu/widgets/menu_dialog.c @@ -299,7 +299,7 @@ void menu_dialog_show_message( { menu_dialog_current_msg = msg; - if (!menu_driver_ctl(RARCH_MENU_CTL_IS_TOGGLE, NULL)) + if (!menu_driver_is_toggled()) menu_display_toggle_set_reason(MENU_TOGGLE_REASON_MESSAGE); menu_dialog_push_pending(true, type); diff --git a/retroarch.c b/retroarch.c index 9977f8a7a0..2a421efc6d 100644 --- a/retroarch.c +++ b/retroarch.c @@ -926,12 +926,20 @@ static menu_input_t menu_input_state; static bool menu_driver_alive = false; /* Are we binding a button inside the menu? */ static bool menu_driver_is_binding = false; +/* A menu toggle has been requested; if the menu was running, + * it will be closed; if the menu was not running, it will be opened */ +static bool menu_driver_toggled = false; void menu_driver_set_alive(bool val) { menu_driver_alive = val; } +bool menu_driver_is_toggled(void) +{ + return menu_driver_toggled; +} + /* Checks if the menu is still running */ bool menu_driver_is_alive(void) { @@ -947,6 +955,7 @@ void menu_driver_set_binding_state(bool on) { menu_driver_is_binding = on; } + #endif /* RECORDING GLOBAL VARIABLES */ @@ -21700,13 +21709,118 @@ static bool retroarch_is_on_main_thread(void) } #endif +/* This callback gets triggered by the keyboard whenever + * we press or release a keyboard key. When a keyboard + * key is being pressed down, 'down' will be true. If it + * is being released, 'down' will be false. + */ +static void menu_input_key_event(bool down, unsigned keycode, + uint32_t character, uint16_t mod) +{ + (void)down; + (void)keycode; + (void)mod; + +#if 0 + RARCH_LOG("down: %d, keycode: %d, mod: %d, character: %d\n", + down, keycode, mod, character); +#endif + + menu_event_kb_set(down, (enum retro_key)keycode); +} + +/* Gets called when we want to toggle the menu. + * If the menu is already running, it will be turned off. + * If the menu is off, then the menu will be started. + */ +void menu_driver_toggle(bool on) +{ + retro_keyboard_event_t *key_event = &runloop_key_event; + retro_keyboard_event_t *frontend_key_event = &runloop_frontend_key_event; + settings_t *settings = configuration_settings; + bool pause_libretro = settings ? + settings->bools.menu_pause_libretro : false; + bool enable_menu_sound = settings ? + settings->bools.audio_enable_menu : false; + menu_handle_t *menu_data = menu_driver_get_ptr(); + + if (!menu_data) + return; + + menu_driver_toggled = on; + + if (!on) + menu_display_toggle_set_reason(MENU_TOGGLE_REASON_NONE); + + if (menu_data->driver_ctx && menu_data->driver_ctx->toggle) + menu_data->driver_ctx->toggle(menu_data->userdata, on); + + menu_driver_alive = on; + + if (menu_driver_alive) + { + bool refresh = false; + +#ifdef WIIU + /* Enable burn-in protection menu is running */ + IMEnableDim(); +#endif + + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); + + /* Menu should always run with vsync on. */ + command_event(CMD_EVENT_VIDEO_SET_BLOCKING_STATE, NULL); + /* Stop all rumbling before entering the menu. */ + command_event(CMD_EVENT_RUMBLE_STOP, NULL); + + if (pause_libretro && !enable_menu_sound) + command_event(CMD_EVENT_AUDIO_STOP, NULL); + + /*if (settings->bools.audio_enable_menu && settings->bools.audio_enable_menu_bgm) + audio_driver_mixer_play_menu_sound_looped(AUDIO_MIXER_SYSTEM_SLOT_BGM);*/ + + /* Override keyboard callback to redirect to menu instead. + * We'll use this later for something ... */ + + if (key_event && frontend_key_event) + { + *frontend_key_event = *key_event; + *key_event = menu_input_key_event; + + runloop_frame_time_last = 0; + } + } + else + { +#ifdef WIIU + /* Disable burn-in protection while core is running; this is needed + * because HID inputs don't count for the purpose of Wii U + * power-saving. */ + IMDisableDim(); +#endif + + if (!runloop_shutdown_initiated) + driver_set_nonblock_state(); + + if (pause_libretro && !enable_menu_sound) + command_event(CMD_EVENT_AUDIO_START, NULL); + + /*if (settings->bools.audio_enable_menu && settings->bools.audio_enable_menu_bgm) + audio_driver_mixer_stop_stream(AUDIO_MIXER_SYSTEM_SLOT_BGM);*/ + + /* Restore libretro keyboard callback. */ + if (key_event && frontend_key_event) + *key_event = *frontend_key_event; + } +} + void retroarch_menu_running(void) { #if defined(HAVE_MENU) || defined(HAVE_OVERLAY) - settings_t *settings = configuration_settings; + settings_t *settings = configuration_settings; #endif #ifdef HAVE_MENU - menu_driver_ctl(RARCH_MENU_CTL_SET_TOGGLE, NULL); + menu_driver_toggled = true; /* Prevent stray input */ input_driver_flushing_input = true; @@ -21717,6 +21831,7 @@ void retroarch_menu_running(void) audio_driver_mixer_play_menu_sound_looped(AUDIO_MIXER_SYSTEM_SLOT_BGM); #endif #endif + #ifdef HAVE_OVERLAY if (settings->bools.input_overlay_hide_in_menu) command_event(CMD_EVENT_OVERLAY_DEINIT, NULL); @@ -21729,7 +21844,7 @@ void retroarch_menu_running_finished(bool quit) settings_t *settings = configuration_settings; #endif #ifdef HAVE_MENU - menu_driver_ctl(RARCH_MENU_CTL_UNSET_TOGGLE, NULL); + menu_driver_toggled = false; /* Prevent stray input */ input_driver_flushing_input = true; @@ -22288,24 +22403,6 @@ bool rarch_ctl(enum rarch_ctl_state state, void *data) } break; - case RARCH_CTL_KEY_EVENT_GET: - { - retro_keyboard_event_t **key_event = - (retro_keyboard_event_t**)data; - if (!key_event) - return false; - *key_event = &runloop_key_event; - } - break; - case RARCH_CTL_FRONTEND_KEY_EVENT_GET: - { - retro_keyboard_event_t **key_event = - (retro_keyboard_event_t**)data; - if (!key_event) - return false; - *key_event = &runloop_frontend_key_event; - } - break; case RARCH_CTL_NONE: default: return false; diff --git a/retroarch.h b/retroarch.h index 470ab594f1..c0d6942c0f 100644 --- a/retroarch.h +++ b/retroarch.h @@ -146,8 +146,6 @@ enum rarch_ctl_state RARCH_CTL_IS_PERFCNT_ENABLE, /* Key event */ - RARCH_CTL_FRONTEND_KEY_EVENT_GET, - RARCH_CTL_KEY_EVENT_GET, RARCH_CTL_DATA_DEINIT, /* Core options */ @@ -2107,6 +2105,12 @@ bool menu_driver_is_binding_state(void); void menu_driver_set_binding_state(bool on); +bool menu_driver_is_toggled(void); + +bool menu_driver_is_toggled(void); + +void menu_driver_toggle(bool on); + RETRO_END_DECLS