aboutsummaryrefslogtreecommitdiff
path: root/screen-redraw.c
diff options
context:
space:
mode:
authornicm <nicm>2016-10-09 16:24:34 +0000
committernicm <nicm>2016-10-09 16:24:34 +0000
commitb8f2dd8237dca568308e1c273f376191f55e880e (patch)
tree252abe5f2acf0c07cfdfd40514d8f6f3b5d01d6b /screen-redraw.c
parent1db6d6fea6158d8d0d05e59497e40a5cfc40d068 (diff)
downloadrtmux-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.c48
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);
}