emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/xterm.c


From: Stefan Monnier
Subject: [Emacs-diffs] Changes to emacs/src/xterm.c
Date: Wed, 13 Mar 2002 12:04:52 -0500

Index: emacs/src/xterm.c
diff -c emacs/src/xterm.c:1.712 emacs/src/xterm.c:1.713
*** emacs/src/xterm.c:1.712     Mon Mar 11 13:49:27 2002
--- emacs/src/xterm.c   Wed Mar 13 12:04:49 2002
***************
*** 8553,8583 ****
        XtVaGetValues (widget, XmNsliderSize, &slider_size, NULL);
        UNBLOCK_INPUT;
  
!       /* At the max position of the scroll bar, do a line-wise
!          movement.  Without doing anything, we would be called with
!          the same cs->value again and again.  If we want to make
!          sure that we can reach the end of the buffer, we have to do
!          something.
! 
!          Implementation note: setting bar->dragging always to
!          cs->value gives a smoother movement at the max position.
!          Setting it to nil when doing line-wise movement gives
!          a better slider behavior. */
!       
!       if (cs->value + slider_size == XM_SB_MAX
!           || (dragging_down_p
!               && last_scroll_bar_part == scroll_bar_down_arrow))
!         {
!           part = scroll_bar_down_arrow;
!           bar->dragging = Qnil;
!         }
!       else
!         {
!           whole = XM_SB_RANGE;
!           portion = min (cs->value - XM_SB_MIN, XM_SB_MAX - slider_size);
!           part = scroll_bar_handle;
!           bar->dragging = make_number (cs->value);
!         }
        }
        break;
        
--- 8553,8562 ----
        XtVaGetValues (widget, XmNsliderSize, &slider_size, NULL);
        UNBLOCK_INPUT;
  
!       whole = XM_SB_RANGE - slider_size;
!       portion = min (cs->value - XM_SB_MIN, whole);
!       part = scroll_bar_handle;
!       bar->dragging = make_number (cs->value);
        }
        break;
        
***************
*** 8880,8886 ****
    Widget widget = SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar);
    float top, shown;
  
!   if (whole == 0)
      top = 0, shown = 1;
    else
      {
--- 8859,8885 ----
    Widget widget = SCROLL_BAR_X_WIDGET (FRAME_X_DISPLAY (f), bar);
    float top, shown;
  
!   BLOCK_INPUT;
! 
! #ifdef USE_MOTIF
! 
!   /* We use an estimate of 30 chars per line rather than the real
!      `portion' value.  This has the disadvantage that the thumb size
!      is not very representative, but it makes our life a lot easier.
!      Otherwise, we have to constantly adjust the thumb size, which
!      we can't always do quickly enough: while dragging, the size of
!      the thumb might prevent the user from dragging the thumb all the
!      way to the end.  but Motif and some versions of Xaw3d don't allow
!      updating the thumb size while dragging.  Also, even if we can update
!      its size, the update will often happen too late.
!      If you don't believe it, check out revision 1.650 of xterm.c to see
!      what hoops we were going through and the still poor behavior we got.  */
!   portion = XFASTINT (XWINDOW (bar->window)->height) * 30;
!   /* When the thumb is at the bottom, position == whole.
!      So we need to increase `whole' to make space for the thumb.  */
!   whole += portion;
! 
!   if (whole <= 0)
      top = 0, shown = 1;
    else
      {
***************
*** 8888,8932 ****
        shown = (float) portion / whole;
      }
  
!   BLOCK_INPUT;
! 
! #ifdef USE_MOTIF
!   {
!     int size, value;
! 
!     /* Slider size.  Must be in the range [1 .. MAX - MIN] where MAX
!        is the scroll bar's maximum and MIN is the scroll bar's minimum
!        value.  */
!     size = shown * XM_SB_RANGE;
!     size = min (size, XM_SB_RANGE);
!     size = max (size, 1);
! 
!     /* Position.  Must be in the range [MIN .. MAX - SLIDER_SIZE].  */
!     value = top * XM_SB_RANGE;
!     value = min (value, XM_SB_MAX - size);
!     value = max (value, XM_SB_MIN);
  
!     if (NILP (bar->dragging))
        XmScrollBarSetValues (widget, value, size, 0, 0, False);
!     else if (last_scroll_bar_part == scroll_bar_down_arrow)
!       /* This has the negative side effect that the slider value is
!        not what it would be if we scrolled here using line-wise or
!        page-wise movement.  */
!       XmScrollBarSetValues (widget, value, XM_SB_RANGE - value, 0, 0, False);
!     else
!       {
!       /* If currently dragging, only update the slider size.
!          This reduces flicker effects.  */
!       int old_value, old_size, increment, page_increment;
!       
!       XmScrollBarGetValues (widget, &old_value, &old_size,
!                             &increment, &page_increment);
!       XmScrollBarSetValues (widget, old_value,
!                             min (size, XM_SB_RANGE - old_value),
!                             0, 0, False);
!       }
!   }
  #else /* !USE_MOTIF i.e. use Xaw */
    {
      float old_top, old_shown;
      Dimension height;
--- 8887,8920 ----
        shown = (float) portion / whole;
      }
  
!   if (NILP (bar->dragging))
!     {
!       int size, value;
  
!       /* Slider size.  Must be in the range [1 .. MAX - MIN] where MAX
!          is the scroll bar's maximum and MIN is the scroll bar's minimum
!        value.  */
!       size = shown * XM_SB_RANGE;
!       size = min (size, XM_SB_RANGE);
!       size = max (size, 1);
! 
!       /* Position.  Must be in the range [MIN .. MAX - SLIDER_SIZE].  */
!       value = top * XM_SB_RANGE;
!       value = min (value, XM_SB_MAX - size);
!       value = max (value, XM_SB_MIN);
!       
        XmScrollBarSetValues (widget, value, size, 0, 0, False);
!     }
  #else /* !USE_MOTIF i.e. use Xaw */
+ 
+   if (whole == 0)
+     top = 0, shown = 1;
+   else
+     {
+       top = (float) position / whole;
+       shown = (float) portion / whole;
+     }
+ 
    {
      float old_top, old_shown;
      Dimension height;
***************
*** 9953,9959 ****
  
     EXPECTED is nonzero if the caller knows input is available.  */
  
! int
  XTread_socket (sd, bufp, numchars, expected)
       register int sd;
       /* register */ struct input_event *bufp;
--- 9941,9947 ----
  
     EXPECTED is nonzero if the caller knows input is available.  */
  
! static int
  XTread_socket (sd, bufp, numchars, expected)
       register int sd;
       /* register */ struct input_event *bufp;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]