diff options
author | Thomas Adam <thomas@xteddy.org> | 2016-09-03 00:01:14 +0100 |
---|---|---|
committer | Thomas Adam <thomas@xteddy.org> | 2016-09-03 00:01:14 +0100 |
commit | 999c1c771b4282c60017b86b26f03136398ae09c (patch) | |
tree | d2dd889dc153371f662af992e586c0898d48321c /grid.c | |
parent | 727ce7e4bb19038b7952c7330b045ac6e1216ede (diff) | |
parent | 2627ab322e0e8dffbf86b1c2eb969139a8062174 (diff) | |
download | rtmux-999c1c771b4282c60017b86b26f03136398ae09c.tar.gz rtmux-999c1c771b4282c60017b86b26f03136398ae09c.tar.bz2 rtmux-999c1c771b4282c60017b86b26f03136398ae09c.zip |
Merge branch 'obsd-master'
Diffstat (limited to 'grid.c')
-rw-r--r-- | grid.c | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -99,6 +99,7 @@ grid_create(u_int sx, u_int sy, u_int hlimit) gd->flags = GRID_HISTORY; + gd->hscrolled = 0; gd->hsize = 0; gd->hlimit = hlimit; @@ -170,6 +171,8 @@ grid_collect_history(struct grid *gd) grid_move_lines(gd, 0, yy, gd->hsize + gd->sy - yy); gd->hsize -= yy; + if (gd->hscrolled > gd->hsize) + gd->hscrolled = gd->hsize; } /* @@ -186,6 +189,7 @@ grid_scroll_history(struct grid *gd) sizeof *gd->linedata); memset(&gd->linedata[yy], 0, sizeof gd->linedata[yy]); + gd->hscrolled++; gd->hsize++; } @@ -196,7 +200,9 @@ grid_clear_history(struct grid *gd) grid_clear_lines(gd, 0, gd->hsize); grid_move_lines(gd, 0, gd->hsize, gd->sy); + gd->hscrolled = 0; gd->hsize = 0; + gd->linedata = xreallocarray(gd->linedata, gd->sy, sizeof *gd->linedata); } @@ -231,6 +237,7 @@ grid_scroll_history_region(struct grid *gd, u_int upper, u_int lower) memset(gl_lower, 0, sizeof *gl_lower); /* Move the history offset down over the line. */ + gd->hscrolled++; gd->hsize++; } @@ -914,6 +921,10 @@ grid_reflow(struct grid *dst, struct grid *src, u_int new_x) grid_reflow_join(dst, &py, src_gl, new_x); } previous_wrapped = (src_gl->flags & GRID_LINE_WRAPPED); + + /* This is where we started scrolling. */ + if (line == sy + src->hsize - src->hscrolled - 1) + dst->hscrolled = 0; } grid_destroy(src); |