From 783881941a2045da1f851c6d785093a52207139e Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 5 Dec 2015 13:00:45 +0100 Subject: [PATCH] Create menu_driver_ctl --- driver.c | 4 ++-- driver.h | 3 --- frontend/frontend.c | 6 ++++-- menu/menu_driver.c | 21 +++++++++++++++++++++ menu/menu_driver.h | 10 ++++++++++ 5 files changed, 37 insertions(+), 7 deletions(-) diff --git a/driver.c b/driver.c index 69aa0df7b8..46426e8c2a 100644 --- a/driver.c +++ b/driver.c @@ -373,7 +373,7 @@ void init_drivers(int flags) #ifdef HAVE_MENU /* By default, we want the menu to persist through driver reinits. */ - driver->menu_data_own = true; + menu_driver_ctl(RARCH_MENU_CTL_SET_OWN_DRIVER, NULL); #endif if (flags & (DRIVER_VIDEO | DRIVER_AUDIO)) @@ -441,7 +441,7 @@ void uninit_drivers(int flags) { menu_driver_context_destroy(); - if (!driver->menu_data_own) + if (!menu_driver_ctl(RARCH_MENU_CTL_OWNS_DRIVER, NULL)) { menu_free(driver->menu); driver->menu = NULL; diff --git a/driver.h b/driver.h index 1ae61d7ec2..969862fe69 100644 --- a/driver.h +++ b/driver.h @@ -219,9 +219,6 @@ typedef struct driver * set this to true at the end of its 'init' function. */ bool camera_data_own; bool location_data_own; -#ifdef HAVE_MENU - bool menu_data_own; -#endif } driver_t; /** diff --git a/frontend/frontend.c b/frontend/frontend.c index 47e57cca0d..74910142fd 100644 --- a/frontend/frontend.c +++ b/frontend/frontend.c @@ -31,6 +31,9 @@ #include "../runloop.h" #include "../verbosity.h" +#ifdef HAVE_MENU +#include "../menu/menu_driver.h" +#endif #define MAX_ARGS 32 @@ -52,9 +55,8 @@ void main_exit(void *args) if (global->inited.main) { #ifdef HAVE_MENU - driver_t *driver = driver_get_ptr(); /* Do not want menu context to live any more. */ - driver->menu_data_own = false; + menu_driver_ctl(RARCH_MENU_CTL_UNSET_OWN_DRIVER, NULL); #endif rarch_main_deinit(); } diff --git a/menu/menu_driver.c b/menu/menu_driver.c index 54c4f50778..0f5ea2f977 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -373,3 +373,24 @@ int menu_driver_pointer_tap(unsigned x, unsigned y, unsigned ptr, return ret; } + +bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data) +{ + static bool menu_driver_data_own = false; + + switch (state) + { + case RARCH_MENU_CTL_SET_OWN_DRIVER: + menu_driver_data_own = true; + break; + case RARCH_MENU_CTL_UNSET_OWN_DRIVER: + menu_driver_data_own = false; + break; + case RARCH_MENU_CTL_OWNS_DRIVER: + return menu_driver_data_own; + default: + break; + } + + return false; +} diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 466575644e..edb41d7335 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -62,6 +62,14 @@ typedef enum MENU_HELP_LAST } menu_help_type_t; +enum rarch_menu_ctl_state +{ + RARCH_MENU_CTL_NONE = 0, + RARCH_MENU_CTL_SET_OWN_DRIVER, + RARCH_MENU_CTL_UNSET_OWN_DRIVER, + RARCH_MENU_CTL_OWNS_DRIVER +}; + typedef struct { void *userdata; @@ -234,6 +242,8 @@ int menu_driver_pointer_tap(unsigned x, unsigned y, unsigned ptr, /* HACK */ extern unsigned int rdb_entry_start_game_selection_ptr; +bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data); + #ifdef __cplusplus } #endif