Provided by: libmotif-dev_2.3.8-3.1build1_amd64 bug

NAME

       XmProcessTraversal  —  A  function that determines which component receives keyboard events when a widget
       has the focus "XmProcessTraversal"

SYNOPSIS

       #include <Xm/Xm.h>
       Boolean XmProcessTraversal(
       Widget widget,
       XmTraversalDirection direction);

DESCRIPTION

       XmProcessTraversal determines which component of a hierarchy receives keyboard events when the  hierarchy
       that contains the given widget has keyboard focus.

       XmProcessTraversal changes focus only when the keyboard focus policy of the widget hierarchy is explicit.
       If  the  XmNkeyboardFocusPolicy  of  the  nearest  shell  ancestor of the given widget is not XmEXPLICIT,
       XmProcessTraversal returns False without making any focus changes.

       widget    Specifies the widget ID of the widget whose hierarchy is to be traversed

       direction Specifies the direction of traversal

   DEFINITIONS
       In order to be eligible to receive keyboard focus when the shell's XmNkeyboardFocusPolicy is  XmEXPLICIT,
       a widget or gadget must meet the following conditions:

          •  The widget and its ancestors are not in the process of being destroyed.

          •  The  widget  and  its  ancestors  are  sensitive.   A widget is sensitive when its XmNsensitive and
             XmNancestorSensitive resources are both True.

          •  The XmNtraversalOn resource for the widget and its ancestors is True.

          •  The widget is viewable.  This means that the widget and its ancestors are  managed,  realized,  and
             (except  for  gadgets) mapped.  Furthermore, in general, some part of the widget's rectangular area
             must be unobscured by the widget's ancestors. If an  application  unmaps  a  widget  that  has  its
             XmNmappedWhenManaged resource set to True, the result is undefined.

                 In  a  ScrolledWindow  with  an  XmNscrollingPolicy  of  XmAUTOMATIC, a widget that is obscured
                 because it is not within the clip window may be able to receive  focus  if  some  part  of  the
                 widget  is  within  the  work  area  and if an XmNtraverseObscuredCallback routine can make the
                 widget at least partially visible by scrolling the window.

       In general only primitives, gadgets, and Drawing Area are  eligible  to  receive  focus.   Most  managers
       cannot receive focus even if they meet all these conditions.

       The  direction  argument  identifies  the  kind  of  traversal action to take.  The descriptions of these
       actions below refer to traversable non-tab-group widgets and traversable tab groups.

          •  A traversable non-tab-group widget is a widget that is not a tab  group  and  that  meets  all  the
             conditions for receiving focus described above.

          •  A  traversable tab group widget is a tab group widget that meets the same conditions, except that a
             manager that is a tab group and meets the other conditions is also eligible for traversal  as  long
             as it contains a descendant that can receive focus.

       A tab group is a widget whose XmNnavigationType is:

          •  XmTAB_GROUP  or  XmSTICKY_TAB_GROUP,  if  the  hierarchy  (up  to  the nearest shell ancestor) that
             contains the widget has no widget whose XmNnavigationType is XmEXCLUSIVE_TAB_GROUPXmEXCLUSIVE_TAB_GROUP or XmSTICKY_TAB_GROUP, if the hierarchy (up to the  nearest  shell  ancestor)
             that contains the widget has any widget whose XmNnavigationType is XmEXCLUSIVE_TAB_GROUP

   TRAVERSAL ACTIONS
       The  hierarchy  to be traversed is that containing the widget argument.  This hierarchy is traversed only
       up to the nearest shell; XmProcessTraversal does not move focus from one shell to another.  If the  shell
       containing  widget  does  not  currently  have the focus, any change that XmProcessTraversal makes to the
       element with focus within that shell does not take effect until the next time the shell receives focus.

       XmProcessTraversal begins the traversal action from the  widget  in  the  hierarchy  that  currently  has
       keyboard focus or that last had focus when the user traversed away from the shell hierarchy.

       The value of the direction argument determines which of three kinds of traversal action to take:

          •  Traversal  to a non-tab-group widget.  This kind of traversal is possible only when the widget that
             currently has focus is not a tab group;  otherwise,  XmProcessTraversal  returns  False  for  these
             actions.

                 These actions do not move focus from one tab group to another.  The actions first determine the
                 containing  tab  group.   This is the tab group containing the widget that currently has focus.
                 The actions traverse only to a non-tab-group widget within the containing tab group.

                 A non-tab-group widget is eligible for this kind of traversal if the widget is traversable  and
                 has  no  tab  group  ancestors  up  to  the containing tab group.  If the tab group contains no
                 traversable non-tab-group widgets, XmProcessTraversal returns False.

                 Following are the possible values of the direction argument.   Note  that  when  actions  wrap,
                 wrapping  occurs  in the traversal direction. The following describes what happens in a left to
                 right environment:

                    •  XmTRAVERSE_RIGHT—If  the  XmNnavigationType  of  the  containing   tab   group   is   not
                       XmEXCLUSIVE_TAB_GROUP,  focus  moves  to the next traversable non-tab-group widget to the
                       right of the widget that currently has focus.  In a left to  right  environment,  at  the
                       right  side  of  the  tab group this action wraps to the non-tab-group widget at the left
                       side and next toward the bottom.  At the rightmost widget in the bottom row  of  the  tab
                       group  this  action wraps to the non-tab-group widget at the leftmost widget in the upper
                       row.

                           In a right to left environment, at the right side of the tab group, this action wraps
                           to the non-tab-group widget at the  left  side  and  next  toward  the  top.  At  the
                           rightmost  widget in the upper row of the tab group this action wraps to the non-tab-
                           group widget at the leftmost widget in the bottom row.

                           If the XmNnavigationType of the containing tab group is XmEXCLUSIVE_TAB_GROUP,  focus
                           moves  to  the  next traversable non-tab-group widget in the tab group, proceeding in
                           the order in which the widgets appear in their parents' XmNchildren lists.  After the
                           last widget in the tab group, this action wraps to the first non-tab-group widget.

                    •  XmTRAVERSE_LEFT—If  the  XmNnavigationType  of  the   containing   tab   group   is   not
                       XmEXCLUSIVE_TAB_GROUP,  focus  moves  to the next traversable non-tab-group widget to the
                       left of the widget that currently has focus.  In a left to right environment, at the left
                       side of the tab group this action wraps to the non-tab-group widget at the right side and
                       next toward the top.  At the leftmost widget in the upper  row  of  the  tab  group  this
                       action wraps to the non-tab-group widget at the rightmost widget in the bottom row.

                           In  a  right to left environment, at the left side of the tab group this action wraps
                           to the non-tab-group widget at the right side and next  toward  the  bottom.  At  the
                           leftmost  widget in the bottom row of the tab group this action wraps to the non-tab-
                           group widget at the rightmost widget in the upper row.

                           If the XmNnavigationType of the containing tab group is XmEXCLUSIVE_TAB_GROUP,  focus
                           moves  to  the previous traversable non-tab-group widget in the tab group, proceeding
                           in the reverse order in which the widgets appear in their parents' XmNchildren lists.
                           After the first widget in the tab group, this action wraps to the last  non-tab-group
                           widget.

                    •  XmTRAVERSE_DOWN—If   the   XmNnavigationType   of   the   containing  tab  group  is  not
                       XmEXCLUSIVE_TAB_GROUP, focus moves to the next traversable non-tab-group widget below the
                       widget that currently has focus.  In a left to right environment, at the  bottom  of  the
                       tab  group  this  action wraps to the non-tab-group widget at the top and next toward the
                       right.  At the bottom widget in the rightmost column of the tab group this  action  wraps
                       to the non-tab-group widget at the top widget in the leftmost column.

                           In  a  right to left environment, at the bottom of the tab group this action wraps to
                           the non-tab-group widget at the top and next toward the left. At the bottom widget of
                           the leftmost widget of the tab group this action wraps to the non-tab-group widget at
                           the top widget of the rightmost column.

                           If the XmNnavigationType of the containing tab group is XmEXCLUSIVE_TAB_GROUP,  focus
                           moves  to  the  next traversable non-tab-group widget in the tab group, proceeding in
                           the order in which the widgets appear in their parents' XmNchildren lists.  After the
                           last widget in the tab group, this action wraps to the first non-tab-group widget.

                    •  XmTRAVERSE_UP—If  the  XmNnavigationType   of   the   containing   tab   group   is   not
                       XmEXCLUSIVE_TAB_GROUP, focus moves to the next traversable non-tab-group widget above the
                       widget  that  currently has focus.  In a left to right environment, at the top of the tab
                       group this action wraps to the non-tab-group widget at the bottom  and  next  toward  the
                       left.  At the top widget of the leftmost column of the tab group this action wraps to the
                       non-tab-group widget at the bottom widget of the rightmost column.

                           In  a right to left environment, at the top of the tab group this action wraps to the
                           non-tab-group widget at the bottom and next toward the right. At the  top  widget  of
                           the  right most column of the tab group this action wraps to the non-tab-group widget
                           at the bottom widget of the leftmost column.

                           If the XmNnavigationType of the containing tab group is XmEXCLUSIVE_TAB_GROUP,  focus
                           moves  to  the previous traversable non-tab-group widget in the tab group, proceeding
                           in the reverse order in which the widgets appear in their parents' XmNchildren lists.
                           After the first widget in the tab group, this action wraps to the last  non-tab-group
                           widget.

                    •  XmTRAVERSE_NEXT—Focus  moves  to  the  next  traversable  non-tab-group widget in the tab
                       group, proceeding in the order in which the widgets appear in their parents'  XmNchildren
                       lists.   After  the last widget in the tab group, this action wraps to the first non-tab-
                       group widget.

                    •  XmTRAVERSE_PREV—Focus moves to the previous traversable non-tab-group widget in  the  tab
                       group,  proceeding  in  the  reverse  order in which the widgets appear in their parents'
                       XmNchildren lists.  After the first widget in the tab group, this  action  wraps  to  the
                       last non-tab-group widget.

                    •  XmTRAVERSE_HOME—If   the   XmNnavigationType   of   the   containing  tab  group  is  not
                       XmEXCLUSIVE_TAB_GROUP, focus moves to the first traversable non-tab-group widget  at  the
                       initial focus of the tab group.

                           If  the XmNnavigationType of the containing tab group is XmEXCLUSIVE_TAB_GROUP, focus
                           moves to the first traversable non-tab-group widget in the tab  group,  according  to
                           the order in which the widgets appear in their parents' XmNchildren lists.

          •  Traversal  to  a  tab  group.   These  actions first determine the current widget hierarchy and the
             containing tab group.  The current widget hierarchy is the  widget  hierarchy  whose  root  is  the
             nearest  shell ancestor of the widget that currently has focus.  The containing tab group is is the
             tab group containing the widget that currently has focus.  If the current widget hierarchy contains
             no traversable tab groups, XmProcessTraversal returns False.

                 Following are the possible values of the direction argument. If any tab group  in  the  current
                 widget  hierarchy has an XmNnavigationType of XmEXCLUSIVE_TAB_GROUP, traversal of tab groups in
                 the hierarchy proceeds to widgets in the order in which their XmNnavigationType resources  were
                 specified as XmEXCLUSIVE_TAB_GROUP or XmSTICKY_TAB_GROUP.:

                    •  XmTRAVERSE_NEXT_TAB_GROUP—Finds  the hierarchy that contains widget, finds the active tab
                       group (if any), and makes the next tab group the active tab group in the hierarchy.

                    •  XmTRAVERSE_PREV_TAB_GROUP—Finds the hierarchy that contains widget, finds the active  tab
                       group (if any), and makes the previous tab group the active tab group in the hierarchy.

          •  Traversal   to   any   widget.    In  this  case  the  widget  argument  is  the  widget  to  which
             XmProcessTraversal tries to give focus.  If  the  widget  is  not  traversable,  XmProcessTraversal
             returns False.

                 Following are the possible values of the direction argument:

                    •  XmTRAVERSE_CURRENT—Finds  the  hierarchy  and the tab group that contain widget.  If this
                       tab group is not the active tab group, this action makes it the  active  tab  group.   If
                       widget  is  an  item  in  the active tab group, this action makes it the active item.  If
                       widget is the active tab group, this action makes the first traversable item in  the  tab
                       group the active item.

   CAUTIONS
       Using  XmProcessTraversal  to  traverse  to  MenuBars,  Pulldown  menu  panes, or Popup menu panes is not
       supported.

       XmProcessTraversal cannot be called recursively.  In particular, an application cannot call this  routine
       from an XmNfocusCallback or XmNlosingFocusCallback procedure.

RETURN

       Returns  True  if  the  traversal  action  succeeded.  Returns False if the XmNkeyboardFocusPolicy of the
       nearest shell ancestor of widget is not XmEXPLICIT, if the traversal action finds no  traversable  widget
       to receive focus, or if the call to the routine has invalid arguments.

RELATED

       XmGetVisibility(3) and XmIsTraversable(3).

                                                                                           XmProcessTraversal(3)