=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/server-client.c,v retrieving revision 1.136 retrieving revision 1.137 diff -c -r1.136 -r1.137 *** src/usr.bin/tmux/server-client.c 2015/04/25 18:33:59 1.136 --- src/usr.bin/tmux/server-client.c 2015/05/06 07:52:06 1.137 *************** *** 1,4 **** ! /* $OpenBSD: server-client.c,v 1.136 2015/04/25 18:33:59 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: server-client.c,v 1.137 2015/05/06 07:52:06 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott *************** *** 875,889 **** server_client_check_redraw(struct client *c) { struct session *s = c->session; struct window_pane *wp; int flags, redraw; if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED)) return; - flags = c->tty.flags & TTY_FREEZE; - c->tty.flags &= ~TTY_FREEZE; - if (c->flags & (CLIENT_REDRAW|CLIENT_STATUS)) { if (options_get_number(&s->options, "set-titles")) server_client_set_title(c); --- 875,887 ---- server_client_check_redraw(struct client *c) { struct session *s = c->session; + struct tty *tty = &c->tty; struct window_pane *wp; int flags, redraw; if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED)) return; if (c->flags & (CLIENT_REDRAW|CLIENT_STATUS)) { if (options_get_number(&s->options, "set-titles")) server_client_set_title(c); *************** *** 898,924 **** c->flags &= ~CLIENT_STATUS; } if (c->flags & CLIENT_REDRAW) { screen_redraw_screen(c, 1, 1, 1); c->flags &= ~(CLIENT_STATUS|CLIENT_BORDERS); } else if (c->flags & CLIENT_REDRAWWINDOW) { TAILQ_FOREACH(wp, &c->session->curw->window->panes, entry) screen_redraw_pane(c, wp); c->flags &= ~CLIENT_REDRAWWINDOW; } else { TAILQ_FOREACH(wp, &c->session->curw->window->panes, entry) { ! if (wp->flags & PANE_REDRAW) screen_redraw_pane(c, wp); } } ! if (c->flags & CLIENT_BORDERS) screen_redraw_screen(c, 0, 0, 1); ! if (c->flags & CLIENT_STATUS) screen_redraw_screen(c, 0, 1, 0); ! c->tty.flags |= flags; c->flags &= ~(CLIENT_REDRAW|CLIENT_STATUS|CLIENT_BORDERS); } --- 896,934 ---- c->flags &= ~CLIENT_STATUS; } + flags = tty->flags & (TTY_FREEZE|TTY_NOCURSOR); + tty->flags = (tty->flags & ~TTY_FREEZE) | TTY_NOCURSOR; + if (c->flags & CLIENT_REDRAW) { + tty_update_mode(tty, tty->mode, NULL); screen_redraw_screen(c, 1, 1, 1); c->flags &= ~(CLIENT_STATUS|CLIENT_BORDERS); } else if (c->flags & CLIENT_REDRAWWINDOW) { + tty_update_mode(tty, tty->mode, NULL); TAILQ_FOREACH(wp, &c->session->curw->window->panes, entry) screen_redraw_pane(c, wp); c->flags &= ~CLIENT_REDRAWWINDOW; } else { TAILQ_FOREACH(wp, &c->session->curw->window->panes, entry) { ! if (wp->flags & PANE_REDRAW) { ! tty_update_mode(tty, tty->mode, NULL); screen_redraw_pane(c, wp); + } } } ! if (c->flags & CLIENT_BORDERS) { ! tty_update_mode(tty, tty->mode, NULL); screen_redraw_screen(c, 0, 0, 1); + } ! if (c->flags & CLIENT_STATUS) { ! tty_update_mode(tty, tty->mode, NULL); screen_redraw_screen(c, 0, 1, 0); + } ! tty->flags = (tty->flags & ~(TTY_FREEZE|TTY_NOCURSOR)) | flags; ! tty_update_mode(tty, tty->mode, NULL); c->flags &= ~(CLIENT_REDRAW|CLIENT_STATUS|CLIENT_BORDERS); }