diff options
author | nicm <nicm> | 2015-05-06 07:52:06 +0000 |
---|---|---|
committer | nicm <nicm> | 2015-05-06 07:52:06 +0000 |
commit | 33a585c47fcceb55e79a67a5fc47902d6992e68d (patch) | |
tree | 9b784e4e47b9165b0444cba2fde4a1779d78bc9b /tty.c | |
parent | 672df72b715117e9994e72f0248c530eda8fbb8d (diff) | |
download | rtmux-33a585c47fcceb55e79a67a5fc47902d6992e68d.tar.gz rtmux-33a585c47fcceb55e79a67a5fc47902d6992e68d.tar.bz2 rtmux-33a585c47fcceb55e79a67a5fc47902d6992e68d.zip |
Turn cursor off during redraw, pointed out by George Nachman.
Diffstat (limited to 'tty.c')
-rw-r--r-- | tty.c | 31 |
1 files changed, 18 insertions, 13 deletions
@@ -500,7 +500,7 @@ tty_update_mode(struct tty *tty, int mode, struct screen *s) { int changed; - if (strcmp(s->ccolour, tty->ccolour)) + if (s != NULL && strcmp(s->ccolour, tty->ccolour)) tty_force_cursor_colour(tty, s->ccolour); if (tty->flags & TTY_NOCURSOR) @@ -517,7 +517,7 @@ tty_update_mode(struct tty *tty, int mode, struct screen *s) } else tty_putcode(tty, TTYC_CIVIS); } - if (tty->cstyle != s->cstyle) { + if (s != NULL && tty->cstyle != s->cstyle) { if (tty_term_has(tty->term, TTYC_SS)) { if (s->cstyle == 0 && tty_term_has(tty->term, TTYC_SE)) @@ -667,8 +667,11 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, struct grid_cell tmpgc; struct utf8_data ud; u_int i, sx; + int flags; - tty_update_mode(tty, tty->mode & ~MODE_CURSOR, s); + flags = tty->flags & TTY_NOCURSOR; + tty->flags |= TTY_NOCURSOR; + tty_update_mode(tty, tty->mode, s); sx = screen_size_x(s); if (sx > s->grid->linedata[s->grid->hsize + py].cellsize) @@ -703,18 +706,20 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, tty_cell(tty, gc, wp); } - if (sx >= tty->sx) { - tty_update_mode(tty, tty->mode, s); - return; + if (sx < tty->sx) { + tty_attributes(tty, &grid_default_cell, wp); + + tty_cursor(tty, ox + sx, oy + py); + if (sx != screen_size_x(s) && + ox + screen_size_x(s) >= tty->sx && + tty_term_has(tty->term, TTYC_EL) && + !tty_fake_bce(tty, wp)) + tty_putcode(tty, TTYC_EL); + else + tty_repeat_space(tty, screen_size_x(s) - sx); } - tty_attributes(tty, &grid_default_cell, wp); - tty_cursor(tty, ox + sx, oy + py); - if (sx != screen_size_x(s) && ox + screen_size_x(s) >= tty->sx && - tty_term_has(tty->term, TTYC_EL) && !tty_fake_bce(tty, wp)) - tty_putcode(tty, TTYC_EL); - else - tty_repeat_space(tty, screen_size_x(s) - sx); + tty->flags = (tty->flags & ~TTY_NOCURSOR) | flags; tty_update_mode(tty, tty->mode, s); } |