diff --git a/menu/menu_entries.c b/menu/menu_entries.c index 39ee4ee43b..a610504b3e 100644 --- a/menu/menu_entries.c +++ b/menu/menu_entries.c @@ -36,7 +36,6 @@ struct menu_list struct menu_entries { menu_list_t *menu_list; - rarch_setting_t *list_settings; }; typedef struct menu_entries menu_entries_t; @@ -473,9 +472,7 @@ static bool menu_entries_init(void) if (!(entries->menu_list = (menu_list_t*)menu_list_new())) goto error; - entries->list_settings = menu_setting_new(); - - if (!entries->list_settings) + if (!menu_entries_ctl(MENU_ENTRIES_CTL_SETTINGS_INIT, NULL)) goto error; menu_entries_data = (struct menu_entries*)entries; @@ -639,9 +636,10 @@ rarch_setting_t *menu_entries_get_setting(uint32_t i) bool menu_entries_ctl(enum menu_entries_ctl_state state, void *data) { /* Flagged when menu entries need to be refreshed */ - static bool menu_entries_need_refresh = false; - static bool menu_entries_nonblocking_refresh = false; - static size_t menu_entries_begin = 0; + static bool menu_entries_need_refresh = false; + static bool menu_entries_nonblocking_refresh = false; + static size_t menu_entries_begin = 0; + static rarch_setting_t *menu_entries_list_settings = NULL; switch (state) { @@ -649,10 +647,6 @@ bool menu_entries_ctl(enum menu_entries_ctl_state state, void *data) if (!menu_entries_data) return false; - if (menu_entries_data->list_settings) - menu_setting_free(menu_entries_data->list_settings); - menu_entries_data->list_settings = NULL; - menu_list_free(menu_entries_data->menu_list); menu_entries_data->menu_list = NULL; @@ -681,9 +675,20 @@ bool menu_entries_ctl(enum menu_entries_ctl_state state, void *data) rarch_setting_t **settings = (rarch_setting_t**)data; if (!settings || !menu_entries_data) return false; - *settings = menu_entries_data->list_settings; + *settings = menu_entries_list_settings; } return true; + case MENU_ENTRIES_CTL_SETTINGS_DEINIT: + if (menu_entries_list_settings) + menu_setting_free(menu_entries_list_settings); + menu_entries_list_settings = NULL; + return true; + case MENU_ENTRIES_CTL_SETTINGS_INIT: + menu_entries_list_settings = menu_setting_new(); + + if (!menu_entries_list_settings) + return false; + return true; case MENU_ENTRIES_CTL_SET_REFRESH: if (menu_entries_data) { diff --git a/menu/menu_entries.h b/menu/menu_entries.h index 0a32bd87be..1cf36c3728 100644 --- a/menu/menu_entries.h +++ b/menu/menu_entries.h @@ -108,6 +108,8 @@ enum menu_entries_ctl_state MENU_ENTRIES_CTL_INIT, MENU_ENTRIES_CTL_LIST_GET, MENU_ENTRIES_CTL_SETTINGS_GET, + MENU_ENTRIES_CTL_SETTINGS_DEINIT, + MENU_ENTRIES_CTL_SETTINGS_INIT, MENU_ENTRIES_CTL_SET_REFRESH, MENU_ENTRIES_CTL_UNSET_REFRESH, MENU_ENTRIES_CTL_NEEDS_REFRESH,