File: upstream-b8f2dd8237.diff

package info (click to toggle)
tmux 2.3-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 3,032 kB
  • ctags: 5,763
  • sloc: ansic: 36,368; sh: 4,108; awk: 339; makefile: 247
file content (123 lines) | stat: -rw-r--r-- 3,531 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
commit b8f2dd8237dca568308e1c273f376191f55e880e
Author: nicm <nicm>
Date:   Sun Oct 9 16:24:34 2016 +0000

    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.

--- a/screen-redraw.c
+++ b/screen-redraw.c
@@ -328,6 +328,35 @@
 	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 @@
 	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 @@
 	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);
 }
 
--- a/server-client.c
+++ b/server-client.c
@@ -959,7 +959,7 @@
 	struct session		*s = c->session;
 	struct tty		*tty = &c->tty;
 	struct window_pane	*wp;
-	int		 	 flags, masked, redraw;
+	int		 	 flags, masked;
 
 	if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED))
 		return;
@@ -967,15 +967,7 @@
 	if (c->flags & (CLIENT_REDRAW|CLIENT_STATUS)) {
 		if (options_get_number(s->options, "set-titles"))
 			server_client_set_title(c);
-
-		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;
+		screen_redraw_update(c); /* will adjust flags */
 	}
 
 	flags = tty->flags & (TTY_FREEZE|TTY_NOCURSOR);
--- a/tmux.h
+++ b/tmux.h
@@ -2097,6 +2097,7 @@
 void	 screen_write_rawstring(struct screen_write_ctx *, u_char *, u_int);
 
 /* screen-redraw.c */
+void	 screen_redraw_update(struct client *);
 void	 screen_redraw_screen(struct client *, int, int, int);
 void	 screen_redraw_pane(struct client *, struct window_pane *);