From 1004537e8d5f4fad0fbe05dcb28044863f4b2796 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 12 Dec 2015 02:14:50 +0100 Subject: [PATCH] Create MENU_ENTRIES_CTL_SET_REFRESH/MENU_ENTRIES_CTL_UNSET_REFRESH --- menu/cbs/menu_cbs_deferred_push.c | 3 +- menu/cbs/menu_cbs_left.c | 6 ++-- menu/cbs/menu_cbs_ok.c | 3 +- menu/cbs/menu_cbs_right.c | 6 ++-- menu/cbs/menu_cbs_start.c | 6 ++-- menu/menu_displaylist.c | 4 ++- menu/menu_driver.c | 3 +- menu/menu_entries.c | 50 ++++++++++++++++--------------- menu/menu_entries.h | 6 ++-- menu/menu_entry.c | 3 +- menu/menu_shader.c | 3 +- 11 files changed, 53 insertions(+), 40 deletions(-) diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index dc1c26455f..1c8f45f350 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -298,6 +298,7 @@ size_t core_len; void cb_net_generic(void *task_data, void *user_data, const char *err) { + bool refresh = false; http_transfer_data_t *data = (http_transfer_data_t*)task_data; if (core_buf) @@ -319,7 +320,7 @@ void cb_net_generic(void *task_data, void *user_data, const char *err) core_len = data->len; finish: - menu_entries_unset_refresh(true); + menu_entries_ctl(MENU_ENTRIES_CTL_UNSET_REFRESH, &refresh); if (err) RARCH_ERR("Download failed: %s\n", err); diff --git a/menu/cbs/menu_cbs_left.c b/menu/cbs/menu_cbs_left.c index 96a33e8542..d1bcc0c41c 100644 --- a/menu/cbs/menu_cbs_left.c +++ b/menu/cbs/menu_cbs_left.c @@ -242,11 +242,12 @@ static int action_left_shader_filter_default(unsigned type, const char *label, static int action_left_cheat_num_passes(unsigned type, const char *label, bool wraparound) { + bool refresh = false; unsigned new_size = 0; if (cheat_manager_get_size()) new_size = cheat_manager_get_size() - 1; - menu_entries_set_refresh(false); + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL); cheat_manager_realloc(new_size); @@ -257,6 +258,7 @@ static int action_left_shader_num_passes(unsigned type, const char *label, bool wraparound) { #ifdef HAVE_SHADER_MANAGER + bool refresh = false; struct video_shader *shader = NULL; menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET, @@ -266,7 +268,7 @@ static int action_left_shader_num_passes(unsigned type, const char *label, if (shader->passes) shader->passes--; - menu_entries_set_refresh(false); + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL); video_shader_resolve_parameters(NULL, shader); diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 0ac86feb56..61b5bc6507 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -1417,8 +1417,9 @@ static int generic_action_ok_network(const char *path, unsigned type_id2 = 0; const char *url_label = NULL; rarch_task_callback_t callback = NULL; + bool refresh = true; - menu_entries_set_refresh(true); + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); if (settings->network.buildbot_url[0] == '\0') return -1; diff --git a/menu/cbs/menu_cbs_right.c b/menu/cbs/menu_cbs_right.c index 561498a67f..026a0695fd 100644 --- a/menu/cbs/menu_cbs_right.c +++ b/menu/cbs/menu_cbs_right.c @@ -261,10 +261,11 @@ static int action_right_shader_filter_default(unsigned type, const char *label, static int action_right_cheat_num_passes(unsigned type, const char *label, bool wraparound) { + bool refresh = false; unsigned new_size = 0; new_size = cheat_manager_get_size() + 1; - menu_entries_set_refresh(false); + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL); cheat_manager_realloc(new_size); @@ -275,6 +276,7 @@ static int action_right_shader_num_passes(unsigned type, const char *label, bool wraparound) { #ifdef HAVE_SHADER_MANAGER + bool refresh = false; struct video_shader *shader = NULL; menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET, @@ -284,7 +286,7 @@ static int action_right_shader_num_passes(unsigned type, const char *label, if ((shader->passes < GFX_MAX_SHADERS)) shader->passes++; - menu_entries_set_refresh(false); + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL); video_shader_resolve_parameters(NULL, shader); diff --git a/menu/cbs/menu_cbs_start.c b/menu/cbs/menu_cbs_start.c index 8ab443df7a..fc63f43435 100644 --- a/menu/cbs/menu_cbs_start.c +++ b/menu/cbs/menu_cbs_start.c @@ -218,6 +218,7 @@ static int action_start_shader_filter_pass(unsigned type, const char *label) static int action_start_shader_num_passes(unsigned type, const char *label) { #ifdef HAVE_SHADER_MANAGER + bool refresh = false; struct video_shader *shader = NULL; menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET, @@ -228,7 +229,7 @@ static int action_start_shader_num_passes(unsigned type, const char *label) if (shader->passes) shader->passes = 0; - menu_entries_set_refresh(false); + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); video_shader_resolve_parameters(NULL, shader); #endif return 0; @@ -238,7 +239,8 @@ static int action_start_cheat_num_passes(unsigned type, const char *label) { if (cheat_manager_get_size()) { - menu_entries_set_refresh(false); + bool refresh = false; + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); cheat_manager_realloc(0); } diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index b9c9c8f593..b744a492c5 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -2508,12 +2508,14 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type) break; case DISPLAYLIST_GENERIC: { + bool refresh = false; bool pending_push = true; + menu_driver_list_cache(MENU_LIST_PLAIN, 0); menu_entries_push(info->list, info->path, info->label, info->type, info->directory_ptr, 0); menu_navigation_ctl(MENU_NAVIGATION_CTL_CLEAR, &pending_push); - menu_entries_set_refresh(false); + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); } break; case DISPLAYLIST_USER_BINDS_LIST: diff --git a/menu/menu_driver.c b/menu/menu_driver.c index d9497d2a44..c4b30a725d 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -296,7 +296,8 @@ static void menu_driver_toggle(bool latch) if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL)) { - menu_entries_set_refresh(false); + bool refresh = false; + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); /* Menu should always run with vsync on. */ event_command(EVENT_CMD_VIDEO_SET_BLOCKING_STATE); diff --git a/menu/menu_entries.c b/menu/menu_entries.c index e8bd19d522..0cdf67e5b2 100644 --- a/menu/menu_entries.c +++ b/menu/menu_entries.c @@ -169,6 +169,7 @@ static int menu_entries_flush_stack_type(const char *needle, const char *label, static bool menu_list_pop_stack(menu_list_t *list, size_t idx, size_t *directory_ptr) { + bool refresh = false; file_list_t *menu_list = NULL; if (!list) return false; @@ -186,7 +187,7 @@ static bool menu_list_pop_stack(menu_list_t *list, size_t idx, size_t *directory file_list_pop(menu_list, directory_ptr); menu_driver_list_set_selection(menu_list); - menu_entries_set_refresh(false); + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); return true; } @@ -194,6 +195,7 @@ static bool menu_list_pop_stack(menu_list_t *list, size_t idx, size_t *directory static void menu_list_flush_stack(menu_list_t *list, size_t idx, const char *needle, unsigned final_type) { + bool refresh = false; const char *path = NULL; const char *label = NULL; unsigned type = 0; @@ -201,7 +203,7 @@ static void menu_list_flush_stack(menu_list_t *list, if (!list) return; - menu_entries_set_refresh(false); + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); menu_entries_get_last(list->menu_stack[idx], &path, &label, &type, &entry_idx); @@ -482,28 +484,6 @@ file_list_t *menu_entries_get_selection_buf_ptr(size_t idx) return menu_list->selection_buf[idx]; } -void menu_entries_set_refresh(bool nonblocking) -{ - if (menu_entries_data) - { - if (nonblocking) - menu_entries_data->nonblocking_refresh = true; - else - menu_entries_data->need_refresh = true; - } -} - -void menu_entries_unset_refresh(bool nonblocking) -{ - if (menu_entries_data) - { - if (nonblocking) - menu_entries_data->nonblocking_refresh = false; - else - menu_entries_data->need_refresh = false; - } -} - static bool menu_entries_init(void) { menu_entries_t *entries = (menu_entries_t*)calloc(1, sizeof(*entries)); @@ -717,6 +697,28 @@ bool menu_entries_ctl(enum menu_entries_ctl_state state, void *data) *settings = menu_entries_data->list_settings; } return true; + case MENU_ENTRIES_CTL_SET_REFRESH: + if (menu_entries_data) + { + bool *nonblocking = (bool*)data; + + if (*nonblocking) + menu_entries_data->nonblocking_refresh = true; + else + menu_entries_data->need_refresh = true; + } + return true; + case MENU_ENTRIES_CTL_UNSET_REFRESH: + if (menu_entries_data) + { + bool *nonblocking = (bool*)data; + + if (*nonblocking) + menu_entries_data->nonblocking_refresh = false; + else + menu_entries_data->need_refresh = false; + } + return true; case MENU_ENTRIES_CTL_INIT: return menu_entries_init(); case MENU_ENTRIES_CTL_SHOW_BACK: diff --git a/menu/menu_entries.h b/menu/menu_entries.h index 4314877307..48a3e789ea 100644 --- a/menu/menu_entries.h +++ b/menu/menu_entries.h @@ -108,6 +108,8 @@ enum menu_entries_ctl_state MENU_ENTRIES_CTL_INIT, MENU_ENTRIES_CTL_LIST_GET, MENU_ENTRIES_CTL_SETTINGS_GET, + MENU_ENTRIES_CTL_SET_REFRESH, + MENU_ENTRIES_CTL_UNSET_REFRESH, MENU_ENTRIES_CTL_NEEDS_REFRESH, MENU_ENTRIES_CTL_SHOW_BACK }; @@ -126,10 +128,6 @@ int menu_entries_get_title(char *title, size_t title_len); int menu_entries_get_core_title(char *title_msg, size_t title_msg_len); -void menu_entries_set_refresh(bool nonblocking); - -void menu_entries_unset_refresh(bool nonblocking); - file_list_t *menu_entries_get_selection_buf_ptr(size_t idx); file_list_t *menu_entries_get_menu_stack_ptr(size_t idx); diff --git a/menu/menu_entry.c b/menu/menu_entry.c index 11ddfa1bab..a700d55052 100644 --- a/menu/menu_entry.c +++ b/menu/menu_entry.c @@ -420,10 +420,11 @@ int menu_entry_action(menu_entry_t *entry, unsigned i, enum menu_action action) { if (cbs && cbs->action_refresh) { + bool refresh = false; file_list_t *menu_stack = menu_entries_get_menu_stack_ptr(0); cbs->action_refresh(selection_buf, menu_stack); - menu_entries_unset_refresh(false); + menu_entries_ctl(MENU_ENTRIES_CTL_UNSET_REFRESH, &refresh); } } diff --git a/menu/menu_shader.c b/menu/menu_shader.c index fc80e8438e..a0416ea0ba 100644 --- a/menu/menu_shader.c +++ b/menu/menu_shader.c @@ -141,6 +141,7 @@ void menu_shader_manager_set_preset(struct video_shader *shader, { #ifdef HAVE_SHADER_MANAGER config_file_t *conf = NULL; + bool refresh = false; settings_t *settings = config_get_ptr(); settings->video.shader_enable = false; @@ -177,7 +178,7 @@ void menu_shader_manager_set_preset(struct video_shader *shader, } config_file_free(conf); - menu_entries_set_refresh(false); + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); #endif }