From ad4a9a79d2e54ec59905eb42f5bd4fa190202dae Mon Sep 17 00:00:00 2001 From: Gerd Moellmann Date: Mon, 30 Oct 2000 12:51:17 +0000 Subject: [PATCH] (displayed_window_lines): Change buffers if necessary. Fix computation of displayed lines. --- src/window.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/window.c b/src/window.c index b408c40f8fd..12b15424c28 100644 --- a/src/window.c +++ b/src/window.c @@ -4324,19 +4324,35 @@ displayed_window_lines (w) struct it it; struct text_pos start; int height = window_box_height (w); + struct buffer *old_buffer; + int bottom_y; + + if (XBUFFER (w->buffer) != current_buffer) + { + old_buffer = current_buffer; + set_buffer_internal (XBUFFER (w->buffer)); + } + else + old_buffer = NULL; SET_TEXT_POS_FROM_MARKER (start, w->start); start_display (&it, w, start); move_it_vertically (&it, height); + if (old_buffer) + set_buffer_internal (old_buffer); + /* Add in empty lines at the bottom of the window. */ - if (it.current_y < height) + bottom_y = it.current_y + it.max_ascent + it.max_descent; + if (bottom_y < height) { struct frame *f = XFRAME (w->frame); - int rest = height - it.current_y; + int rest = height - bottom_y; int lines = (rest + CANON_Y_UNIT (f) - 1) / CANON_Y_UNIT (f); it.vpos += lines; } + else if (bottom_y > height) + ++it.vpos; return it.vpos; } -- 2.39.5