Do not save cursor in tresize.
authornoname <noname@inventati.org>
Mon, 28 Apr 2014 22:35:22 +0000 (02:35 +0400)
committerRoberto E. Vargas Caballero <k0ga@shike2.com>
Tue, 29 Apr 2014 13:17:50 +0000 (15:17 +0200)
This patch fixes the bug introduced in
8f11e1cd034ff28ca47bb4955505db7fa8016ba8

To reproduce the bug:
1. Save cursor: printf '\e[s'
2. Load cursor: printf '\e[u'
3. Resize st window.
4. Load cursor again: printf '\e[u'

st.c

diff --git a/st.c b/st.c
index 5198749..c50a202 100644 (file)
--- a/st.c
+++ b/st.c
@@ -2634,6 +2634,7 @@ tresize(int col, int row) {
        int slide = term.c.y - row + 1;
        bool *bp;
        Line *orig;
+       TCursor c;
 
        if(col < 1 || row < 1)
                return 0;
@@ -2695,6 +2696,7 @@ tresize(int col, int row) {
        tmoveto(term.c.x, term.c.y);
        /* Clearing both screens */
        orig = term.line;
+       c = term.c;
        do {
                if(mincol < col && 0 < minrow) {
                        tclearregion(mincol, 0, col - 1, minrow - 1);
@@ -2702,10 +2704,10 @@ tresize(int col, int row) {
                if(0 < col && minrow < row) {
                        tclearregion(0, minrow, col - 1, row - 1);
                }
-               tcursor(CURSOR_SAVE);
                tswapscreen();
                tcursor(CURSOR_LOAD);
        } while(orig != term.line);
+       term.c = c;
 
        return (slide > 0);
 }