diff options
author | nicm <nicm> | 2016-10-09 16:24:34 +0000 |
---|---|---|
committer | nicm <nicm> | 2016-10-09 16:24:34 +0000 |
commit | b8f2dd8237dca568308e1c273f376191f55e880e (patch) | |
tree | 252abe5f2acf0c07cfdfd40514d8f6f3b5d01d6b /screen-redraw.c | |
parent | 1db6d6fea6158d8d0d05e59497e40a5cfc40d068 (diff) | |
download | rtmux-b8f2dd8237dca568308e1c273f376191f55e880e.tar.gz rtmux-b8f2dd8237dca568308e1c273f376191f55e880e.tar.bz2 rtmux-b8f2dd8237dca568308e1c273f376191f55e880e.zip |
Make the CLIENT_STATUS flag imply that pane status lines are redrawn if
they are enabled and break the actual screen generation code into a
separate function. Fixes problems reported by Romain Francoise.
Diffstat (limited to 'screen-redraw.c')
-rw-r--r-- | screen-redraw.c | 48 |
1 files changed, 35 insertions, 13 deletions
diff --git a/screen-redraw.c b/screen-redraw.c index 4c402ff2..5e4b0848 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -328,6 +328,35 @@ screen_redraw_draw_pane_status(struct client *c, int pane_status) tty_cursor(tty, 0, 0); } +/* Update status line and change flags if unchanged. */ +void +screen_redraw_update(struct client *c) +{ + struct window *w = c->session->curw->window; + struct window_pane *wp; + struct options *wo = w->options; + int redraw; + + if (c->message_string != NULL) + redraw = status_message_redraw(c); + else if (c->prompt_string != NULL) + redraw = status_prompt_redraw(c); + else + redraw = status_redraw(c); + if (!redraw) + c->flags &= ~CLIENT_STATUS; + + if (options_get_number(wo, "pane-border-status") != CELL_STATUS_OFF) { + redraw = 0; + TAILQ_FOREACH(wp, &w->panes, entry) { + if (screen_redraw_make_pane_status(c, w, wp)) + redraw = 1; + } + if (redraw) + c->flags |= CLIENT_BORDERS; + } +} + /* Redraw entire screen. */ void screen_redraw_screen(struct client *c, int draw_panes, int draw_status, @@ -336,7 +365,7 @@ screen_redraw_screen(struct client *c, int draw_panes, int draw_status, struct options *oo = c->session->options; struct tty *tty = &c->tty; struct window *w = c->session->curw->window; - struct window_pane *wp; + struct options *wo = w->options; u_int top; int status, pane_status, spos; @@ -356,24 +385,17 @@ screen_redraw_screen(struct client *c, int draw_panes, int draw_status, if (!status) draw_status = 0; - /* Update pane status lines. */ - pane_status = options_get_number(w->options, "pane-border-status"); - if (pane_status != CELL_STATUS_OFF && (draw_borders || draw_status)) { - TAILQ_FOREACH(wp, &w->panes, entry) { - if (screen_redraw_make_pane_status(c, w, wp)) - draw_borders = draw_status = 1; - } - } - /* Draw the elements. */ - if (draw_borders) + if (draw_borders) { + pane_status = options_get_number(wo, "pane-border-status"); screen_redraw_draw_borders(c, status, pane_status, top); + if (pane_status != CELL_STATUS_OFF) + screen_redraw_draw_pane_status(c, pane_status); + } if (draw_panes) screen_redraw_draw_panes(c, top); if (draw_status) screen_redraw_draw_status(c, top); - if (pane_status != CELL_STATUS_OFF && (draw_borders || draw_status)) - screen_redraw_draw_pane_status(c, pane_status); tty_reset(tty); } |