From d09d0eb0bfdeb0b85bd5663efc74471c9da276bb Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 12 Oct 2014 01:23:41 +0200 Subject: [PATCH] Implement action_ok for one function already --- file_list.h | 3 +++ frontend/menu/backend/menu_common_backend.c | 24 +++++++++++---------- frontend/menu/menu_entries_cbs.c | 17 +++++++++++++++ 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/file_list.h b/file_list.h index 0245f7cab8..6843db9bbb 100644 --- a/file_list.h +++ b/file_list.h @@ -46,6 +46,9 @@ typedef struct file_list void *file_list_get_userdata_at_offset(const file_list_t *list, size_t index); +void *file_list_get_actiondata_at_offset(const file_list_t *list, + size_t index); + void file_list_free(file_list_t *list); void file_list_push(file_list_t *userdata, const char *path, diff --git a/frontend/menu/backend/menu_common_backend.c b/frontend/menu/backend/menu_common_backend.c index 95d9f1580d..627fe4eb2b 100644 --- a/frontend/menu/backend/menu_common_backend.c +++ b/frontend/menu/backend/menu_common_backend.c @@ -185,6 +185,12 @@ static int menu_setting_ok_toggle(unsigned type, const char *dir, const char *label, unsigned action) { + menu_file_list_cbs_t *cbs = file_list_get_actiondata_at_offset(driver.menu->selection_buf, + driver.menu->selection_ptr); + + if (cbs && cbs->action_ok) + return cbs->action_ok(dir, label, type, action); + if (type == MENU_SETTINGS_CUSTOM_BIND_ALL) { driver.menu->binds.target = &g_settings.input.binds @@ -277,16 +283,6 @@ static int menu_setting_ok_toggle(unsigned type, return 0; } - else if ( - !strcmp(label, "load_content") || - !strcmp(label, "detect_core_list") - ) - { - menu_entries_push(driver.menu->menu_stack, - g_settings.menu_content_directory, label, MENU_FILE_DIRECTORY, - driver.menu->selection_ptr); - return 0; - } else if (!strcmp(label, "history_list") || menu_common_type_is(label, type) == MENU_FILE_DIRECTORY ) @@ -1143,13 +1139,19 @@ static void menu_common_list_insert(void *data, static void menu_common_list_delete(void *data, size_t index, size_t list_size) { + menu_file_list_cbs_t *cbs = NULL; file_list_t *list = (file_list_t*)data; if (!list) return; - if (list->list[index].actiondata) + cbs = (menu_file_list_cbs_t*)list->list[index].actiondata; + + if (cbs) + { + cbs->action_ok = NULL; free(list->list[index].actiondata); + } list->list[index].actiondata = NULL; } diff --git a/frontend/menu/menu_entries_cbs.c b/frontend/menu/menu_entries_cbs.c index e925144d5a..51a0513dcf 100644 --- a/frontend/menu/menu_entries_cbs.c +++ b/frontend/menu/menu_entries_cbs.c @@ -14,8 +14,18 @@ */ #include "menu_common.h" +#include "menu_entries.h" #include "backend/menu_backend.h" +static int action_ok_push_content_list(const char *path, + const char *label, unsigned type, size_t index) +{ + menu_entries_push(driver.menu->menu_stack, + g_settings.menu_content_directory, label, MENU_FILE_DIRECTORY, + driver.menu->selection_ptr); + return 0; +} + void menu_entries_cbs_init(void *data, const char *path, const char *label, unsigned type, size_t index) @@ -31,4 +41,11 @@ void menu_entries_cbs_init(void *data, if (!cbs) return; + cbs->action_ok = NULL; + + if ( + !strcmp(label, "load_content") || + !strcmp(label, "detect_core_list") + ) + cbs->action_ok = action_ok_push_content_list; }