diff --git a/command_event.c b/command_event.c index bc17996330..0e21bc0b02 100644 --- a/command_event.c +++ b/command_event.c @@ -1029,7 +1029,7 @@ bool event_command(enum event_command cmd) break; case EVENT_CMD_MENU_TOGGLE: #ifdef HAVE_MENU - if (menu_driver_alive()) + if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL)) rarch_ctl(RARCH_CTL_MENU_RUNNING_FINISHED, NULL); else rarch_ctl(RARCH_CTL_MENU_RUNNING, NULL); @@ -1096,7 +1096,7 @@ bool event_command(enum event_command cmd) #ifdef HAVE_MENU menu_display_ctl(MENU_DISPLAY_CTL_SET_FRAMEBUFFER_DIRTY_FLAG, NULL); - if (menu_driver_alive()) + if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL)) event_command(EVENT_CMD_VIDEO_SET_BLOCKING_STATE); #endif } @@ -1384,7 +1384,7 @@ bool event_command(enum event_command cmd) break; case EVENT_CMD_MENU_PAUSE_LIBRETRO: #ifdef HAVE_MENU - if (menu_driver_alive()) + if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL)) { if (settings->menu.pause_libretro) event_command(EVENT_CMD_AUDIO_STOP); diff --git a/gfx/d3d/d3d.cpp b/gfx/d3d/d3d.cpp index b0be1bd487..634e9c1d70 100644 --- a/gfx/d3d/d3d.cpp +++ b/gfx/d3d/d3d.cpp @@ -1527,7 +1527,7 @@ static bool d3d_frame(void *data, const void *frame, #endif #ifdef HAVE_MENU - if (menu_driver_alive()) + if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL)) menu_driver_frame(); #endif diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 0b4a5ee7a2..02afb85930 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -1790,7 +1790,7 @@ static bool gl_frame(void *data, const void *frame, #if defined(HAVE_MENU) if (gl->menu_texture_enable) { - if (menu_driver_alive()) + if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL)) menu_driver_frame(); if (gl->menu_texture_enable) diff --git a/gfx/drivers/sdl2_gfx.c b/gfx/drivers/sdl2_gfx.c index f31131eb66..e9f1c15291 100644 --- a/gfx/drivers/sdl2_gfx.c +++ b/gfx/drivers/sdl2_gfx.c @@ -522,7 +522,7 @@ static bool sdl2_gfx_frame(void *data, const void *frame, unsigned width, SDL_RenderCopyEx(vid->renderer, vid->frame.tex, NULL, NULL, vid->rotation, NULL, SDL_FLIP_NONE); #ifdef HAVE_MENU - if (menu_driver_alive()) + if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL)) menu_driver_frame(); #endif diff --git a/input/drivers_joypad/ps3_joypad.c b/input/drivers_joypad/ps3_joypad.c index 02a63eb957..0f619ac1a4 100644 --- a/input/drivers_joypad/ps3_joypad.c +++ b/input/drivers_joypad/ps3_joypad.c @@ -183,7 +183,7 @@ static void ps3_joypad_poll(void) *state_cur |= (state_tmp.button[CELL_PAD_BTN_OFFSET_DIGITAL2] & CELL_PAD_CTRL_TRIANGLE) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_X) : 0; *state_cur |= (state_tmp.button[CELL_PAD_BTN_OFFSET_DIGITAL2] & CELL_PAD_CTRL_SQUARE) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_Y) : 0; - if (menu_driver_alive()) + if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL)) { int value = 0; if (cellSysutilGetSystemParamInt(CELL_SYSUTIL_SYSTEMPARAM_ID_ENTER_BUTTON_ASSIGN, &value) == 0) diff --git a/input/input_overlay.c b/input/input_overlay.c index 97e9b05922..a9a922dd69 100644 --- a/input/input_overlay.c +++ b/input/input_overlay.c @@ -542,7 +542,7 @@ static void input_overlay_loaded(void *task_data, void *user_data, const char *e return; /* We can't display when the menu is up */ - if (settings->input.overlay_hide_in_menu && menu_driver_alive()) + if (settings->input.overlay_hide_in_menu && menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL)) { if (!input_driver_ctl(RARCH_INPUT_CTL_IS_OSK_ENABLED, NULL) && settings->input.overlay_enable) diff --git a/menu/drivers/menu_generic.c b/menu/drivers/menu_generic.c index 0d918f0430..4bd5b7e5d4 100644 --- a/menu/drivers/menu_generic.c +++ b/menu/drivers/menu_generic.c @@ -362,7 +362,7 @@ int menu_iterate_render(void) driver->render(); } - if (menu_driver_alive() && !runloop_ctl(RUNLOOP_CTL_IS_IDLE, NULL)) + if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL) && !runloop_ctl(RUNLOOP_CTL_IS_IDLE, NULL)) menu_display_ctl(MENU_DISPLAY_CTL_LIBRETRO, NULL); menu_driver_set_texture(); diff --git a/menu/drivers/rgui.c b/menu/drivers/rgui.c index c73931a9ee..f0002b385e 100644 --- a/menu/drivers/rgui.c +++ b/menu/drivers/rgui.c @@ -443,7 +443,7 @@ static void rgui_render(void) { menu_display_ctl(MENU_DISPLAY_CTL_MSG_FORCE, &msg_force); - if (menu_entries_needs_refresh() && menu_driver_alive() && !msg_force) + if (menu_entries_needs_refresh() && menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL) && !msg_force) return; if (runloop_ctl(RUNLOOP_CTL_IS_IDLE, NULL)) diff --git a/menu/drivers/rmenu.c b/menu/drivers/rmenu.c index 4ea4562007..9aec9db60d 100644 --- a/menu/drivers/rmenu.c +++ b/menu/drivers/rmenu.c @@ -147,7 +147,8 @@ static void rmenu_render(void) menu_display_ctl(MENU_DISPLAY_CTL_MSG_FORCE, &msg_force); - if (menu_entries_needs_refresh() && menu_driver_alive() + if (menu_entries_needs_refresh() + && menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL) && !msg_force) return; diff --git a/menu/drivers/rmenu_xui.cpp b/menu/drivers/rmenu_xui.cpp index 165a26622c..c6ebc5449c 100644 --- a/menu/drivers/rmenu_xui.cpp +++ b/menu/drivers/rmenu_xui.cpp @@ -548,9 +548,9 @@ static void rmenu_xui_render(void) if (!menu) return; if ( - menu_entries_needs_refresh() && - menu_driver_alive() && - !msg_force + menu_entries_needs_refresh() + && menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL) + && !msg_force ) return; diff --git a/menu/menu_driver.c b/menu/menu_driver.c index 5ad7feea6b..b4ea433549 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -44,7 +44,6 @@ static const menu_ctx_driver_t *menu_ctx_drivers[] = { NULL }; -static bool menu_alive = false; static menu_handle_t *menu_driver_data; static const menu_ctx_driver_t *menu_driver_ctx; @@ -268,11 +267,6 @@ void menu_driver_free(menu_handle_t *menu) driver->free(menu); } -bool menu_driver_alive(void) -{ - return menu_alive; -} - int menu_driver_iterate(enum menu_action action) { const menu_ctx_driver_t *driver = menu_ctx_driver_get_ptr(); @@ -292,9 +286,12 @@ void menu_driver_toggle(bool latch) if (menu_driver->toggle) menu_driver->toggle(latch); - menu_alive = latch; + if (latch) + menu_driver_ctl(RARCH_MENU_CTL_SET_ALIVE, NULL); + else + menu_driver_ctl(RARCH_MENU_CTL_UNSET_ALIVE, NULL); - if (menu_alive == true) + if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL)) { menu_entries_set_refresh(false); @@ -373,10 +370,19 @@ int menu_driver_pointer_tap(unsigned x, unsigned y, unsigned ptr, bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data) { + static bool menu_driver_alive = false; static bool menu_driver_data_own = false; switch (state) { + case RARCH_MENU_CTL_SET_ALIVE: + menu_driver_alive = true; + break; + case RARCH_MENU_CTL_UNSET_ALIVE: + menu_driver_alive = false; + break; + case RARCH_MENU_CTL_IS_ALIVE: + return menu_driver_alive; case RARCH_MENU_CTL_SET_OWN_DRIVER: menu_driver_data_own = true; break; diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 38d7e0cfdb..b161ed401f 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -66,6 +66,9 @@ enum rarch_menu_ctl_state { RARCH_MENU_CTL_NONE = 0, RARCH_MENU_CTL_DEINIT, + RARCH_MENU_CTL_SET_ALIVE, + RARCH_MENU_CTL_UNSET_ALIVE, + RARCH_MENU_CTL_IS_ALIVE, RARCH_MENU_CTL_IS_SET_TEXTURE, RARCH_MENU_CTL_SET_OWN_DRIVER, RARCH_MENU_CTL_UNSET_OWN_DRIVER, @@ -222,8 +225,6 @@ const menu_ctx_driver_t *menu_ctx_driver_get_ptr(void); void menu_driver_context_destroy(void); -bool menu_driver_alive(void); - bool menu_driver_list_push(menu_displaylist_info_t *info, unsigned type); size_t menu_driver_list_get_selection(void); diff --git a/runloop.c b/runloop.c index 0f64595f58..999cfc5409 100644 --- a/runloop.c +++ b/runloop.c @@ -1106,7 +1106,7 @@ int rarch_main_iterate(unsigned *sleep_ms) { bool fullscreen_toggled = !runloop_ctl(RUNLOOP_CTL_IS_PAUSED, NULL); #ifdef HAVE_MENU - fullscreen_toggled = fullscreen_toggled || menu_driver_alive(); + fullscreen_toggled = fullscreen_toggled || menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL); #endif if (fullscreen_toggled) @@ -1119,7 +1119,7 @@ int rarch_main_iterate(unsigned *sleep_ms) #ifdef HAVE_MENU if (cmd.menu_pressed || (global->inited.core.type == CORE_TYPE_DUMMY)) { - if (menu_driver_alive()) + if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL)) { if (global->inited.main && (global->inited.core.type != CORE_TYPE_DUMMY)) rarch_ctl(RARCH_CTL_MENU_RUNNING_FINISHED, NULL); @@ -1141,7 +1141,7 @@ int rarch_main_iterate(unsigned *sleep_ms) #ifdef HAVE_MENU - if (menu_driver_alive()) + if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL)) { bool focused = runloop_ctl(RUNLOOP_CTL_CHECK_FOCUS, NULL) && !ui_companion_is_on_foreground(); bool is_idle = runloop_ctl(RUNLOOP_CTL_IS_IDLE, NULL);