diff --git a/frontend/menu/backend/menu_common_backend.c b/frontend/menu/backend/menu_common_backend.c index b26b9ddc7e..99eecea9d2 100644 --- a/frontend/menu/backend/menu_common_backend.c +++ b/frontend/menu/backend/menu_common_backend.c @@ -47,9 +47,6 @@ extern unsigned menu_gx_resolutions[GX_RESOLUTIONS_LAST][2]; extern unsigned menu_current_gx_resolution; #endif -// FIXME: Ugly hack, nees to be refactored badly -size_t hack_shader_pass = 0; - static int menu_message_toggle(unsigned action) { if (driver.video_data && driver.menu_ctx @@ -743,8 +740,6 @@ static int menu_action_ok(const char *menu_path, rarch_setting_t *setting = (rarch_setting_t*) setting_data_find_setting(setting_data, menu_label); - (void)hack_shader_pass; - if (file_list_get_size(driver.menu->selection_buf) == 0) return 0; @@ -858,32 +853,6 @@ static int menu_action_ok(const char *menu_path, menu_entries_pop_stack(driver.menu->menu_stack, setting->name); return 0; - - case MENU_FILE_SHADER_PRESET: -#ifdef HAVE_SHADER_MANAGER - { - char shader_path[PATH_MAX]; - fill_pathname_join(shader_path, menu_path, path, sizeof(shader_path)); - menu_shader_manager_set_preset(driver.menu->shader, - gfx_shader_parse_type(shader_path, RARCH_SHADER_NONE), - shader_path); - menu_flush_stack_label(driver.menu->menu_stack, "Shader Options"); - } -#endif - return 0; - case MENU_FILE_SHADER: -#ifdef HAVE_SHADER_MANAGER - fill_pathname_join(driver.menu->shader->pass[hack_shader_pass].source.path, - menu_path, path, - sizeof(driver.menu->shader->pass[hack_shader_pass].source.path)); - - /* This will reset any changed parameters. */ - gfx_shader_resolve_parameters(NULL, driver.menu->shader); - menu_flush_stack_label(driver.menu->menu_stack, "Shader Options"); -#endif - - return 0; - case MENU_FILE_CORE: if (!strcmp(menu_label, "deferred_core_list")) diff --git a/frontend/menu/menu_entries_cbs.c b/frontend/menu/menu_entries_cbs.c index dabac9155c..02801cdafe 100644 --- a/frontend/menu/menu_entries_cbs.c +++ b/frontend/menu/menu_entries_cbs.c @@ -75,6 +75,57 @@ static int action_ok_shader_apply_changes(const char *path, return 0; } +// FIXME: Ugly hack, nees to be refactored badly +size_t hack_shader_pass = 0; + +static int action_ok_shader_pass_load(const char *path, + const char *label, unsigned type, size_t index) +{ + const char *menu_path = NULL; + if (!driver.menu) + return -1; + (void)menu_path; + +#ifdef HAVE_SHADER_MANAGER + file_list_get_last(driver.menu->menu_stack, &menu_path, NULL, + NULL); + fill_pathname_join(driver.menu->shader->pass[hack_shader_pass].source.path, + menu_path, path, + sizeof(driver.menu->shader->pass[hack_shader_pass].source.path)); + + /* This will reset any changed parameters. */ + gfx_shader_resolve_parameters(NULL, driver.menu->shader); + menu_flush_stack_label(driver.menu->menu_stack, "Shader Options"); + return 0; +#else + return -1; +#endif +} + +static int action_ok_shader_preset_load(const char *path, + const char *label, unsigned type, size_t index) +{ + const char *menu_path = NULL; + char shader_path[PATH_MAX]; + if (!driver.menu) + return -1; + + (void)shader_path; + (void)menu_path; +#ifdef HAVE_SHADER_MANAGER + file_list_get_last(driver.menu->menu_stack, &menu_path, NULL, + NULL); + fill_pathname_join(shader_path, menu_path, path, sizeof(shader_path)); + menu_shader_manager_set_preset(driver.menu->shader, + gfx_shader_parse_type(shader_path, RARCH_SHADER_NONE), + shader_path); + menu_flush_stack_label(driver.menu->menu_stack, "Shader Options"); + return 0; +#else + return -1; +#endif +} + static int action_ok_shader_preset_save_as(const char *path, const char *label, unsigned type, size_t index) { @@ -93,6 +144,10 @@ static int menu_entries_cbs_init_bind_ok(menu_file_list_cbs_t *cbs, { if (type == MENU_FILE_PLAYLIST_ENTRY) cbs->action_ok = action_ok_playlist_entry; + else if (type == MENU_FILE_SHADER_PRESET) + cbs->action_ok = action_ok_shader_preset_load; + else if (type == MENU_FILE_SHADER) + cbs->action_ok = action_ok_shader_pass_load; else return -1;