void menu_input_post_iterate(int *ret, unsigned action) { menu_entry_t entry; settings_t *settings = config_get_ptr(); file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0); size_t selection = menu_navigation_get_selection(); menu_file_list_cbs_t *cbs = selection_buf ? (menu_file_list_cbs_t*)file_list_get_actiondata_at_offset(selection_buf, selection) : NULL; menu_entry_init(&entry); menu_entry_get(&entry, 0, selection, NULL, false); *ret = menu_input_mouse_frame(cbs, &entry, action); if (settings->bools.menu_pointer_enable) *ret |= menu_input_pointer_post_iterate(cbs, &entry, action); menu_entry_free(&entry); }
static void xui_render(void *data, bool is_idle) { size_t end, i, selection, fb_pitch; unsigned fb_width, fb_height; char title[PATH_MAX_LENGTH] = {0}; const char *dir = NULL; const char *label = NULL; unsigned menu_type = 0; uint64_t frame_count = xui_frame_count; bool msg_force = menu_display_get_msg_force(); menu_display_get_fb_size(&fb_width, &fb_height, &fb_pitch); if ( menu_entries_ctl(MENU_ENTRIES_CTL_NEEDS_REFRESH, NULL) && menu_driver_is_alive() && !msg_force ) return; menu_display_unset_framebuffer_dirty_flag(); menu_animation_ctl(MENU_ANIMATION_CTL_CLEAR_ACTIVE, NULL); xui_render_background(); if (XuiHandleIsValid(m_menutitle)) { menu_animation_ctx_ticker_t ticker; menu_entries_get_title(title, sizeof(title)); mbstowcs(strw_buffer, title, sizeof(strw_buffer) / sizeof(wchar_t)); XuiTextElementSetText(m_menutitle, strw_buffer); ticker.s = title; ticker.len = RXUI_TERM_WIDTH(fb_width) - 3; ticker.idx = (unsigned int)frame_count / 15; ticker.str = title; ticker.selected = true; menu_animation_ticker(&ticker); } if (XuiHandleIsValid(m_menutitle)) { if ( menu_entries_get_core_title(title, sizeof(title)) == 0) { mbstowcs(strw_buffer, title, sizeof(strw_buffer) / sizeof(wchar_t)); XuiTextElementSetText(m_menutitlebottom, strw_buffer); } } end = menu_entries_get_size(); for (i = 0; i < end; i++) { menu_entry_t entry; char *entry_path = NULL; char entry_value[PATH_MAX_LENGTH] = {0}; wchar_t msg_right[PATH_MAX_LENGTH] = {0}; wchar_t msg_left[PATH_MAX_LENGTH] = {0}; menu_entry_init(&entry); menu_entry_get(&entry, 0, i, NULL, true); menu_entry_get_value(&entry, entry_value, sizeof(entry_value)); entry_path = menu_entry_get_path(&entry); mbstowcs(msg_left, entry_path, sizeof(msg_left) / sizeof(wchar_t)); mbstowcs(msg_right, entry_value, sizeof(msg_right) / sizeof(wchar_t)); xui_set_list_text(i, msg_left, msg_right); menu_entry_free(&entry); if (!string_is_empty(entry_path)) free(entry_path); } selection = menu_navigation_get_selection(); XuiListSetCurSelVisible(m_menulist, selection); if (menu_input_dialog_get_display_kb()) { char msg[1024] = {0}; const char *str = menu_input_dialog_get_buffer(); const char *label = menu_input_dialog_get_label_buffer(); snprintf(msg, sizeof(msg), "%s\n%s", label, str); xui_render_messagebox(NULL, msg); } }
static int action_select_default(const char *path, const char *label, unsigned type, size_t idx) { menu_entry_t entry; int ret = 0; enum menu_action action = MENU_ACTION_NOOP; menu_file_list_cbs_t *cbs = NULL; file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0); menu_entry_init(&entry); menu_entry_get(&entry, 0, idx, NULL, false); if (selection_buf) cbs = (menu_file_list_cbs_t*) file_list_get_actiondata_at_offset(selection_buf, idx); if (!cbs) { menu_entry_free(&entry); return -1; } if (cbs->setting) { switch (setting_get_type(cbs->setting)) { case ST_BOOL: case ST_INT: case ST_UINT: case ST_FLOAT: action = MENU_ACTION_RIGHT; break; case ST_PATH: case ST_DIR: case ST_ACTION: case ST_STRING: case ST_HEX: case ST_BIND: action = MENU_ACTION_OK; break; default: break; } } if (action == MENU_ACTION_NOOP) { if (cbs->action_ok) action = MENU_ACTION_OK; else { if (cbs->action_start) action = MENU_ACTION_START; if (cbs->action_right) action = MENU_ACTION_RIGHT; } } if (action != MENU_ACTION_NOOP) ret = menu_entry_action(&entry, (unsigned)idx, action); menu_entry_free(&entry); task_queue_check(); return ret; }