1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-27 10:54:40 +00:00

(try_scrolling): When computing distance from the scroll margin, don't

use MOVE_TO_Y.
This commit is contained in:
Chong Yidong 2008-10-27 05:15:37 +00:00
parent 6584f2854b
commit 95c97c11e0

View File

@ -12622,7 +12622,7 @@ try_scrolling (window, just_this_one_p, scroll_conservatively,
struct text_pos pos, startp;
struct it it;
int this_scroll_margin, scroll_max, rc, height;
int dy = 0, amount_to_scroll = 0, scroll_down_p = 0;
int dy = 0, amount_to_scroll = 0;
int extra_scroll_margin_lines = last_line_misfit ? 1 : 0;
Lisp_Object aggressive;
int scroll_limit = INT_MAX / FRAME_LINE_HEIGHT (f);
@ -12687,8 +12687,7 @@ try_scrolling (window, just_this_one_p, scroll_conservatively,
window, or below. Compute the distance from the scroll
margin to PT, and give up if the distance is greater than
scroll_max. */
move_it_to (&it, PT, -1, it.last_visible_y - 1, -1,
MOVE_TO_POS | MOVE_TO_Y);
move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS);
/* To make point visible, we must move the window start down
so that the cursor line is visible, which means we have
@ -12697,18 +12696,11 @@ try_scrolling (window, just_this_one_p, scroll_conservatively,
if (dy > scroll_max)
return SCROLLING_FAILED;
scroll_down_p = 1;
}
}
if (scroll_down_p)
if (dy > 0)
{
/* Move the window start down. If scrolling conservatively,
move it just enough down to make point visible. If
scroll_step is set, move it down by scroll_step. */
start_display (&it, w, startp);
if (scroll_conservatively)
/* Set AMOUNT_TO_SCROLL to at least one line,
and at most scroll_conservatively lines. */
@ -12733,10 +12725,14 @@ try_scrolling (window, just_this_one_p, scroll_conservatively,
if (amount_to_scroll <= 0)
return SCROLLING_FAILED;
/* Move the window start down. If scrolling conservatively,
move it just enough down to make point visible. If
scroll_step is set, move it down by scroll_step. */
start_display (&it, w, startp);
move_it_vertically (&it, amount_to_scroll);
/* If moving by amount_to_scroll leaves STARTP unchanged,
move it down one screen line. */
move_it_vertically (&it, amount_to_scroll);
if (CHARPOS (it.current.pos) == CHARPOS (startp))
move_it_by_lines (&it, 1, 1);
startp = it.current.pos;