changeset 97347:bf6fca3efaf5

(redisplay_window): Revert last change. (try_window): Check bottom scroll margin too.
author Chong Yidong <cyd@stupidchicken.com>
date Thu, 07 Aug 2008 01:54:06 +0000
parents 6bd54c1d95e1
children bf45b2dcafff
files src/xdisp.c
diffstat 1 files changed, 8 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/xdisp.c	Thu Aug 07 01:53:57 2008 +0000
+++ b/src/xdisp.c	Thu Aug 07 01:54:06 2008 +0000
@@ -13668,11 +13668,6 @@
       debug_method_add (w, "same window start");
 #endif
 
-      /* If there's a scroll margin, we must try to scroll, in case
-	 point is now in the scroll margin.  */
-      if (scroll_margin > 0)
-	goto try_to_scroll;
-
       /* Try to redisplay starting at same place as before.
          If point has not moved off frame, accept the results.  */
       if (!current_matrix_up_to_date_p
@@ -14079,9 +14074,13 @@
     {
       int this_scroll_margin;
 
-      this_scroll_margin = max (0, scroll_margin);
-      this_scroll_margin = min (this_scroll_margin, WINDOW_TOTAL_LINES (w) / 4);
-      this_scroll_margin *= FRAME_LINE_HEIGHT (it.f);
+      if (scroll_margin > 0)
+	{
+	  this_scroll_margin = min (scroll_margin, WINDOW_TOTAL_LINES (w) / 4);
+	  this_scroll_margin *= FRAME_LINE_HEIGHT (f);
+	}
+      else
+	this_scroll_margin = 0;
 
       if ((w->cursor.y >= 0	/* not vscrolled */
 	   && w->cursor.y < this_scroll_margin
@@ -14091,7 +14090,7 @@
 	     seems to give wrong results.  We don't want to recenter
 	     when the last line is partly visible, we want to allow
 	     that case to be handled in the usual way.  */
-	  || (w->cursor.y + 1) > it.last_visible_y)
+	  || w->cursor.y > it.last_visible_y - this_scroll_margin - 1)
 	{
 	  w->cursor.vpos = -1;
 	  clear_glyph_matrix (w->desired_matrix);