unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* scroll-bar-toolkit-scroll
@ 2002-07-29  1:12 Richard Stallman
  2002-07-29 10:51 ` scroll-bar-toolkit-scroll Gerd Moellmann
  0 siblings, 1 reply; 16+ messages in thread
From: Richard Stallman @ 2002-07-29  1:12 UTC (permalink / raw)
  Cc: emacs-devel

scroll-bar-toolkit-scroll has no doc string; it needs one.  More
importantly, I am concerned about what it does.  It is not
compatible with the non-toolkit scroll commands.  What model
was it designed to be compatible with?

I also wonder if it is being triggered at the proper time.
Is it supposed to let you drag the handle?  To do that properly,
it has to be activated on the down event, but that does not seem
to be the case.  I can't really understand the comment in keyboard.c
around line 5188; maybe it says that Emacs does not get a down event,
or maybe only that Emacs can't distinguish down from up.  Which is it?

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: scroll-bar-toolkit-scroll
  2002-07-29  1:12 scroll-bar-toolkit-scroll Richard Stallman
@ 2002-07-29 10:51 ` Gerd Moellmann
  2002-07-30  0:59   ` scroll-bar-toolkit-scroll Richard Stallman
  0 siblings, 1 reply; 16+ messages in thread
From: Gerd Moellmann @ 2002-07-29 10:51 UTC (permalink / raw)
  Cc: emacs-devel

Richard Stallman <rms@gnu.org> writes:

> scroll-bar-toolkit-scroll has no doc string; it needs one.  More
> importantly, I am concerned about what it does.  It is not
> compatible with the non-toolkit scroll commands.  What model
> was it designed to be compatible with?

None.

> I also wonder if it is being triggered at the proper time.
> Is it supposed to let you drag the handle?  To do that properly,
> it has to be activated on the down event, but that does not seem
> to be the case.  I can't really understand the comment in keyboard.c
> around line 5188; maybe it says that Emacs does not get a down event,
> or maybe only that Emacs can't distinguish down from up.  Which is it?

Scroll bar widgets work different from Emacs' scroll bars.  One
registers a callback function with the widget that is invoked when
actions happen on the scroll bar, for instance when the scroll bar
handle is dragged, when a scroll bar arrow is clicked etc.  The widget
does the translation of user actions to scroll bar actions, depending
on its capabilities and specified user translations (I mean the normal
X way of customizing X widgets).  The scroll bar actions received by
the callback function are converted to certain "widget events" that
are handled in Lisp.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: scroll-bar-toolkit-scroll
  2002-07-29 10:51 ` scroll-bar-toolkit-scroll Gerd Moellmann
@ 2002-07-30  0:59   ` Richard Stallman
  2002-07-30  9:12     ` scroll-bar-toolkit-scroll Gerd Moellmann
  0 siblings, 1 reply; 16+ messages in thread
From: Richard Stallman @ 2002-07-30  0:59 UTC (permalink / raw)
  Cc: emacs-devel

      The widget
    does the translation of user actions to scroll bar actions, depending
    on its capabilities and specified user translations (I mean the normal
    X way of customizing X widgets).  The scroll bar actions received by
    the callback function are converted to certain "widget events" that
    are handled in Lisp.

Does this include down-events?  If so, how does the generated Lispy event
indicate whether it is down or up?

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: scroll-bar-toolkit-scroll
  2002-07-30  0:59   ` scroll-bar-toolkit-scroll Richard Stallman
@ 2002-07-30  9:12     ` Gerd Moellmann
  2002-07-31  5:54       ` scroll-bar-toolkit-scroll Richard Stallman
  0 siblings, 1 reply; 16+ messages in thread
From: Gerd Moellmann @ 2002-07-30  9:12 UTC (permalink / raw)
  Cc: emacs-devel

Richard Stallman <rms@gnu.org> writes:

>       The widget
>     does the translation of user actions to scroll bar actions, depending
>     on its capabilities and specified user translations (I mean the normal
>     X way of customizing X widgets).  The scroll bar actions received by
>     the callback function are converted to certain "widget events" that
>     are handled in Lisp.
> 
> Does this include down-events?  If so, how does the generated Lispy event
> indicate whether it is down or up?

IIRC, the scroll bar callback is invoked with action information only,
See, for instance, the LessTif/Motif callback xm_scroll_callback in
xterm.c.  AFAIK, the callback cannot tell which user actions caused
the action, i.e. up/down events etc.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: scroll-bar-toolkit-scroll
  2002-07-30  9:12     ` scroll-bar-toolkit-scroll Gerd Moellmann
@ 2002-07-31  5:54       ` Richard Stallman
  2002-07-31 11:58         ` scroll-bar-toolkit-scroll Gerd Moellmann
  0 siblings, 1 reply; 16+ messages in thread
From: Richard Stallman @ 2002-07-31  5:54 UTC (permalink / raw)
  Cc: emacs-devel

    IIRC, the scroll bar callback is invoked with action information only,

Could you explain what "action information" means?
(I'm assuming you are the expert on this--wasn't it you who
wrote that code?  If I should ask someone else instead, please
tell me who.)

    See, for instance, the LessTif/Motif callback xm_scroll_callback in
    xterm.c.  AFAIK, the callback cannot tell which user actions caused
    the action, i.e. up/down events etc.

I see one "action" is XmCR_DRAG.  Can you find out, and tell me,
exactly when that is given?  Is it for the down event on the slider,
or for an up event after sliding the slider, or what?

What does a callback with that code signify?

I noticed that xm_scroll_callback calls x_send_scroll_bar_event:

    /* Send a client message with message type Xatom_Scrollbar for a
       scroll action to the frame of WINDOW.  PART is a value identifying
       the part of the scroll bar that was clicked on.  PORTION is the
       amount to scroll of a whole of WHOLE.  */

    static void
    x_send_scroll_bar_event (window, part, portion, whole)

I don't understand the role of this function in the overall
implementation of toolkit scroll bars.  Could you explain it?

It seems to be sending some sort of X event to Emacs's X window.
Why is that?  What happens when that client message "arrives"
again?  Which part of the code in Emacs handles it then?
And why not call it directly instead of sending a message
to the X server?

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: scroll-bar-toolkit-scroll
  2002-07-31  5:54       ` scroll-bar-toolkit-scroll Richard Stallman
@ 2002-07-31 11:58         ` Gerd Moellmann
  2002-08-01 16:51           ` scroll-bar-toolkit-scroll Richard Stallman
  2002-08-09  7:12           ` scroll-bar-toolkit-scroll Stefan Monnier
  0 siblings, 2 replies; 16+ messages in thread
From: Gerd Moellmann @ 2002-07-31 11:58 UTC (permalink / raw)
  Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 2453 bytes --]

Richard Stallman <rms@gnu.org> writes:

>     IIRC, the scroll bar callback is invoked with action information only,
> 
> Could you explain what "action information" means?

I meant "user action".  In the Motif case, for example the scroll bar
callback in invoked for user action meaning "line down", "page up" etc.

> (I'm assuming you are the expert on this--wasn't it you who
> wrote that code?  If I should ask someone else instead, please
> tell me who.)

I wouldn't call myself an expert on this stuff.  Stefan, BTW, also
worked on the scroll bar code.  He probably knows at least as much
about this as I do.

>     See, for instance, the LessTif/Motif callback xm_scroll_callback in
>     xterm.c.  AFAIK, the callback cannot tell which user actions caused
>     the action, i.e. up/down events etc.
> 
> I see one "action" is XmCR_DRAG.  Can you find out, and tell me,
> exactly when that is given? 

The only info I have is a man page.  I'll attach it at the end.

> Is it for the down event on the slider, or for an up event after
> sliding the slider, or what?

As I read the man page, XmCR_DRAG is received while the user is
dragging the slider for "each incremental change of position", so it
would be neither up nor down event.

> 
> What does a callback with that code signify?
> 
> I noticed that xm_scroll_callback calls x_send_scroll_bar_event:
> 
>     /* Send a client message with message type Xatom_Scrollbar for a
>        scroll action to the frame of WINDOW.  PART is a value identifying
>        the part of the scroll bar that was clicked on.  PORTION is the
>        amount to scroll of a whole of WHOLE.  */
> 
>     static void
>     x_send_scroll_bar_event (window, part, portion, whole)
> 
> I don't understand the role of this function in the overall
> implementation of toolkit scroll bars.  Could you explain it?
> 
> It seems to be sending some sort of X event to Emacs's X window.
> Why is that?  What happens when that client message "arrives"
> again?  Which part of the code in Emacs handles it then?
> And why not call it directly instead of sending a message
> to the X server?

I've used x_send_scroll_bar_event to "translate" the invocation of the
scroll bar callback to an X event that is handled in XTread_socket
like other events.  This seemed to be the easiest way to orderly
produce a scroll bar input event in the kdb queue because I saw no way
to predict when the callback is called (asynchronously).


[-- Attachment #2: XmScrollBar man page --]
[-- Type: text/plain, Size: 44999 bytes --]

XmScrollBar(3)					   XmScrollBar(3)



N\bNA\bAM\bME\bE
       X\bXm\bmS\bSc\bcr\bro\bol\bll\blB\bBa\bar\br -- The ScrollBar widget class

S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
       #include <Xm/ScrollBar.h>

D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
       The  ScrollBar widget allows the user to view data that is
       too large to be displayed all at once. ScrollBars are usu-
       ally  located  inside a ScrolledWindow and adjacent to the
       widget that contains the data to be viewed. When the  user
       interacts  with	the  ScrollBar, the data within the other
       widget scrolls.

       A ScrollBar consists of two arrows placed at each end of a
       rectangle.  The	rectangle  is called the scroll region. A
       smaller rectangle, called the slider, is placed within the
       scroll  region.	The  data  is scrolled by clicking either
       arrow, selecting on the scroll  region,	or  dragging  the
       slider.	 When an arrow is selected, the slider within the
       scroll region is moved in the direction of the arrow by an
       amount supplied by the application. If the mouse button is
       held down, the slider continues	to  move  at  a  constant
       rate.

       The  ratio  of  the  slider size to the scroll region size
       typically corresponds to the relationship between the size
       of  the	visible  data and the total size of the data. For
       example, if 10 percent of the data is visible, the  slider
       typically  occupies  10 percent of the scroll region. This
       provides the user with a visual clue to the  size  of  the
       invisible data.

       If  the	ScrollBar  parent is an automatic ScrolledWindow,
       the X\bXm\bmN\bNt\btr\bra\bav\bve\ber\brs\bsa\bal\blO\bOn\bn default is True. Otherwise, the default
       is False.

       ScrollBar holds the X\bXm\bmQ\bQT\bTn\bna\bav\bvi\big\bga\bat\bto\bor\br traits.

   C\bCl\bla\bas\bss\bse\bes\bs
       ScrollBar  inherits  behavior,  resources, and traits from
       the C\bCo\bor\bre\be and X\bXm\bmP\bPr\bri\bim\bmi\bit\bti\biv\bve\be classes.

       The class pointer is x\bxm\bmS\bSc\bcr\bro\bol\bll\blB\bBa\bar\brW\bWi\bid\bdg\bge\bet\btC\bCl\bla\bas\bss\bs.

       The class name is X\bXm\bmS\bSc\bcr\bro\bol\bll\blB\bBa\bar\br.

   N\bNe\bew\bw R\bRe\bes\bso\bou\bur\brc\bce\bes\bs
       The following table defines a set of widget resources used
       by the programmer to specify data. The programmer can also
       set the resource values for the inherited classes  to  set
       attributes  for	this  widget.  To reference a resource by
       name or by class in a .\b.X\bXd\bde\bef\bfa\bau\bul\blt\bts\bs file, remove the  X\bXm\bmN\bN  or
       X\bXm\bmC\bC  prefix  and use the remaining letters. To specify one
       of the defined values for a resource in a .\b.X\bXd\bde\bef\bfa\bau\bul\blt\bts\bs file,
       remove  the  X\bXm\bm	prefix	and use the remaining letters (in
       either lowercase or uppercase, but include any underscores
       between	words).   The codes in the access column indicate
       if the given resource can be set at creation time (C), set
       by  using  X\bXt\btS\bSe\bet\btV\bVa\bal\blu\bue\bes\bs (S), retrieved by using X\bXt\btG\bGe\bet\btV\bVa\bal\blu\bue\bes\bs
       (G), or is not applicable (N/A).

       +------------------------------------------------------------------------------------------+
       |			 |	X\bXm\bmS\bSc\bcr\bro\bol\bll\blB\bBa\bar\br R\bRe\bes\bso\bou\bur\br|\bc\bce\be S\bSe\bet\bt	   |		 |	  |
       |N\bNa\bam\bme\be			 | C\bCl\bla\bas\bss\bs		  | T\bTy\byp\bpe\be	   | D\bDe\bef\bfa\bau\bul\blt\bt	 | A\bAc\bcc\bce\bes\bss\bs |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNdecrementCallback	 | XmCCallback		  | XtCallbackList | NULL	 | C	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNdragCallback 	 | XmCCallback		  | XtCallbackList | NULL	 | C	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNeditable		 | XmCEditable		  | Boolean	   | True	 | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNincrement		 | XmCIncrement 	  | int 	   | 1		 | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNincrementCallback	 | XmCCallback		  | XtCallbackList | NULL	 | C	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNinitialDelay 	 | XmCInitialDelay	  | int 	   | 250 ms	 | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNmaximum		 | XmCMaximum		  | int 	   | 100	 | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNminimum		 | XmCMinimum		  | int 	   | 0		 | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNorientation		 | XmCOrientation	  | unsigned char  | XmVERTICAL  | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNpageDecrementCallback | XmCCallback		  | XtCallbackList | NULL	 | C	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNpageIncrement	 | XmCPageIncrement	  | int 	   | 10 	 | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNpageIncrementCallback | XmCCallback		  | XtCallbackList | NULL	 | C	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNprocessingDirection	 | XmCProcessingDirection | unsigned char  | dynamic	 | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNrepeatDelay		 | XmCRepeatDelay	  | int 	   | 50 ms	 | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNshowArrows		 | XmCShowArrows	  | XtEnum	   | XmEACH_SIDE | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNsliderSize		 | XmCSliderSize	  | int 	   | dynamic	 | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNsliderMark		 | XmCSliderMark	  | XtEnum	   | dynamic	 | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNsliderVisual 	 | XmCSliderVisual	  | XtEnum	   | XmSHADOWED  | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNslidingMode		 | XmCSlidingMode	  | XtEnum	   | XmSLIDER	 | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNsnapBackMultiple	 | XmCSnapBackMultiple	  | unsigned short | MaxValue	 | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNtoBottomCallback	 | XmCCallback		  | XtCallbackList | NULL	 | C	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNtoTopCallback	 | XmCCallback		  | XtCallbackList | NULL	 | C	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNtroughColor		 | XmCTroughColor	  | Pixel	   | dynamic	 | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNvalue		 | XmCValue		  | int 	   | dynamic	 | CSG	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       |XmNvalueChangedCallback  | XmCCallback		  | XtCallbackList | NULL	 | C	  |
       +-------------------------+------------------------+----------------+-------------+--------+
       +-------------------------+------------------------+----------------+-------------+--------+
       X\bXm\bmN\bNd\bde\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk
		 Specifies the list of callbacks that  is  called
		 when  the  user  takes  an action that moves the
		 ScrollBar  by	one  increment	and   the   value
		 decreases.  The reason passed to the callback is
		 X\bXm\bmC\bCR\bR_\b_D\bDE\bEC\bCR\bRE\bEM\bME\bEN\bNT\bT.

       X\bXm\bmN\bNd\bdr\bra\bag\bgC\bCa\bal\bll\blb\bba\bac\bck\bk
		 Specifies the list of callbacks that  is  called
		 on  each incremental change of position when the
		 slider is being dragged. The reason sent by  the
		 callback is X\bXm\bmC\bCR\bR_\b_D\bDR\bRA\bAG\bG.

       X\bXm\bmN\bNe\bed\bdi\bit\bta\bab\bbl\ble\be
		 Specifies  how  ScrollBar  will  react  to  user
		 input. This resource can be True or  False  val-
		 ues, as follows:

		 T\bTr\bru\bue\be	   Allows  the	scrollbar to be sensitive
			   to user input.  This  is  the  default
			   value.

		 F\bFa\bal\bls\bse\be	   Makes  the Scale scrollbar insensitive
			   to  user  input.  The  visual  is  not
			   greyed out. This value would mostly be
			   used in X\bXm\bmT\bTH\bHE\bER\bRM\bMO\bOM\bME\bET\bTE\bER\bR mode.

		 When X\bXm\bmN\bNe\bed\bdi\bit\bta\bab\bbl\ble\be is used on a widget it sets the
		 dropsite to X\bXm\bmD\bDR\bRO\bOP\bP_\b_S\bSI\bIT\bTE\bE_\b_A\bAC\bCT\bTI\bIV\bVE\bE.

       X\bXm\bmN\bNi\bin\bnc\bcr\bre\bem\bme\ben\bnt\bt
		 Specifies   the   amount   by	which  the  value
		 increases or decreases when the  user	takes  an
		 action  that  moves the slider by one increment.
		 The actual change in value is the lesser of X\bXm\bmN\bN-\b-
		 i\bin\bnc\bcr\bre\bem\bme\ben\bnt\bt  and  (previous X\bXm\bmN\bNv\bva\bal\blu\bue\be - X\bXm\bmN\bNm\bmi\bin\bni\bim\bmu\bum\bm)
		 when the slider moves to the end of the  Scroll-
		 Bar  with  the  minimum value, and the lesser of
		 X\bXm\bmN\bNi\bin\bnc\bcr\bre\bem\bme\ben\bnt\bt  and  (X\bXm\bmN\bNm\bma\bax\bxi\bim\bmu\bum\bm-  X\bXm\bmN\bNs\bsl\bli\bid\bde\ber\brS\bSi\biz\bze\be -
		 previous  X\bXm\bmN\bNv\bva\bal\blu\bue\be) when the slider moves to the
		 end of the ScrollBar  with  the  maximum  value.
		 The  value of this resource must be greater than
		 0 (zero).

       X\bXm\bmN\bNi\bin\bnc\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk
		 Specifies the list of callbacks that  is  called
		 when  the  user  takes  an action that moves the
		 ScrollBar  by	one  increment	and   the   value
		 increases.  The reason passed to the callback is
		 X\bXm\bmC\bCR\bR_\b_I\bIN\bNC\bCR\bRE\bEM\bME\bEN\bNT\bT.

       X\bXm\bmN\bNi\bin\bni\bit\bti\bia\bal\blD\bDe\bel\bla\bay\by
		 Specifies the amount of time in milliseconds  to
		 wait  before starting continuous slider movement
		 while a button is pressed in  an  arrow  or  the
		 scroll  region.  The value of this resource must
		 be greater than 0 (zero).

       X\bXm\bmN\bNm\bma\bax\bxi\bim\bmu\bum\bm
		 Specifies the slider's maximum value.	 X\bXm\bmN\bNm\bma\bax\bxi\bi-\b-
		 m\bmu\bum\bm must be greater than X\bXm\bmN\bNm\bmi\bin\bni\bim\bmu\bum\bm.

       X\bXm\bmN\bNm\bmi\bin\bni\bim\bmu\bum\bm
		 Specifies  the slider's minimum value.  X\bXm\bmN\bNm\bma\bax\bxi\bi-\b-
		 m\bmu\bum\bm must be greater than X\bXm\bmN\bNm\bmi\bin\bni\bim\bmu\bum\bm.

       X\bXm\bmN\bNo\bor\bri\bie\ben\bnt\bta\bat\bti\bio\bon\bn
		 Specifies whether  the  ScrollBar  is	displayed
		 vertically  or  horizontally.	This resource can
		 have values of X\bXm\bmV\bVE\bER\bRT\bTI\bIC\bCA\bAL\bL and X\bXm\bmH\bHO\bOR\bRI\bIZ\bZO\bON\bNT\bTA\bAL\bL.

       X\bXm\bmN\bNp\bpa\bag\bge\beD\bDe\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk
		 Specifies the list of callbacks that  is  called
		 when  the  user  takes  an action that moves the
		 ScrollBar by one page increment  and  the  value
		 decreases.  The reason passed to the callback is
		 X\bXm\bmC\bCR\bR_\b_P\bPA\bAG\bGE\bE_\b_D\bDE\bEC\bCR\bRE\bEM\bME\bEN\bNT\bT.

       X\bXm\bmN\bNp\bpa\bag\bge\beI\bIn\bnc\bcr\bre\bem\bme\ben\bnt\bt
		 Specifies  the  amount  by   which   the   value
		 increases  or	decreases  when the user takes an
		 action that moves the slider by one page  incre-
		 ment.	 The actual change in value is the lesser
		 of  X\bXm\bmN\bNp\bpa\bag\bge\beI\bIn\bnc\bcr\bre\bem\bme\ben\bnt\bt  and  (previous  X\bXm\bmN\bNv\bva\bal\blu\bue\be -
		 X\bXm\bmN\bNm\bmi\bin\bni\bim\bmu\bum\bm)  when the slider moves to the end of
		 the ScrollBar with the minimum  value,  and  the
		 lesser   of  X\bXm\bmN\bNp\bpa\bag\bge\beI\bIn\bnc\bcr\bre\bem\bme\ben\bnt\bt	and  (X\bXm\bmN\bNm\bma\bax\bxi\bim\bmu\bum\bm-
		 X\bXm\bmN\bNs\bsl\bli\bid\bde\ber\brS\bSi\biz\bze\be -  previous  X\bXm\bmN\bNv\bva\bal\blu\bue\be)  when   the
		 slider  moves	to  the end of the ScrollBar with
		 the maximum value.  The value of  this  resource
		 must be greater than 0 (zero).

       X\bXm\bmN\bNp\bpa\bag\bge\beI\bIn\bnc\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk
		 Specifies  the  list of callbacks that is called
		 when the user takes an  action  that  moves  the
		 ScrollBar  by	one  page increment and the value
		 increases.  The reason passed to the callback is
		 X\bXm\bmC\bCR\bR_\b_P\bPA\bAG\bGE\bE_\b_I\bIN\bNC\bCR\bRE\bEM\bME\bEN\bNT\bT.

       X\bXm\bmN\bNp\bpr\bro\boc\bce\bes\bss\bsi\bin\bng\bgD\bDi\bir\bre\bec\bct\bti\bio\bon\bn
		 Specifies   whether  the  value  for  X\bXm\bmN\bNm\bma\bax\bxi\bim\bmu\bum\bm
		 should be on the right or left side of  X\bXm\bmN\bNm\bmi\bin\bni\bi-\b-
		 m\bmu\bum\bm  for horizontal ScrollBars or above or below
		 X\bXm\bmN\bNm\bmi\bin\bni\bim\bmu\bum\bm  for   vertical   ScrollBars.    This
		 resource   can   have	values	of  X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_T\bTO\bOP\bP,\b,
		 X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_B\bBO\bOT\bTT\bTO\bOM\bM,\b,	X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_L\bLE\bEF\bFT\bT,	      and
		 X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_R\bRI\bIG\bGH\bHT\bT.   If  the  ScrollBar is oriented
		 vertically, the default value	is  X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_B\bBO\bOT\bT-\b-
		 T\bTO\bOM\bM.  If the ScrollBar is oriented horizontally,
		 the default value depends on the X\bXm\bmN\bNl\bla\bay\byo\bou\but\btD\bDi\bir\bre\bec\bc-\b-
		 t\bti\bio\bon\bn resource of the widget.

       X\bXm\bmN\bNr\bre\bep\bpe\bea\bat\btD\bDe\bel\bla\bay\by
		 Specifies  the amount of time in milliseconds to
		 wait between subsequent slider  movements  after
		 the  X\bXm\bmN\bNi\bin\bni\bit\bti\bia\bal\blD\bDe\bel\bla\bay\by  has  been  processed.  The
		 value of this resource must be  greater  than	0
		 (zero).

       X\bXm\bmN\bNs\bsh\bho\bow\bwA\bAr\brr\bro\bow\bws\bs
		 Specifies  whether  the arrows are displayed and
		 how they are to be displayed. This resource  can
		 take the following values:

		 X\bXm\bmE\bEA\bAC\bCH\bH_\b_S\bSI\bID\bDE\bE
			   Indicates  that one arrow is displayed
			   on each end of the  ScrollBar  slider.
			   This corresponds to a value of True in
			   previous releases.

		 X\bXm\bmM\bMA\bAX\bX_\b_S\bSI\bID\bDE\bE
			   Indicates that both	arrows	are  dis-
			   played  on  the X\bXm\bmN\bNm\bma\bax\bxi\bim\bmu\bum\bm side of the
			   ScrollBar slider.

		 X\bXm\bmM\bMI\bIN\bN_\b_S\bSI\bID\bDE\bE
			   Indicates that both	arrows	are  dis-
			   played  on  the X\bXm\bmN\bNm\bmi\bin\bni\bim\bmu\bum\bm side of the
			   ScrollBar slider.

		 X\bXm\bmN\bNO\bON\bNE\bE    Indicates  that  no	arrows	are  dis-
			   played. This corresponds to a value of
			   False in previous releases.

		 X\bXm\bmE\bEA\bAC\bCH\bH_\b_S\bSI\bID\bDE\bE is the default value.

       X\bXm\bmN\bNs\bsl\bli\bid\bde\ber\brM\bMa\bar\brk\bk
		 Specifies the shape the slider  is  to  be  dis-
		 played  in. This resource can take the following
		 values:

		 X\bXm\bmE\bET\bTC\bCH\bHE\bED\bD_\b_L\bLI\bIN\bNE\bE
			   Specifies  the  slider  as  an  etched
			   line.

		 X\bXm\bmN\bNO\bON\bNE\bE    Specifies the slider as a foregrounded
			   rectangle. This is the default  for	a
			   regular slider.

		 X\bXm\bmR\bRO\bOU\bUN\bND\bD_\b_M\bMA\bAR\bRK\bK
			   Specifies  the  slider  as  a shadowed
			   circle. This is the default	when  the
			   slider is a thermometer.

		 X\bXm\bmT\bTH\bHU\bUM\bMB\bB_\b_M\bMA\bAR\bRK\bK
			   Specifies  the  slider  as a series of
			   three etched  lines	centered  in  the
			   middle of the slider.

       X\bXm\bmN\bNs\bsl\bli\bid\bdi\bin\bng\bgM\bMo\bod\bde\be
		 Specifies  the  mode  the slider works in. There
		 are two possible modes:

		 X\bXm\bmS\bSL\bLI\bID\bDE\bER\bR  Allows  the	slider	to  move   freely
			   between  the  minimum and maximum ends
			   of the  scale.  This  is  the  default
			   value.

		 X\bXm\bmT\bTH\bHE\bER\bRM\bMO\bOM\bME\bET\bTE\bER\bR
			   Forces  the	slider	to be anchored to
			   one side of the trough area.

       X\bXm\bmN\bNs\bsl\bli\bid\bde\ber\brS\bSi\biz\bze\be
		 Specifies the length of the slider  between  the
		 values  of 1 and (X\bXm\bmN\bNm\bma\bax\bxi\bim\bmu\bum\bm - X\bXm\bmN\bNm\bmi\bin\bni\bim\bmu\bum\bm).  The
		 value is constrained to be within  these  inclu-
		 sive bounds.  The default value is (X\bXm\bmN\bNm\bma\bax\bxi\bim\bmu\bum\bm -
		 X\bXm\bmN\bNm\bmi\bin\bni\bim\bmu\bum\bm) divided by 10, with a minimum of  1.

       X\bXm\bmN\bNs\bsl\bli\bid\bde\ber\brV\bVi\bis\bsu\bua\bal\bl
		 Specifies  the  color of the slider visual. This
		 resource can take the following values:

		 X\bXm\bmB\bBA\bAC\bCK\bKG\bGR\bRO\bOU\bUN\bND\bD_\b_C\bCO\bOL\bLO\bOR\bR
			   Specifies that the slider visual is in
			   the background color.

		 X\bXm\bmF\bFO\bOR\bRE\bEG\bGR\bRO\bOU\bUN\bND\bD_\b_C\bCO\bOL\bLO\bOR\bR
			   Specifies that the slider visual is in
			   the foreground color.

		 X\bXm\bmS\bSH\bHA\bAD\bDO\bOW\bWE\bED\bD_\b_B\bBA\bAC\bCK\bKG\bGR\bRO\bOU\bUN\bND\bD
			   Specifies that the slider visual is in
			   the	background  color, with a shadow.
			   This is  the  default  for  a  regular
			   slider.

		 X\bXm\bmT\bTR\bRO\bOU\bUG\bGH\bH_\b_C\bCO\bOL\bLO\bOR\bR
			   Specifies that the slider visual is in
			   the trough color. This is the  default
			   when the slider is a thermometer.

       X\bXm\bmN\bNs\bsn\bna\bap\bpB\bBa\bac\bck\bkM\bMu\bul\blt\bti\bip\bpl\ble\be
		 Specifies  the distance over which the scrollbar
		 slider snaps back to its original position  when
		 the  user  drags the mouse outside the ScrollBar
		 edge. This distance is defined in terms of  mul-
		 tiples  of the width of the slider. For example,
		 a multiple of 0 (zero) causes the slider to snap
		 back  as  soon  as  the pointer moves out of the
		 ScrollBar frame, a  multiple  of  1  causes  the
		 slider to snap back as soon as the pointer moves
		 beyond 1 ScrollBar width of the ScrollBar  edge.
		 Whenever  the	slider	snaps back, the ScrollBar
		 d\bdr\bra\bag\bgC\bCa\bal\bll\blb\bba\bac\bck\bk is called if there is one.

		 The default value is  large  enough  to  prevent
		 unwanted snapBack activity if the mouse is moved
		 within the boundaries of any reasonable  screen.
		 To  reset  the  default,  set this resource to a
		 large value, such as 10000.

       X\bXm\bmN\bNt\bto\boB\bBo\bot\btt\bto\bom\bmC\bCa\bal\bll\blb\bba\bac\bck\bk
		 Specifies the list of callbacks that  is  called
		 when  the  user  takes  an action that moves the
		 slider to the end of the ScrollBar with the max-
		 imum  value.	The reason passed to the callback
		 is X\bXm\bmC\bCR\bR_\b_T\bTO\bO_\b_B\bBO\bOT\bTT\bTO\bOM\bM.

       X\bXm\bmN\bNt\bto\boT\bTo\bop\bpC\bCa\bal\bll\blb\bba\bac\bck\bk
		 Specifies the list of callbacks that  is  called
		 when  the  user  takes  an action that moves the
		 slider to the end of the ScrollBar with the min-
		 imum  value.	The reason passed to the callback
		 is X\bXm\bmC\bCR\bR_\b_T\bTO\bO_\b_T\bTO\bOP\bP.

       X\bXm\bmN\bNt\btr\bro\bou\bug\bgh\bhC\bCo\bol\blo\bor\br
		 Specifies the color of the slider trough.   This
		 color defaults to the color used for selections.

       X\bXm\bmN\bNv\bva\bal\blu\bue\be  Specifies the slider's position, between X\bXm\bmN\bNm\bmi\bin\bn-\b-
		 i\bim\bmu\bum\bm	and  (X\bXm\bmN\bNm\bma\bax\bxi\bim\bmu\bum\bm -  X\bXm\bmN\bNs\bsl\bli\bid\bde\ber\brS\bSi\biz\bze\be).   The
		 value is constrained to be within  these  inclu-
		 sive bounds.  The initial value of this resource
		 is the larger of 0 (zero) and X\bXm\bmN\bNm\bmi\bin\bni\bim\bmu\bum\bm.

       X\bXm\bmN\bNv\bva\bal\blu\bue\beC\bCh\bha\ban\bng\bge\bed\bdC\bCa\bal\bll\blb\bba\bac\bck\bk
		 Specifies the list of callbacks that  is  called
		 when the slider is released after being dragged.
		 These callbacks are also called in place of X\bXm\bmN\bN-\b-
		 i\bin\bnc\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk,   X\bXm\bmN\bNd\bde\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk,  X\bXm\bmN\bN-\b-
		 p\bpa\bag\bge\beI\bIn\bnc\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk, X\bXm\bmN\bNp\bpa\bag\bge\beD\bDe\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk,
		 X\bXm\bmN\bNt\bto\boT\bTo\bop\bpC\bCa\bal\bll\blb\bba\bac\bck\bk,  or	X\bXm\bmN\bNt\bto\boB\bBo\bot\btt\bto\bom\bmC\bCa\bal\bll\blb\bba\bac\bck\bk  when
		 one of these callback lists  would  normally  be
		 called   but  the  value  of  the  corresponding
		 resource is NULL.   The  reason  passed  to  the
		 callback is X\bXm\bmC\bCR\bR_\b_V\bVA\bAL\bLU\bUE\bE_\b_C\bCH\bHA\bAN\bNG\bGE\bED\bD.

   I\bIn\bnh\bhe\ber\bri\bit\bte\bed\bd R\bRe\bes\bso\bou\bur\brc\bce\bes\bs
       ScrollBar  inherits behavior and resources from the super-
       classes described in the following tables.  For a complete
       description  of each resource, refer to the reference page
       for that superclass.


       +---------------------------------------------------------------------------------------------------+
       |			|	     X\bXm\bmP\bPr\bri\bim\bmi\bit\bti\biv\bve\be|R\bRe\bes\bso\bou\bur\brc\bce\be S\bSe\bet\bt	   |			  |	   |
       |N\bNa\bam\bme\be			| C\bCl\bla\bas\bss\bs 		| T\bTy\byp\bpe\be		   | D\bDe\bef\bfa\bau\bul\blt\bt		  | A\bAc\bcc\bce\bes\bss\bs |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNbottomShadowColor	| XmCBottomShadowColor	| Pixel 	   | dynamic		  | CSG    |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNbottomShadowPixmap	| XmCBottomShadowPixmap | Pixmap	   | XmUNSPECIFIED_PIXMAP | CSG    |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNconvertCallback	| XmCCallback		| XtCallbackList   | NULL		  | C	   |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNforeground		| XmCForeground 	| Pixel 	   | dynamic		  | CSG    |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNhelpCallback 	| XmCCallback		| XtCallbackList   | NULL		  | C	   |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNhighlightColor	| XmCHighlightColor	| Pixel 	   | dynamic		  | CSG    |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNhighlightOnEnter	| XmCHighlightOnEnter	| Boolean	   | False		  | CSG    |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNhighlightPixmap	| XmCHighlightPixmap	| Pixmap	   | dynamic		  | CSG    |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNhighlightThickness	| XmCHighlightThickness | Dimension	   | dynamic		  | CSG    |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNlayoutDirection	| XmCLayoutDirection	| XmDirection	   | dynamic		  | CG	   |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNnavigationType	| XmCNavigationType	| XmNavigationType | XmSTICKY_TAB_GROUP   | CSG    |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNpopupHandlerCallback | XmCCallback		| XtCallbackList   | NULL		  | C	   |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNshadowThickness	| XmCShadowThickness	| Dimension	   | 2			  | CSG    |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNtopShadowColor	| XmCTopShadowColor	| Pixel 	   | dynamic		  | CSG    |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNtopShadowPixmap	| XmCTopShadowPixmap	| Pixmap	   | dynamic		  | CSG    |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNtraversalOn		| XmCTraversalOn	| Boolean	   | dynamic		  | CSG    |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNunitType		| XmCUnitType		| unsigned char    | dynamic		  | CSG    |
       +------------------------+-----------------------+------------------+----------------------+--------+
       |XmNuserData		| XmCUserData		| XtPointer	   | NULL		  | CSG    |
       +------------------------+-----------------------+------------------+----------------------+--------+
       +------------------------+-----------------------+------------------+----------------------+--------+

























       +---------------------------------------------------------------------------------------------------------------+
       |			      | 	      C\bCo\bor\bre\be R\bRe\bes\bso\bou\bur\brc\bce\be S\bSe\be|\bt\bt 	       |		      |        |
       |N\bNa\bam\bme\be			      | C\bCl\bla\bas\bss\bs			      | T\bTy\byp\bpe\be	       | D\bDe\bef\bfa\bau\bul\blt\bt	      | A\bAc\bcc\bce\bes\bss\bs |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNaccelerators 	      | XmCAccelerators 	      | XtAccelerators | dynamic	      | CSG    |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNancestorSensitive	      | XmCSensitive		      | Boolean        | dynamic	      | G      |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNbackground		      | XmCBackground		      | Pixel	       | dynamic	      | CSG    |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNbackgroundPixmap	      | XmCPixmap		      | Pixmap	       | XmUNSPECIFIED_PIXMAP | CSG    |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNborderColor		      | XmCBorderColor		      | Pixel	       | XtDefaultForeground  | CSG    |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNborderPixmap 	      | XmCPixmap		      | Pixmap	       | XmUNSPECIFIED_PIXMAP | CSG    |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNborderWidth		      | XmCBorderWidth		      | Dimension      | 0		      | CSG    |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNcolormap		      | XmCColormap		      | Colormap       | dynamic	      | CG     |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNdepth		      | XmCDepth		      | int	       | dynamic	      | CG     |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNdestroyCallback	      | XmCCallback		      | XtCallbackList | NULL		      | C      |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNheight		      | XmCHeight		      | Dimension      | dynamic	      | CSG    |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNinitialResourcesPersistent | XmCInitialResourcesPersistent | Boolean        | True		      | C      |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNmappedWhenManaged	      | XmCMappedWhenManaged	      | Boolean        | True		      | CSG    |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNscreen		      | XmCScreen		      | Screen *       | dynamic	      | CG     |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNsensitive		      | XmCSensitive		      | Boolean        | True		      | CSG    |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNtranslations 	      | XmCTranslations 	      | XtTranslations | dynamic	      | CSG    |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNwidth		      | XmCWidth		      | Dimension      | dynamic	      | CSG    |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNx			      | XmCPosition		      | Position       | 0		      | CSG    |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       |XmNy			      | XmCPosition		      | Position       | 0		      | CSG    |
       +------------------------------+-------------------------------+----------------+----------------------+--------+
       +------------------------------+-------------------------------+----------------+----------------------+--------+
   C\bCa\bal\bll\blb\bba\bac\bck\bk I\bIn\bnf\bfo\bor\brm\bma\bat\bti\bio\bon\bn
       A pointer to the following structure  is  passed  to  each
       callback:

       typedef struct
       {
	       int _\br_\be_\ba_\bs_\bo_\bn;
	       XEvent _\b* _\be_\bv_\be_\bn_\bt;
	       int _\bv_\ba_\bl_\bu_\be;
	       int _\bp_\bi_\bx_\be_\bl;
       } XmScrollBarCallbackStruct;

       _\br_\be_\ba_\bs_\bo_\bn	 Indicates why the callback was invoked.

       _\be_\bv_\be_\bn_\bt	 Points  to  the  X\bXE\bEv\bve\ben\bnt\bt that triggered the call-
		 back.

       _\bv_\ba_\bl_\bu_\be	 Contains the new slider location value.

       _\bp_\bi_\bx_\be_\bl	 Is used only for X\bXm\bmN\bNt\bto\boT\bTo\bop\bpC\bCa\bal\bll\blb\bba\bac\bck\bk and	X\bXm\bmN\bNt\bto\boB\bBo\bot\bt-\b-
		 t\bto\bom\bmC\bCa\bal\bll\blb\bba\bac\bck\bk.  For horizontal ScrollBars, it con-
		 tains the _\bx coordinate of where the mouse button
		 selection  occurred. For vertical ScrollBars, it
		 contains the _\by coordinate.

   T\bTr\bra\ban\bns\bsl\bla\bat\bti\bio\bon\bns\bs
       X\bXm\bmS\bSc\bcr\bro\bol\bll\blB\bBa\bar\br includes  translations  from  Primitive.   The
       X\bXm\bmS\bSc\bcr\bro\bol\bll\blB\bBa\bar\br  translations  are  described in the following
       list.

       The following key names are listed in the X  standard  key
       event  translation  table  syntax.  This format is the one
       used by Motif to specify the widget actions  corresponding
       to  a  given  key.  A brief overview of the format is pro-
       vided under V\bVi\bir\brt\btu\bua\bal\blB\bBi\bin\bnd\bdi\bin\bng\bgs\bs(3).	For a  complete  descrip-
       tion of the format, please refer to the X Toolkit Instrin-
       sics Documentation.

       ~\b~s\bs ~\b~c\bc ~\b~m\bm ~\b~a\ba <\b<B\bBt\btn\bn1\b1D\bDo\bow\bwn\bn>\b>:
		 Select()

       ~\b~s\bs ~\b~c\bc ~\b~m\bm ~\b~a\ba <\b<B\bBt\btn\bn1\b1U\bUp\bp>\b>:
		 Release()

       ~\b~s\bs ~\b~c\bc ~\b~m\bm ~\b~a\ba B\bBu\but\btt\bto\bon\bn1\b1<\b<P\bPt\btr\brM\bMo\bov\bve\bed\bd>\b>:
		 Moved()

       ~\b~s\bs ~\b~c\bc ~\b~m\bm ~\b~a\ba <\b<B\bBt\btn\bn2\b2D\bDo\bow\bwn\bn>\b>:
		 Select()

       ~\b~s\bs ~\b~c\bc ~\b~m\bm ~\b~a\ba <\b<B\bBt\btn\bn2\b2U\bUp\bp>\b>:
		 Release()

       ~\b~s\bs ~\b~c\bc ~\b~m\bm ~\b~a\ba B\bBu\but\btt\bto\bon\bn2\b2<\b<P\bPt\btr\brM\bMo\bov\bve\bed\bd>\b>:
		 Moved()

       ~\b~s\bs c\bc ~\b~m\bm ~\b~a\ba <\b<B\bBt\btn\bn1\b1D\bDo\bow\bwn\bn>\b>:
		 TopOrBottom()

       ~\b~s\bs c\bc ~\b~m\bm ~\b~a\ba <\b<B\bBt\btn\bn1\b1U\bUp\bp>\b>:
		 Release()

       :\b:<\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfA\bAc\bct\bti\biv\bva\bat\bte\be>\b>:
		 PrimitiveParentActivate()

       :\b:<\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfC\bCa\ban\bnc\bce\bel\bl>\b>:
		 CancelDrag()

       :\b:<\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfB\bBe\beg\bgi\bin\bnL\bLi\bin\bne\be>\b>:
		 TopOrBottom()

       :\b:<\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfE\bEn\bnd\bdL\bLi\bin\bne\be>\b>:
		 TopOrBottom()

       :\b:<\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfP\bPa\bag\bge\beL\bLe\bef\bft\bt>\b>:
		 PageUpOrLeft(L\bLe\bef\bft\bt)

       :\b:c\bc <\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfP\bPa\bag\bge\beU\bUp\bp>\b>:
		 PageUpOrLeft(L\bLe\bef\bft\bt)

       :\b:<\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfP\bPa\bag\bge\beU\bUp\bp>\b>:
		 PageUpOrLeft(U\bUp\bp)

       :\b:<\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfP\bPa\bag\bge\beR\bRi\big\bgh\bht\bt>\b>:
		 PageDownOrRight(R\bRi\big\bgh\bht\bt)

       :\b:c\bc <\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfP\bPa\bag\bge\beD\bDo\bow\bwn\bn>\b>:
		 PageDownOrRight(R\bRi\big\bgh\bht\bt)

       :\b:<\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfP\bPa\bag\bge\beD\bDo\bow\bwn\bn>\b>:
		 PageDownOrRight(D\bDo\bow\bwn\bn)

       :\b:<\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfH\bHe\bel\blp\bp>\b>:
		 PrimitiveHelp()

       :\b:c\bc <\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfU\bUp\bp>\b>:
		 PageUpOrLeft(U\bUp\bp)

       :\b:<\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfU\bUp\bp>\b>:
		 IncrementUpOrLeft(U\bUp\bp)

       :\b:c\bc <\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfD\bDo\bow\bwn\bn>\b>:
		 PageDownOrRight(D\bDo\bow\bwn\bn)

       :\b:<\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfD\bDo\bow\bwn\bn>\b>:
		 IncrementDownOrRight(D\bDo\bow\bwn\bn)

       :\b:c\bc <\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfL\bLe\bef\bft\bt>\b>:
		 PageUpOrLeft(L\bLe\bef\bft\bt)

       :\b:<\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfL\bLe\bef\bft\bt>\b>:
		 IncrementUpOrLeft(L\bLe\bef\bft\bt)

       :\b:c\bc <\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfR\bRi\big\bgh\bht\bt>\b>:
		 PageDownOrRight(R\bRi\big\bgh\bht\bt)

       :\b:<\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfR\bRi\big\bgh\bht\bt>\b>:
		 IncrementDownOrRight(R\bRi\big\bgh\bht\bt)

       ~\b~s\bs ~\b~m\bm ~\b~a\ba <\b<K\bKe\bey\by>\b>R\bRe\bet\btu\bur\brn\bn:
		 PrimitiveParentActivate()

       s\bs ~\b~m\bm ~\b~a\ba <\b<K\bKe\bey\by>\b>T\bTa\bab\bb:
		 PrimitivePrevTabGroup()

       ~\b~m\bm ~\b~a\ba <\b<K\bKe\bey\by>\b>T\bTa\bab\bb:
		 PrimitiveNextTabGroup()

   A\bAc\bct\bti\bio\bon\bn R\bRo\bou\but\bti\bin\bne\bes\bs
       The ScrollBar action routines are

       CancelDrag():
		 If the key press occurs during  scrolling,  can-
		 cels  the  scroll  and returns the slider to its
		 previous location in the  scrollbar,  otherwise,
		 and  if  the  parent is a manager, it passes the
		 event to the parent.

       IncrementDownOrRight(D\bDo\bow\bwn\bn|\b|R\bRi\big\bgh\bht\bt):
		 With an argument of D\bDo\bow\bwn\bn, or 0 (zero)	for  com-
		 patibility,  moves the slider down by one incre-
		 ment.	With an argument of R\bRi\big\bgh\bht\bt, or 1 for  com-
		 patibility,  it  moves  the  slider right by one
		 increment.    If    X\bXm\bmN\bNp\bpr\bro\boc\bce\bes\bss\bsi\bin\bng\bgD\bDi\bir\bre\bec\bct\bti\bio\bon\bn    is
		 X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_R\bRI\bIG\bGH\bHT\bT   or   X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_B\bBO\bOT\bTT\bTO\bOM\bM,  movement
		 toward the right or bottom calls  the	callbacks
		 for  X\bXm\bmN\bNi\bin\bnc\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk.   If X\bXm\bmN\bNp\bpr\bro\boc\bce\bes\bss\bsi\bin\bng\bgD\bDi\bi-\b-
		 r\bre\bec\bct\bti\bio\bon\bn is X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_L\bLE\bEF\bFT\bT or X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_T\bTO\bOP\bP,  move-
		 ment  toward the right or bottom calls the call-
		 backs	for  X\bXm\bmN\bNd\bde\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk.   The  X\bXm\bmN\bNv\bva\bal\bl-\b-
		 u\bue\beC\bCh\bha\ban\bng\bge\bed\bdC\bCa\bal\bll\blb\bba\bac\bck\bk is called if the X\bXm\bmN\bNi\bin\bnc\bcr\bre\bem\bme\ben\bnt\bt-\b-
		 C\bCa\bal\bll\blb\bba\bac\bck\bk or X\bXm\bmN\bNd\bde\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk is NULL.

       IncrementUpOrLeft(U\bUp\bp|\b|L\bLe\bef\bft\bt):
		 With  an  argument  of  U\bUp\bp,  or  0  (zero)   for
		 compatibility, moves the slider up by one incre-
		 ment.	With an argument of L\bLe\bef\bft\bt, or 1	for  com-
		 patibility,  it  moves  the  slider  left by one
		 increment.    If    X\bXm\bmN\bNp\bpr\bro\boc\bce\bes\bss\bsi\bin\bng\bgD\bDi\bir\bre\bec\bct\bti\bio\bon\bn    is
		 X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_R\bRI\bIG\bGH\bHT\bT  or  X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_B\bBO\bOT\bTT\bTO\bOM\bM, movement to
		 the left or top calls	the  callbacks	for  X\bXm\bmN\bN-\b-
		 d\bde\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk.  If X\bXm\bmN\bNp\bpr\bro\boc\bce\bes\bss\bsi\bin\bng\bgD\bDi\bir\bre\bec\bct\bti\bio\bon\bn is
		 X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_L\bLE\bEF\bFT\bT or X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_T\bTO\bOP\bP, movement  to  the
		 left  or  top	calls the callbacks for X\bXm\bmN\bNi\bin\bnc\bcr\bre\be-\b-
		 m\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk.	 The  X\bXm\bmN\bNv\bva\bal\blu\bue\beC\bCh\bha\ban\bng\bge\bed\bdC\bCa\bal\bll\blb\bba\bac\bck\bk  is
		 called  if the X\bXm\bmN\bNi\bin\bnc\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk or X\bXm\bmN\bNd\bde\bec\bcr\bre\be-\b-
		 m\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk is NULL.

       Moved():  If the button press occurs  within  the  slider,
		 the  subsequent motion events move the slider to
		 the position of the pointer and call  the  call-
		 backs for X\bXm\bmN\bNd\bdr\bra\bag\bgC\bCa\bal\bll\blb\bba\bac\bck\bk.

       PageDownOrRight(D\bDo\bow\bwn\bn|\b|R\bRi\big\bgh\bht\bt):
		 With  an  argument of D\bDo\bow\bwn\bn, or 0 (zero) for com-
		 patibility, moves the slider down  by	one  page
		 increment.   With an argument of R\bRi\big\bgh\bht\bt, or 1 for
		 compatibility, moves the  slider  right  by  one
		 page  increment.   If	X\bXm\bmN\bNp\bpr\bro\boc\bce\bes\bss\bsi\bin\bng\bgD\bDi\bir\bre\bec\bct\bti\bio\bon\bn is
		 X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_R\bRI\bIG\bGH\bHT\bT  or   X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_B\bBO\bOT\bTT\bTO\bOM\bM,	 movement
		 toward  the  right or bottom calls the callbacks
		 for  X\bXm\bmN\bNp\bpa\bag\bge\beI\bIn\bnc\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk.   If  X\bXm\bmN\bNp\bpr\bro\boc\bce\bes\bss\bs-\b-
		 i\bin\bng\bgD\bDi\bir\bre\bec\bct\bti\bio\bon\bn  is  X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_L\bLE\bEF\bFT\bT or X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_T\bTO\bOP\bP,
		 movement toward the right or  bottom  calls  the
		 X\bXm\bmN\bNp\bpa\bag\bge\beD\bDe\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk  callbacks. The X\bXm\bmN\bNv\bva\bal\bl-\b-
		 u\bue\beC\bCh\bha\ban\bng\bge\bed\bdC\bCa\bal\bll\blb\bba\bac\bck\bk is called if the X\bXm\bmN\bNp\bpa\bag\bge\beI\bIn\bnc\bcr\bre\be-\b-
		 m\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk	or   X\bXm\bmN\bNp\bpa\bag\bge\beD\bDe\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk  is
		 NULL.

       PageUpOrLeft(U\bUp\bp|\b|L\bLe\bef\bft\bt):
		 With an argument of U\bUp\bp, or 0 (zero) for compati-
		 bility,  moves  the slider up by one page incre-
		 ment.	With an argument of L\bLe\bef\bft\bt, or 1	for  com-
		 patibility, it moves the slider left by one page
		 increment.    If    X\bXm\bmN\bNp\bpr\bro\boc\bce\bes\bss\bsi\bin\bng\bgD\bDi\bir\bre\bec\bct\bti\bio\bon\bn    is
		 X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_R\bRI\bIG\bGH\bHT\bT  or  X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_B\bBO\bOT\bTT\bTO\bOM\bM, movement to
		 the left or top calls	the  callbacks	for  X\bXm\bmN\bN-\b-
		 p\bpa\bag\bge\beD\bDe\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk.   If  X\bXm\bmN\bNp\bpr\bro\boc\bce\bes\bss\bsi\bin\bng\bgD\bDi\bir\bre\bec\bc-\b-
		 t\bti\bio\bon\bn is X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_L\bLE\bEF\bFT\bT or X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_T\bTO\bOP\bP,  movement
		 to  the  left or top calls the X\bXm\bmN\bNp\bpa\bag\bge\beI\bIn\bnc\bcr\bre\bem\bme\ben\bnt\bt-\b-
		 C\bCa\bal\bll\blb\bba\bac\bck\bk callbacks. The  X\bXm\bmN\bNv\bva\bal\blu\bue\beC\bCh\bha\ban\bng\bge\bed\bdC\bCa\bal\bll\blb\bba\bac\bck\bk
		 is  called  if  the  X\bXm\bmN\bNp\bpa\bag\bge\beI\bIn\bnc\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk or
		 X\bXm\bmN\bNp\bpa\bag\bge\beD\bDe\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk is NULL.

       PrimitiveHelp():
		 Calls the callbacks for X\bXm\bmN\bNh\bhe\bel\blp\bpC\bCa\bal\bll\blb\bba\bac\bck\bk  if  any
		 exist.  If  there are no help callbacks for this
		 widget, this action calls the help callbacks for
		 the nearest ancestor that has them.

       PrimitiveNextTabGroup():
		 Traverses  to	the  first  item  in the next tab
		 group. If the current	tab  group  is	the  last
		 entry	in  the  tab  group list, it wraps to the
		 beginning of the tab group list.

       PrimitiveParentActivate():
		 If the parent is a manager, passes the event  to
		 the parent.

       PrimitivePrevTabGroup():
		 Traverses  to the first item in the previous tab
		 group.  If the beginning of the tab  group  list
		 is reached, it wraps to the end of the tab group
		 list.

       Release():
		 If the button press occurs within the slider and
		 the  slider  position	is changed, the callbacks
		 for X\bXm\bmN\bNv\bva\bal\blu\bue\beC\bCh\bha\ban\bng\bge\bed\bdC\bCa\bal\bll\blb\bba\bac\bck\bk are called.

       Select(): I\bIn\bn a\bar\brr\bro\bow\bw: Moves the slider by one  increment  in
		 the direction of the arrow.  If X\bXm\bmN\bNp\bpr\bro\boc\bce\bes\bss\bsi\bin\bng\bgD\bDi\bi-\b-
		 r\bre\bec\bct\bti\bio\bon\bn is  X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_R\bRI\bIG\bGH\bHT\bT  or  X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_B\bBO\bOT\bTT\bTO\bOM\bM,
		 movement  toward  the	right or bottom calls the
		 callbacks for X\bXm\bmN\bNi\bin\bnc\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk, and movement
		 to  the left or top calls the callbacks for X\bXm\bmN\bN-\b-
		 d\bde\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk.  If X\bXm\bmN\bNp\bpr\bro\boc\bce\bes\bss\bsi\bin\bng\bgD\bDi\bir\bre\bec\bct\bti\bio\bon\bn is
		 X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_L\bLE\bEF\bFT\bT	or  X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_T\bTO\bOP\bP, movement toward
		 the right or bottom calls the callbacks for X\bXm\bmN\bN-\b-
		 d\bde\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk,  and  movement to the left or
		 top calls the	callbacks  for	X\bXm\bmN\bNi\bin\bnc\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\bl-\b-
		 b\bba\bac\bck\bk.	 The X\bXm\bmN\bNv\bva\bal\blu\bue\beC\bCh\bha\ban\bng\bge\bed\bdC\bCa\bal\bll\blb\bba\bac\bck\bk is called if
		 the X\bXm\bmN\bNi\bin\bnc\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk or X\bXm\bmN\bNd\bde\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk
		 is NULL.

		 I\bIn\bn  s\bsc\bcr\bro\bol\bll\bl  r\bre\beg\bgi\bio\bon\bn  b\bbe\bet\btw\bwe\bee\ben\bn  a\ban\bn  a\bar\brr\bro\bow\bw  a\ban\bnd\bd  t\bth\bhe\be
		 s\bsl\bli\bid\bde\ber\br: Moves the slider by one  page	increment
		 in  the  direction of the arrow.  If X\bXm\bmN\bNp\bpr\bro\boc\bce\bes\bss\bs-\b-
		 i\bin\bng\bgD\bDi\bir\bre\bec\bct\bti\bio\bon\bn is X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_R\bRI\bIG\bGH\bHT\bT or  X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_B\bBO\bOT\bT-\b-
		 T\bTO\bOM\bM,  movement  toward the right or bottom calls
		 the callbacks for X\bXm\bmN\bNp\bpa\bag\bge\beI\bIn\bnc\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk,  and
		 movement  to the left or top calls the callbacks
		 for  X\bXm\bmN\bNp\bpa\bag\bge\beD\bDe\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk.   If  X\bXm\bmN\bNp\bpr\bro\boc\bce\bes\bss\bs-\b-
		 i\bin\bng\bgD\bDi\bir\bre\bec\bct\bti\bio\bon\bn  is  X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_L\bLE\bEF\bFT\bT or X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_T\bTO\bOP\bP,
		 movement toward the right or  bottom  calls  the
		 callbacks   for   X\bXm\bmN\bNp\bpa\bag\bge\beD\bDe\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk,  and
		 movement to the left or top calls the	callbacks
		 for   X\bXm\bmN\bNp\bpa\bag\bge\beI\bIn\bnc\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk.    The   X\bXm\bmN\bNv\bva\bal\bl-\b-
		 u\bue\beC\bCh\bha\ban\bng\bge\bed\bdC\bCa\bal\bll\blb\bba\bac\bck\bk is called if the X\bXm\bmN\bNp\bpa\bag\bge\beI\bIn\bnc\bcr\bre\be-\b-
		 m\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk	or   X\bXm\bmN\bNp\bpa\bag\bge\beD\bDe\bec\bcr\bre\bem\bme\ben\bnt\btC\bCa\bal\bll\blb\bba\bac\bck\bk  is
		 NULL.

		 I\bIn\bn s\bsl\bli\bid\bde\ber\br: Activates the interactive dragging of
		 the slider.

		 If  the button is held down in either the arrows
		 or the scroll region  longer  than  the  X\bXm\bmN\bNi\bin\bni\bi-\b-
		 t\bti\bia\bal\blD\bDe\bel\bla\bay\by resource, the slider is moved again by
		 the same increment and the  same  callbacks  are
		 called.   After the initial delay has been used,
		 the time delay changes to the	time  defined  by
		 the resource X\bXm\bmN\bNr\bre\bep\bpe\bea\bat\btD\bDe\bel\bla\bay\by.

       TopOrBottom():
		 <\b<C\bCt\btr\brl\bl>\b><\b<B\bBt\btn\bn1\b1D\bDo\bow\bwn\bn>\b>  in  an  arrow or in the scroll
		 region between an arrow and the slider moves the
		 slider  as  far  as possible in the direction of
		 the   arrow.	If   X\bXm\bmN\bNp\bpr\bro\boc\bce\bes\bss\bsi\bin\bng\bgD\bDi\bir\bre\bec\bct\bti\bio\bon\bn    is
		 X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_R\bRI\bIG\bGH\bHT\bT   or   X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_B\bBO\bOT\bTT\bTO\bOM\bM,  movement
		 toward the right or bottom calls  the	callbacks
		 for  X\bXm\bmN\bNt\bto\boB\bBo\bot\btt\bto\bom\bmC\bCa\bal\bll\blb\bba\bac\bck\bk,  and  movement  to the
		 left or top calls the	callbacks  for	X\bXm\bmN\bNt\bto\boT\bTo\bop\bp-\b-
		 C\bCa\bal\bll\blb\bba\bac\bck\bk.     If    X\bXm\bmN\bNp\bpr\bro\boc\bce\bes\bss\bsi\bin\bng\bgD\bDi\bir\bre\bec\bct\bti\bio\bon\bn    is
		 X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_L\bLE\bEF\bFT\bT or X\bXm\bmM\bMA\bAX\bX_\b_O\bON\bN_\b_T\bTO\bOP\bP,  movement  toward
		 the right or bottom calls the callbacks for X\bXm\bmN\bN-\b-
		 t\bto\boT\bTo\bop\bpC\bCa\bal\bll\blb\bba\bac\bck\bk, and movement to the left  or  top
		 calls	the  callbacks	for  X\bXm\bmN\bNt\bto\boB\bBo\bot\btt\bto\bom\bmC\bCa\bal\bll\blb\bba\bac\bck\bk.
		 The X\bXm\bmN\bNv\bva\bal\blu\bue\beC\bCh\bha\ban\bng\bge\bed\bdC\bCa\bal\bll\blb\bba\bac\bck\bk  is  called  if  the
		 X\bXm\bmN\bNt\bto\boT\bTo\bop\bpC\bCa\bal\bll\blb\bba\bac\bck\bk or X\bXm\bmN\bNt\bto\boB\bBo\bot\btt\bto\bom\bmC\bCa\bal\bll\blb\bba\bac\bck\bk is NULL.
		 Pressing <\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfB\bBe\beg\bgi\bin\bnL\bLi\bin\bne\be>\b> or  <\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfB\bBe\beg\bgi\bin\bn-\b-
		 D\bDa\bat\bta\ba>\b>	moves the slider to the minimum value and
		 invokes    the    X\bXm\bmN\bNt\bto\boT\bTo\bop\bpC\bCa\bal\bll\blb\bba\bac\bck\bk.	 Pressing
		 <\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfE\bEn\bnd\bdL\bLi\bin\bne\be>\b> or <\b<K\bKe\bey\by>\b><\b<o\bos\bsf\bfE\bEn\bnd\bdD\bDa\bat\bta\ba>\b> moves the
		 slider to the maximum value and invokes the X\bXm\bmN\bN-\b-
		 t\bto\boB\bBo\bot\btt\bto\bom\bmC\bCa\bal\bll\blb\bba\bac\bck\bk.

   V\bVi\bir\brt\btu\bua\bal\bl B\bBi\bin\bnd\bdi\bin\bng\bgs\bs
       The  bindings  for  virtual keys are vendor specific.  For
       information about bindings for virtual buttons  and  keys,
       see V\bVi\bir\brt\btu\bua\bal\blB\bBi\bin\bnd\bdi\bin\bng\bgs\bs(3).

R\bRE\bEL\bLA\bAT\bTE\bED\bD
       C\bCo\bor\bre\be(3),  X\bXm\bmC\bCr\bre\bea\bat\bte\beS\bSc\bcr\bro\bol\bll\blB\bBa\bar\br(3),	X\bXm\bmP\bPr\bri\bim\bmi\bit\bti\biv\bve\be(3), X\bXm\bmS\bSc\bcr\bro\bol\bll\bl-\b-
       B\bBa\bar\brG\bGe\bet\btV\bVa\bal\blu\bue\bes\bs(3), and X\bXm\bmS\bSc\bcr\bro\bol\bll\blB\bBa\bar\brS\bSe\bet\btV\bVa\bal\blu\bue\bes\bs(3).



						   XmScrollBar(3)

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: scroll-bar-toolkit-scroll
  2002-07-31 11:58         ` scroll-bar-toolkit-scroll Gerd Moellmann
@ 2002-08-01 16:51           ` Richard Stallman
  2002-08-02 10:19             ` scroll-bar-toolkit-scroll Gerd Moellmann
  2002-08-09  7:07             ` scroll-bar-toolkit-scroll Stefan Monnier
  2002-08-09  7:12           ` scroll-bar-toolkit-scroll Stefan Monnier
  1 sibling, 2 replies; 16+ messages in thread
From: Richard Stallman @ 2002-08-01 16:51 UTC (permalink / raw)
  Cc: emacs-devel

    As I read the man page, XmCR_DRAG is received while the user is
    dragging the slider for "each incremental change of position", so it
    would be neither up nor down event.

Stefan, is that correct?  It sounds like the event produced by
XmCR_DRAG ought to scroll the buffer based on the new position and
redisplay--is that right?

    I've used x_send_scroll_bar_event to "translate" the invocation of the
    scroll bar callback to an X event that is handled in XTread_socket
    like other events.  This seemed to be the easiest way to orderly
    produce a scroll bar input event in the kdb queue because I saw no way
    to predict when the callback is called (asynchronously).

Why not just insert the desired event into the Emacs event queue?
That can be done at any time, asynchronously.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: scroll-bar-toolkit-scroll
  2002-08-01 16:51           ` scroll-bar-toolkit-scroll Richard Stallman
@ 2002-08-02 10:19             ` Gerd Moellmann
  2002-08-09  7:07             ` scroll-bar-toolkit-scroll Stefan Monnier
  1 sibling, 0 replies; 16+ messages in thread
From: Gerd Moellmann @ 2002-08-02 10:19 UTC (permalink / raw)
  Cc: emacs-devel

Richard Stallman <rms@gnu.org> writes:

>     I've used x_send_scroll_bar_event to "translate" the invocation of the
>     scroll bar callback to an X event that is handled in XTread_socket
>     like other events.  This seemed to be the easiest way to orderly
>     produce a scroll bar input event in the kdb queue because I saw no way
>     to predict when the callback is called (asynchronously).
> 
> Why not just insert the desired event into the Emacs event queue?
> That can be done at any time, asynchronously.

I think it's easier the way it is, where there's only one place where
input events are stored to the queue.

For example, should the callback be invoked from XTread_socket, in the
course of an event that's dispatched from XTread_socket to the scroll
bar widget, XTread_socket's local variable numchars had to be
decremented if the callback itself pushed something on the queue.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: scroll-bar-toolkit-scroll
  2002-08-01 16:51           ` scroll-bar-toolkit-scroll Richard Stallman
  2002-08-02 10:19             ` scroll-bar-toolkit-scroll Gerd Moellmann
@ 2002-08-09  7:07             ` Stefan Monnier
  1 sibling, 0 replies; 16+ messages in thread
From: Stefan Monnier @ 2002-08-09  7:07 UTC (permalink / raw)
  Cc: gerd.moellmann, emacs-devel

>     As I read the man page, XmCR_DRAG is received while the user is
>     dragging the slider for "each incremental change of position", so it
>     would be neither up nor down event.
> 
> Stefan, is that correct?  It sounds like the event produced by
> XmCR_DRAG ought to scroll the buffer based on the new position and
> redisplay--is that right?

Yes, that sounds right.  Doesn't it do that ?


	Stefan

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: scroll-bar-toolkit-scroll
  2002-07-31 11:58         ` scroll-bar-toolkit-scroll Gerd Moellmann
  2002-08-01 16:51           ` scroll-bar-toolkit-scroll Richard Stallman
@ 2002-08-09  7:12           ` Stefan Monnier
  2002-08-12 17:07             ` scroll-bar-toolkit-scroll Richard Stallman
  1 sibling, 1 reply; 16+ messages in thread
From: Stefan Monnier @ 2002-08-09  7:12 UTC (permalink / raw)
  Cc: rms, emacs-devel

> >     IIRC, the scroll bar callback is invoked with action information only,
> > Could you explain what "action information" means?
> I meant "user action".  In the Motif case, for example the scroll bar
> callback in invoked for user action meaning "line down", "page up" etc.

Indeed.  And the translation from up/down/move X-events into those
"user actions" depends on the toolkit and is mostly outside the
control of Emacs.  In the case of Xaw3d, this translation can
be customized by the user via Xresources with something like:

*Scrollbar*translations:       #override \
     <Btn1Down>:   StartScroll(Forward) NotifyScroll(Proportional) \n\
     <Btn2Down>:   StartScroll(Continuous) MoveThumb() NotifyThumb() \n\
     <Btn3Down>:   StartScroll(Backward) NotifyScroll(Proportional) \n\
     <Btn2Motion>: MoveThumb() NotifyThumb() \n\
     <BtnUp>:      EndScroll()

Note that just like all those Xresources things, it doesn't always
work with all applications, or you sometimes need to explicitly
specify the application name because of precedence between overlapping
specifications, ...


	Stefan

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: scroll-bar-toolkit-scroll
  2002-08-09  7:12           ` scroll-bar-toolkit-scroll Stefan Monnier
@ 2002-08-12 17:07             ` Richard Stallman
  2002-08-12 17:14               ` scroll-bar-toolkit-scroll Stefan Monnier
  0 siblings, 1 reply; 16+ messages in thread
From: Richard Stallman @ 2002-08-12 17:07 UTC (permalink / raw)
  Cc: gerd.moellmann, emacs-devel

When you build Emacs with LessTif, does grabbing the slider work as it
ought to?  Does the buffer redisplay in a new position each time you
move the slider a little up or down?

What is the user-level intended Emacs scrolling behavior with Xaw3d?
Is it supposed to be compatible with the Emacs non-toolkit scroll bars?
If so, is that the best specification, is that what we should support?

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: scroll-bar-toolkit-scroll
  2002-08-12 17:07             ` scroll-bar-toolkit-scroll Richard Stallman
@ 2002-08-12 17:14               ` Stefan Monnier
  2002-08-13 22:46                 ` scroll-bar-toolkit-scroll Richard Stallman
  0 siblings, 1 reply; 16+ messages in thread
From: Stefan Monnier @ 2002-08-12 17:14 UTC (permalink / raw)
  Cc: monnier+gnu/emacs, gerd.moellmann, emacs-devel

> When you build Emacs with LessTif, does grabbing the slider work as it
> ought to?  Does the buffer redisplay in a new position each time you
> move the slider a little up or down?

Yes.

> What is the user-level intended Emacs scrolling behavior with Xaw3d?
> Is it supposed to be compatible with the Emacs non-toolkit scroll bars?

More or less.  Although it's less configurable from
elisp since more of the behavior is implemented in C (more specifically
in the toolkit code).

It should also be compatible with "the way these scrollbars work in
the given toolkit used".  So if you use Lesstif (or Xaw3d with arrows),
the bindings are not the same as the ones for non-toolkit Emacs (e.g.
mouse-3 does not scroll back).

> If so, is that the best specification, is that what we should support?

I don't think so, because in many cases making the scrollbar work
like non-toolkit Emacs (rather than the "native" behavior of the
toolkit) is difficult and I'm not sure it would be what users want.


	Stefan

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: scroll-bar-toolkit-scroll
  2002-08-12 17:14               ` scroll-bar-toolkit-scroll Stefan Monnier
@ 2002-08-13 22:46                 ` Richard Stallman
  2002-08-14 22:25                   ` scroll-bar-toolkit-scroll Stefan Monnier
  0 siblings, 1 reply; 16+ messages in thread
From: Richard Stallman @ 2002-08-13 22:46 UTC (permalink / raw)
  Cc: monnier+gnu/emacs, gerd.moellmann, emacs-devel

Should we try to make the toolkit scrollbars completely follow the
usual conventions of the toolkit, disregarding the non-toolkit Emacs
behavior?

Can you tell me the full list of behaviors of Emacs with Xaw3D?

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: scroll-bar-toolkit-scroll
  2002-08-13 22:46                 ` scroll-bar-toolkit-scroll Richard Stallman
@ 2002-08-14 22:25                   ` Stefan Monnier
  2002-08-15 19:54                     ` scroll-bar-toolkit-scroll Richard Stallman
  0 siblings, 1 reply; 16+ messages in thread
From: Stefan Monnier @ 2002-08-14 22:25 UTC (permalink / raw)
  Cc: monnier+gnu/emacs, gerd.moellmann, emacs-devel

> Should we try to make the toolkit scrollbars completely follow the
> usual conventions of the toolkit, disregarding the non-toolkit Emacs
> behavior?

I'm not sure what you mean.  I think that's pretty much what we do.
But the convention only specifies some aspect of the behavior.

> Can you tell me the full list of behaviors of Emacs with Xaw3D?

Depends how Xaw3d was compiled (with or without the -DARROW_SCROLLBAR
(or somesuch) option).  Without the -DARROW_SCROLLBAR it behaves like
non-toolkit Emacs (and hence like Xaw scrollbars).  With it, it
behaves more like Motif.
RedHat uses an Xaw3d compiled without -DARROW_SCROLLBAR while Debian
compiles it with -DARROW_SCROLLBAR (last I heard).


	Stefan

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: scroll-bar-toolkit-scroll
  2002-08-14 22:25                   ` scroll-bar-toolkit-scroll Stefan Monnier
@ 2002-08-15 19:54                     ` Richard Stallman
  2002-08-16 16:10                       ` scroll-bar-toolkit-scroll Stefan Monnier
  0 siblings, 1 reply; 16+ messages in thread
From: Richard Stallman @ 2002-08-15 19:54 UTC (permalink / raw)
  Cc: monnier+gnu/emacs, gerd.moellmann, emacs-devel

    Depends how Xaw3d was compiled (with or without the -DARROW_SCROLLBAR
    (or somesuch) option).  Without the -DARROW_SCROLLBAR it behaves like
    non-toolkit Emacs (and hence like Xaw scrollbars).  With it, it
    behaves more like Motif.

Is there no way for Emacs to control this behavior independent of
how the library was compiled?

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: scroll-bar-toolkit-scroll
  2002-08-15 19:54                     ` scroll-bar-toolkit-scroll Richard Stallman
@ 2002-08-16 16:10                       ` Stefan Monnier
  0 siblings, 0 replies; 16+ messages in thread
From: Stefan Monnier @ 2002-08-16 16:10 UTC (permalink / raw)
  Cc: monnier+gnu/emacs, gerd.moellmann, emacs-devel

>     Depends how Xaw3d was compiled (with or without the -DARROW_SCROLLBAR
>     (or somesuch) option).  Without the -DARROW_SCROLLBAR it behaves like
>     non-toolkit Emacs (and hence like Xaw scrollbars).  With it, it
>     behaves more like Motif.
> 
> Is there no way for Emacs to control this behavior independent of
> how the library was compiled?

No.  The appearance is different (with extra arrow-buttons at
each end) already.  You can influence the behavior via Xresources,
so you can bring them closer to each other if you really want to,
but it would still not be the same anyway.


	Stefan

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2002-08-16 16:10 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-07-29  1:12 scroll-bar-toolkit-scroll Richard Stallman
2002-07-29 10:51 ` scroll-bar-toolkit-scroll Gerd Moellmann
2002-07-30  0:59   ` scroll-bar-toolkit-scroll Richard Stallman
2002-07-30  9:12     ` scroll-bar-toolkit-scroll Gerd Moellmann
2002-07-31  5:54       ` scroll-bar-toolkit-scroll Richard Stallman
2002-07-31 11:58         ` scroll-bar-toolkit-scroll Gerd Moellmann
2002-08-01 16:51           ` scroll-bar-toolkit-scroll Richard Stallman
2002-08-02 10:19             ` scroll-bar-toolkit-scroll Gerd Moellmann
2002-08-09  7:07             ` scroll-bar-toolkit-scroll Stefan Monnier
2002-08-09  7:12           ` scroll-bar-toolkit-scroll Stefan Monnier
2002-08-12 17:07             ` scroll-bar-toolkit-scroll Richard Stallman
2002-08-12 17:14               ` scroll-bar-toolkit-scroll Stefan Monnier
2002-08-13 22:46                 ` scroll-bar-toolkit-scroll Richard Stallman
2002-08-14 22:25                   ` scroll-bar-toolkit-scroll Stefan Monnier
2002-08-15 19:54                     ` scroll-bar-toolkit-scroll Richard Stallman
2002-08-16 16:10                       ` scroll-bar-toolkit-scroll Stefan Monnier

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).