It is not OK to ignore SIGWINCH if SIOCGWINSZ reports the size has

unchanged, because it may have changed and changed back in the time
between us getting the signal and calling ioctl(). Always redraw when we
see SIGWINCH.
This commit is contained in:
nicm 2017-05-31 10:29:15 +00:00
parent 80c6b487dc
commit ea6428a5d2
3 changed files with 8 additions and 15 deletions

View File

@ -1451,10 +1451,9 @@ server_client_dispatch(struct imsg *imsg, void *arg)
if (c->flags & CLIENT_CONTROL)
break;
if (tty_resize(&c->tty)) {
recalculate_sizes();
server_redraw_client(c);
}
tty_resize(&c->tty);
recalculate_sizes();
server_redraw_client(c);
if (c->session != NULL)
notify_client("client-resized", c);
break;

4
tmux.h
View File

@ -1661,8 +1661,8 @@ void tty_puts(struct tty *, const char *);
void tty_putc(struct tty *, u_char);
void tty_putn(struct tty *, const void *, size_t, u_int);
int tty_init(struct tty *, struct client *, int, char *);
int tty_resize(struct tty *);
int tty_set_size(struct tty *, u_int, u_int);
void tty_resize(struct tty *);
void tty_set_size(struct tty *, u_int, u_int);
void tty_start_tty(struct tty *);
void tty_stop_tty(struct tty *);
void tty_set_title(struct tty *, const char *);

12
tty.c
View File

@ -120,7 +120,7 @@ tty_init(struct tty *tty, struct client *c, int fd, char *term)
return (0);
}
int
void
tty_resize(struct tty *tty)
{
struct client *c = tty->client;
@ -139,21 +139,15 @@ tty_resize(struct tty *tty)
sy = 24;
}
log_debug("%s: %s now %ux%u", __func__, c->name, sx, sy);
if (!tty_set_size(tty, sx, sy))
return (0);
tty_set_size(tty, sx, sy);
tty_invalidate(tty);
return (1);
}
int
void
tty_set_size(struct tty *tty, u_int sx, u_int sy)
{
if (sx == tty->sx && sy == tty->sy)
return (0);
tty->sx = sx;
tty->sy = sy;
return (1);
}
static void