--- rxvt-unicode/src/screen.C 2013/03/25 15:41:07 1.438 +++ rxvt-unicode/src/screen.C 2013/03/27 17:24:16 1.440 @@ -717,7 +717,7 @@ if (option (Opt_scrollWithBuffer) && view_start != 0 && view_start != -saveLines) - scr_page (UP, count); + scr_page (count); if (SHOULD_INVOKE (HOOK_SCROLL_BACK)) HOOK_INVOKE ((this, HOOK_SCROLL_BACK, DT_INT, count, DT_INT, top_row, DT_END)); @@ -1912,13 +1912,9 @@ * direction should be UP or DN */ bool -rxvt_term::scr_page (enum page_dirn direction, int nlines) NOTHROW +rxvt_term::scr_page (int nlines) NOTHROW { - int new_view_start = - direction == UP ? view_start - nlines - : view_start + nlines; - - return scr_changeview (new_view_start); + return scr_changeview (view_start - nlines); } bool @@ -2085,8 +2081,6 @@ * C: set the cursor character (s) */ { - bool setoldcursor; - #ifdef CURSOR_BLINK if (hidden_cursor) showcursor = 0; @@ -2147,7 +2141,6 @@ } /* make sure no outline cursor is left around */ - setoldcursor = 0; if (ocrow != -1) { if (screen.cur.row - view_start != ocrow @@ -2156,26 +2149,19 @@ if (ocrow < nrow && oldcursor.col < ncol) drawn_buf[ocrow].r[oldcursor.col] ^= (RS_RVid | RS_Uline); - - if (focus || !showcursor) - oldcursor.row = -1; - else - setoldcursor = 1; } } - else if (!focus) - setoldcursor = 1; - if (setoldcursor) + // save the current cursor coordinates if the cursor is visible + // and the window is unfocused, so as to clear the outline cursor + // in the next refresh if the cursor moves + if (showcursor && !focus && screen.cur.row - view_start < nrow) { - if (screen.cur.row - view_start >= nrow) - oldcursor.row = -1; - else - { - oldcursor.row = screen.cur.row - view_start; - oldcursor.col = screen.cur.col; - } + oldcursor.row = screen.cur.row - view_start; + oldcursor.col = screen.cur.col; } + else + oldcursor.row = -1; } #ifndef NO_SLOW_LINK_SUPPORT