Fix crash on load of bigger font. It reduce width and height of terminal, but

current cursor position stay bigger that terminal window size, so next input
triggers assert.

Reported by:	emaste

Sponsored by:	The FreeBSD Foundation
This commit is contained in:
ray 2014-02-06 11:38:39 +00:00
parent 039198c1be
commit b1122e1794

View File

@ -338,10 +338,26 @@ teken_get_winsize(teken_t *t)
return (&t->t_winsize); return (&t->t_winsize);
} }
static void
taken_trim_cursor_pos(teken_t *t, const teken_pos_t *new)
{
const teken_pos_t *cur;
cur = &t->t_winsize;
if (cur->tp_row < new->tp_row || cur->tp_col < new->tp_col)
return;
if (t->t_cursor.tp_row >= new->tp_row)
t->t_cursor.tp_row = new->tp_row - 1;
if (t->t_cursor.tp_col >= new->tp_col)
t->t_cursor.tp_col = new->tp_col - 1;
}
void void
teken_set_winsize(teken_t *t, const teken_pos_t *p) teken_set_winsize(teken_t *t, const teken_pos_t *p)
{ {
taken_trim_cursor_pos(t, p);
t->t_winsize = *p; t->t_winsize = *p;
teken_subr_do_reset(t); teken_subr_do_reset(t);
} }
@ -350,6 +366,7 @@ void
teken_set_winsize_noreset(teken_t *t, const teken_pos_t *p) teken_set_winsize_noreset(teken_t *t, const teken_pos_t *p)
{ {
taken_trim_cursor_pos(t, p);
t->t_winsize = *p; t->t_winsize = *p;
teken_subr_do_resize(t); teken_subr_do_resize(t);
} }