diff --git a/driver-contexts/menu_driver.c b/driver-contexts/menu_driver.c index 1e6dca6322..6f4bbd572a 100644 --- a/driver-contexts/menu_driver.c +++ b/driver-contexts/menu_driver.c @@ -76,25 +76,23 @@ void find_next_menu_driver(void) RARCH_WARN("Couldn't find any next menu driver (current one: \"%s\").\n", g_settings.menu.driver); } -bool menu_ctx_init_first(const menu_ctx_driver_t **driver, void **data) +static void find_menu_driver(void) { - unsigned i; - - if (!menu_ctx_drivers[0]) - return false; - - for (i = 0; menu_ctx_drivers[i]; i++) + int i = find_menu_driver_index(g_settings.menu.driver); + if (i >= 0) + driver.menu_ctx = menu_ctx_drivers[i]; + else { - void *h = menu_ctx_drivers[i]->init(); + unsigned d; + RARCH_WARN("Couldn't find any menu driver named \"%s\"\n", g_settings.menu.driver); + RARCH_LOG_OUTPUT("Available menu drivers are:\n"); + for (d = 0; menu_ctx_drivers[d]; d++) + RARCH_LOG_OUTPUT("\t%s\n", menu_ctx_drivers[d]->ident); + RARCH_WARN("Going to default to first menu driver...\n"); - if (h) - { - *driver = menu_ctx_drivers[i]; - *data = h; - strlcpy(g_settings.menu.driver, menu_ctx_drivers[i]->ident, sizeof(g_settings.menu.driver)); - return true; - } + driver.menu_ctx = menu_ctx_drivers[0]; + + if (!driver.menu_ctx) + rarch_fail(1, "find_menu_driver()"); } - - return false; } diff --git a/driver.c b/driver.c index b2beebb538..7c95ad0888 100644 --- a/driver.c +++ b/driver.c @@ -362,6 +362,7 @@ void init_drivers_pre(void) #ifdef HAVE_OSK find_osk_driver(); #endif + find_menu_driver(); } static void adjust_system_rates(void) diff --git a/driver.h b/driver.h index 7492c3cb51..da36180849 100644 --- a/driver.h +++ b/driver.h @@ -622,7 +622,6 @@ void driver_location_set_interval(unsigned interval_msecs, unsigned interval_dis #ifdef HAVE_MENU const void *menu_ctx_find_driver(const char *ident); // Finds driver with ident. Does not initialize. -bool menu_ctx_init_first(const menu_ctx_driver_t **driver, void **handle); // Finds first suitable driver and initializes. void find_prev_menu_driver(void); void find_next_menu_driver(void); #endif diff --git a/frontend/menu/menu_common.c b/frontend/menu/menu_common.c index 4611874fcc..a036934260 100644 --- a/frontend/menu/menu_common.c +++ b/frontend/menu/menu_common.c @@ -314,17 +314,21 @@ bool load_menu_game(void *data) void *menu_init(void) { - rgui_handle_t *rgui = (rgui_handle_t*)calloc(1, sizeof(rgui)); + rgui_handle_t *rgui; - if (!rgui) + if (!driver.menu_ctx) return NULL; - if (!menu_ctx_init_first(&driver.menu_ctx, (void**)&rgui)) + rgui = (rgui_handle_t*)driver.menu_ctx->init(); + + if (!rgui) { RARCH_ERR("Could not initialize menu.\n"); rarch_fail(1, "menu_init()"); } + strlcpy(g_settings.menu.driver, driver.menu_ctx->ident, sizeof(g_settings.menu.driver)); + rgui->menu_stack = (file_list_t*)calloc(1, sizeof(file_list_t)); rgui->selection_buf = (file_list_t*)calloc(1, sizeof(file_list_t)); file_list_push(rgui->menu_stack, "", RGUI_SETTINGS, 0);