changeset 39999:127fa811febd

(try_window_id): Don't display lines after the window end if the rest of the window after the window end was already blank.
author Gerd Moellmann <gerd@gnu.org>
date Wed, 17 Oct 2001 14:05:09 +0000
parents 85870610aed2
children 79aa94c4266e
files src/xdisp.c
diffstat 1 files changed, 25 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/src/xdisp.c	Wed Oct 17 13:34:31 2001 +0000
+++ b/src/xdisp.c	Wed Oct 17 14:05:09 2001 +0000
@@ -11799,6 +11799,8 @@
   last_text_row_at_end = NULL;
   if (dy < 0)
     {
+      /* Scrolling up can leave for example a partially visible line
+	 at the end of the window to be redisplayed.  */
       /* Set last_row to the glyph row in the current matrix where the
 	 window end line is found.  It has been moved up or down in
 	 the matrix by dvpos.  */
@@ -11825,23 +11827,29 @@
 	  ++last_row;
 	}
 
-      /* We may start in a continuation line.  If so, we have to get
-	 the right continuation_lines_width and current_x.  */
-      it.continuation_lines_width = last_row->continuation_lines_width;
-      it.hpos = it.current_x = 0;
-      
-      /* Display the rest of the lines at the window end.  */
-      it.glyph_row = MATRIX_ROW (desired_matrix, it.vpos);
-      while (it.current_y < it.last_visible_y
-	     && !fonts_changed_p)
-	{
-	  /* Is it always sure that the display agrees with lines in
-	     the current matrix?  I don't think so, so we mark rows
-	     displayed invalid in the current matrix by setting their
-	     enabled_p flag to zero.  */
-	  MATRIX_ROW (w->current_matrix, it.vpos)->enabled_p = 0;
-	  if (display_line (&it))
-	    last_text_row_at_end = it.glyph_row - 1;
+      if (IT_CHARPOS (it) < ZV)
+	{
+	  /* Otherwise, the rest of the window after the window
+	     end was blank, and scrolling didn't change that.  */
+
+	  /* We may start in a continuation line.  If so, we have to
+	     get the right continuation_lines_width and current_x.  */
+	  it.continuation_lines_width = last_row->continuation_lines_width;
+	  it.hpos = it.current_x = 0;
+
+	  /* Display the rest of the lines at the window end.  */
+	  it.glyph_row = MATRIX_ROW (desired_matrix, it.vpos);
+	  while (it.current_y < it.last_visible_y
+		 && !fonts_changed_p)
+	    {
+	      /* Is it always sure that the display agrees with lines in
+		 the current matrix?  I don't think so, so we mark rows
+		 displayed invalid in the current matrix by setting their
+		 enabled_p flag to zero.  */
+	      MATRIX_ROW (w->current_matrix, it.vpos)->enabled_p = 0;
+	      if (display_line (&it))
+		last_text_row_at_end = it.glyph_row - 1;
+	    }
 	}
     }