summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.bin/tmux/screen-redraw.c23
-rw-r--r--usr.bin/tmux/server-client.c8
-rw-r--r--usr.bin/tmux/tmux.h8
3 files changed, 26 insertions, 13 deletions
diff --git a/usr.bin/tmux/screen-redraw.c b/usr.bin/tmux/screen-redraw.c
index 4cb21452db3..f0cf2a8cfaf 100644
--- a/usr.bin/tmux/screen-redraw.c
+++ b/usr.bin/tmux/screen-redraw.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: screen-redraw.c,v 1.53 2018/08/19 16:45:03 nicm Exp $ */
+/* $OpenBSD: screen-redraw.c,v 1.54 2018/08/19 20:13:07 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -344,8 +344,8 @@ screen_redraw_draw_pane_status(struct screen_redraw_ctx *ctx)
}
/* Update status line and change flags if unchanged. */
-static void
-screen_redraw_update(struct client *c)
+static int
+screen_redraw_update(struct client *c, int flags)
{
struct window *w = c->session->curw->window;
struct window_pane *wp;
@@ -358,8 +358,8 @@ screen_redraw_update(struct client *c)
redraw = status_prompt_redraw(c);
else
redraw = status_redraw(c);
- if (!redraw)
- c->flags &= ~CLIENT_REDRAWSTATUS;
+ if (!redraw && (~flags & CLIENT_REDRAWSTATUSALWAYS))
+ flags &= ~CLIENT_REDRAWSTATUS;
if (options_get_number(wo, "pane-border-status") != CELL_STATUS_OFF) {
redraw = 0;
@@ -368,8 +368,9 @@ screen_redraw_update(struct client *c)
redraw = 1;
}
if (redraw)
- c->flags |= CLIENT_REDRAWBORDERS;
+ flags |= CLIENT_REDRAWBORDERS;
}
+ return (flags);
}
/* Set up redraw context. */
@@ -398,21 +399,23 @@ void
screen_redraw_screen(struct client *c)
{
struct screen_redraw_ctx ctx;
+ int flags;
if (c->flags & CLIENT_SUSPENDED)
return;
- screen_redraw_update(c);
+ flags = screen_redraw_update(c, c->flags);
screen_redraw_set_context(c, &ctx);
- if (c->flags & (CLIENT_REDRAWWINDOW|CLIENT_REDRAWBORDERS)) {
+ if (flags & (CLIENT_REDRAWWINDOW|CLIENT_REDRAWBORDERS)) {
if (ctx.pane_status != CELL_STATUS_OFF)
screen_redraw_draw_pane_status(&ctx);
screen_redraw_draw_borders(&ctx);
}
- if (c->flags & CLIENT_REDRAWWINDOW)
+ if (flags & CLIENT_REDRAWWINDOW)
screen_redraw_draw_panes(&ctx);
- if (ctx.lines != 0 && (c->flags & CLIENT_REDRAWSTATUS))
+ if (ctx.lines != 0 &&
+ (flags & (CLIENT_REDRAWSTATUS|CLIENT_REDRAWSTATUSALWAYS)))
screen_redraw_draw_status(&ctx);
tty_reset(&c->tty);
}
diff --git a/usr.bin/tmux/server-client.c b/usr.bin/tmux/server-client.c
index 87062ed7ee6..804ed58761d 100644
--- a/usr.bin/tmux/server-client.c
+++ b/usr.bin/tmux/server-client.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: server-client.c,v 1.256 2018/08/19 16:45:03 nicm Exp $ */
+/* $OpenBSD: server-client.c,v 1.257 2018/08/19 20:13:07 nicm Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -1319,6 +1319,12 @@ server_client_check_redraw(struct client *c)
if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED))
return;
+ if (c->flags & CLIENT_ALLREDRAWFLAGS) {
+ log_debug("%s: redraw%s%s%s", c->name,
+ (c->flags & CLIENT_REDRAWWINDOW) ? " window" : "",
+ (c->flags & CLIENT_REDRAWSTATUS) ? " status" : "",
+ (c->flags & CLIENT_REDRAWBORDERS) ? " borders" : "");
+ }
/*
* If there is outstanding data, defer the redraw until it has been
diff --git a/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h
index 58b0cb36819..c34eab2ca1c 100644
--- a/usr.bin/tmux/tmux.h
+++ b/usr.bin/tmux/tmux.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.840 2018/08/19 16:45:03 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.841 2018/08/19 20:13:07 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -1350,8 +1350,12 @@ struct client {
#define CLIENT_TRIPLECLICK 0x200000
#define CLIENT_SIZECHANGED 0x400000
#define CLIENT_STATUSOFF 0x800000
+#define CLIENT_REDRAWSTATUSALWAYS 0x1000000
#define CLIENT_ALLREDRAWFLAGS \
- (CLIENT_REDRAWWINDOW|CLIENT_REDRAWSTATUS|CLIENT_REDRAWBORDERS)
+ (CLIENT_REDRAWWINDOW| \
+ CLIENT_REDRAWSTATUS| \
+ CLIENT_REDRAWSTATUSALWAYS| \
+ CLIENT_REDRAWBORDERS)
int flags;
struct key_table *keytable;