diff --git a/Makefile.common b/Makefile.common index db0bbb5e6c..5948743dca 100644 --- a/Makefile.common +++ b/Makefile.common @@ -342,6 +342,7 @@ ifeq ($(HAVE_MENU_COMMON), 1) menu/menu_shader.o \ menu/menu_entries_cbs_ok.o \ menu/menu_entries_cbs_cancel.o \ + menu/menu_entries_cbs_select.o \ menu/menu_entries_cbs_start.o \ menu/menu_entries_cbs_info.o \ menu/menu_entries_cbs_refresh.o \ diff --git a/griffin/griffin.c b/griffin/griffin.c index 2e59a8a672..6f0cbb4d18 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -717,8 +717,9 @@ MENU #include "../menu/menu_list.c" #include "../menu/menu_entries_cbs_ok.c" #include "../menu/menu_entries_cbs_cancel.c" -#include "../menu/menu_entries_cbs_start.c" #include "../menu/menu_entries_cbs_select.c" +#include "../menu/menu_entries_cbs_start.c" +#include "../menu/menu_entries_cbs_info.c" #include "../menu/menu_entries_cbs_refresh.c" #include "../menu/menu_entries_cbs_left.c" #include "../menu/menu_entries_cbs_right.c" diff --git a/menu/menu_entries_cbs_select.c b/menu/menu_entries_cbs_select.c new file mode 100644 index 0000000000..3aaae73157 --- /dev/null +++ b/menu/menu_entries_cbs_select.c @@ -0,0 +1,69 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2011-2015 - Daniel De Matteis + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include "menu.h" +#include "menu_entry.h" +#include "menu_entries_cbs.h" +#include "menu_setting.h" + +#include "../runloop_data.h" + +static int action_select_default(const char *path, const char *label, unsigned type, + size_t idx) +{ + int ret = 0; + menu_entry_t entry; + enum menu_action action = MENU_ACTION_NOOP; + menu_file_list_cbs_t *cbs = NULL; + menu_navigation_t *nav = menu_navigation_get_ptr(); + menu_list_t *menu_list = menu_list_get_ptr(); + rarch_setting_t *setting = menu_setting_find( + menu_list->selection_buf->list[idx].label); + + menu_entry_get(&entry, idx, NULL, false); + + cbs = menu_list_get_actiondata_at_offset(menu_list->selection_buf, idx); + + if (setting_is_of_path_type(setting)) + return 0; + + nav->selection_ptr = idx; + if ((cbs && cbs->action_ok) || setting_is_of_general_type(setting)) + action = MENU_ACTION_OK; + else + { + if (cbs && cbs->action_start) + action = MENU_ACTION_START; + if (cbs && cbs->action_right) + action = MENU_ACTION_RIGHT; + } + + if (action != MENU_ACTION_NOOP) + ret = menu_entry_action(&entry, idx, action); + + rarch_main_data_iterate(); + + return ret; +} + +void menu_entries_cbs_init_bind_select(menu_file_list_cbs_t *cbs, + const char *path, const char *label, unsigned type, size_t idx, + const char *elem0, const char *elem1) +{ + if (!cbs) + return; + + cbs->action_select = action_select_default; +} diff --git a/menu/menu_list.h b/menu/menu_list.h index 10b1484755..81117d7c82 100644 --- a/menu/menu_list.h +++ b/menu/menu_list.h @@ -36,6 +36,8 @@ typedef struct menu_file_list_cbs { int (*action_iterate)(const char *label, unsigned action); int (*action_deferred_push)(menu_displaylist_info_t *info); + int (*action_select)(const char *path, const char *label, unsigned type, + size_t idx); int (*action_ok)(const char *path, const char *label, unsigned type, size_t idx); int (*action_cancel)(const char *path, const char *label, unsigned type,