# HG changeset patch # User Kim F. Storm # Date 1106572949 0 # Node ID 351ffb20ab9fe3abe6825c53be4e36b7f8809b2e # Parent 00046b439a5e10c5418c31610ae796fb7928fb88 (window_scroll_pixel_based): Fix scrolling in the wrong direction if window height was smaller than next-screen-context-lines. Now always scroll at least one line in the requested direction. Ensure that we actually do scroll backwards when requested to do so. diff -r 00046b439a5e -r 351ffb20ab9f src/window.c --- a/src/window.c Mon Jan 24 13:22:07 2005 +0000 +++ b/src/window.c Mon Jan 24 13:22:29 2005 +0000 @@ -4580,7 +4580,9 @@ int px; int dy = WINDOW_FRAME_LINE_HEIGHT (w); if (whole) - dy = window_box_height (w) - next_screen_context_lines * dy; + dy = max ((window_box_height (w) + - next_screen_context_lines * dy), + dy); dy *= n; if (n < 0 && (px = XINT (XCAR (tem))) > 0) @@ -4615,18 +4617,26 @@ start_display (&it, w, start); if (whole) { - int screen_full = (window_box_height (w) - - next_screen_context_lines * FRAME_LINE_HEIGHT (it.f)); - int dy = n * screen_full; + int start_pos = IT_CHARPOS (it); + int dy = WINDOW_FRAME_LINE_HEIGHT (w); + dy = max ((window_box_height (w) + - next_screen_context_lines * dy), + dy) * n; /* Note that move_it_vertically always moves the iterator to the start of a line. So, if the last line doesn't have a newline, we would end up at the start of the line ending at ZV. */ if (dy <= 0) - move_it_vertically_backward (&it, -dy); + { + move_it_vertically_backward (&it, -dy); + /* Ensure we actually does move, e.g. in case we are currently + looking at an image that is taller that the window height. */ + while (start_pos == IT_CHARPOS (it) + && start_pos > BEGV) + move_it_by_lines (&it, -1, 1); + } else if (dy > 0) { - int start_pos = IT_CHARPOS (it); move_it_to (&it, ZV, -1, it.current_y + dy, -1, MOVE_TO_POS | MOVE_TO_Y); /* Ensure we actually does move, e.g. in case we are currently