diff --git a/menu/menu.c b/menu/menu.c index 110c1a0b9c..0ee1a17010 100644 --- a/menu/menu.c +++ b/menu/menu.c @@ -197,6 +197,8 @@ void menu_free(menu_handle_t *menu) menu_shader_free(menu); + menu_input_free(menu); + menu_driver_free(menu); #ifdef HAVE_DYNAMIC @@ -240,6 +242,9 @@ void *menu_init(const void *data) if (!(menu = (menu_handle_t*)menu_ctx->init())) return NULL; + if (!menu_input_init(menu)) + goto error; + strlcpy(settings->menu.driver, menu_ctx->ident, sizeof(settings->menu.driver)); diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 36825d49d7..a6f4ada8a7 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -110,7 +110,7 @@ typedef struct char default_cgp[PATH_MAX_LENGTH]; struct video_shader *shader; - menu_input_t input; + void *input; content_playlist_t *playlist; char db_playlist_file[PATH_MAX_LENGTH]; diff --git a/menu/menu_input.c b/menu/menu_input.c index 10b7b609f8..957a9abd3e 100644 --- a/menu/menu_input.c +++ b/menu/menu_input.c @@ -46,7 +46,7 @@ menu_input_t *menu_input_get_ptr(void) menu_handle_t *menu = menu_driver_get_ptr(); if (!menu) return NULL; - return &menu->input; + return menu->input; } void menu_input_key_event(bool down, unsigned keycode, @@ -1152,3 +1152,30 @@ unsigned menu_input_frame(retro_input_t input, retro_input_t trigger_input) return ret; } + +void menu_input_free(void *data) +{ + menu_handle_t *menu = (menu_handle_t*)data; + + if (!menu) + return; + + if (menu->input) + free(menu->input); + menu->input = NULL; +} + +bool menu_input_init(void *data) +{ + menu_handle_t *menu = (menu_handle_t*)data; + + if (!menu) + return false; + + menu->input = (menu_input_t*)calloc(1, sizeof(*menu->input)); + + if (!menu->input) + return false; + + return true; +} diff --git a/menu/menu_input.h b/menu/menu_input.h index 677ebc6ccc..b84b7e9c60 100644 --- a/menu/menu_input.h +++ b/menu/menu_input.h @@ -235,6 +235,10 @@ bool menu_input_ctl(enum menu_ctl_state state, void *data); menu_input_t *menu_input_get_ptr(void); +void menu_input_free(void *data); + +bool menu_input_init(void *data); + #ifdef __cplusplus } #endif