summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2019-11-29 18:54:09 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2019-11-29 18:54:09 +0000
commit0c999a402ece7b40e6ae84547893421b52d508ff (patch)
tree4b64da3e74273c7af05f6157c6998eee85f118b3
parent28961dd5a38dd5a7b703ed0e6625fa9a65556d35 (diff)
parent866b053f25227d39c975f187a8ad54bd70efd139 (diff)
Merge branch 'master' into sixel
-rw-r--r--cmd-attach-session.c2
-rw-r--r--format.c7
-rw-r--r--resize.c26
3 files changed, 27 insertions, 8 deletions
diff --git a/cmd-attach-session.c b/cmd-attach-session.c
index 6de734e5..477d3517 100644
--- a/cmd-attach-session.c
+++ b/cmd-attach-session.c
@@ -127,6 +127,7 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag,
gettimeofday(&s->last_attached_time, NULL);
server_redraw_client(c);
s->curw->flags &= ~WINLINK_ALERTFLAGS;
+ s->curw->window->latest = c;
} else {
if (server_client_open(c, &cause) != 0) {
cmdq_error(item, "open terminal failed: %s", cause);
@@ -159,6 +160,7 @@ cmd_attach_session(struct cmdq_item *item, const char *tflag, int dflag,
gettimeofday(&s->last_attached_time, NULL);
server_redraw_client(c);
s->curw->flags &= ~WINLINK_ALERTFLAGS;
+ s->curw->window->latest = c;
if (~c->flags & CLIENT_CONTROL)
proc_send(c->peer, MSG_READY, -1, NULL, 0);
diff --git a/format.c b/format.c
index 477f65ad..ee507340 100644
--- a/format.c
+++ b/format.c
@@ -1128,11 +1128,10 @@ format_find(struct format_tree *ft, const char *key, int modifiers)
xasprintf(&found, "%lld", (long long)fe->t);
goto found;
}
- if (fe->value == NULL && fe->cb != NULL) {
+ if (fe->value == NULL && fe->cb != NULL)
fe->cb(ft, fe);
- if (fe->value == NULL)
- fe->value = xstrdup("");
- }
+ if (fe->value == NULL)
+ fe->value = xstrdup("");
found = xstrdup(fe->value);
goto found;
}
diff --git a/resize.c b/resize.c
index 9f74b33e..054b025f 100644
--- a/resize.c
+++ b/resize.c
@@ -80,7 +80,7 @@ default_window_size(struct client *c, struct session *s, struct window *w,
u_int *sx, u_int *sy, u_int *xpixel, u_int *ypixel, int type)
{
struct client *loop;
- u_int cx, cy;
+ u_int cx, cy, n;
const char *value;
if (type == -1)
@@ -149,12 +149,22 @@ default_window_size(struct client *c, struct session *s, struct window *w,
*xpixel = c->tty.xpixel;
*ypixel = c->tty.ypixel;
} else {
+ if (w == NULL)
+ goto manual;
+ n = 0;
+ TAILQ_FOREACH(loop, &clients, entry) {
+ if (!ignore_client_size(loop) &&
+ session_has(loop->session, w)) {
+ if (++n > 1)
+ break;
+ }
+ }
*sx = *sy = UINT_MAX;
*xpixel = *ypixel = 0;
TAILQ_FOREACH(loop, &clients, entry) {
if (ignore_client_size(loop))
continue;
- if (w != NULL && loop != w->latest)
+ if (n > 1 && loop != w->latest)
continue;
s = loop->session;
@@ -204,7 +214,7 @@ recalculate_size(struct window *w)
{
struct session *s;
struct client *c;
- u_int sx, sy, cx, cy, xpixel = 0, ypixel = 0;
+ u_int sx, sy, cx, cy, xpixel = 0, ypixel = 0, n;
int type, current, has, changed;
if (w->active == NULL)
@@ -277,11 +287,19 @@ recalculate_size(struct window *w)
changed = 0;
break;
case WINDOW_SIZE_LATEST:
+ n = 0;
+ TAILQ_FOREACH(c, &clients, entry) {
+ if (!ignore_client_size(c) &&
+ session_has(c->session, w)) {
+ if (++n > 1)
+ break;
+ }
+ }
sx = sy = UINT_MAX;
TAILQ_FOREACH(c, &clients, entry) {
if (ignore_client_size(c))
continue;
- if (c != w->latest)
+ if (n > 1 && c != w->latest)
continue;
s = c->session;