Blame lib/Xm/Obso1_2.c

Packit b099d7
/* $XConsortium: Obso1_2.c /main/7 1996/06/14 23:10:17 pascale $ */
Packit b099d7
/*
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
 * 
Packit b099d7
 */
Packit b099d7
/*
Packit b099d7
 * HISTORY
Packit b099d7
 */
Packit b099d7
Packit b099d7
#ifdef HAVE_CONFIG_H
Packit b099d7
#include <config.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
Packit b099d7
#include <ctype.h>
Packit b099d7
#ifndef X_NOT_STDC_ENV
Packit b099d7
#include <stdlib.h>
Packit b099d7
#endif
Packit b099d7
#include <Xm/XmP.h>
Packit b099d7
#include <Xm/BaseClassP.h>
Packit b099d7
#include <Xm/DesktopP.h>
Packit b099d7
#include <Xm/DisplayP.h>
Packit b099d7
#include <Xm/DrawingAP.h>
Packit b099d7
#include <Xm/FileSBP.h>
Packit b099d7
#include <Xm/GadgetP.h>
Packit b099d7
#include <Xm/List.h>
Packit b099d7
#include <Xm/ManagerP.h>
Packit b099d7
#include <Xm/MenuShellP.h>
Packit b099d7
#include <Xm/PrimitiveP.h>
Packit b099d7
#include <Xm/PushBGP.h>
Packit b099d7
#include <Xm/PushBP.h>
Packit b099d7
#include <Xm/RowColumnP.h>
Packit b099d7
#include <Xm/ScaleP.h>
Packit b099d7
#include <Xm/ScreenP.h>
Packit b099d7
#include <Xm/ScrolledWP.h>
Packit b099d7
#include <Xm/Text.h>
Packit b099d7
#include <Xm/TextF.h>
Packit b099d7
#include <Xm/TransltnsP.h>
Packit b099d7
#include <Xm/VendorSEP.h>
Packit b099d7
#include "BulletinBI.h"
Packit b099d7
#include "MessagesI.h"
Packit b099d7
#include "SelectioBI.h"
Packit b099d7
#include "SyntheticI.h"
Packit b099d7
#include "TraversalI.h"
Packit b099d7
#include "XmStringI.h"		/* for _XmStringGetTextConcat() */
Packit b099d7
Packit b099d7
Packit b099d7
typedef struct {
Packit b099d7
    int		segment_size;
Packit b099d7
    char*	start;
Packit b099d7
    char*	current;
Packit b099d7
    int		bytes_remaining;
Packit b099d7
} XmHeapRec, *XmHeap;
Packit b099d7
Packit b099d7
Packit b099d7
/********    Static Function Declarations    ********/
Packit b099d7
Packit b099d7
Packit b099d7
/********    End Static Function Declarations    ********/
Packit b099d7
Packit b099d7
Packit b099d7
externaldef(desktopobjectclass) WidgetClass 
Packit b099d7
      xmDesktopObjectClass = (WidgetClass) &xmDesktopClassRec;
Packit b099d7
Packit b099d7
externaldef(displayobjectclass) WidgetClass 
Packit b099d7
      xmDisplayObjectClass = (WidgetClass) (&xmDisplayClassRec);
Packit b099d7
Packit b099d7
externaldef(screenobjectclass) WidgetClass 
Packit b099d7
      xmScreenObjectClass = (WidgetClass) (&xmScreenClassRec);
Packit b099d7
Packit b099d7
externaldef(worldobjectclass) WidgetClass 
Packit b099d7
      xmWorldObjectClass = (WidgetClass) NULL;
Packit b099d7
/* WorldP.h was defuncted for 2.0 , no more ref to (&xmWorldClassRec) */
Packit b099d7
Packit b099d7
Packit b099d7
int 
Packit b099d7
XmTextFieldGetBaseLine(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  return XmTextFieldGetBaseline( w) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
int 
Packit b099d7
XmTextGetBaseLine(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  return XmTextGetBaseline( w) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
Boolean 
Packit b099d7
_XmTestTraversability(
Packit b099d7
        Widget widget,
Packit b099d7
        XRectangle *visRect )	/* unused */
Packit b099d7
{   
Packit b099d7
  return XmIsTraversable( widget) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmClearTabGroup(
Packit b099d7
        Widget w )		/* unused */
Packit b099d7
{
Packit b099d7
  return ;
Packit b099d7
}
Packit b099d7
Packit b099d7
Widget 
Packit b099d7
_XmFindTabGroup(
Packit b099d7
        Widget widget )
Packit b099d7
{   
Packit b099d7
  return XmGetTabGroup( widget) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmClearKbdFocus(
Packit b099d7
        Widget tabGroup )	/* unused */
Packit b099d7
{
Packit b099d7
  return ;
Packit b099d7
}
Packit b099d7
Packit b099d7
Widget 
Packit b099d7
_XmGetTabGroup(
Packit b099d7
        Widget w )
Packit b099d7
{   
Packit b099d7
  return XmGetTabGroup( w) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
Boolean 
Packit b099d7
_XmWidgetIsTraversable(
Packit b099d7
        Widget widget,
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
        int navType,		/* unused */
Packit b099d7
#else
Packit b099d7
        XmNavigationType navType, /* unused */
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
        XRectangle *visRect )	/* unused */
Packit b099d7
{   
Packit b099d7
  return XmIsTraversable( widget) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
Boolean 
Packit b099d7
_XmGetManagedInfo(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  /* Depending upon the widget coming in, extract its mapped_when_managed flag
Packit b099d7
   * and its managed flag.
Packit b099d7
   */
Packit b099d7
    if (XmIsPrimitive (w))
Packit b099d7
      return (w->core.managed && w->core.mapped_when_managed);
Packit b099d7
    else if (XmIsGadget (w))
Packit b099d7
      return (w->core.managed);
Packit b099d7
    else
Packit b099d7
      {
Packit b099d7
	  /* Treat menupanes specially */
Packit b099d7
	  if (XmIsRowColumn(w) && XmIsMenuShell(XtParent(w)))
Packit b099d7
	    {
Packit b099d7
		return (True);
Packit b099d7
	    }
Packit b099d7
	  else
Packit b099d7
	    return (w->core.managed && w->core.mapped_when_managed);
Packit b099d7
      }
Packit b099d7
}
Packit b099d7
Packit b099d7
Boolean 
Packit b099d7
_XmChangeNavigationType(
Packit b099d7
        Widget current,
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
        int newNavType )
Packit b099d7
#else
Packit b099d7
        XmNavigationType newNavType )
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
{   
Packit b099d7
  /* This is a convenience routine for widgets wanting to change
Packit b099d7
   * their navigation type without using XtSetValues().
Packit b099d7
   */
Packit b099d7
  XmFocusData focusData ;
Packit b099d7
  Widget new_wid = current->core.self ;
Packit b099d7
  XmNavigationType curNavType = _XmGetNavigationType( current) ;
Packit b099d7
  XmTravGraph tgraph ;
Packit b099d7
Packit b099d7
  if(    (curNavType != newNavType)
Packit b099d7
     &&  (focusData = _XmGetFocusData( new_wid))
Packit b099d7
     &&  (tgraph = &(focusData->trav_graph))->num_entries    )
Packit b099d7
    {
Packit b099d7
      _XmTravGraphUpdate( tgraph, new_wid) ;
Packit b099d7
Packit b099d7
      if(    (focusData->focus_policy == XmEXPLICIT)
Packit b099d7
	 &&  (focusData->focus_item == new_wid)
Packit b099d7
	 &&  !XmIsTraversable( new_wid)    )
Packit b099d7
	{
Packit b099d7
	  Widget new_focus = _XmTraverseAway( tgraph, new_wid,
Packit b099d7
				    (focusData->active_tab_group != new_wid)) ;
Packit b099d7
	  if(    !new_focus    )
Packit b099d7
	    {
Packit b099d7
	      new_focus = new_wid ;
Packit b099d7
	    }
Packit b099d7
	  _XmMgrTraversal( new_focus, XmTRAVERSE_CURRENT) ;
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
  return TRUE ;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/********************************************************************/
Packit b099d7
/* Following is the old code needed for subclasses already using it */
Packit b099d7
/* They can either define the macro and change nothing (but suffer
Packit b099d7
   the addition of code and the drawing performance) or adapt to the 
Packit b099d7
   new interface (better) */
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  Primitive:_XmDrawShadow, become XmDrawShadow
Packit b099d7
 *
Packit b099d7
 *      Draw an n segment wide bordering shadow on the drawable
Packit b099d7
 *      d, using the provided GC's and rectangle.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Packit b099d7
void _XmDrawShadow (Display *display, Drawable d, 
Packit b099d7
                    GC top_GC, GC bottom_GC, int size, int x, int y, 
Packit b099d7
                    int width, int height)
Packit b099d7
{
Packit b099d7
   static XRectangle * rects = NULL;
Packit b099d7
   static int rect_count = 0;
Packit b099d7
   register int i;
Packit b099d7
   register int size2;
Packit b099d7
   register int size3;
Packit b099d7
Packit b099d7
   if (size <= 0) return;
Packit b099d7
   if (size > width / 2) size = width / 2;
Packit b099d7
   if (size > height / 2) size = height / 2;
Packit b099d7
   if (size <= 0) return;
Packit b099d7
Packit b099d7
   if (rect_count == 0)
Packit b099d7
   {
Packit b099d7
      rects = (XRectangle *) XtMalloc (sizeof (XRectangle) * size * 4);
Packit b099d7
      rect_count = size;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if (rect_count < size)
Packit b099d7
   {
Packit b099d7
      rects = (XRectangle *) XtRealloc((char *)rects, sizeof (XRectangle) * size * 4);
Packit b099d7
      rect_count = size;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   size2 = size + size;
Packit b099d7
   size3 = size2 + size;
Packit b099d7
Packit b099d7
   for (i = 0; i < size; i++)
Packit b099d7
   {
Packit b099d7
      /*  Top segments  */
Packit b099d7
Packit b099d7
      rects[i].x = x;
Packit b099d7
      rects[i].y = y + i;
Packit b099d7
      rects[i].width = width - i;
Packit b099d7
      rects[i].height = 1;
Packit b099d7
Packit b099d7
Packit b099d7
      /*  Left segments  */
Packit b099d7
Packit b099d7
      rects[i + size].x = x + i;
Packit b099d7
      rects[i + size].y = y;
Packit b099d7
      rects[i + size].width = 1;
Packit b099d7
      rects[i + size].height = height - i;
Packit b099d7
Packit b099d7
Packit b099d7
      /*  Bottom segments  */
Packit b099d7
Packit b099d7
      rects[i + size2].x = x + i + 1;
Packit b099d7
      rects[i + size2].y = y + height - i - 1;
Packit b099d7
      rects[i + size2].width = width - i - 1;
Packit b099d7
      rects[i + size2].height = 1;
Packit b099d7
Packit b099d7
Packit b099d7
      /*  Right segments  */
Packit b099d7
Packit b099d7
      rects[i + size3].x = x + width - i - 1;
Packit b099d7
      rects[i + size3].y = y + i + 1;
Packit b099d7
      rects[i + size3].width = 1;
Packit b099d7
      rects[i + size3].height = height - i - 1;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   XFillRectangles (display, d, top_GC, &rects[0], size2);
Packit b099d7
   XFillRectangles (display, d, bottom_GC, &rects[size2], size2);
Packit b099d7
}
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  Primitive:_XmEraseShadow become XmClearShadow
Packit b099d7
 *
Packit b099d7
 *      Erase an n segment wide bordering shadow on the drawable
Packit b099d7
 *      d, using the provided  rectangle.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Packit b099d7
void _XmEraseShadow (Display *display, Drawable d, int size, 
Packit b099d7
                     int x, int y, int width, int height)
Packit b099d7
{
Packit b099d7
   if (width > 0 && size > 0)
Packit b099d7
   {
Packit b099d7
      XClearArea (display, d, x, y, width, size, FALSE);
Packit b099d7
      XClearArea (display, d, x, y + height - size, width, size, FALSE);
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if (size > 0 && height - (2 * size) > 0)
Packit b099d7
   {
Packit b099d7
      XClearArea (display, d, x, y + size, size, height - (2 * size), FALSE);
Packit b099d7
      XClearArea (display, d, x + width - size, y + size, size, 
Packit b099d7
                  height - (2 * size), FALSE);
Packit b099d7
   }
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *    ArrowBI:_XmGetArrowDrawRects, become XmDrawArrow
Packit b099d7
 *
Packit b099d7
 *      Calculate the drawing rectangles.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Packit b099d7
void _XmGetArrowDrawRects (int highlight_thickness, int shadow_thickness, unsigned int direction, int core_width, int core_height, short *top_count, short *cent_count, short *bot_count, XRectangle **top, XRectangle **cent, XRectangle **bot)
Packit b099d7
{
Packit b099d7
   /*  Arrow rectangle generation function  */
Packit b099d7
Packit b099d7
   int size, width, start;
Packit b099d7
   register int y;
Packit b099d7
   XRectangle *tmp;
Packit b099d7
   register int temp;
Packit b099d7
   short t = 0;
Packit b099d7
   short b = 0;
Packit b099d7
   short c = 0;
Packit b099d7
   int xOffset = 0;
Packit b099d7
   int yOffset = 0;
Packit b099d7
Packit b099d7
Packit b099d7
   /*  Free the old lists  */
Packit b099d7
Packit b099d7
   if (*top != NULL)
Packit b099d7
   {
Packit b099d7
      XtFree ((char *) *top);   *top  = NULL;
Packit b099d7
      XtFree ((char *) *cent);  *cent = NULL;
Packit b099d7
      XtFree ((char *) *bot);   *bot  = NULL;
Packit b099d7
      *top_count = 0;
Packit b099d7
      *cent_count = 0;
Packit b099d7
      *bot_count = 0;
Packit b099d7
   }
Packit b099d7
Packit b099d7
Packit b099d7
   /*  Get the size and allocate the rectangle lists  */
Packit b099d7
Packit b099d7
   if (core_width > core_height) 
Packit b099d7
   {
Packit b099d7
      size = core_height - 2 - 
Packit b099d7
             2 * (highlight_thickness + shadow_thickness);
Packit b099d7
      xOffset = (core_width - core_height) / 2;
Packit b099d7
   }
Packit b099d7
   else
Packit b099d7
   {
Packit b099d7
      size = core_width - 2 - 
Packit b099d7
             2 * (highlight_thickness + shadow_thickness);
Packit b099d7
      yOffset = (core_height - core_width) / 2;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if (size < 1) return;
Packit b099d7
Packit b099d7
Packit b099d7
   if (direction == XmARROW_RIGHT ||
Packit b099d7
       direction == XmARROW_LEFT)
Packit b099d7
   {
Packit b099d7
      temp = xOffset;
Packit b099d7
      xOffset = yOffset;
Packit b099d7
      yOffset = temp;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   *top  = (XRectangle *) XtMalloc (sizeof (XRectangle) * (size / 2 + 6));
Packit b099d7
   *cent = (XRectangle *) XtMalloc (sizeof (XRectangle) * (size  / 2 + 6));
Packit b099d7
   *bot  = (XRectangle *) XtMalloc (sizeof (XRectangle) * (size / 2 + 6));
Packit b099d7
Packit b099d7
   /*  Set up a loop to generate the segments.  */
Packit b099d7
Packit b099d7
   width = size;
Packit b099d7
   y = size + highlight_thickness + shadow_thickness - 1 + yOffset;
Packit b099d7
Packit b099d7
   start = highlight_thickness + shadow_thickness + 1 + xOffset;
Packit b099d7
Packit b099d7
   while (width > 0)
Packit b099d7
   {
Packit b099d7
Packit b099d7
      if (width == 1)
Packit b099d7
      {
Packit b099d7
         (*top)[t].x = start; (*top)[t].y = y + 1;
Packit b099d7
         (*top)[t].width = 1; (*top)[t].height = 1;
Packit b099d7
         t++;
Packit b099d7
      }
Packit b099d7
      else if (width == 2)
Packit b099d7
      {
Packit b099d7
         if (size == 2 || 
Packit b099d7
             (direction == XmARROW_UP ||
Packit b099d7
              direction == XmARROW_LEFT))
Packit b099d7
         {
Packit b099d7
            (*top)[t].x = start; (*top)[t].y = y;
Packit b099d7
            (*top)[t].width = 2; (*top)[t].height = 1;
Packit b099d7
            t++;
Packit b099d7
            (*top)[t].x = start; (*top)[t].y = y + 1;
Packit b099d7
            (*top)[t].width = 1; (*top)[t].height = 1;
Packit b099d7
            t++;
Packit b099d7
            (*bot)[b].x = start + 1; (*bot)[b].y = y + 1;
Packit b099d7
            (*bot)[b].width = 1; (*bot)[b].height = 1;
Packit b099d7
            b++;
Packit b099d7
         }
Packit b099d7
         else if (direction == XmARROW_UP ||
Packit b099d7
                  direction == XmARROW_LEFT)
Packit b099d7
         {
Packit b099d7
            (*top)[t].x = start; (*top)[t].y = y;
Packit b099d7
            (*top)[t].width = 2; (*top)[t].height = 1;
Packit b099d7
            t++;
Packit b099d7
            (*bot)[b].x = start; (*bot)[b].y = y + 1;
Packit b099d7
            (*bot)[b].width = 2; (*bot)[b].height = 1;
Packit b099d7
            b++;
Packit b099d7
         }
Packit b099d7
      }
Packit b099d7
      else
Packit b099d7
      {
Packit b099d7
         if (start == highlight_thickness +
Packit b099d7
                      shadow_thickness + 1 + xOffset)
Packit b099d7
         {
Packit b099d7
            if (direction == XmARROW_UP ||
Packit b099d7
                direction == XmARROW_LEFT)
Packit b099d7
            {
Packit b099d7
               (*top)[t].x = start; (*top)[t].y = y;
Packit b099d7
               (*top)[t].width = 2; (*top)[t].height = 1;
Packit b099d7
               t++;
Packit b099d7
               (*top)[t].x = start; (*top)[t].y = y + 1;
Packit b099d7
               (*top)[t].width = 1; (*top)[t].height = 1;
Packit b099d7
               t++;
Packit b099d7
               (*bot)[b].x = start + 1; (*bot)[b].y = y + 1;
Packit b099d7
               (*bot)[b].width = 1; (*bot)[b].height = 1;
Packit b099d7
               b++;
Packit b099d7
               (*bot)[b].x = start + 2; (*bot)[b].y = y;
Packit b099d7
               (*bot)[b].width = width - 2; (*bot)[b].height = 2;
Packit b099d7
               b++;
Packit b099d7
            }
Packit b099d7
            else
Packit b099d7
            {
Packit b099d7
               (*top)[t].x = start; (*top)[t].y = y;
Packit b099d7
               (*top)[t].width = 2; (*top)[t].height = 1;
Packit b099d7
               t++;
Packit b099d7
               (*bot)[b].x = start; (*bot)[b].y = y + 1;
Packit b099d7
               (*bot)[b].width = 2; (*bot)[b].height = 1;
Packit b099d7
               b++;
Packit b099d7
               (*bot)[b].x = start + 2; (*bot)[b].y = y;
Packit b099d7
               (*bot)[b].width = width - 2; (*bot)[b].height = 2;
Packit b099d7
               b++;
Packit b099d7
            }
Packit b099d7
         }
Packit b099d7
         else
Packit b099d7
         {
Packit b099d7
            (*top)[t].x = start; (*top)[t].y = y;
Packit b099d7
            (*top)[t].width = 2; (*top)[t].height = 2;
Packit b099d7
            t++;
Packit b099d7
            (*bot)[b].x = start + width - 2; (*bot)[b].y = y;
Packit b099d7
            (*bot)[b].width = 2; (*bot)[b].height = 2;
Packit b099d7
            if (width == 3)
Packit b099d7
            {
Packit b099d7
               (*bot)[b].width = 1;
Packit b099d7
               (*bot)[b].x += 1;
Packit b099d7
            }
Packit b099d7
            b++;
Packit b099d7
            if (width > 4)
Packit b099d7
            {
Packit b099d7
               (*cent)[c].x = start + 2; (*cent)[c].y = y;
Packit b099d7
               (*cent)[c].width = width - 4; (*cent)[c].height = 2;
Packit b099d7
               c++;
Packit b099d7
            }
Packit b099d7
         }
Packit b099d7
      }
Packit b099d7
      start++;
Packit b099d7
      width -= 2;
Packit b099d7
      y -= 2;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if (direction == XmARROW_UP ||
Packit b099d7
       direction == XmARROW_LEFT)
Packit b099d7
   {
Packit b099d7
      *top_count = t;
Packit b099d7
      *cent_count = c;
Packit b099d7
      *bot_count = b;
Packit b099d7
   }
Packit b099d7
   else
Packit b099d7
   {   
Packit b099d7
      tmp = *top;
Packit b099d7
      *top = *bot;
Packit b099d7
      *bot = tmp;
Packit b099d7
      *top_count = b;
Packit b099d7
      *cent_count = c;
Packit b099d7
      *bot_count = t;
Packit b099d7
   }
Packit b099d7
Packit b099d7
Packit b099d7
   /*  Transform the "up" pointing arrow to the correct direction  */
Packit b099d7
Packit b099d7
   switch (direction)
Packit b099d7
   {
Packit b099d7
      case XmARROW_LEFT:
Packit b099d7
      {
Packit b099d7
          register int i; 
Packit b099d7
Packit b099d7
          i = -1;
Packit b099d7
          do
Packit b099d7
          {
Packit b099d7
             i++;
Packit b099d7
             if (i < *top_count)
Packit b099d7
             {
Packit b099d7
                temp = (*top)[i].y; (*top)[i].y =
Packit b099d7
                    (*top)[i].x; (*top)[i].x = temp;
Packit b099d7
                temp = (*top)[i].width; 
Packit b099d7
                (*top)[i].width = (*top)[i].height; (*top)[i].height = temp;
Packit b099d7
             }             
Packit b099d7
             if (i < *bot_count)
Packit b099d7
             {
Packit b099d7
                temp = (*bot)[i].y; (*bot)[i].y =
Packit b099d7
                    (*bot)[i].x; (*bot)[i].x = temp;
Packit b099d7
                temp = (*bot)[i].width; 
Packit b099d7
                (*bot)[i].width = (*bot)[i].height; (*bot)[i].height = temp;
Packit b099d7
             }             
Packit b099d7
             if (i < *cent_count)
Packit b099d7
             {
Packit b099d7
                temp = (*cent)[i].y; (*cent)[i].y =
Packit b099d7
                    (*cent)[i].x; (*cent)[i].x = temp;
Packit b099d7
                temp = (*cent)[i].width; 
Packit b099d7
                (*cent)[i].width = (*cent)[i].height; (*cent)[i].height = temp;
Packit b099d7
             }             
Packit b099d7
          }
Packit b099d7
          while (i < *top_count || i < *bot_count || i < *cent_count);
Packit b099d7
      }
Packit b099d7
      break;
Packit b099d7
Packit b099d7
      case XmARROW_RIGHT:
Packit b099d7
      {
Packit b099d7
          register int h_right = core_height - 2;
Packit b099d7
          register int w_right = core_width - 2;
Packit b099d7
          register int i; 
Packit b099d7
Packit b099d7
          i = -1;
Packit b099d7
          do
Packit b099d7
          {
Packit b099d7
             i++;
Packit b099d7
             if (i < *top_count)
Packit b099d7
             {
Packit b099d7
                temp = (*top)[i].y; (*top)[i].y = (*top)[i].x; 
Packit b099d7
                (*top)[i].x = temp; 
Packit b099d7
                temp = (*top)[i].width; (*top)[i].width = (*top)[i].height; 
Packit b099d7
                (*top)[i].height = temp;
Packit b099d7
                (*top)[i].x = w_right - (*top)[i].x - (*top)[i].width + 2;
Packit b099d7
                (*top)[i].y = h_right - (*top)[i].y - (*top)[i].height + 2;
Packit b099d7
             }             
Packit b099d7
             if (i < *bot_count)
Packit b099d7
             {
Packit b099d7
                temp = (*bot)[i].y; (*bot)[i].y = (*bot)[i].x; 
Packit b099d7
                (*bot)[i].x = temp; 
Packit b099d7
                temp = (*bot)[i].width; (*bot)[i].width = (*bot)[i].height; 
Packit b099d7
                (*bot)[i].height = temp;
Packit b099d7
                (*bot)[i].x = w_right - (*bot)[i].x - (*bot)[i].width + 2;
Packit b099d7
                (*bot)[i].y = h_right - (*bot)[i].y - (*bot)[i].height + 2;
Packit b099d7
             }             
Packit b099d7
             if (i < *cent_count)
Packit b099d7
             {
Packit b099d7
                temp = (*cent)[i].y; (*cent)[i].y = (*cent)[i].x; 
Packit b099d7
                (*cent)[i].x = temp; 
Packit b099d7
                temp = (*cent)[i].width; (*cent)[i].width = (*cent)[i].height;
Packit b099d7
                (*cent)[i].height = temp;
Packit b099d7
                (*cent)[i].x = w_right - (*cent)[i].x - (*cent)[i].width + 2;
Packit b099d7
                (*cent)[i].y = h_right - (*cent)[i].y - (*cent)[i].height + 2;
Packit b099d7
             }
Packit b099d7
          }
Packit b099d7
          while (i < *top_count || i < *bot_count || i < *cent_count);
Packit b099d7
      }
Packit b099d7
      break;
Packit b099d7
Packit b099d7
      case XmARROW_UP:
Packit b099d7
      {
Packit b099d7
      }
Packit b099d7
      break;
Packit b099d7
Packit b099d7
      case XmARROW_DOWN:
Packit b099d7
      {
Packit b099d7
          register int w_down = core_width - 2;
Packit b099d7
          register int h_down = core_height - 2;
Packit b099d7
          register int i; 
Packit b099d7
Packit b099d7
          i = -1;
Packit b099d7
          do
Packit b099d7
          {
Packit b099d7
             i++;
Packit b099d7
             if (i < *top_count)
Packit b099d7
             {
Packit b099d7
                (*top)[i].x = w_down - (*top)[i].x - (*top)[i].width + 2;
Packit b099d7
                (*top)[i].y = h_down - (*top)[i].y - (*top)[i].height + 2;
Packit b099d7
             }
Packit b099d7
             if (i < *bot_count)
Packit b099d7
             {
Packit b099d7
                (*bot)[i].x = w_down - (*bot)[i].x - (*bot)[i].width + 2;
Packit b099d7
                (*bot)[i].y = h_down - (*bot)[i].y - (*bot)[i].height + 2;
Packit b099d7
             }
Packit b099d7
             if (i < *cent_count)
Packit b099d7
             {
Packit b099d7
                (*cent)[i].x = w_down - (*cent)[i].x - (*cent)[i].width + 2;
Packit b099d7
                (*cent)[i].y = h_down - (*cent)[i].y - (*cent)[i].height + 2;
Packit b099d7
             }
Packit b099d7
          }
Packit b099d7
Packit b099d7
          while (i < *top_count || i < *bot_count || i < *cent_count);
Packit b099d7
      }
Packit b099d7
      break;
Packit b099d7
   }
Packit b099d7
}
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *    ArrowBI:_XmOffsetArrow, become XmDrawArrow
Packit b099d7
 *  
Packit b099d7
 *      Offset the arrow drawing rectangles, if needed, by the difference
Packit b099d7
 *      of the current x, y and the saved x, y);
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
 
Packit b099d7
void _XmOffsetArrow (int diff_x, int diff_y, XRectangle *top, XRectangle *cent, XRectangle *bot, int top_count, int cent_count, int bot_count)
Packit b099d7
{
Packit b099d7
   register int i;
Packit b099d7
Packit b099d7
   if (diff_x != 0 || diff_y != 0)
Packit b099d7
   {
Packit b099d7
      for (i = 0; i < top_count; i++)
Packit b099d7
      {
Packit b099d7
         (top + i)->x += diff_x;
Packit b099d7
         (top + i)->y += diff_y;
Packit b099d7
      }
Packit b099d7
Packit b099d7
      for (i = 0; i < cent_count; i++)
Packit b099d7
      {
Packit b099d7
         (cent + i)->x += diff_x;
Packit b099d7
         (cent + i)->y += diff_y;
Packit b099d7
      }
Packit b099d7
Packit b099d7
      for (i = 0; i < bot_count; i++)
Packit b099d7
      {
Packit b099d7
         (bot + i)->x += diff_x;
Packit b099d7
         (bot + i)->y += diff_y;
Packit b099d7
      }
Packit b099d7
   }
Packit b099d7
}
Packit b099d7
Packit b099d7
/*************************************<->*************************************
Packit b099d7
 *
Packit b099d7
 *  ToggleBI:_DrawSquareButton, become code
Packit b099d7
 *
Packit b099d7
 *
Packit b099d7
 *************************************<->***********************************/
Packit b099d7
Packit b099d7
void _XmDrawSquareButton (Widget w, int x, int y, int size, GC topGC, GC bottomGC, GC centerGC, 
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
int fill)
Packit b099d7
#else
Packit b099d7
Boolean fill)
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
{
Packit b099d7
   _XmDrawShadow (XtDisplay (w), XtWindow (w), 
Packit b099d7
                  topGC, bottomGC,
Packit b099d7
                  2, x, y, size, size);
Packit b099d7
Packit b099d7
   if (fill)
Packit b099d7
       if (size > 6)
Packit b099d7
           XFillRectangle (XtDisplay ((Widget) w), 
Packit b099d7
                           XtWindow ((Widget) w),
Packit b099d7
                           centerGC, 
Packit b099d7
                           ((fill) ? x+2 : x+3),
Packit b099d7
                           ((fill) ? y+2 : y+3),
Packit b099d7
                           ((fill) ? size-4 : size-6),
Packit b099d7
                           ((fill) ? size-4 : size-6));
Packit b099d7
} 
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ToggleBI:DrawDiamondButton, become XmDrawDiamond
Packit b099d7
 *
Packit b099d7
 *      The diamond drawing routine.  Used in place of  widgets or gadgets
Packit b099d7
 *      draw routine when toggleButton's indicatorType is one_of_many.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Packit b099d7
Packit b099d7
void _XmDrawDiamondButton (Widget tw, int x, int y, int size, GC topGC, GC bottomGC, GC centerGC, 
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
int fill )
Packit b099d7
#else
Packit b099d7
Boolean fill)
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
{
Packit b099d7
   XSegment seg[12];
Packit b099d7
   XPoint   pt[5];
Packit b099d7
   int midX, midY;
Packit b099d7
Packit b099d7
   if (size % 2 == 0)
Packit b099d7
      size--;
Packit b099d7
Packit b099d7
   midX = x + (size + 1) / 2;
Packit b099d7
   midY = y + (size + 1) / 2;
Packit b099d7
Packit b099d7
   /* COUNTER REVERSE DRAWING EFFECT ON TINY ToggleButtonS */
Packit b099d7
   if (size <= 3)
Packit b099d7
    {
Packit b099d7
       /*  The top shadow segments  */
Packit b099d7
Packit b099d7
       seg[0].x1 = x + size - 1;        /*  1  */
Packit b099d7
       seg[0].y1 = midY - 1;
Packit b099d7
       seg[0].x2 = midX - 1;            /*  2  */
Packit b099d7
       seg[0].y2 = y + size - 1;
Packit b099d7
Packit b099d7
       seg[1].x1 = x + size - 2;        /*  3  */
Packit b099d7
       seg[1].y1 = midY - 1;
Packit b099d7
       seg[1].x2 = midX - 1;            /*  4  */
Packit b099d7
       seg[1].y2 = y + size - 2;
Packit b099d7
Packit b099d7
       seg[2].x1 = x + size - 3;        /*  3  */
Packit b099d7
       seg[2].y1 = midY - 1;
Packit b099d7
       seg[2].x2 = midX - 1;            /*  4  */
Packit b099d7
       seg[2].y2 = y + size - 3;
Packit b099d7
Packit b099d7
       /*--*/
Packit b099d7
Packit b099d7
       seg[3].x1 = midX - 1;            /*  5  */
Packit b099d7
       seg[3].y1 = y + size - 1;
Packit b099d7
       seg[3].x2 = x;                   /*  6  */
Packit b099d7
       seg[3].y2 = midY - 1;
Packit b099d7
Packit b099d7
       seg[4].x1 = midX - 1;            /*  7  */
Packit b099d7
       seg[4].y1 = y + size - 2;
Packit b099d7
       seg[4].x2 = x + 1;               /*  8  */
Packit b099d7
       seg[4].y2 = midY - 1;
Packit b099d7
Packit b099d7
       seg[5].x1 = midX - 1;            /*  7  */
Packit b099d7
       seg[5].y1 = y + size - 3;
Packit b099d7
       seg[5].x2 = x + 2;               /*  8  */
Packit b099d7
       seg[5].y2 = midY - 1;
Packit b099d7
Packit b099d7
       /*  The bottom shadow segments  */
Packit b099d7
Packit b099d7
       seg[6].x1 = x + size - 1;        /*  9  */
Packit b099d7
       seg[6].y1 = midY - 1;
Packit b099d7
       seg[6].x2 = midX - 1;            /*  10  */
Packit b099d7
       seg[6].y2 = y;
Packit b099d7
Packit b099d7
       seg[7].x1 = x + size - 2;        /*  11  */
Packit b099d7
       seg[7].y1 = midY - 1;
Packit b099d7
       seg[7].x2 = midX - 1;            /*  12  */
Packit b099d7
       seg[7].y2 = y + 1;
Packit b099d7
Packit b099d7
       seg[8].x1 = x + size - 3;        /*  11  */
Packit b099d7
       seg[8].y1 = midY - 1;
Packit b099d7
       seg[8].x2 = midX - 1;            /*  12  */
Packit b099d7
       seg[8].y2 = y + 2;
Packit b099d7
Packit b099d7
       /*--*/
Packit b099d7
Packit b099d7
       seg[9].x1 = midX - 1;            /*  13  */
Packit b099d7
       seg[9].y1 = y;
Packit b099d7
       seg[9].x2 = x;                   /*  14  */
Packit b099d7
       seg[9].y2 = midY - 1;
Packit b099d7
Packit b099d7
       seg[10].x1 = midX - 1;           /*  15  */
Packit b099d7
       seg[10].y1 = y + 1;
Packit b099d7
       seg[10].x2 = x + 1;              /*  16  */
Packit b099d7
       seg[10].y2 = midY - 1;
Packit b099d7
Packit b099d7
       seg[11].x1 = midX - 1;           /*  15  */
Packit b099d7
       seg[11].y1 = y + 2;
Packit b099d7
       seg[11].x2 = x + 2;              /*  16  */
Packit b099d7
       seg[11].y2 = midY - 1;
Packit b099d7
Packit b099d7
    }
Packit b099d7
  else    /* NORMAL SIZED ToggleButtonS */
Packit b099d7
    {
Packit b099d7
       /*  The top shadow segments  */
Packit b099d7
Packit b099d7
       seg[0].x1 = x;                   /*  1  */
Packit b099d7
       seg[0].y1 = midY - 1;
Packit b099d7
       seg[0].x2 = midX - 1;            /*  2  */
Packit b099d7
       seg[0].y2 = y;
Packit b099d7
Packit b099d7
       seg[1].x1 = x + 1;               /*  3  */
Packit b099d7
       seg[1].y1 = midY - 1;
Packit b099d7
       seg[1].x2 = midX - 1;            /*  4  */
Packit b099d7
       seg[1].y2 = y + 1;
Packit b099d7
Packit b099d7
       seg[2].x1 = x + 2;               /*  3  */
Packit b099d7
       seg[2].y1 = midY - 1;
Packit b099d7
       seg[2].x2 = midX - 1;            /*  4  */
Packit b099d7
       seg[2].y2 = y + 2;
Packit b099d7
Packit b099d7
       /*--*/
Packit b099d7
Packit b099d7
       seg[3].x1 = midX - 1;            /*  5  */
Packit b099d7
       seg[3].y1 = y;
Packit b099d7
       seg[3].x2 = x + size - 1;        /*  6  */
Packit b099d7
       seg[3].y2 = midY - 1;
Packit b099d7
Packit b099d7
       seg[4].x1 = midX - 1;            /*  7  */
Packit b099d7
       seg[4].y1 = y + 1;
Packit b099d7
       seg[4].x2 = x + size - 2;        /*  8  */
Packit b099d7
       seg[4].y2 = midY - 1;
Packit b099d7
Packit b099d7
       seg[5].x1 = midX - 1;            /*  7  */
Packit b099d7
       seg[5].y1 = y + 2;
Packit b099d7
       seg[5].x2 = x + size - 3;        /*  8  */
Packit b099d7
       seg[5].y2 = midY - 1;
Packit b099d7
Packit b099d7
Packit b099d7
       /*  The bottom shadow segments  */
Packit b099d7
    
Packit b099d7
       seg[6].x1 = x;                   /*  9  */
Packit b099d7
       seg[6].y1 = midY - 1;
Packit b099d7
       seg[6].x2 = midX - 1;            /*  10  */
Packit b099d7
       seg[6].y2 = y + size - 1;
Packit b099d7
Packit b099d7
       seg[7].x1 = x + 1;               /*  11  */
Packit b099d7
       seg[7].y1 = midY - 1;
Packit b099d7
       seg[7].x2 = midX - 1;            /*  12  */
Packit b099d7
       seg[7].y2 = y + size - 2;
Packit b099d7
Packit b099d7
       seg[8].x1 = x + 2;               /*  11  */
Packit b099d7
       seg[8].y1 = midY - 1;
Packit b099d7
       seg[8].x2 = midX - 1;            /*  12  */
Packit b099d7
       seg[8].y2 = y + size - 3;
Packit b099d7
Packit b099d7
       /*--*/
Packit b099d7
Packit b099d7
       seg[9].x1 = midX - 1;            /*  13  */
Packit b099d7
       seg[9].y1 = y + size - 1;
Packit b099d7
       seg[9].x2 = x + size - 1;        /*  14  */
Packit b099d7
       seg[9].y2 = midY - 1;
Packit b099d7
Packit b099d7
       seg[10].x1 = midX - 1;           /*  15  */
Packit b099d7
       seg[10].y1 = y + size - 2;
Packit b099d7
       seg[10].x2 = x + size - 2;       /*  16  */
Packit b099d7
       seg[10].y2 = midY - 1;
Packit b099d7
Packit b099d7
       seg[11].x1 = midX - 1;           /*  15  */
Packit b099d7
       seg[11].y1 = y + size - 3;
Packit b099d7
       seg[11].x2 = x + size - 3;       /*  16  */
Packit b099d7
       seg[11].y2 = midY - 1;
Packit b099d7
    }
Packit b099d7
Packit b099d7
   XDrawSegments (XtDisplay ((Widget) tw), XtWindow ((Widget) tw),
Packit b099d7
                  topGC, &seg[3], 3);
Packit b099d7
Packit b099d7
   XDrawSegments (XtDisplay ((Widget) tw), XtWindow ((Widget) tw),
Packit b099d7
                  bottomGC, &seg[6], 6);
Packit b099d7
Packit b099d7
   XDrawSegments (XtDisplay ((Widget) tw), XtWindow ((Widget) tw),
Packit b099d7
                  topGC, &seg[0], 3);
Packit b099d7
Packit b099d7
  
Packit b099d7
/* For Fill */
Packit b099d7
   if (fill)
Packit b099d7
   {
Packit b099d7
      pt[0].x = x + 3;
Packit b099d7
      pt[0].y = midY - 1;
Packit b099d7
      pt[1].x = midX - 1 ;
Packit b099d7
      pt[1].y = y + 2;
Packit b099d7
      pt[2].x = x + size - 3;
Packit b099d7
      pt[2].y = midY - 1;
Packit b099d7
      pt[3].x = midX - 1 ;
Packit b099d7
      pt[3].y = y + size - 3;
Packit b099d7
   }
Packit b099d7
   else
Packit b099d7
   {
Packit b099d7
      pt[0].x = x + 4;
Packit b099d7
      pt[0].y = midY - 1;
Packit b099d7
      pt[1].x = midX - 1;
Packit b099d7
      pt[1].y = y + 3;
Packit b099d7
      pt[2].x = x + size - 4;
Packit b099d7
      pt[2].y = midY - 1;
Packit b099d7
      pt[3].x = midX - 1;
Packit b099d7
      pt[3].y = y + size - 4;
Packit b099d7
   }
Packit b099d7
Packit b099d7
Packit b099d7
   /* NOTE: code which handled the next two ifs by setting pt[1-3]
Packit b099d7
      to match pt[0] values was replaced with return statements because
Packit b099d7
      passing 4 identical coordinates to XFillPolygon caused the PMAX
Packit b099d7
      to give a bus error.  Dana@HP reports that the call is legitimate
Packit b099d7
      and that the error is in the PMAX server.  The return statements
Packit b099d7
      will stay until the situation with the PMAX is resolved. (mitch) */
Packit b099d7
Packit b099d7
   /* COUNTER REVERSE DRAWING EFFECT ON TINY ToggleButtonS */
Packit b099d7
   if (pt[0].x > pt[1].x)
Packit b099d7
     {
Packit b099d7
       return;
Packit b099d7
     }
Packit b099d7
Packit b099d7
   if (pt[0].y < pt[1].y)
Packit b099d7
     {
Packit b099d7
       return;
Packit b099d7
     }
Packit b099d7
Packit b099d7
   XFillPolygon (XtDisplay ((Widget) tw), XtWindow ((Widget) tw),
Packit b099d7
                 centerGC, pt, 4, Convex, CoordModeOrigin);
Packit b099d7
}
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  Manager:XmDrawEtchedShadow, become XmDrawShadow
Packit b099d7
 *
Packit b099d7
 *      Draw an n segment wide etched shadow on the drawable
Packit b099d7
 *      d, using the provided GC's and rectangle.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Packit b099d7
static XRectangle *rects = NULL;
Packit b099d7
static int rect_count = 0;
Packit b099d7
Packit b099d7
static void
Packit b099d7
get_rects(
Packit b099d7
int max_i,
Packit b099d7
register int offset,
Packit b099d7
register int x,
Packit b099d7
register int y,
Packit b099d7
register int width,
Packit b099d7
register int height,
Packit b099d7
register int pos_top,
Packit b099d7
register int pos_left,
Packit b099d7
register int pos_bottom,
Packit b099d7
register int pos_right)
Packit b099d7
{
Packit b099d7
   register int i;
Packit b099d7
   register int offsetX2;
Packit b099d7
   
Packit b099d7
   for (i = 0; i < max_i; i++, offset++)
Packit b099d7
   {
Packit b099d7
      offsetX2 = offset + offset;
Packit b099d7
Packit b099d7
      /*  Top segments  */
Packit b099d7
Packit b099d7
      rects[pos_top + i].x = x + offset;
Packit b099d7
      rects[pos_top + i].y = y + offset;
Packit b099d7
      rects[pos_top + i].width = width - offsetX2 -1;
Packit b099d7
      rects[pos_top + i].height = 1;
Packit b099d7
Packit b099d7
Packit b099d7
      /*  Left segments  */
Packit b099d7
Packit b099d7
      rects[pos_left + i].x = x + offset;
Packit b099d7
      rects[pos_left + i].y = y + offset;
Packit b099d7
      rects[pos_left + i].width = 1;
Packit b099d7
      rects[pos_left + i].height = height - offsetX2 - 1;
Packit b099d7
Packit b099d7
Packit b099d7
      /*  Bottom segments  */
Packit b099d7
Packit b099d7
      rects[pos_bottom + i].x = x + offset;
Packit b099d7
      rects[pos_bottom + i].y = y + height - offset - 1;
Packit b099d7
      rects[pos_bottom + i].width = width - offsetX2;
Packit b099d7
      rects[pos_bottom + i].height = 1;
Packit b099d7
Packit b099d7
Packit b099d7
      /*  Right segments  */
Packit b099d7
Packit b099d7
      rects[pos_right + i].x = x + width - offset - 1;
Packit b099d7
      rects[pos_right + i].y = y + offset;
Packit b099d7
      rects[pos_right + i].width = 1;
Packit b099d7
      rects[pos_right + i].height = height - offsetX2;
Packit b099d7
   }
Packit b099d7
}
Packit b099d7
Packit b099d7
static void
Packit b099d7
XmDrawEtchedShadow (
Packit b099d7
Display * display,
Packit b099d7
Drawable d,
Packit b099d7
GC top_GC,
Packit b099d7
GC bottom_GC,
Packit b099d7
register int size,
Packit b099d7
register int x,
Packit b099d7
register int y,
Packit b099d7
register int width,
Packit b099d7
register int height)
Packit b099d7
{
Packit b099d7
   int half_size;
Packit b099d7
   int size2;
Packit b099d7
   int size3;
Packit b099d7
   int pos_top, pos_left, pos_bottom, pos_right;
Packit b099d7
Packit b099d7
   if (size <= 0) return;
Packit b099d7
   if (size == 1) 
Packit b099d7
        {
Packit b099d7
      _XmDrawShadow (display, d,
Packit b099d7
         top_GC,  bottom_GC, size, x, y, width, height);
Packit b099d7
          return;
Packit b099d7
        } 
Packit b099d7
Packit b099d7
   if (size > width / 2) size = width / 2;
Packit b099d7
   if (size > height / 2) size = height / 2;
Packit b099d7
   if (size <= 0) return;
Packit b099d7
Packit b099d7
   size = (size % 2) ? (size-1) : (size);
Packit b099d7
Packit b099d7
   half_size = size / 2;
Packit b099d7
   size2 = size + size;
Packit b099d7
   size3 = size2 + size;
Packit b099d7
   
Packit b099d7
   if (rect_count == 0)
Packit b099d7
   {
Packit b099d7
      rects = (XRectangle *) XtMalloc (sizeof (XRectangle) * size * 4);
Packit b099d7
      rect_count = size;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if (rect_count < size)
Packit b099d7
   {
Packit b099d7
      rects = (XRectangle *) XtRealloc((char *)rects, sizeof (XRectangle) * size * 4);
Packit b099d7
      rect_count = size;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   pos_top = 0;
Packit b099d7
   pos_left = half_size;
Packit b099d7
   pos_bottom = size2;
Packit b099d7
   pos_right = size2 + half_size;
Packit b099d7
Packit b099d7
   get_rects(half_size, 0, x, y, width, height, 
Packit b099d7
             pos_top, pos_left, pos_bottom, pos_right);
Packit b099d7
Packit b099d7
   pos_top = size3;
Packit b099d7
   pos_left = size3 + half_size;
Packit b099d7
   pos_bottom = size;
Packit b099d7
   pos_right = size + half_size;
Packit b099d7
Packit b099d7
   get_rects(half_size, half_size, x, y, width, height, 
Packit b099d7
                pos_top, pos_left, pos_bottom, pos_right);
Packit b099d7
Packit b099d7
   XFillRectangles (display, d, bottom_GC, &rects[size2], size2);
Packit b099d7
   XFillRectangles (display, d, top_GC, &rects[0], size2);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/*****************************************************************
Packit b099d7
 * Manager:_XmDrawShadowType, become XmDrawShadow
Packit b099d7
 *****************************************************************/
Packit b099d7
 
Packit b099d7
void _XmDrawShadowType (Widget w, unsigned int shadow_type,
Packit b099d7
#if NeedWidePrototypes 
Packit b099d7
			int core_width, int core_height, 
Packit b099d7
                        int shadow_thickness, int highlight_thickness, 
Packit b099d7
#else
Packit b099d7
                        Dimension core_width, Dimension core_height, 
Packit b099d7
                        Dimension shadow_thickness, Dimension highlight_thickness, 
Packit b099d7
#endif
Packit b099d7
                        GC top_shadow_GC, GC bottom_shadow_GC)
Packit b099d7
{
Packit b099d7
   if (!XtIsRealized(w)) 
Packit b099d7
     return;
Packit b099d7
   switch (shadow_type)
Packit b099d7
   {
Packit b099d7
      case XmSHADOW_IN:
Packit b099d7
      case XmSHADOW_OUT:
Packit b099d7
         if (shadow_thickness > 0)
Packit b099d7
            _XmDrawShadow (XtDisplay (w), XtWindow (w), 
Packit b099d7
             (shadow_type == XmSHADOW_IN) ? bottom_shadow_GC : top_shadow_GC,
Packit b099d7
             (shadow_type == XmSHADOW_IN) ? top_shadow_GC : bottom_shadow_GC,
Packit b099d7
              shadow_thickness,
Packit b099d7
              highlight_thickness,
Packit b099d7
              highlight_thickness,
Packit b099d7
              core_width - 2 * highlight_thickness,
Packit b099d7
              core_height - 2 * highlight_thickness);
Packit b099d7
      break;
Packit b099d7
Packit b099d7
      case XmSHADOW_ETCHED_IN:
Packit b099d7
      case XmSHADOW_ETCHED_OUT:
Packit b099d7
           XmDrawEtchedShadow (XtDisplay(w), XtWindow(w), 
Packit b099d7
                 (shadow_type == XmSHADOW_ETCHED_IN) ?
Packit b099d7
                         bottom_shadow_GC : top_shadow_GC,
Packit b099d7
                 (shadow_type == XmSHADOW_ETCHED_IN) ?
Packit b099d7
                             top_shadow_GC : bottom_shadow_GC,
Packit b099d7
                 shadow_thickness, 
Packit b099d7
                 highlight_thickness,
Packit b099d7
                     highlight_thickness, 
Packit b099d7
                 core_width - 2 * highlight_thickness,
Packit b099d7
                 core_height - 2 * highlight_thickness);
Packit b099d7
            
Packit b099d7
            break;
Packit b099d7
Packit b099d7
   }
Packit b099d7
}
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 * Primitive:_XmDrawBorder, become XmDrawHighlight 
Packit b099d7
 ************************************************************************/
Packit b099d7
 
Packit b099d7
void _XmDrawBorder ( Widget w, GC gc, 
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
                                      int x, int y, 
Packit b099d7
        int width, int height, int highlight_width)
Packit b099d7
#else
Packit b099d7
                                      Position x, Position y, 
Packit b099d7
        Dimension width, Dimension height, Dimension highlight_width)
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
Packit b099d7
{
Packit b099d7
   XRectangle rect[4];
Packit b099d7
Packit b099d7
   rect[0].x = x;
Packit b099d7
   rect[0].y = y;
Packit b099d7
   rect[0].width = width;
Packit b099d7
   rect[0].height = highlight_width;
Packit b099d7
Packit b099d7
   rect[1].x = x;
Packit b099d7
   rect[1].y = y;
Packit b099d7
   rect[1].width = highlight_width;
Packit b099d7
   rect[1].height = height;
Packit b099d7
Packit b099d7
   rect[2].x = x + width - highlight_width;
Packit b099d7
   rect[2].y = y;
Packit b099d7
   rect[2].width = highlight_width;
Packit b099d7
   rect[2].height = height;
Packit b099d7
Packit b099d7
   rect[3].x = x;
Packit b099d7
   rect[3].y = y + height - highlight_width;
Packit b099d7
   rect[3].width = width;
Packit b099d7
   rect[3].height = highlight_width;
Packit b099d7
Packit b099d7
   XFillRectangles (XtDisplay (w), XtWindow (w), gc, &rect[0], 4);
Packit b099d7
}
Packit b099d7
Packit b099d7
/***************************************************************
Packit b099d7
  All these functions were private but global in 1.1, so instead of
Packit b099d7
   just moving them static, we also provide the compatibility stuff.
Packit b099d7
   They are just wrapping around the new static names 
Packit b099d7
****************************************************************/
Packit b099d7
void 
Packit b099d7
_XmFileSelectionBoxCreateFilterLabel(
Packit b099d7
        XmFileSelectionBoxWidget fsb )
Packit b099d7
{
Packit b099d7
  FS_FilterLabel( fsb) = _XmBB_CreateLabelG( (Widget) fsb, 
Packit b099d7
					      FS_FilterLabelString( fsb),
Packit b099d7
					      "FilterLabel",
Packit b099d7
					      XmFilterStringLoc) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
void 
Packit b099d7
_XmFileSelectionBoxCreateDirListLabel(
Packit b099d7
        XmFileSelectionBoxWidget fsb )
Packit b099d7
{
Packit b099d7
    FS_DirListLabel( fsb) = _XmBB_CreateLabelG( (Widget) fsb,
Packit b099d7
					       FS_DirListLabelString( fsb),
Packit b099d7
					       "Dir",
Packit b099d7
					       XmDirListStringLoc) ;
Packit b099d7
}
Packit b099d7
/*****************************************************************/
Packit b099d7
void 
Packit b099d7
_XmFileSelectionBoxCreateDirList(
Packit b099d7
        XmFileSelectionBoxWidget fsb )
Packit b099d7
{
Packit b099d7
	Arg		al[20];
Packit b099d7
	register int	ac = 0;
Packit b099d7
            XtCallbackProc callbackProc ;
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    FS_DirListSelectedItemPosition( fsb) = 0 ;
Packit b099d7
Packit b099d7
    XtSetArg( al[ac], XmNvisibleItemCount,
Packit b099d7
                                        SB_ListVisibleItemCount( fsb)) ; ac++ ;
Packit b099d7
    XtSetArg( al[ac], XmNstringDirection, SB_StringDirection( fsb));  ac++;
Packit b099d7
    XtSetArg( al[ac], XmNselectionPolicy, XmBROWSE_SELECT);  ac++;
Packit b099d7
    XtSetArg( al[ac], XmNlistSizePolicy, XmCONSTANT);  ac++;
Packit b099d7
    XtSetArg( al[ac], XmNscrollBarDisplayPolicy, XmSTATIC);  ac++;
Packit b099d7
    XtSetArg( al[ac], XmNnavigationType, XmSTICKY_TAB_GROUP) ; ++ac ;
Packit b099d7
Packit b099d7
    FS_DirList( fsb) = XmCreateScrolledList( (Widget) fsb, "DirList", al, ac);
Packit b099d7
Packit b099d7
    callbackProc = ((XmSelectionBoxWidgetClass) fsb->core.widget_class)
Packit b099d7
                                          ->selection_box_class.list_callback ;
Packit b099d7
    if(    callbackProc    )
Packit b099d7
    {   
Packit b099d7
        XtAddCallback( FS_DirList( fsb), XmNsingleSelectionCallback,
Packit b099d7
                                               callbackProc, (XtPointer) fsb) ;
Packit b099d7
        XtAddCallback( FS_DirList( fsb), XmNbrowseSelectionCallback,
Packit b099d7
                                               callbackProc, (XtPointer) fsb) ;
Packit b099d7
        XtAddCallback( FS_DirList( fsb), XmNdefaultActionCallback,
Packit b099d7
                                               callbackProc, (XtPointer) fsb) ;
Packit b099d7
        } 
Packit b099d7
    XtManageChild( FS_DirList( fsb)) ;
Packit b099d7
Packit b099d7
    return ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*****************************************************************/
Packit b099d7
void 
Packit b099d7
_XmFileSelectionBoxCreateFilterText(
Packit b099d7
        XmFileSelectionBoxWidget fs )
Packit b099d7
{
Packit b099d7
            Arg             arglist[10] ;
Packit b099d7
            int             argCount ;
Packit b099d7
            char *          stext_value ;
Packit b099d7
            XtAccelerators  temp_accelerators ;
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    /* Get text portion from Compound String, and set
Packit b099d7
    *   fs_stext_charset and fs_stext_direction bits...
Packit b099d7
    */
Packit b099d7
    /* Should do this stuff entirely with XmStrings when the text
Packit b099d7
    *   widget supports it.
Packit b099d7
    */
Packit b099d7
    if(    !(stext_value = _XmStringGetTextConcat( FS_Pattern( fs)))    )
Packit b099d7
    {   stext_value = (char *) XtMalloc( 1) ;
Packit b099d7
        stext_value[0] = '\0' ;
Packit b099d7
        }
Packit b099d7
    argCount = 0 ;
Packit b099d7
    XtSetArg( arglist[argCount], XmNcolumns, 
Packit b099d7
                                            SB_TextColumns( fs)) ; argCount++ ;
Packit b099d7
    XtSetArg( arglist[argCount], XmNresizeWidth, FALSE) ; argCount++ ;
Packit b099d7
    XtSetArg( arglist[argCount], XmNvalue, stext_value) ; argCount++ ;
Packit b099d7
    XtSetArg( arglist[argCount], XmNnavigationType, 
Packit b099d7
                                             XmSTICKY_TAB_GROUP) ; argCount++ ;
Packit b099d7
    FS_FilterText( fs) = XmCreateTextField( (Widget) fs, "FilterText",
Packit b099d7
                                                           arglist, argCount) ;
Packit b099d7
Packit b099d7
    /*	Install text accelerators.
Packit b099d7
    */
Packit b099d7
    temp_accelerators = fs->core.accelerators ;
Packit b099d7
    fs->core.accelerators = SB_TextAccelerators( fs) ;
Packit b099d7
    XtInstallAccelerators( FS_FilterText( fs), (Widget) fs) ;
Packit b099d7
    fs->core.accelerators = temp_accelerators ;
Packit b099d7
Packit b099d7
    XtFree( stext_value) ;
Packit b099d7
    return ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
_XmFileSelectionBoxGetDirectory(
Packit b099d7
            Widget fs,
Packit b099d7
            int resource,	/* unused */
Packit b099d7
            XtArgVal *value)
Packit b099d7
{
Packit b099d7
    XmString        data ;
Packit b099d7
  
Packit b099d7
    data = XmStringCopy(FS_Directory(fs));
Packit b099d7
    *value = (XtArgVal) data ;
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
_XmFileSelectionBoxGetNoMatchString(
Packit b099d7
            Widget fs,
Packit b099d7
            int resource,	/* unused */
Packit b099d7
            XtArgVal *value)
Packit b099d7
{
Packit b099d7
    XmString        data ;
Packit b099d7
  
Packit b099d7
    data = XmStringCopy(FS_NoMatchString(fs));
Packit b099d7
    *value = (XtArgVal) data ;
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
_XmFileSelectionBoxGetPattern(
Packit b099d7
            Widget fs,
Packit b099d7
            int resource,	/* unused */
Packit b099d7
            XtArgVal *value)
Packit b099d7
{
Packit b099d7
    XmString        data ;
Packit b099d7
  
Packit b099d7
    data = XmStringCopy(FS_Pattern(fs));
Packit b099d7
    *value = (XtArgVal) data ;
Packit b099d7
}
Packit b099d7
/*****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmFileSelectionBoxGetFilterLabelString(
Packit b099d7
        Widget fs,
Packit b099d7
        int resource_offset,	/* unused */
Packit b099d7
        XtArgVal *value )
Packit b099d7
{
Packit b099d7
            XmString        data ;
Packit b099d7
            Arg             al[1] ;
Packit b099d7
Packit b099d7
    XtSetArg( al[0], XmNlabelString, &data) ;
Packit b099d7
    XtGetValues( FS_FilterLabel( fs), al, 1) ;
Packit b099d7
    *value = (XtArgVal) data ;
Packit b099d7
}
Packit b099d7
/*****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmFileSelectionBoxGetDirListLabelString(
Packit b099d7
        Widget fs,
Packit b099d7
        int resource_offset,	/* unused */
Packit b099d7
        XtArgVal *value )
Packit b099d7
{
Packit b099d7
            XmString        data ;
Packit b099d7
            Arg             al[1] ;
Packit b099d7
Packit b099d7
    XtSetArg( al[0], XmNlabelString, &data) ;
Packit b099d7
    XtGetValues( FS_DirListLabel( fs), al, 1) ;
Packit b099d7
    *value = (XtArgVal) data ;
Packit b099d7
}
Packit b099d7
/*****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmFileSelectionBoxGetDirListItems(
Packit b099d7
        Widget fs,
Packit b099d7
        int resource_offset,	/* unused */
Packit b099d7
        XtArgVal *value )
Packit b099d7
{
Packit b099d7
            XmString        data ;
Packit b099d7
            Arg             al[1] ;
Packit b099d7
Packit b099d7
    XtSetArg( al[0], XmNitems, &data) ;
Packit b099d7
    XtGetValues( FS_DirList( fs), al, 1) ;
Packit b099d7
    *value = (XtArgVal) data ;
Packit b099d7
}
Packit b099d7
/*****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmFileSelectionBoxGetDirListItemCount(
Packit b099d7
        Widget fs,
Packit b099d7
        int resource_offset,	/* unused */
Packit b099d7
        XtArgVal *value )
Packit b099d7
{
Packit b099d7
            XmString        data ;
Packit b099d7
            Arg             al[1] ;
Packit b099d7
Packit b099d7
    XtSetArg( al[0], XmNitemCount, &data) ;
Packit b099d7
    XtGetValues( FS_DirList( fs), al, 1) ;
Packit b099d7
    *value = (XtArgVal) data ;
Packit b099d7
}
Packit b099d7
/*****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmFileSelectionBoxGetListItems(
Packit b099d7
        Widget fs,
Packit b099d7
        int resource_offset,	/* unused */
Packit b099d7
        XtArgVal *value )
Packit b099d7
{
Packit b099d7
            XmString        data ;
Packit b099d7
            Arg             al[1] ;
Packit b099d7
Packit b099d7
    if(    FS_StateFlags( fs) & XmFS_NO_MATCH    )
Packit b099d7
    {   
Packit b099d7
        *value = (XtArgVal) NULL ;
Packit b099d7
        } 
Packit b099d7
    else
Packit b099d7
    {   XtSetArg( al[0], XmNitems, &data) ;
Packit b099d7
        XtGetValues( SB_List( fs), al, 1) ;
Packit b099d7
        *value = (XtArgVal) data ;
Packit b099d7
        } 
Packit b099d7
}
Packit b099d7
/*****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmFileSelectionBoxGetListItemCount(
Packit b099d7
        Widget fs,
Packit b099d7
        int resource_offset,	/* unused */
Packit b099d7
        XtArgVal *value )
Packit b099d7
{
Packit b099d7
            XmString        data ;
Packit b099d7
            Arg             al[1] ;
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    if(    FS_StateFlags( fs) & XmFS_NO_MATCH    )
Packit b099d7
    {   
Packit b099d7
        *value = (XtArgVal) 0 ;
Packit b099d7
        } 
Packit b099d7
    else
Packit b099d7
    {   XtSetArg( al[0], XmNitemCount, &data) ;
Packit b099d7
        XtGetValues( SB_List( fs), al, 1) ;
Packit b099d7
        *value = (XtArgVal) data ;
Packit b099d7
        } 
Packit b099d7
}
Packit b099d7
/*****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmFileSelectionBoxGetDirMask(
Packit b099d7
        Widget fs,
Packit b099d7
        int resource_offset,	/* unused */
Packit b099d7
        XtArgVal *value )
Packit b099d7
{   
Packit b099d7
            String          filterText ;
Packit b099d7
            XmString        data ;
Packit b099d7
Packit b099d7
    filterText = XmTextFieldGetString( FS_FilterText(fs)) ;
Packit b099d7
    data = XmStringGenerate(filterText, XmFONTLIST_DEFAULT_TAG,
Packit b099d7
			    XmCHARSET_TEXT, NULL) ;
Packit b099d7
    *value = (XtArgVal) data ;
Packit b099d7
    XtFree( filterText) ; 
Packit b099d7
Packit b099d7
    return ;
Packit b099d7
}
Packit b099d7

Packit b099d7
/****************************************************************/
Packit b099d7
static Widget 
Packit b099d7
GetActiveText(
Packit b099d7
        XmFileSelectionBoxWidget fsb,
Packit b099d7
        XEvent *event )
Packit b099d7
{
Packit b099d7
            Widget          activeChild = NULL ;
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    if(    _XmGetFocusPolicy( (Widget) fsb) == XmEXPLICIT    )
Packit b099d7
    {   
Packit b099d7
        if(    (fsb->manager.active_child == SB_Text( fsb))
Packit b099d7
            || (fsb->manager.active_child == FS_FilterText( fsb))    )
Packit b099d7
        {   
Packit b099d7
            activeChild = fsb->manager.active_child ;
Packit b099d7
            } 
Packit b099d7
        } 
Packit b099d7
    else
Packit b099d7
    {   
Packit b099d7
        if(    SB_Text( fsb)
Packit b099d7
            && (XtWindow( SB_Text( fsb))
Packit b099d7
                                   == ((XKeyPressedEvent *) event)->window)   )
Packit b099d7
        {   activeChild = SB_Text( fsb) ;
Packit b099d7
            } 
Packit b099d7
        else
Packit b099d7
        {   if(    FS_FilterText( fsb)
Packit b099d7
                && (XtWindow( FS_FilterText( fsb)) 
Packit b099d7
                                  ==  ((XKeyPressedEvent *) event)->window)   )
Packit b099d7
            {   activeChild = FS_FilterText( fsb) ;
Packit b099d7
                } 
Packit b099d7
            } 
Packit b099d7
        } 
Packit b099d7
    return( activeChild) ;
Packit b099d7
    }
Packit b099d7
/****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmFileSelectionBoxUpOrDown(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,
Packit b099d7
        String *argv,
Packit b099d7
        Cardinal *argc )	/* unused */
Packit b099d7
{   
Packit b099d7
            XmFileSelectionBoxWidget fsb = (XmFileSelectionBoxWidget) wid ;
Packit b099d7
            int	            visible ;
Packit b099d7
            int	            top ;
Packit b099d7
            int	            key_pressed ;
Packit b099d7
            Widget	    list ;
Packit b099d7
            int	*           position ;
Packit b099d7
            int	            count ;
Packit b099d7
            Widget          activeChild ;
Packit b099d7
            Arg             av[5] ;
Packit b099d7
            Cardinal        ac ;
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    if(    !(activeChild = GetActiveText( fsb, event))    )
Packit b099d7
    {   return ;
Packit b099d7
        } 
Packit b099d7
    if(    activeChild == SB_Text( fsb)    )
Packit b099d7
    {   
Packit b099d7
        if(    FS_StateFlags( fsb) & XmFS_NO_MATCH    )
Packit b099d7
        {   return ;
Packit b099d7
            } 
Packit b099d7
        list = SB_List( fsb) ;
Packit b099d7
        position = &SB_ListSelectedItemPosition( fsb) ;
Packit b099d7
        } 
Packit b099d7
    else /* activeChild == FS_FilterText( fsb) */
Packit b099d7
    {   list = fsb->file_selection_box.dir_list ;
Packit b099d7
        position = &FS_DirListSelectedItemPosition( fsb) ;
Packit b099d7
        } 
Packit b099d7
    if(    !list    )
Packit b099d7
    {   return ;
Packit b099d7
        } 
Packit b099d7
    ac = 0 ;
Packit b099d7
    XtSetArg( av[ac], XmNitemCount, &count) ; ++ac ;
Packit b099d7
    XtSetArg( av[ac], XmNtopItemPosition, &top) ; ++ac ;
Packit b099d7
    XtSetArg( av[ac], XmNvisibleItemCount, &visible) ; ++ac ;
Packit b099d7
    XtGetValues( (Widget) list, av, ac) ;
Packit b099d7
Packit b099d7
    if(    !count    )
Packit b099d7
    {   return ;
Packit b099d7
        } 
Packit b099d7
    key_pressed = atoi( *argv) ;
Packit b099d7
Packit b099d7
    if(    *position == 0    )
Packit b099d7
    {   /*  No selection, so select first item.
Packit b099d7
        */
Packit b099d7
        XmListSelectPos( list, ++*position, True) ;
Packit b099d7
        } 
Packit b099d7
    else
Packit b099d7
    {   if(    !key_pressed && (*position > 1)    )
Packit b099d7
        {   /*  up  */
Packit b099d7
            XmListDeselectPos( list, *position) ;
Packit b099d7
            XmListSelectPos( list, --*position, True) ;
Packit b099d7
            }
Packit b099d7
        else
Packit b099d7
        {   if(    (key_pressed == 1) && (*position < count)    )
Packit b099d7
            {   /*  down  */
Packit b099d7
                XmListDeselectPos( list, *position) ;
Packit b099d7
                XmListSelectPos( list, ++*position, True) ;
Packit b099d7
                } 
Packit b099d7
            else
Packit b099d7
            {   if(    key_pressed == 2    )
Packit b099d7
                {   /*  home  */
Packit b099d7
                    XmListDeselectPos( list, *position) ;
Packit b099d7
                    *position = 1 ;
Packit b099d7
                    XmListSelectPos( list, *position, True) ;
Packit b099d7
                    } 
Packit b099d7
                else
Packit b099d7
                {   if(    key_pressed == 3    )
Packit b099d7
                    {   /*  end  */
Packit b099d7
                        XmListDeselectPos( list, *position) ;
Packit b099d7
                        *position = count ;
Packit b099d7
                        XmListSelectPos( list, *position, True) ;
Packit b099d7
                        } 
Packit b099d7
                    } 
Packit b099d7
                } 
Packit b099d7
            }
Packit b099d7
        } 
Packit b099d7
    if(    top > *position    )
Packit b099d7
    {   XmListSetPos( list, *position) ;
Packit b099d7
        } 
Packit b099d7
    else
Packit b099d7
    {   if(    (top + visible) <= *position    )
Packit b099d7
        {   XmListSetBottomPos( list, *position) ;
Packit b099d7
            } 
Packit b099d7
        } 
Packit b099d7
    return ;
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
void 
Packit b099d7
_XmFileSelectionBoxRestore(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,
Packit b099d7
        String *argv,
Packit b099d7
        Cardinal *argc )
Packit b099d7
{   
Packit b099d7
            XmFileSelectionBoxWidget fsb = (XmFileSelectionBoxWidget) wid ;
Packit b099d7
            String          itemString ;
Packit b099d7
            String          dir ;
Packit b099d7
            String          mask ;
Packit b099d7
            int             dirLen ;
Packit b099d7
            int             maskLen ;
Packit b099d7
            Widget          activeChild ;
Packit b099d7
/****************/
Packit b099d7
Packit b099d7
    if(    !(activeChild = GetActiveText( fsb, event))    )
Packit b099d7
    {   return ;
Packit b099d7
        } 
Packit b099d7
    if(    activeChild == SB_Text( fsb)    )
Packit b099d7
    {   _XmSelectionBoxRestore( (Widget) fsb, event, argv, argc) ;
Packit b099d7
        } 
Packit b099d7
    else /* activeChild == FS_FilterText( fsb) */
Packit b099d7
    {   /* Should do this stuff entirely with XmStrings when the text
Packit b099d7
        *   widget supports it.
Packit b099d7
        */
Packit b099d7
        if(    (dir = _XmStringGetTextConcat( FS_Directory( fsb))) != NULL    )
Packit b099d7
        {   
Packit b099d7
            dirLen = strlen( dir) ;
Packit b099d7
Packit b099d7
            if(   (mask = _XmStringGetTextConcat( FS_Pattern( fsb))) != NULL   )
Packit b099d7
            {   
Packit b099d7
                maskLen = strlen( mask) ;
Packit b099d7
                itemString = XtMalloc( dirLen + maskLen + 1) ;
Packit b099d7
                strcpy( itemString, dir) ;
Packit b099d7
                strcpy( &itemString[dirLen], mask) ;
Packit b099d7
                XmTextFieldSetString( FS_FilterText( fsb), itemString) ;
Packit b099d7
                XmTextFieldSetCursorPosition( FS_FilterText( fsb),
Packit b099d7
			    XmTextFieldGetLastPosition( FS_FilterText( fsb))) ;
Packit b099d7
                XtFree( itemString) ;
Packit b099d7
                XtFree( mask) ;
Packit b099d7
                } 
Packit b099d7
            XtFree( dir) ;
Packit b099d7
            }
Packit b099d7
        } 
Packit b099d7
    return ;
Packit b099d7
}
Packit b099d7
/*****************************************************************/
Packit b099d7
XmGeoMatrix 
Packit b099d7
_XmFileSBGeoMatrixCreate(
Packit b099d7
        Widget wid,
Packit b099d7
        Widget instigator,
Packit b099d7
        XtWidgetGeometry *desired )
Packit b099d7
{
Packit b099d7
  return (*(xmFileSelectionBoxClassRec.bulletin_board_class
Packit b099d7
	                      .geo_matrix_create))( wid, instigator, desired) ;
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
Boolean 
Packit b099d7
_XmFileSelectionBoxNoGeoRequest(
Packit b099d7
        XmGeoMatrix geoSpec )
Packit b099d7
{
Packit b099d7
Packit b099d7
    if(    BB_InSetValues( geoSpec->composite)
Packit b099d7
        && (XtClass( geoSpec->composite) == xmFileSelectionBoxWidgetClass)    )
Packit b099d7
    {   
Packit b099d7
        return( TRUE) ;
Packit b099d7
        } 
Packit b099d7
    return( FALSE) ;
Packit b099d7
}
Packit b099d7
/****************************************************************/
Packit b099d7
void 
Packit b099d7
_XmFileSelectionBoxFocusMoved(
Packit b099d7
        Widget wid,
Packit b099d7
        XtPointer client_data,
Packit b099d7
        XtPointer data )
Packit b099d7
{            
Packit b099d7
  (*(xmFileSelectionBoxClassRec.bulletin_board_class.focus_moved_proc))(
Packit b099d7
						      wid, client_data, data );
Packit b099d7
}
Packit b099d7
Packit b099d7
XmHeap 
Packit b099d7
_XmHeapCreate(
Packit b099d7
        int segment_size )
Packit b099d7
{
Packit b099d7
    XmHeap	heap;
Packit b099d7
Packit b099d7
    heap = XtNew(XmHeapRec);
Packit b099d7
    heap->start = NULL;
Packit b099d7
    heap->segment_size = segment_size;
Packit b099d7
    heap->bytes_remaining = 0;
Packit b099d7
    return heap;
Packit b099d7
}
Packit b099d7
Packit b099d7
char * 
Packit b099d7
_XmHeapAlloc(
Packit b099d7
        XmHeap heap,
Packit b099d7
        Cardinal bytes )
Packit b099d7
{
Packit b099d7
    register char* heap_loc;
Packit b099d7
    if (heap == NULL) return XtMalloc(bytes);
Packit b099d7
    if (heap->bytes_remaining < bytes) {
Packit b099d7
	if ((bytes + sizeof(char*)) >= (heap->segment_size>>1)) {
Packit b099d7
	    /* preserve current segment; insert this one in front */
Packit b099d7
	    heap_loc = XtMalloc(bytes + sizeof(char*));
Packit b099d7
	    if (heap->start) {
Packit b099d7
		*(char**)heap_loc = *(char**)heap->start;
Packit b099d7
		*(char**)heap->start = heap_loc;
Packit b099d7
	    }
Packit b099d7
	    else {
Packit b099d7
		*(char**)heap_loc = NULL;
Packit b099d7
		heap->start = heap_loc;
Packit b099d7
	    }
Packit b099d7
	    return heap_loc;
Packit b099d7
	}
Packit b099d7
	/* else discard remainder of this segment */
Packit b099d7
	heap_loc = XtMalloc((unsigned)heap->segment_size);
Packit b099d7
	*(char**)heap_loc = heap->start;
Packit b099d7
	heap->start = heap_loc;
Packit b099d7
	heap->current = heap_loc + sizeof(char*);
Packit b099d7
	heap->bytes_remaining = heap->segment_size - sizeof(char*);
Packit b099d7
    }
Packit b099d7
#ifdef WORD64
Packit b099d7
    /* round to nearest 8-byte boundary */
Packit b099d7
    bytes = (bytes + 7) & (~7);
Packit b099d7
#else
Packit b099d7
    /* round to nearest 4-byte boundary */
Packit b099d7
    bytes = (bytes + 3) & (~3);
Packit b099d7
#endif /* WORD64 */
Packit b099d7
    heap_loc = heap->current;
Packit b099d7
    heap->current += bytes;
Packit b099d7
    heap->bytes_remaining -= bytes; /* can be negative, if rounded */
Packit b099d7
    return heap_loc;
Packit b099d7
}
Packit b099d7
Packit b099d7
void 
Packit b099d7
_XmHeapFree(
Packit b099d7
        XmHeap heap )
Packit b099d7
{
Packit b099d7
    char* segment = heap->start;
Packit b099d7
    while (segment != NULL) {
Packit b099d7
	char* next_segment = *(char**)segment;
Packit b099d7
	XtFree(segment);
Packit b099d7
	segment = next_segment;
Packit b099d7
    }
Packit b099d7
    heap->start = NULL;
Packit b099d7
    heap->bytes_remaining = 0;
Packit b099d7
}
Packit b099d7
Packit b099d7
typedef struct {
Packit b099d7
    Boolean	*traversal_on;
Packit b099d7
    Boolean	*have_traversal;
Packit b099d7
    Boolean	*sensitive;
Packit b099d7
    Boolean	*ancestor_sensitive;
Packit b099d7
    Boolean	*mapped_when_managed;
Packit b099d7
    Boolean	*highlighted;
Packit b099d7
    Boolean	*managed;
Packit b099d7
    unsigned char *navigation_type;
Packit b099d7
}*WidgetNavigPtrs;
Packit b099d7
Packit b099d7
void 
Packit b099d7
_XmGetWidgetNavigPtrs(
Packit b099d7
        Widget widget,
Packit b099d7
        WidgetNavigPtrs np )
Packit b099d7
{
Packit b099d7
    np->sensitive 		= &(widget->core.sensitive);
Packit b099d7
    np->ancestor_sensitive	= &(widget->core.ancestor_sensitive);
Packit b099d7
    np->managed			= &(widget->core.managed);
Packit b099d7
Packit b099d7
    if (XmIsManager(widget))
Packit b099d7
      {
Packit b099d7
	  XmManagerWidget w = (XmManagerWidget) widget;
Packit b099d7
Packit b099d7
	  np->traversal_on 		= &(w->manager.traversal_on);
Packit b099d7
	  np->mapped_when_managed 	= &(w->core.mapped_when_managed);
Packit b099d7
	  np->navigation_type	 	= &(w->manager.navigation_type);
Packit b099d7
	  np->highlighted		= NULL;
Packit b099d7
	  np->have_traversal		= NULL;
Packit b099d7
      }
Packit b099d7
    else if (XmIsPrimitive(widget))
Packit b099d7
      {
Packit b099d7
	  XmPrimitiveWidget w = (XmPrimitiveWidget) widget;
Packit b099d7
Packit b099d7
	  np->traversal_on 		= &(w->primitive.traversal_on);
Packit b099d7
	  np->mapped_when_managed 	= &(w->core.mapped_when_managed);
Packit b099d7
	  np->navigation_type	 	= &(w->primitive.navigation_type);
Packit b099d7
	  np->highlighted		= &(w->primitive.highlighted);
Packit b099d7
	  np->have_traversal		= &(w->primitive.have_traversal);
Packit b099d7
      }
Packit b099d7
    else if (XmIsGadget(widget))
Packit b099d7
      {
Packit b099d7
	  XmGadget w = (XmGadget) widget;
Packit b099d7
Packit b099d7
	  np->traversal_on 		= &(w->gadget.traversal_on);
Packit b099d7
	  np->mapped_when_managed 	= NULL;
Packit b099d7
	  np->navigation_type	 	= &(w->gadget.navigation_type);
Packit b099d7
	  np->highlighted		= &(w->gadget.highlighted);
Packit b099d7
	  np->have_traversal		= &(w->gadget.have_traversal);
Packit b099d7
      }
Packit b099d7
    else /* it must be an object or foriegn widget */
Packit b099d7
      {
Packit b099d7
	  np->traversal_on 		= NULL;
Packit b099d7
	  np->mapped_when_managed 	= NULL;
Packit b099d7
	  np->navigation_type	 	= NULL;
Packit b099d7
	  np->highlighted		= NULL;
Packit b099d7
	  np->have_traversal		= NULL;
Packit b099d7
      }
Packit b099d7
}
Packit b099d7
Packit b099d7
void 
Packit b099d7
GetWidgetNavigPtrs(
Packit b099d7
        Widget widget,
Packit b099d7
        WidgetNavigPtrs np )
Packit b099d7
{
Packit b099d7
  _XmGetWidgetNavigPtrs( widget, np) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
Boolean 
Packit b099d7
_XmFindTraversablePrim(
Packit b099d7
        CompositeWidget tabGroup )
Packit b099d7
{
Packit b099d7
  Widget first = _XmNavigate( (Widget) tabGroup, XmTRAVERSE_CURRENT) ;
Packit b099d7
Packit b099d7
  return first ? (XmCONTROL_NAVIGABLE == _XmGetNavigability( first)) : FALSE ;
Packit b099d7
}
Packit b099d7
Packit b099d7
typedef enum {
Packit b099d7
    HereOnly,
Packit b099d7
    AboveOnly,
Packit b099d7
    BelowOnly,
Packit b099d7
    AboveAndBelow
Packit b099d7
} XmNavigTestType;
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
Boolean 
Packit b099d7
_XmPathIsTraversable(
Packit b099d7
        Widget widget,
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
        int navType,
Packit b099d7
#else
Packit b099d7
        XmNavigationType navType,
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
        XmNavigTestType testType, /* unused */
Packit b099d7
        XRectangle *visRect )	/* unused */
Packit b099d7
{
Packit b099d7
  return _XmFindTraversablePrim( (CompositeWidget) widget) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
SetMwmStuff(
Packit b099d7
        XmVendorShellExtObject ove, /* unused */
Packit b099d7
        XmVendorShellExtObject nve ) /* unused */
Packit b099d7
{
Packit b099d7
  /* Sorry Charlie, this doesn't work any more.
Packit b099d7
   */
Packit b099d7
  return ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
_XmBB_GetDialogTitle(
Packit b099d7
        Widget bb,
Packit b099d7
        int resource,		/* unused */
Packit b099d7
        XtArgVal *value)
Packit b099d7
{
Packit b099d7
  XmString data = XmStringCopy((XmString) ((XmBulletinBoardWidget) bb)
Packit b099d7
                                                ->bulletin_board.dialog_title);
Packit b099d7
  *value = (XtArgVal) data ;
Packit b099d7
}
Packit b099d7
Packit b099d7
static Boolean 
Packit b099d7
_isISO(
Packit b099d7
        String charset )
Packit b099d7
{
Packit b099d7
  register int	i;
Packit b099d7
  
Packit b099d7
  if (strlen(charset) == 5) 
Packit b099d7
    {
Packit b099d7
      for (i = 0; i < 5; i++) 
Packit b099d7
	{
Packit b099d7
	  if (!isdigit((unsigned char)charset[i])) return (False);
Packit b099d7
	}
Packit b099d7
      return (True);
Packit b099d7
    }
Packit b099d7
  else return (False);
Packit b099d7
}
Packit b099d7
Packit b099d7
char * 
Packit b099d7
_XmCharsetCanonicalize(
Packit b099d7
        String charset )
Packit b099d7
{
Packit b099d7
  String	new_s;
Packit b099d7
  int		len;
Packit b099d7
  
Packit b099d7
  /* ASCII -> ISO8859-1 */
Packit b099d7
  if (!strcmp(charset, "ASCII"))
Packit b099d7
    {
Packit b099d7
      len = strlen(XmSTRING_ISO8859_1);
Packit b099d7
      
Packit b099d7
      new_s = XtMalloc(len + 1);
Packit b099d7
      strncpy(new_s, XmSTRING_ISO8859_1, len);
Packit b099d7
      new_s[len] = '\0';
Packit b099d7
    }
Packit b099d7
  else if (_isISO(charset))
Packit b099d7
    {
Packit b099d7
      /* "ISO####-#" */
Packit b099d7
      new_s = XtMalloc(3 + 4 + 1 + 1 + 1);
Packit b099d7
      sprintf(new_s, "ISO%s", charset);
Packit b099d7
      new_s[7] = '-';
Packit b099d7
      new_s[8] = charset[4];
Packit b099d7
      new_s[9] = '\0';
Packit b099d7
    }
Packit b099d7
  else
Packit b099d7
    /* Anything else is copied but not modified. */
Packit b099d7
    {
Packit b099d7
      len = strlen(charset);
Packit b099d7
      
Packit b099d7
      new_s = XtMalloc(len + 1);
Packit b099d7
      strncpy(new_s, charset, len);
Packit b099d7
      new_s[len] = '\0';
Packit b099d7
    }
Packit b099d7
  return (new_s);
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
Widget
Packit b099d7
_XmGetDisplayObject(Widget shell, 
Packit b099d7
		    ArgList args, /* unused */
Packit b099d7
		    Cardinal *num_args)	/* unused */
Packit b099d7
{
Packit b099d7
  return XmGetXmDisplay( XtDisplay( shell)) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
Widget
Packit b099d7
_XmGetScreenObject(Widget shell, 
Packit b099d7
		   ArgList args, /* unused */
Packit b099d7
		   Cardinal *num_args) /* unused */
Packit b099d7
{
Packit b099d7
  return XmGetXmScreen( XtScreen( shell)) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
XmWrapperData
Packit b099d7
_XmGetWrapperData (WidgetClass w_class)	/* unused */
Packit b099d7
{
Packit b099d7
  /* If somebody actually used this, they are probably in for a surprise.
Packit b099d7
   */
Packit b099d7
  return (XmWrapperData) XtCalloc( 1, sizeof( XmWrapperDataRec)) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
void 
Packit b099d7
_XmLowerCase(
Packit b099d7
         register char *source,
Packit b099d7
         register char *dest )
Packit b099d7
{
Packit b099d7
    register char ch;
Packit b099d7
    int i;
Packit b099d7
Packit b099d7
    for (i = 0; (ch = *source) != 0 && i < 999; source++, dest++, i++) {
Packit b099d7
    	if ('A' <= ch && ch <= 'Z')
Packit b099d7
	    *dest = ch - 'A' + 'a';
Packit b099d7
	else
Packit b099d7
	    *dest = ch;
Packit b099d7
    }
Packit b099d7
    *dest = 0;
Packit b099d7
}
Packit b099d7
Packit b099d7
void dump_external(){}
Packit b099d7
void dump_fontlist_cache(){}
Packit b099d7
void dump_fontlist(){}
Packit b099d7
void dump_internal(){}
Packit b099d7
Packit b099d7
void
Packit b099d7
_XmButtonPopdownChildren (XmRowColumnWidget rowcol)
Packit b099d7
{
Packit b099d7
  if (RC_PopupPosted(rowcol))
Packit b099d7
    {
Packit b099d7
      (*(((XmMenuShellClassRec *)xmMenuShellWidgetClass)->
Packit b099d7
                     menu_shell_class.popdownEveryone))(RC_PopupPosted(rowcol),
Packit b099d7
							NULL,NULL,NULL);
Packit b099d7
    }
Packit b099d7
}
Packit b099d7
Packit b099d7
void
Packit b099d7
_XmInitializeMenuCursor (void)
Packit b099d7
{
Packit b099d7
  /* It's unlucky to hit this one...
Packit b099d7
   */
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
_XmCreateMenuCursor (Widget m)	/* unused */
Packit b099d7
{
Packit b099d7
  /* ... or this one.
Packit b099d7
   */
Packit b099d7
}
Packit b099d7
XContext _XmMenuCursorContext = 0; /* This won't help much either. */
Packit b099d7
Packit b099d7
Packit b099d7
static Boolean simplistic_transient_flag ;
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
Boolean
Packit b099d7
_XmGetTransientFlag (Widget w)	/* unused */
Packit b099d7
{
Packit b099d7
  return simplistic_transient_flag ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
_XmSetTransientFlag (Widget w,	/* unused */
Packit b099d7
		     Boolean value)
Packit b099d7
{
Packit b099d7
  /* In a very simple case, this might work.  To implement more of this
Packit b099d7
   *  for BC would probably not help an application which was invasive
Packit b099d7
   *  enough to use this flag in the first place.
Packit b099d7
   */
Packit b099d7
  simplistic_transient_flag = value ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
Boolean
Packit b099d7
_XmQueryPixmapCache (Screen *screen, /* unused */
Packit b099d7
		     char *image_name, /* unused */
Packit b099d7
		     Pixel foreground, /* unused */
Packit b099d7
		     Pixel background) /* unused */
Packit b099d7
{
Packit b099d7
  /* Simple case: return FALSE (creating new pixmap will find it in cache).
Packit b099d7
   */
Packit b099d7
  return FALSE ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
_XmRC_GetLabelString(
Packit b099d7
            XmRowColumnWidget rc,
Packit b099d7
            XrmQuark        resource, /* unused */
Packit b099d7
            XtArgVal *      value)
Packit b099d7
{
Packit b099d7
  *value = (XtArgVal) XmStringCopy(RC_OptionLabel(rc));
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
_XmRC_GetMenuAccelerator(
Packit b099d7
            XmRowColumnWidget rc,
Packit b099d7
            XrmQuark        resource, /* unused */
Packit b099d7
            XtArgVal *      value)
Packit b099d7
{
Packit b099d7
  String        data ;
Packit b099d7
Packit b099d7
  if (rc->row_column.menu_accelerator != NULL) {
Packit b099d7
     data = (String)XtMalloc(strlen(RC_MenuAccelerator(rc)) + 1);
Packit b099d7
     strcpy(data, RC_MenuAccelerator(rc));
Packit b099d7
     *value = (XtArgVal) data ;
Packit b099d7
   }
Packit b099d7
  else *value = (XtArgVal) NULL;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
_XmRC_GetMnemonicCharSet(
Packit b099d7
            XmRowColumnWidget rc,
Packit b099d7
            XrmQuark        resource, /* unused */
Packit b099d7
            XtArgVal *      value)
Packit b099d7
{
Packit b099d7
  Widget	label = XmOptionLabelGadget((Widget)rc);
Packit b099d7
Packit b099d7
  if (label)
Packit b099d7
    {
Packit b099d7
      int n = 0;
Packit b099d7
      Arg           al[1] ;
Packit b099d7
      String        data ;
Packit b099d7
Packit b099d7
      XtSetArg(al[n], XmNmnemonicCharSet, &data); n++;
Packit b099d7
      XtGetValues(label, al, n);
Packit b099d7
      *value = (XtArgVal) data ;
Packit b099d7
    }
Packit b099d7
  else 
Packit b099d7
    {
Packit b099d7
      *value = (XtArgVal) NULL;
Packit b099d7
    }
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
_XmScaleGetTitleString(
Packit b099d7
        Widget wid,
Packit b099d7
        int resource,		/* unused */
Packit b099d7
        XtArgVal *value)
Packit b099d7
{
Packit b099d7
  XmScaleWidget scale = (XmScaleWidget) wid ;
Packit b099d7
Packit b099d7
  if (scale->scale.title == NULL) {
Packit b099d7
    *value = (XtArgVal) NULL ;
Packit b099d7
  } else { 
Packit b099d7
    Arg           al[1] ;
Packit b099d7
Packit b099d7
    XtSetArg (al[0], XmNlabelString, value);
Packit b099d7
    XtGetValues (scale->composite.children[0], al, 1);
Packit b099d7
  }
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
_XmTextFieldDestinationVisible(
Packit b099d7
        Widget w,		/* unused */
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
        int turn_on )		/* unused */
Packit b099d7
#else
Packit b099d7
        Boolean turn_on )	/* unused */
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
{
Packit b099d7
  return ;
Packit b099d7
}
Packit b099d7
Packit b099d7
int 
Packit b099d7
_XmTextGetBaseLine(
Packit b099d7
        Widget widget )
Packit b099d7
{
Packit b099d7
  return XmTextGetBaseline( widget) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void
Packit b099d7
_XmTextOutLoadGCsAndRecolorCursors(XmTextWidget old_tw, /* unused */
Packit b099d7
				   XmTextWidget new_tw)	/* unused */
Packit b099d7
{
Packit b099d7
  return ;
Packit b099d7
}
Packit b099d7
Packit b099d7
_XmConst char *_XmTextEventBindings1 = _XmTextIn_XmTextEventBindings1 ;
Packit b099d7
_XmConst char *_XmTextEventBindings2 = _XmTextIn_XmTextEventBindings2 ;
Packit b099d7
_XmConst char *_XmTextEventBindings3 = _XmTextIn_XmTextEventBindings3 ;
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *	The following are the gadget traversal action routines
Packit b099d7
 *      DD; was in Manager.c but not used anywhere.
Packit b099d7
 ************************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmDoGadgetTraversal(
Packit b099d7
        XmManagerWidget mw,
Packit b099d7
        XEvent *event,		/* unused */
Packit b099d7
        int direction )
Packit b099d7
{
Packit b099d7
  Widget ref_wid = mw->manager.active_child ;
Packit b099d7
Packit b099d7
  if(    ref_wid == NULL    )
Packit b099d7
    {
Packit b099d7
      ref_wid = (Widget) mw ;
Packit b099d7
    }
Packit b099d7
  _XmMgrTraversal( ref_wid, (XmTraversalDirection) direction) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/**********************************************************************
Packit b099d7
 *
Packit b099d7
 *  _XmBuildManagerResources
Packit b099d7
 *	Build up the manager's synthetic and constraint synthetic
Packit b099d7
 *	resource processing list by combining the super classes with 
Packit b099d7
 *	this class.
Packit b099d7
 *  DD: This one should is now static in Manager.c
Packit b099d7
 *
Packit b099d7
 **********************************************************************/
Packit b099d7
void 
Packit b099d7
_XmBuildManagerResources(
Packit b099d7
        WidgetClass c )
Packit b099d7
{
Packit b099d7
        XmManagerWidgetClass wc = (XmManagerWidgetClass) c ;
Packit b099d7
	XmManagerWidgetClass sc;
Packit b099d7
Packit b099d7
	sc = (XmManagerWidgetClass) wc->core_class.superclass;
Packit b099d7
Packit b099d7
	_XmInitializeSyntheticResources(wc->manager_class.syn_resources,
Packit b099d7
		wc->manager_class.num_syn_resources);
Packit b099d7
Packit b099d7
	_XmInitializeSyntheticResources(
Packit b099d7
		wc->manager_class.syn_constraint_resources,
Packit b099d7
		wc->manager_class.num_syn_constraint_resources);
Packit b099d7
Packit b099d7
	if (sc == (XmManagerWidgetClass) constraintWidgetClass) return;
Packit b099d7
Packit b099d7
	_XmBuildResources (&(wc->manager_class.syn_resources),
Packit b099d7
		&(wc->manager_class.num_syn_resources),
Packit b099d7
		sc->manager_class.syn_resources,
Packit b099d7
		sc->manager_class.num_syn_resources);
Packit b099d7
Packit b099d7
	_XmBuildResources (&(wc->manager_class.syn_constraint_resources),
Packit b099d7
		&(wc->manager_class.num_syn_constraint_resources),
Packit b099d7
		sc->manager_class.syn_constraint_resources,
Packit b099d7
		sc->manager_class.num_syn_constraint_resources);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/** Gadget synthetic hook from Manager.c. Are not static in Gadget.c **/
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGetHighlightColor(
Packit b099d7
        Widget w,
Packit b099d7
	int offset,  /* unused */
Packit b099d7
	XtArgVal *value )
Packit b099d7
{
Packit b099d7
	XmManagerWidget mw = (XmManagerWidget) XtParent(w);
Packit b099d7
Packit b099d7
	*value = (XtArgVal) mw->manager.highlight_color;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGetTopShadowColor(
Packit b099d7
        Widget w,
Packit b099d7
	int offset,  /* unused */
Packit b099d7
	XtArgVal *value )
Packit b099d7
{
Packit b099d7
	XmManagerWidget mw = (XmManagerWidget) XtParent(w);
Packit b099d7
Packit b099d7
	*value = (XtArgVal) mw->manager.top_shadow_color;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGetBottomShadowColor(
Packit b099d7
        Widget w,
Packit b099d7
	int offset,  /* unused */
Packit b099d7
	XtArgVal *value )
Packit b099d7
{
Packit b099d7
	XmManagerWidget mw = (XmManagerWidget) XtParent(w);
Packit b099d7
Packit b099d7
	*value = (XtArgVal) mw->manager.bottom_shadow_color;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  The border highlighting and unhighlighting routines.
Packit b099d7
 *
Packit b099d7
 *  These routines were originally in Primitive.c but not used anywhere.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Packit b099d7
void 
Packit b099d7
_XmHighlightBorder(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
    if(    XmIsPrimitive( w)    ) {   
Packit b099d7
        (*(xmPrimitiveClassRec.primitive_class.border_highlight))( w) ;
Packit b099d7
    }  else  {   
Packit b099d7
	if(    XmIsGadget( w)    ) {   
Packit b099d7
	    (*(xmGadgetClassRec.gadget_class.border_highlight))( w) ;
Packit b099d7
	} 
Packit b099d7
    } 
Packit b099d7
    return ;
Packit b099d7
} 
Packit b099d7
Packit b099d7
void 
Packit b099d7
_XmUnhighlightBorder(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
    if(    XmIsPrimitive( w)    )
Packit b099d7
    {   
Packit b099d7
        (*(xmPrimitiveClassRec.primitive_class.border_unhighlight))( w) ;
Packit b099d7
        } 
Packit b099d7
    else
Packit b099d7
    {   if(    XmIsGadget( w)    )
Packit b099d7
        {   
Packit b099d7
            (*(xmGadgetClassRec.gadget_class.border_unhighlight))( w) ;
Packit b099d7
            } 
Packit b099d7
        } 
Packit b099d7
    return ;
Packit b099d7
    }
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  This routine was global in Primitive.c. It is now static.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Packit b099d7
void 
Packit b099d7
_XmBuildPrimitiveResources(
Packit b099d7
        WidgetClass c )
Packit b099d7
{
Packit b099d7
        XmPrimitiveWidgetClass wc = (XmPrimitiveWidgetClass) c ;
Packit b099d7
	XmPrimitiveWidgetClass sc;
Packit b099d7
Packit b099d7
	sc = (XmPrimitiveWidgetClass) wc->core_class.superclass;
Packit b099d7
Packit b099d7
	_XmInitializeSyntheticResources(wc->primitive_class.syn_resources,
Packit b099d7
		wc->primitive_class.num_syn_resources);
Packit b099d7
Packit b099d7
	if (sc == (XmPrimitiveWidgetClass) widgetClass) return;
Packit b099d7
Packit b099d7
	_XmBuildResources (&(wc->primitive_class.syn_resources),
Packit b099d7
		&(wc->primitive_class.num_syn_resources),
Packit b099d7
		sc->primitive_class.syn_resources,
Packit b099d7
		sc->primitive_class.num_syn_resources);
Packit b099d7
}
Packit b099d7
Packit b099d7