From: Kim F. Storm Date: Mon, 24 Jan 2005 13:22:29 +0000 (+0000) Subject: (window_scroll_pixel_based): Fix scrolling in the wrong X-Git-Tag: ttn-vms-21-2-B4~2600 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=e856c2162b0b024acf8dd316c5e47b3f938a0fb1;p=emacs.git (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 --git a/src/window.c b/src/window.c index bdc105da3ed..07b197cef75 100644 --- a/src/window.c +++ b/src/window.c @@ -4580,7 +4580,9 @@ window_scroll_pixel_based (window, n, whole, noerror) 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 @@ window_scroll_pixel_based (window, n, whole, noerror) 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