mirror of
https://github.com/libretro/RetroArch
synced 2025-03-03 04:14:00 +00:00
(Menu) Prevent another few segfaults when trying to 'default'
softfilter - have to continually grab pointer back to driver.menu after some function occurred that could have changed driver.menu
This commit is contained in:
parent
e313c9d181
commit
68c9a6003c
4
driver.h
4
driver.h
@ -403,8 +403,8 @@ typedef struct menu_ctx_driver_backend
|
||||
int (*setting_toggle)(unsigned, unsigned, unsigned);
|
||||
int (*setting_set)(unsigned, unsigned);
|
||||
void (*setting_set_label)(char *, size_t, unsigned *, unsigned);
|
||||
void (*defer_decision_automatic)(void *);
|
||||
void (*defer_decision_manual)(void *);
|
||||
void (*defer_decision_automatic)(void);
|
||||
void (*defer_decision_manual)(void);
|
||||
const char *ident;
|
||||
} menu_ctx_driver_backend_t;
|
||||
|
||||
|
@ -625,6 +625,8 @@ static int menu_settings_iterate(unsigned action)
|
||||
unsigned menu_type = 0;
|
||||
file_list_get_last(rgui->menu_stack, &dir, &menu_type);
|
||||
|
||||
rgui = (rgui_handle_t*)driver.menu;
|
||||
|
||||
if (rgui->need_refresh)
|
||||
action = RGUI_ACTION_NOOP;
|
||||
|
||||
@ -716,6 +718,8 @@ static int menu_settings_iterate(unsigned action)
|
||||
break;
|
||||
}
|
||||
|
||||
rgui = (rgui_handle_t*)driver.menu;
|
||||
|
||||
file_list_get_last(rgui->menu_stack, &dir, &menu_type);
|
||||
|
||||
if (rgui && rgui->need_refresh && !(menu_type == RGUI_FILE_DIRECTORY ||
|
||||
@ -948,15 +952,20 @@ static int menu_viewport_iterate(unsigned action)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void menu_parse_and_resolve(void *data, unsigned menu_type)
|
||||
static void menu_parse_and_resolve(unsigned menu_type)
|
||||
{
|
||||
const core_info_t *info = NULL;
|
||||
const char *dir;
|
||||
size_t i, list_size;
|
||||
file_list_t *list;
|
||||
rgui_handle_t *rgui;
|
||||
rgui_handle_t *rgui = (rgui_handle_t*)driver.menu;
|
||||
|
||||
if (!rgui)
|
||||
{
|
||||
RARCH_ERR("Cannot parse and resolve menu, menu handle is not initialized.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
rgui = (rgui_handle_t*)data;
|
||||
dir = NULL;
|
||||
|
||||
file_list_clear(rgui->selection_buf);
|
||||
@ -1260,9 +1269,9 @@ static int menu_custom_bind_iterate_keyboard(void *data, unsigned action)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void menu_common_defer_decision_automatic(void *data)
|
||||
static void menu_common_defer_decision_automatic(void)
|
||||
{
|
||||
rgui_handle_t *rgui = (rgui_handle_t*)data;
|
||||
rgui_handle_t *rgui = (rgui_handle_t*)driver.menu;
|
||||
|
||||
if (!rgui)
|
||||
return;
|
||||
@ -1271,9 +1280,9 @@ static void menu_common_defer_decision_automatic(void *data)
|
||||
rgui->msg_force = true;
|
||||
}
|
||||
|
||||
static void menu_common_defer_decision_manual(void *data)
|
||||
static void menu_common_defer_decision_manual(void)
|
||||
{
|
||||
rgui_handle_t *rgui = (rgui_handle_t*)data;
|
||||
rgui_handle_t *rgui = (rgui_handle_t*)driver.menu;
|
||||
|
||||
if (!rgui)
|
||||
return;
|
||||
@ -1632,12 +1641,12 @@ static int menu_common_iterate(unsigned action)
|
||||
{
|
||||
menu_update_system_info(driver.menu, &rgui->load_no_rom);
|
||||
if (driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->defer_decision_automatic)
|
||||
driver.menu_ctx->backend->defer_decision_automatic(rgui);
|
||||
driver.menu_ctx->backend->defer_decision_automatic();
|
||||
}
|
||||
else if (ret == 0)
|
||||
{
|
||||
if (driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->defer_decision_manual)
|
||||
driver.menu_ctx->backend->defer_decision_manual(rgui);
|
||||
driver.menu_ctx->backend->defer_decision_manual();
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1684,7 +1693,7 @@ static int menu_common_iterate(unsigned action)
|
||||
menu_type == RGUI_SETTINGS_DISK_APPEND))
|
||||
{
|
||||
rgui->need_refresh = false;
|
||||
menu_parse_and_resolve(rgui, menu_type);
|
||||
menu_parse_and_resolve(menu_type);
|
||||
}
|
||||
|
||||
if (driver.menu_ctx && driver.menu_ctx->iterate)
|
||||
|
Loading…
x
Reference in New Issue
Block a user