changeset 33059:8fab1b57781b

(displayed_window_lines): Change buffers if necessary. Fix computation of displayed lines.
author Gerd Moellmann <gerd@gnu.org>
date Mon, 30 Oct 2000 12:51:17 +0000
parents 62535102746c
children cbc5cc2c5a55
files src/window.c
diffstat 1 files changed, 18 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/window.c	Mon Oct 30 12:21:45 2000 +0000
+++ b/src/window.c	Mon Oct 30 12:51:17 2000 +0000
@@ -4324,19 +4324,35 @@
   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;
 }