tsm: screen: fix moving cursor when scrolling during resize

If we scroll the screen during resize to keep the screen-content constant,
we should also move the cursor position. Otherwise, the application has an
inconsistent state.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
David Herrmann 2012-09-30 23:38:30 +02:00
parent f198f28d02
commit bf319380ef

View File

@ -500,7 +500,7 @@ int tsm_screen_resize(struct tsm_screen *con, unsigned int x,
unsigned int y)
{
struct line **cache;
unsigned int i, j, width;
unsigned int i, j, width, diff;
int ret;
bool *tab_ruler;
@ -593,8 +593,14 @@ int tsm_screen_resize(struct tsm_screen *con, unsigned int x,
con->cursor_x = con->size_x - 1;
/* scroll buffer if screen height shrinks */
if (con->size_y != 0 && y < con->size_y)
screen_scroll_up(con, con->size_y - y);
if (con->size_y != 0 && y < con->size_y) {
diff = con->size_y - y;
screen_scroll_up(con, diff);
if (con->cursor_y > diff)
con->cursor_y -= diff;
else
con->cursor_y = 0;
}
con->size_y = y;
con->margin_bottom = con->size_y - 1;