summaryrefslogtreecommitdiff
path: root/src/xdisp.c
diff options
context:
space:
mode:
authorGerd Moellmann <gerd@gnu.org>2001-10-17 14:05:34 +0000
committerGerd Moellmann <gerd@gnu.org>2001-10-17 14:05:34 +0000
commit9c6ba6d10c11eca11586e8fb3841435fc9a61dc9 (patch)
tree86954337da923b34c01ac9c9eface7885643d0da /src/xdisp.c
parent71275ee954a1f343a8df64d518ec8a5f34755be5 (diff)
downloademacs-9c6ba6d10c11eca11586e8fb3841435fc9a61dc9.tar.gz
(try_window_id): Don't display lines after the window
end if the rest of the window after the window end was already blank.
Diffstat (limited to 'src/xdisp.c')
-rw-r--r--src/xdisp.c40
1 files changed, 24 insertions, 16 deletions
diff --git a/src/xdisp.c b/src/xdisp.c
index 533b7927347..f1d1f792685 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -11799,6 +11799,8 @@ try_window_id (w)
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 @@ try_window_id (w)
++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)
+ if (IT_CHARPOS (it) < ZV)
{
- /* 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;
+ /* 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;
+ }
}
}