Maintain two rarch_setting_t * lists in driver.menu - one

for main menu and the other for settings menu - regenerate these
when needed
This commit is contained in:
twinaphex 2014-10-09 00:50:35 +02:00
parent 1fe95bdafb
commit e5ab079298
12 changed files with 49 additions and 110 deletions

View File

@ -67,8 +67,7 @@ static int menu_info_screen_iterate(unsigned action)
char needle[PATH_MAX];
unsigned info_type = 0;
rarch_setting_t *current_setting = NULL;
rarch_setting_t *setting_data = (rarch_setting_t *)
setting_data_get_list(SL_FLAG_ALL_SETTINGS, false);
rarch_setting_t *setting_data = (rarch_setting_t *)driver.menu->list_settings;
file_list_t *list = (file_list_t*)driver.menu->selection_buf;
if (!driver.menu || !setting_data)
@ -79,15 +78,14 @@ static int menu_info_screen_iterate(unsigned action)
current_setting = (rarch_setting_t*)menu_entries_get_last_setting(
list->list[driver.menu->selection_ptr].label,
driver.menu->selection_ptr,
setting_data_get_list(SL_FLAG_ALL_SETTINGS, false));
driver.menu->selection_ptr, driver.menu->list_settings);
if (current_setting)
strlcpy(needle, current_setting->name, sizeof(needle));
else if ((current_setting = (rarch_setting_t*)menu_entries_get_last_setting(
list->list[driver.menu->selection_ptr].label,
driver.menu->selection_ptr,
setting_data_get_mainmenu(true))))
driver.menu->list_mainmenu)))
{
if (current_setting)
strlcpy(needle, current_setting->name, sizeof(needle));
@ -767,8 +765,7 @@ static int menu_action_ok(const char *menu_path,
const char *label = NULL;
const char *path = NULL;
unsigned type = 0;
rarch_setting_t *setting_data = (rarch_setting_t *)
setting_data_get_list(SL_FLAG_ALL_SETTINGS, false);
rarch_setting_t *setting_data = (rarch_setting_t *)driver.menu->list_settings;
rarch_setting_t *setting = (rarch_setting_t*)
setting_data_find_setting(setting_data, menu_label);

View File

@ -246,7 +246,7 @@ static void glui_frame(void)
file_list_get_at_offset(driver.menu->selection_buf, i, &path,
&entry_label, &type);
rarch_setting_t *setting = (rarch_setting_t*)setting_data_find_setting(
setting_data_get_list(SL_FLAG_ALL_SETTINGS, false),
driver.menu->list_settings,
driver.menu->selection_buf->list[i].label);
(void)setting;

View File

@ -801,8 +801,7 @@ static void lakka_context_destroy(void *data)
void lakka_init_settings(void)
{
rarch_setting_t *setting_data = (rarch_setting_t*)
setting_data_get_list(SL_FLAG_ALL_SETTINGS, false);
rarch_setting_t *setting_data = (rarch_setting_t*)driver.menu->list_settings;
menu_category_t *category = (menu_category_t*)&categories[0];
strlcpy(category->name, "Settings", sizeof(category->name));

View File

@ -356,7 +356,7 @@ static void rgui_render(void)
file_list_get_at_offset(driver.menu->selection_buf, i, &path,
&entry_label, &type);
rarch_setting_t *setting = (rarch_setting_t*)setting_data_find_setting(
setting_data_get_list(SL_FLAG_ALL_SETTINGS, false),
driver.menu->list_settings,
driver.menu->selection_buf->list[i].label);
(void)setting;

View File

@ -392,9 +392,7 @@ int menu_action_setting_set(unsigned id, const char *label,
rarch_setting_t *setting = (rarch_setting_t*)menu_entries_get_last_setting(
list->list[driver.menu->selection_ptr].label,
driver.menu->selection_ptr,
setting_data_get_list(SL_FLAG_ALL_SETTINGS, false)
);
driver.menu->selection_ptr, driver.menu->list_settings);
if (setting)
return menu_action_handle_setting(setting, id, label, action);
@ -403,9 +401,7 @@ int menu_action_setting_set(unsigned id, const char *label,
setting = (rarch_setting_t*)menu_entries_get_last_setting(
list->list[driver.menu->selection_ptr].label,
driver.menu->selection_ptr,
setting_data_get_mainmenu(true)
);
driver.menu->selection_ptr, driver.menu->list_mainmenu);
if (setting)
{

View File

@ -171,8 +171,12 @@ void *menu_init(const void *data)
void menu_free_list(void *data)
{
(void)data;
menu_handle_t *menu = (menu_handle_t*)data;
if (!menu)
return;
settings_list_free(menu->list_mainmenu);
settings_list_free(menu->list_settings);
}
void menu_init_list(void *data)
@ -181,6 +185,9 @@ void menu_init_list(void *data)
if (!menu)
return;
menu->list_mainmenu = setting_data_get_list(SL_FLAG_MAIN_MENU);
menu->list_settings = setting_data_get_list(SL_FLAG_ALL_SETTINGS);
file_list_push(menu->menu_stack, "", "mainmenu", MENU_SETTINGS, 0);
menu_clear_navigation(menu);
menu_entries_push_list(menu, menu->selection_buf,

View File

@ -21,7 +21,7 @@
#include <stdint.h>
#include "../../boolean.h"
#include "../../file_list.h"
#include "../../settings_list.h"
#ifdef __cplusplus
extern "C" {
@ -123,6 +123,9 @@ typedef struct
} keyboard;
bool bind_mode_keyboard;
rarch_setting_t *list_mainmenu;
rarch_setting_t *list_settings;
} menu_handle_t;
#ifdef __cplusplus

View File

@ -168,8 +168,6 @@ int menu_entries_push_list(menu_handle_t *menu,
unsigned i;
char tmp[256];
size_t list_size = 0;
rarch_setting_t *setting_data = (rarch_setting_t *)
setting_data_get_list(SL_FLAG_ALL_SETTINGS, true);
bool do_action = false;
#if 0
@ -180,9 +178,10 @@ int menu_entries_push_list(menu_handle_t *menu,
if (!strcmp(label, "mainmenu"))
{
rarch_setting_t *setting;
setting_data = (rarch_setting_t *)setting_data_get_mainmenu(true);
setting = (rarch_setting_t*)setting_data_find_setting(setting_data, "Main Menu");
settings_list_free(menu->list_mainmenu);
menu->list_mainmenu = (rarch_setting_t *)
setting_data_get_list(SL_FLAG_MAIN_MENU);
rarch_setting_t *setting = (rarch_setting_t*)setting_data_find_setting(menu->list_mainmenu, "Main Menu");
file_list_clear(list);
@ -201,7 +200,10 @@ int menu_entries_push_list(menu_handle_t *menu,
}
else if (menu_type == MENU_FILE_CATEGORY)
{
rarch_setting_t *setting = (rarch_setting_t*)setting_data_find_setting(setting_data,
settings_list_free(menu->list_settings);
menu->list_settings = (rarch_setting_t *)
setting_data_get_list(SL_FLAG_ALL_SETTINGS);
rarch_setting_t *setting = (rarch_setting_t*)setting_data_find_setting(menu->list_settings,
label);
file_list_clear(list);
@ -231,7 +233,10 @@ int menu_entries_push_list(menu_handle_t *menu,
}
else if (!strcmp(label, "settings"))
{
rarch_setting_t *setting = (rarch_setting_t*)setting_data_find_setting(setting_data,
settings_list_free(menu->list_settings);
menu->list_settings = (rarch_setting_t *)
setting_data_get_list(SL_FLAG_ALL_SETTINGS);
rarch_setting_t *setting = (rarch_setting_t*)setting_data_find_setting(menu->list_settings,
"Driver Options");
file_list_clear(list);
@ -423,6 +428,10 @@ int menu_entries_push_list(menu_handle_t *menu,
}
else if (!strcmp(label, "Input Options"))
{
rarch_setting_t *setting_data = (rarch_setting_t*)menu->list_settings;
settings_list_free(setting_data);
setting_data = (rarch_setting_t *)
setting_data_get_list(SL_FLAG_ALL_SETTINGS);
file_list_clear(list);
file_list_push(list, "Player", "input_bind_player_no", 0, 0);
file_list_push(list, "Device", "input_bind_device_id", 0, 0);

View File

@ -72,14 +72,12 @@ void st_uint_callback(void *userdata, const char *str)
{
menu_handle_t *menu = (menu_handle_t*)userdata;
rarch_setting_t *current_setting = NULL;
rarch_setting_t *setting_data = (rarch_setting_t *)
setting_data_get_list(SL_FLAG_ALL_SETTINGS, false);
if (str && *str && setting_data)
if (str && *str)
{
if ((current_setting = (rarch_setting_t*)
setting_data_find_setting(
setting_data, menu->keyboard.label_setting)))
menu->list_settings, menu->keyboard.label_setting)))
*current_setting->value.unsigned_integer = strtoul(str, NULL, 0);
}
menu_key_end_line(menu);
@ -89,14 +87,12 @@ void st_string_callback(void *userdata, const char *str)
{
menu_handle_t *menu = (menu_handle_t*)userdata;
rarch_setting_t *current_setting = NULL;
rarch_setting_t *setting_data = (rarch_setting_t *)
setting_data_get_list(SL_FLAG_ALL_SETTINGS, false);
if (str && *str && setting_data)
if (str && *str)
{
if ((current_setting = (rarch_setting_t*)
setting_data_find_setting(
setting_data, menu->keyboard.label_setting)))
menu->list_settings, menu->keyboard.label_setting)))
menu_action_setting_set_current_string(current_setting, str);
else
menu_action_set_current_string_based_on_label(

View File

@ -361,14 +361,11 @@ int menu_shader_manager_setting_toggle(
#endif
rarch_setting_t *current_setting = NULL;
rarch_setting_t *setting_data = (rarch_setting_t *)
setting_data_get_list(SL_FLAG_ALL_SETTINGS, false);
if (!strcmp(label, "video_shader_default_filter"))
{
if ((current_setting = setting_data_find_setting(
setting_data, "video_smooth")))
driver.menu->list_settings, "video_smooth")))
menu_action_setting_boolean(current_setting, action);
}
else if (id >= MENU_SETTINGS_SHADER_PARAMETER_0

View File

@ -1732,7 +1732,7 @@ void setting_data_get_label(char *type_str,
const char *menu_label, const char *label, unsigned index)
{
rarch_setting_t *setting_data = (rarch_setting_t*)
setting_data_get_list(SL_FLAG_ALL_SETTINGS, false);
driver.menu->list_settings;
rarch_setting_t *setting = (rarch_setting_t*)setting_data_find_setting(setting_data,
driver.menu->selection_buf->list[index].label);
@ -1825,7 +1825,7 @@ void setting_data_get_label(char *type_str,
setting_data_get_string_representation(setting, type_str, type_str_size);
else
{
setting_data = (rarch_setting_t*)setting_data_get_mainmenu(true);
setting_data = (rarch_setting_t*)driver.menu->list_mainmenu;
setting = (rarch_setting_t*)setting_data_find_setting(setting_data,
driver.menu->selection_buf->list[index].label);
@ -4529,73 +4529,12 @@ bool setting_data_append_list_privacy_options(
return true;
}
#ifdef HAVE_MENU
/* TODO - combine this with setting_data_get_list. */
rarch_setting_t *setting_data_get_mainmenu(bool need_refresh)
rarch_setting_t *setting_data_get_list(unsigned mask)
{
rarch_setting_info_t *list_info = NULL;
static rarch_setting_t* list = NULL;
if (list)
{
if (!need_refresh)
return list;
settings_list_free(list);
}
list_info = (rarch_setting_info_t*)settings_info_list_new();
if (!list_info)
return NULL;
list = (rarch_setting_t*)settings_list_new(list_info->size);
if (!list)
goto error;
if (!setting_data_append_list_main_menu_options(&list, list_info))
goto error;
rarch_setting_t terminator = { ST_NONE };
if (!(settings_list_append(&list, list_info, terminator)))
goto error;
/* flatten this array to save ourselves some kilobytes */
if (!(list = (rarch_setting_t*)
realloc(list, list_info->index * sizeof(rarch_setting_t))))
goto error;
settings_info_list_free(list_info);
/* do not optimize into return realloc(),
* list is static and must be written. */
return (rarch_setting_t*)list;
error:
RARCH_ERR("Allocation failed.\n");
settings_info_list_free(list_info);
settings_list_free(list);
return NULL;
}
#endif
rarch_setting_t *setting_data_get_list(unsigned mask, bool need_refresh)
{
static unsigned last_mask = 0;
rarch_setting_info_t *list_info = NULL;
static rarch_setting_t* list = NULL;
if (list)
{
if (mask == last_mask)
if (!need_refresh)
return list;
settings_list_free(list);
}
list_info = (rarch_setting_info_t*)settings_info_list_new();
rarch_setting_info_t *list_info = (rarch_setting_info_t*)
settings_info_list_new();
if (!list_info)
return NULL;
@ -4698,11 +4637,9 @@ rarch_setting_t *setting_data_get_list(unsigned mask, bool need_refresh)
settings_info_list_free(list_info);
last_mask = mask;
/* do not optimize into return realloc(),
* list is static and must be written. */
return (rarch_setting_t*)list;
return list;
error:
RARCH_ERR("Allocation failed.\n");

View File

@ -87,13 +87,11 @@ int setting_data_get_description(const char *label, char *msg,
size_t msg_sizeof);
#ifdef HAVE_MENU
rarch_setting_t* setting_data_get_mainmenu(bool regenerate);
void setting_data_get_label(char *type_str,
size_t type_str_size, unsigned *w, unsigned type,
const char *menu_label, const char *label, unsigned index);
#endif
rarch_setting_t* setting_data_get_list(unsigned mask, bool need_refresh);
rarch_setting_t* setting_data_get_list(unsigned mask);
#ifdef __cplusplus
}