void ui_stat_job_bar_remove(bg_op_t *bg_op) { size_t i; const int prev_height = ui_stat_job_bar_height(); for(i = 0U; i < nbar_jobs; ++i) { if(bar_jobs[i] == bg_op) { memmove(&bar_jobs[i], &bar_jobs[i + 1], sizeof(*bar_jobs)*(nbar_jobs - 1 - i)); break; } } --nbar_jobs; if(ui_stat_job_bar_height() != 0) { update_job_bar(); } else if(prev_height != 0) { schedule_redraw(); } }
void ui_stat_job_bar_add(bg_op_t *bg_op) { const int prev_height = ui_stat_job_bar_height(); bg_op_t **p = reallocarray(bar_jobs, nbar_jobs + 1, sizeof(*bar_jobs)); if(p == NULL) { return; } bar_jobs = p; bar_jobs[nbar_jobs] = bg_op; ++nbar_jobs; if(!is_job_bar_visible()) { return; } update_job_bar(); if(ui_stat_job_bar_height() != prev_height) { schedule_redraw(); } }
/* Picks window to use for suggestion box and prepares it for displaying data. * Sets *height to number of suggestions to display. Returns picked window. */ static WINDOW * prepare_suggestion_box(int *height) { WINDOW *win; const col_attr_t col = cfg.cs.color[SUGGEST_BOX_COLOR]; const int count = vle_compl_get_count(); if((cfg.sug.flags & SF_OTHERPANE) && curr_stats.number_of_windows == 2) { win = other_view->win; *height = MIN(count, getmaxy(win)); } else { const int max_height = getmaxy(stdscr) - getmaxy(status_bar) - ui_stat_job_bar_height() - 2; *height = MIN(count, max_height); wresize(stat_win, *height, getmaxx(stdscr)); ui_stat_reposition(getmaxy(status_bar), 1); win = stat_win; } /* Clear preview before displaying suggestion for the first time for specific * input if active preview needs special cleanup. */ if(!suggestions_are_visible && curr_stats.preview.on && curr_stats.preview.cleanup_cmd != NULL) { qv_cleanup(other_view, curr_stats.preview.cleanup_cmd); } ui_set_bg(win, &col, -1); werase(win); return win; }
/* Picks window to use for suggestion box and prepares it for displaying data. * Sets *height to number of suggestions to display. Returns picked window. */ static WINDOW * prepare_suggestion_box(int *height) { WINDOW *win; const col_attr_t col = cfg.cs.color[SUGGEST_BOX_COLOR]; const int count = vle_compl_get_count(); if((cfg.sug.flags & SF_OTHERPANE) && curr_stats.number_of_windows == 2) { win = other_view->win; *height = MIN(count, getmaxy(win)); } else { const int max_height = getmaxy(stdscr) - getmaxy(status_bar) - ui_stat_job_bar_height() - 2; *height = MIN(count, max_height); wresize(stat_win, *height, getmaxx(stdscr)); ui_stat_reposition(getmaxy(status_bar), 1); win = stat_win; } wbkgdset(win, COLOR_PAIR(colmgr_get_pair(col.fg, col.bg)) | col.attr); werase(win); return win; }
/* Checks whether job bar is visible. Returns non-zero if so, and zero * otherwise. */ static int is_job_bar_visible(void) { /* Pretend that bar isn't visible in tests. */ return curr_stats.load_stage >= 2 && ui_stat_job_bar_height() != 0 && !is_in_menu_like_mode(); }
int ui_stat_reposition(int statusbar_height, int force_stat_win) { const int stat_line_height = (force_stat_win || cfg.display_statusline) ? getmaxy(stat_win) : 0; const int job_bar_height = ui_stat_job_bar_height(); const int y = getmaxy(stdscr) - statusbar_height - stat_line_height - job_bar_height; mvwin(job_bar, y, 0); if(job_bar_height != 0) { wresize(job_bar, job_bar_height, getmaxx(job_bar)); } if(force_stat_win || cfg.display_statusline) { mvwin(stat_win, y + job_bar_height, 0); return 1; } return 0; }
/* Checks whether job bar is visible. Returns non-zero if so, and zero * otherwise. */ static int is_job_bar_visible(void) { return ui_stat_job_bar_height() != 0 && !is_in_menu_like_mode(); }