changeset 40435:b23a0899363f

(x_after_update_window_line): Clear internal border in different circumstances.
author Gerd Moellmann <gerd@gnu.org>
date Mon, 29 Oct 2001 11:15:10 +0000
parents 19b5ee5b4397
children 1c46df5ab503
files src/xterm.c
diffstat 1 files changed, 31 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/src/xterm.c	Mon Oct 29 09:44:56 2001 +0000
+++ b/src/xterm.c	Mon Oct 29 11:15:10 2001 +0000
@@ -769,33 +769,44 @@
      struct glyph_row *desired_row;
 {
   struct window *w = updated_window;
+  struct frame *f;
+  int width;
   
   xassert (w);
   
   if (!desired_row->mode_line_p && !w->pseudo_window_p)
     {
-      struct frame *f;
-      int width;
-      
       BLOCK_INPUT;
       x_draw_row_bitmaps (w, desired_row);
-
-      /* When a window has disappeared, make sure that no rest of
-	 full-width rows stays visible in the internal border.  */
-      if (windows_or_buffers_changed
-	  && (f = XFRAME (w->frame),
-	      width = FRAME_INTERNAL_BORDER_WIDTH (f),
-	      width != 0))
-	{
-	  int height = desired_row->visible_height;
-	  int x = (window_box_right (w, -1)
-		   + FRAME_X_RIGHT_FLAGS_AREA_WIDTH (f));
-	  int y = WINDOW_TO_FRAME_PIXEL_Y (w, max (0, desired_row->y));
-
-	  x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
-			x, y, width, height, False);
-	}
-      
+      UNBLOCK_INPUT;
+    }
+      
+  /* When a window has disappeared, make sure that no rest of
+     full-width rows stays visible in the internal border.  Could
+     check here if updated_window is the leftmost/rightmost window,
+     but I guess it's not worth doing since vertically split windows
+     are almost never used, internal border is rarely set, and the
+     overhead is very small.  */
+  if (windows_or_buffers_changed
+      && desired_row->full_width_p
+      && (f = XFRAME (w->frame),
+	  width = FRAME_INTERNAL_BORDER_WIDTH (f),
+	  width != 0))
+    {
+      int height = desired_row->visible_height;
+      int y = WINDOW_TO_FRAME_PIXEL_Y (w, max (0, desired_row->y));
+
+      /* Internal border is drawn below the tool bar.  */
+      if (WINDOWP (f->tool_bar_window)
+	  && w == XWINDOW (f->tool_bar_window))
+	y -= width;
+      
+      BLOCK_INPUT;
+      x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+		    0, y, width, height, False);
+      x_clear_area (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
+		    f->output_data.x->pixel_width - width,
+		    y, width, height, False);
       UNBLOCK_INPUT;
     }
 }