diff --git a/menu/menu_animation.h b/menu/menu_animation.h index bec373bc58..6b3a6de69d 100644 --- a/menu/menu_animation.h +++ b/menu/menu_animation.h @@ -131,7 +131,6 @@ bool menu_animation_is_active(struct menu_animation_t *anim); void *menu_animation_init(void); - #ifdef __cplusplus } #endif diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 182d0c34f7..753b12e706 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -1492,15 +1492,10 @@ static int deferred_push_video_shader_parameters_common( } #endif -static void menu_displaylist_realloc_settings(menu_entries_t *entries, unsigned flags) +static void menu_displaylist_realloc_settings(struct menu_entries_t *entries, unsigned flags) { - if (!entries) - return; - - if (entries->list_settings) - menu_setting_free(entries->list_settings); - - entries->list_settings = menu_setting_new(flags); + menu_entries_free_list(entries); + menu_entries_new_list(entries, flags); } static int menu_setting_set_flags(rarch_setting_t *setting) @@ -1535,7 +1530,7 @@ static int menu_displaylist_parse_settings(menu_handle_t *menu, rarch_setting_t *setting = NULL; settings_t *settings = config_get_ptr(); - menu_displaylist_realloc_settings(&menu->entries, setting_flags); + menu_displaylist_realloc_settings(menu->entries, setting_flags); setting = menu_setting_find(info->label); @@ -1599,7 +1594,7 @@ static int menu_displaylist_parse_settings_in_subgroup(menu_displaylist_info_t * } } - menu_displaylist_realloc_settings(&menu->entries, SL_FLAG_ALL_SETTINGS); + menu_displaylist_realloc_settings(menu->entries, SL_FLAG_ALL_SETTINGS); info->setting = menu_setting_find(elem0); @@ -2562,7 +2557,7 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type) #endif break; case DISPLAYLIST_SETTINGS_ALL: - menu_displaylist_realloc_settings(&menu->entries, SL_FLAG_ALL_SETTINGS); + menu_displaylist_realloc_settings(menu->entries, SL_FLAG_ALL_SETTINGS); setting = menu_setting_find(menu_hash_to_str(MENU_LABEL_VALUE_DRIVER_SETTINGS)); diff --git a/menu/menu_driver.h b/menu/menu_driver.h index dd7c3760bf..f917507bdc 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -101,7 +101,7 @@ typedef struct menu_display_t display; /* Menu entries */ - menu_entries_t entries; + struct menu_entries_t *entries; bool load_no_content; diff --git a/menu/menu_entries.c b/menu/menu_entries.c index 2088f5b0bc..dd27a02695 100644 --- a/menu/menu_entries.c +++ b/menu/menu_entries.c @@ -18,18 +18,30 @@ #include "../general.h" -static menu_entries_t *menu_entries_get_ptr(void) +typedef struct menu_entries +{ + /* Flagged when menu entries need to be refreshed */ + bool need_refresh; + bool nonblocking_refresh; + + size_t begin; + menu_list_t *menu_list; + rarch_setting_t *list_settings; + menu_navigation_t navigation; +} menu_entries_t; + +static struct menu_entries *menu_entries_get_ptr(void) { menu_handle_t *menu = menu_driver_get_ptr(); if (!menu) return NULL; - return &menu->entries; + return (struct menu_entries*)menu->entries; } rarch_setting_t *menu_setting_get_ptr(void) { - menu_entries_t *entries = menu_entries_get_ptr(); + struct menu_entries *entries = menu_entries_get_ptr(); if (!entries) return NULL; @@ -38,7 +50,7 @@ rarch_setting_t *menu_setting_get_ptr(void) menu_list_t *menu_list_get_ptr(void) { - menu_entries_t *entries = menu_entries_get_ptr(); + struct menu_entries *entries = menu_entries_get_ptr(); if (!entries) return NULL; return entries->menu_list; @@ -46,7 +58,7 @@ menu_list_t *menu_list_get_ptr(void) menu_navigation_t *menu_navigation_get_ptr(void) { - menu_entries_t *entries = menu_entries_get_ptr(); + struct menu_entries *entries = menu_entries_get_ptr(); if (!entries) return NULL; return &entries->navigation; @@ -55,7 +67,7 @@ menu_navigation_t *menu_navigation_get_ptr(void) /* Sets the starting index of the menu entry list. */ void menu_entries_set_start(size_t i) { - menu_entries_t *entries = menu_entries_get_ptr(); + struct menu_entries *entries = menu_entries_get_ptr(); if (entries) entries->begin = i; @@ -64,7 +76,7 @@ void menu_entries_set_start(size_t i) /* Returns the starting index of the menu entry list. */ size_t menu_entries_get_start(void) { - menu_entries_t *entries = menu_entries_get_ptr(); + struct menu_entries *entries = menu_entries_get_ptr(); if (!entries) return 0; @@ -75,7 +87,7 @@ size_t menu_entries_get_start(void) /* Returns the last index (+1) of the menu entry list. */ size_t menu_entries_get_end(void) { - menu_entries_t *entries = menu_entries_get_ptr(); + struct menu_entries *entries = menu_entries_get_ptr(); return menu_list_get_size(entries->menu_list); } @@ -86,7 +98,7 @@ void menu_entries_get(size_t i, menu_entry_t *entry) const char *path = NULL; const char *entry_label = NULL; menu_file_list_cbs_t *cbs = NULL; - menu_entries_t *entries = menu_entries_get_ptr(); + struct menu_entries *entries = menu_entries_get_ptr(); if (!entries || !entries->menu_list) return; @@ -120,7 +132,7 @@ int menu_entries_get_title(char *s, size_t len) const char *label = NULL; unsigned menu_type = 0; menu_file_list_cbs_t *cbs = NULL; - menu_entries_t *entries = menu_entries_get_ptr(); + struct menu_entries *entries = menu_entries_get_ptr(); if (!entries->menu_list) return -1; @@ -138,7 +150,7 @@ int menu_entries_get_title(char *s, size_t len) * one level deep in the menu hierarchy). */ bool menu_entries_show_back(void) { - menu_entries_t *entries = menu_entries_get_ptr(); + struct menu_entries *entries = menu_entries_get_ptr(); if (!entries->menu_list) return false; @@ -183,7 +195,7 @@ int menu_entries_get_core_title(char *s, size_t len) bool menu_entries_needs_refresh(void) { - menu_entries_t *entries = menu_entries_get_ptr(); + struct menu_entries *entries = menu_entries_get_ptr(); if (!entries || entries->nonblocking_refresh) return false; @@ -194,7 +206,7 @@ bool menu_entries_needs_refresh(void) void menu_entries_set_refresh(bool nonblocking) { - menu_entries_t *entries = menu_entries_get_ptr(); + struct menu_entries *entries = menu_entries_get_ptr(); if (entries) { if (nonblocking) @@ -206,7 +218,7 @@ void menu_entries_set_refresh(bool nonblocking) void menu_entries_unset_refresh(bool nonblocking) { - menu_entries_t *entries = menu_entries_get_ptr(); + struct menu_entries *entries = menu_entries_get_ptr(); if (entries) { if (nonblocking) @@ -218,22 +230,34 @@ void menu_entries_unset_refresh(bool nonblocking) bool menu_entries_init(void *data) { - menu_entries_t *entries = NULL; + struct menu_entries *entries = NULL; menu_handle_t *menu = (menu_handle_t*)data; if (!menu) - return false; + goto error; - entries = &menu->entries; + entries = (struct menu_entries*)calloc(1, sizeof(*entries)); + + if (!entries) + goto error; + + menu->entries = (void*)entries; if (!(entries->menu_list = (menu_list_t*)menu_list_new())) - return false; + goto error; return true; + +error: + if (entries) + free(entries); + if (menu) + menu->entries = NULL; + return false; } void menu_entries_free(void) { - menu_entries_t *entries = menu_entries_get_ptr(); + struct menu_entries *entries = menu_entries_get_ptr(); if (!entries) return; @@ -244,3 +268,18 @@ void menu_entries_free(void) menu_list_free(entries->menu_list); entries->menu_list = NULL; } + +void menu_entries_free_list(struct menu_entries_t *data) +{ + struct menu_entries *entries = (struct menu_entries*)data; + if (entries && entries->list_settings) + menu_setting_free(entries->list_settings); +} + +void menu_entries_new_list(struct menu_entries_t *data, unsigned flags) +{ + struct menu_entries *entries = (struct menu_entries*)data; + if (!entries) + return; + entries->list_settings = menu_setting_new(flags); +} diff --git a/menu/menu_entries.h b/menu/menu_entries.h index 9a241047a2..ac01a2865a 100644 --- a/menu/menu_entries.h +++ b/menu/menu_entries.h @@ -30,17 +30,7 @@ extern "C" { #endif -typedef struct menu_entries -{ - /* Flagged when menu entries need to be refreshed */ - bool need_refresh; - bool nonblocking_refresh; - - size_t begin; - menu_list_t *menu_list; - rarch_setting_t *list_settings; - menu_navigation_t navigation; -} menu_entries_t; +struct menu_entries_t; void menu_entries_set_start(size_t i); @@ -70,6 +60,10 @@ bool menu_entries_init(void *data); void menu_entries_free(void); +void menu_entries_free_list(struct menu_entries_t *data); + +void menu_entries_new_list(struct menu_entries_t *data, unsigned flags); + #ifdef __cplusplus } #endif