Subject: Revised visible bell patch

From: Richard Stallman <[email-masked]>
Date: Fri, 27 Sep 1996 03:47:53 -0400

Here is a revised version of the visible-bell patch.
It should look a little nicer.

*** xterm.c	1996/09/25 08:00:39	1.349
--- xterm.c	1996/09/27 07:44:39
***************
*** 1117,1127 ****
      }
  
      {
!       int width  = PIXEL_WIDTH  (f);
!       int height = PIXEL_HEIGHT (f);
  
-       XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc,
- 		      width/4, height/4, width/2, height/2);
        XFlush (FRAME_X_DISPLAY (f));
  
        {
--- 1117,1165 ----
      }
  
      {
!       /* Get the height not including a menu bar widget.  */
!       int height = CHAR_TO_PIXEL_HEIGHT (f, FRAME_HEIGHT (f));
!       /* Height of each line to flash.  */
!       int flash_height = FRAME_LINE_HEIGHT (f);
!       /* These will be the left and right margins of the rectangles.  */
!       int flash_left = FRAME_INTERNAL_BORDER_WIDTH (f);
!       int flash_right = PIXEL_WIDTH (f) - FRAME_INTERNAL_BORDER_WIDTH (f);
! 
!       int width;
! 
!       /* Don't flash the area between a scroll bar and the frame
! 	 edge it is next to.  */
!       switch (FRAME_VERTICAL_SCROLL_BAR_TYPE (f))
! 	{
! 	case vertical_scroll_bar_left:
! 	  flash_left += VERTICAL_SCROLL_BAR_WIDTH_TRIM;
! 	  break;
! 
! 	case vertical_scroll_bar_right:
! 	  flash_right -= VERTICAL_SCROLL_BAR_WIDTH_TRIM;
! 	  break;
! 	}
! 
!       width = flash_right - flash_left;
! 
!       /* If window is tall, flash top and bottom line.  */
!       if (height > 3 * FRAME_LINE_HEIGHT (f))
! 	{
! 	  XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc,
! 			  flash_left, FRAME_INTERNAL_BORDER_WIDTH (f),
! 			  width, flash_height);
! 	  XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc,
! 			  flash_left,
! 			  (height - flash_height
! 			   - FRAME_INTERNAL_BORDER_WIDTH (f)),
! 			  width, flash_height);
! 	}
!       else
! 	/* If it is short, flash it all.  */ 
! 	XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc,
! 			flash_left, FRAME_INTERNAL_BORDER_WIDTH (f),
! 			width, height - 2 * FRAME_INTERNAL_BORDER_WIDTH (f));
  
        XFlush (FRAME_X_DISPLAY (f));
  
        {
***************
*** 1151,1158 ****
  	  }
        }
  
!       XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc,
! 		      width/4, height/4, width/2, height/2);
        XFreeGC (FRAME_X_DISPLAY (f), gc);
        XFlush (FRAME_X_DISPLAY (f));
      }
--- 1189,1212 ----
  	  }
        }
  
!       /* If window is tall, flash top and bottom line.  */
!       if (height > 3 * FRAME_LINE_HEIGHT (f))
! 	{
! 	  XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc,
! 			  flash_left, FRAME_INTERNAL_BORDER_WIDTH (f),
! 			  width, flash_height);
! 	  XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc,
! 			  flash_left,
! 			  (height - flash_height
! 			   - FRAME_INTERNAL_BORDER_WIDTH (f)),
! 			  width, flash_height);
! 	}
!       else
! 	/* If it is short, flash it all.  */ 
! 	XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc,
! 			flash_left, FRAME_INTERNAL_BORDER_WIDTH (f),
! 			width, height - 2 * FRAME_INTERNAL_BORDER_WIDTH (f));
! 
        XFreeGC (FRAME_X_DISPLAY (f), gc);
        XFlush (FRAME_X_DISPLAY (f));
      }