void modes_update(void) { if(vle_mode_is(CMDLINE_MODE)) { redraw_cmdline(); return; } else if(vle_mode_is(MENU_MODE)) { menu_redraw(); return; } else if(vle_mode_is(FILE_INFO_MODE)) { redraw_file_info_dialog(); return; } touchwin(stdscr); update_all_windows(); if(vle_mode_is(SORT_MODE)) { redraw_sort_dialog(); } else if(vle_mode_is(CHANGE_MODE)) { redraw_change_dialog(); } else if(vle_mode_is(ATTR_MODE)) { redraw_attr_dialog(); } }
/* enters properties change mode */ void enter_attr_mode(FileView *active_view) { if(curr_stats.load_stage < 2) return; view = active_view; vle_mode_set(ATTR_MODE, VMT_SECONDARY); clear_input_bar(); curr_stats.use_input_bar = 0; init(); get_attrs(); redraw_attr_dialog(); }
void redraw_cmdline(void) { if(prev_mode == MENU_MODE) { menu_redraw(); } else { redraw_window(); if(prev_mode == SORT_MODE) redraw_sort_dialog(); else if(prev_mode == ATTR_MODE) redraw_attr_dialog(); } line_width = getmaxx(stdscr); curs_set(TRUE); update_cmdline_size(); update_cmdline_text(); if(cfg.wild_menu) draw_wild_menu(-1); }
void redraw_cmdline(void) { if(prev_mode == MENU_MODE) { menu_redraw(); } else { update_screen(UT_FULL); if(prev_mode == SORT_MODE) redraw_sort_dialog(); else if(prev_mode == ATTR_MODE) redraw_attr_dialog(); } line_width = getmaxx(stdscr); curs_set(TRUE); update_cmdline_size(); update_cmdline_text(); if(input_stat.complete_continue && cfg.wild_menu) draw_wild_menu(-1); }
void enter_attr_mode(FileView *active_view) { int i; mode_t fmode; mode_t diff; uid_t uid = geteuid(); if(curr_stats.load_stage < 2) return; view = active_view; memset(perms, 0, sizeof(perms)); diff = 0; i = 0; while(i < view->list_rows && !view->dir_entry[i].selected) i++; file_is_dir = 0; if(i == view->list_rows) { i = view->list_pos; file_is_dir = is_dir(view->dir_entry[i].name); } fmode = view->dir_entry[i].mode; if(uid != 0 && view->dir_entry[i].uid != uid) { show_error_msgf("Access error", "You are not owner of %s", view->dir_entry[i].name); clean_selected_files(view); load_dir_list(view, 1); move_to_list_pos(view, view->list_pos); return; } while(i < view->list_rows) { if(view->dir_entry[i].selected) { diff |= (view->dir_entry[i].mode ^ fmode); file_is_dir = file_is_dir || is_dir(view->dir_entry[i].name); if(uid != 0 && view->dir_entry[i].uid != uid) { show_error_msgf("Access error", "You are not owner of %s", view->dir_entry[i].name); return; } } i++; } *mode = ATTR_MODE; clear_input_bar(); curr_stats.use_input_bar = 0; perms[0] = !(diff & S_IRUSR) ? (int)(fmode & S_IRUSR) : -1; perms[1] = !(diff & S_IWUSR) ? (int)(fmode & S_IWUSR) : -1; perms[2] = !(diff & S_IXUSR) ? (int)(fmode & S_IXUSR) : -1; perms[3] = !(diff & S_ISUID) ? (int)(fmode & S_ISUID) : -1; perms[4] = !(diff & S_IRGRP) ? (int)(fmode & S_IRGRP) : -1; perms[5] = !(diff & S_IWGRP) ? (int)(fmode & S_IWGRP) : -1; perms[6] = !(diff & S_IXGRP) ? (int)(fmode & S_IXGRP) : -1; perms[7] = !(diff & S_ISGID) ? (int)(fmode & S_ISGID) : -1; perms[8] = !(diff & S_IROTH) ? (int)(fmode & S_IROTH) : -1; perms[9] = !(diff & S_IWOTH) ? (int)(fmode & S_IWOTH) : -1; perms[10] = !(diff & S_IXOTH) ? (int)(fmode & S_IXOTH) : -1; perms[11] = !(diff & S_ISVTX) ? (int)(fmode & S_ISVTX) : -1; adv_perms[0] = 0; adv_perms[1] = 0; adv_perms[2] = 0; memcpy(origin_perms, perms, sizeof(perms)); top = 3; bottom = file_is_dir ? 18 : 16; curr = 3; permnum = 0; step = 1; while(perms[permnum] < 0 && curr <= bottom) { inc_curr(); permnum++; } if(curr > bottom) { show_error_msg("Permissions change error", "Selected files have no common access state"); leave_attr_mode(); return; } col = 9; changed = 0; redraw_attr_dialog(); }
void modes_redraw(void) { LOG_FUNC_ENTER; static int in_here; if(curr_stats.load_stage < 2) { return; } if(in_here++ > 0) { /* TODO: is this still needed? Update scheduling might have solved issues * caused by asynchronous execution of this function in the past. */ return; } if(curr_stats.term_state != TS_NORMAL) { update_screen(UT_REDRAW); goto finish; } if(vle_mode_is(CMDLINE_MODE)) { redraw_cmdline(); goto finish; } else if(vle_primary_mode_is(MENU_MODE)) { menu_redraw(); if(vle_mode_is(MSG_MODE)) { redraw_msg_dialog(0); } goto finish; } else if(vle_mode_is(FILE_INFO_MODE)) { redraw_file_info_dialog(); goto finish; } update_screen(UT_REDRAW); if(curr_stats.save_msg) { status_bar_message(NULL); } if(vle_mode_is(SORT_MODE)) { redraw_sort_dialog(); } else if(vle_mode_is(CHANGE_MODE)) { redraw_change_dialog(); } else if(vle_mode_is(ATTR_MODE)) { redraw_attr_dialog(); } else if(vle_mode_is(VIEW_MODE)) { view_redraw(); } else if(vle_mode_is(MSG_MODE)) { redraw_msg_dialog(0); } finish: if(--in_here > 0) { modes_redraw(); } }
void enter_attr_mode(FileView *active_view) { mode_t fmode = 0; mode_t diff; uid_t uid = geteuid(); dir_entry_t *entry; int first; if(curr_stats.load_stage < 2) return; view = active_view; memset(perms, 0, sizeof(perms)); first = 1; file_is_dir = 0; diff = 0; entry = NULL; while(iter_selection_or_current(view, &entry)) { if(first) { fmode = entry->mode; first = 0; } diff |= (entry->mode ^ fmode); file_is_dir |= fentry_is_dir(entry); if(uid != 0 && entry->uid != uid) { show_error_msgf("Access error", "You are not owner of %s", entry->name); return; } } if(first) { show_error_msg("Permissions", "No files to process"); return; } vle_mode_set(ATTR_MODE, VMT_SECONDARY); clear_input_bar(); curr_stats.use_input_bar = 0; perms[0] = !(diff & S_IRUSR) ? (int)(fmode & S_IRUSR) : -1; perms[1] = !(diff & S_IWUSR) ? (int)(fmode & S_IWUSR) : -1; perms[2] = !(diff & S_IXUSR) ? (int)(fmode & S_IXUSR) : -1; perms[3] = !(diff & S_ISUID) ? (int)(fmode & S_ISUID) : -1; perms[4] = !(diff & S_IRGRP) ? (int)(fmode & S_IRGRP) : -1; perms[5] = !(diff & S_IWGRP) ? (int)(fmode & S_IWGRP) : -1; perms[6] = !(diff & S_IXGRP) ? (int)(fmode & S_IXGRP) : -1; perms[7] = !(diff & S_ISGID) ? (int)(fmode & S_ISGID) : -1; perms[8] = !(diff & S_IROTH) ? (int)(fmode & S_IROTH) : -1; perms[9] = !(diff & S_IWOTH) ? (int)(fmode & S_IWOTH) : -1; perms[10] = !(diff & S_IXOTH) ? (int)(fmode & S_IXOTH) : -1; perms[11] = !(diff & S_ISVTX) ? (int)(fmode & S_ISVTX) : -1; adv_perms[0] = 0; adv_perms[1] = 0; adv_perms[2] = 0; memcpy(origin_perms, perms, sizeof(perms)); top = 3; bottom = file_is_dir ? 18 : 16; curr = 3; permnum = 0; step = 1; while(perms[permnum] < 0 && curr <= bottom) { inc_curr(); permnum++; } if(curr > bottom) { show_error_msg("Permissions change error", "Selected files have no common access state"); leave_attr_mode(); return; } col = 9; changed = 0; redraw_attr_dialog(); }