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:
parent
1fe95bdafb
commit
e5ab079298
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue