Blame lib/Xm/SeparatoG.c

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
 * HISTORY
Packit b099d7
*/ 
Packit b099d7
#ifdef HAVE_CONFIG_H
Packit b099d7
#include <config.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
Packit b099d7
#ifdef REV_INFO
Packit b099d7
#ifndef lint
Packit b099d7
static char rcsid[] = "$TOG: SeparatoG.c /main/18 1999/01/26 15:32:56 mgreess $"
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */
Packit b099d7
Packit b099d7
#include <stdio.h>
Packit b099d7
#include <X11/IntrinsicP.h>
Packit b099d7
#include <X11/ShellP.h>
Packit b099d7
#include <Xm/AccColorT.h>
Packit b099d7
#include <Xm/CareVisualT.h>
Packit b099d7
#include <Xm/DrawP.h>
Packit b099d7
#include <Xm/LabelGP.h>
Packit b099d7
#include <Xm/MenuT.h>
Packit b099d7
#include <Xm/RowColumnP.h>
Packit b099d7
#include <Xm/TraitP.h>
Packit b099d7
#include <Xm/VaSimpleP.h>
Packit b099d7
#include "BaseClassI.h"
Packit b099d7
#include "CacheI.h"
Packit b099d7
#include "ColorI.h"
Packit b099d7
#include "ExtObjectI.h"
Packit b099d7
#include "PixConvI.h"
Packit b099d7
#include "RepTypeI.h"
Packit b099d7
#include "SeparatoGI.h"
Packit b099d7
#include "SyntheticI.h"
Packit b099d7
#include "XmI.h"
Packit b099d7
Packit b099d7
Packit b099d7
/********    Static Function Declarations    ********/
Packit b099d7
Packit b099d7
static void SetTopShadowPixmapDefault(
Packit b099d7
				      Widget widget,
Packit b099d7
				      int offset,
Packit b099d7
				      XrmValue * value);
Packit b099d7
static void InputDispatch( 
Packit b099d7
                        Widget sg,
Packit b099d7
                        XEvent *event,
Packit b099d7
                        Mask event_mask) ;
Packit b099d7
static void ClassInitialize( void ) ;
Packit b099d7
static void ClassPartInitialize( 
Packit b099d7
                        WidgetClass wc) ;
Packit b099d7
static void SecondaryObjectCreate( 
Packit b099d7
                        Widget req,
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
static void InitializePosthook( 
Packit b099d7
                        Widget req,
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
static Boolean SetValuesPrehook( 
Packit b099d7
                        Widget oldParent,
Packit b099d7
                        Widget refParent,
Packit b099d7
                        Widget newParent,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
static void GetValuesPrehook( 
Packit b099d7
                        Widget newParent,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
static void GetValuesPosthook( 
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
static Boolean SetValuesPosthook( 
Packit b099d7
                        Widget current,
Packit b099d7
                        Widget req,
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
static void Initialize( 
Packit b099d7
                        Widget rw,
Packit b099d7
                        Widget nw,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
static void GetSeparatorGC( 
Packit b099d7
                        XmSeparatorGadget sg) ;
Packit b099d7
static void GetBackgroundGC(
Packit b099d7
                        XmSeparatorGadget sg) ;
Packit b099d7
static void Redisplay( 
Packit b099d7
                        Widget wid,
Packit b099d7
                        XEvent *event,
Packit b099d7
                        Region region) ;
Packit b099d7
static void Destroy( 
Packit b099d7
                        Widget sg) ;
Packit b099d7
static Boolean SetValues( 
Packit b099d7
                        Widget cw,
Packit b099d7
                        Widget rw,
Packit b099d7
                        Widget nw,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
static void Help( 
Packit b099d7
                        Widget sg,
Packit b099d7
                        XEvent *event) ;
Packit b099d7
static Cardinal GetSeparatorGClassSecResData( 
Packit b099d7
                        WidgetClass w_class,
Packit b099d7
                        XmSecondaryResourceData **data_rtn) ;
Packit b099d7
static XtPointer GetSeparatorGClassSecResBase( 
Packit b099d7
                        Widget widget,
Packit b099d7
                        XtPointer client_data) ;
Packit b099d7
static Boolean HandleRedraw (Widget kid, 
Packit b099d7
		       Widget cur_parent,
Packit b099d7
		       Widget new_parent,
Packit b099d7
		       Mask visual_flag);
Packit b099d7
static void 
Packit b099d7
InitNewColorBehavior(
Packit b099d7
		     XmSeparatorGadget sg);
Packit b099d7
static void DealWithColors(
Packit b099d7
			   XmSeparatorGadget sg);
Packit b099d7
static void DealWithPixmaps(
Packit b099d7
			   XmSeparatorGadget sg);
Packit b099d7
static void InitNewPixmapBehavior(
Packit b099d7
			   XmSeparatorGadget sg);
Packit b099d7
Packit b099d7
static void GetColors(Widget widget, 
Packit b099d7
		      XmAccessColorData color_data);
Packit b099d7
Packit b099d7
/********    End Static Function Declarations    ********/
Packit b099d7
Packit b099d7
/* Menu Savvy trait record */
Packit b099d7
static XmConst XmMenuSavvyTraitRec MenuSavvySeparatorRecord = {
Packit b099d7
  0,				/* version */
Packit b099d7
  NULL,				/* disableCallback */
Packit b099d7
  NULL,				/* getAccelerator */
Packit b099d7
  NULL,				/* getMnemonic */
Packit b099d7
  NULL,				/* getActivateCBName */
Packit b099d7
};
Packit b099d7
Packit b099d7
Packit b099d7
static XmConst XmCareVisualTraitRec SeparatoGCVT = {
Packit b099d7
    0,		/* version */
Packit b099d7
    HandleRedraw,
Packit b099d7
};
Packit b099d7
Packit b099d7
Packit b099d7
/* Access Colors Trait record for separator */
Packit b099d7
Packit b099d7
static XmConst XmAccessColorsTraitRec sepACT = {
Packit b099d7
  0,			/* version */
Packit b099d7
  GetColors
Packit b099d7
};
Packit b099d7
Packit b099d7
  
Packit b099d7
Packit b099d7
/*  Resource list for Separator  */
Packit b099d7
Packit b099d7
static XtResource resources[] =
Packit b099d7
{
Packit b099d7
   {
Packit b099d7
     XmNtraversalOn, XmCTraversalOn, XmRBoolean, sizeof (Boolean),
Packit b099d7
     XtOffsetOf( struct _XmGadgetRec, gadget.traversal_on),
Packit b099d7
     XmRImmediate, (XtPointer) False
Packit b099d7
   },
Packit b099d7
   {
Packit b099d7
     XmNhighlightThickness, XmCHighlightThickness, XmRHorizontalDimension,
Packit b099d7
     sizeof (Dimension),
Packit b099d7
     XtOffsetOf( struct _XmGadgetRec, gadget.highlight_thickness),
Packit b099d7
     XmRImmediate, (XtPointer) 0
Packit b099d7
   },
Packit b099d7
   {
Packit b099d7
     XmNshadowThickness, XmCShadowThickness, XmRHorizontalDimension,
Packit b099d7
     sizeof (Dimension),
Packit b099d7
     XtOffsetOf( struct _XmGadgetRec, gadget.shadow_thickness),
Packit b099d7
     XmRImmediate, (XtPointer) 2
Packit b099d7
   },
Packit b099d7
};
Packit b099d7
Packit b099d7
Packit b099d7
static XtResource cache_resources[] = 
Packit b099d7
{
Packit b099d7
   {
Packit b099d7
      XmNseparatorType,
Packit b099d7
      XmCSeparatorType,
Packit b099d7
      XmRSeparatorType,
Packit b099d7
      sizeof (unsigned char),
Packit b099d7
      XtOffsetOf( struct _XmSeparatorGCacheObjRec,
Packit b099d7
		 separator_cache.separator_type),
Packit b099d7
      XmRImmediate, (XtPointer) XmSHADOW_ETCHED_IN
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
      XmNmargin, 
Packit b099d7
      XmCMargin, 
Packit b099d7
      XmRHorizontalDimension, 
Packit b099d7
      sizeof (Dimension),
Packit b099d7
      XtOffsetOf( struct _XmSeparatorGCacheObjRec, separator_cache.margin),
Packit b099d7
      XmRImmediate, (XtPointer)  0
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
      XmNorientation,
Packit b099d7
      XmCOrientation,
Packit b099d7
      XmROrientation,
Packit b099d7
      sizeof (unsigned char),
Packit b099d7
      XtOffsetOf( struct _XmSeparatorGCacheObjRec,
Packit b099d7
		 separator_cache.orientation),
Packit b099d7
      XmRImmediate, (XtPointer) XmHORIZONTAL
Packit b099d7
   },
Packit b099d7
   
Packit b099d7
   
Packit b099d7
   {
Packit b099d7
     XmNbackground, XmCBackground, XmRPixel, 
Packit b099d7
     sizeof (Pixel), XtOffsetOf(struct _XmSeparatorGCacheObjRec,
Packit b099d7
				separator_cache.background),
Packit b099d7
     XmRImmediate, (XtPointer) INVALID_PIXEL
Packit b099d7
   },
Packit b099d7
   {
Packit b099d7
     XmNforeground, XmCForeground, XmRPixel, 
Packit b099d7
     sizeof (Pixel),
Packit b099d7
     XtOffsetOf(struct _XmSeparatorGCacheObjRec, separator_cache.foreground),
Packit b099d7
     XmRImmediate, (XtPointer) INVALID_PIXEL
Packit b099d7
   },
Packit b099d7
   
Packit b099d7
   {
Packit b099d7
     XmNtopShadowColor, XmCTopShadowColor, XmRPixel, 
Packit b099d7
     sizeof (Pixel),
Packit b099d7
     XtOffsetOf(struct _XmSeparatorGCacheObjRec,
Packit b099d7
		separator_cache.top_shadow_color),
Packit b099d7
     XmRImmediate, (XtPointer) INVALID_PIXEL
Packit b099d7
   },
Packit b099d7
   {
Packit b099d7
     XmNtopShadowPixmap, XmCTopShadowPixmap, XmRNoScalingDynamicPixmap,
Packit b099d7
     sizeof (Pixmap),
Packit b099d7
     XtOffsetOf(struct _XmSeparatorGCacheObjRec,
Packit b099d7
		separator_cache.top_shadow_pixmap),
Packit b099d7
     XmRImmediate, (XtPointer) INVALID_PIXEL
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNbottomShadowColor, XmCBottomShadowColor, XmRPixel, 
Packit b099d7
     sizeof (Pixel),
Packit b099d7
     XtOffsetOf(struct _XmSeparatorGCacheObjRec,
Packit b099d7
		separator_cache.bottom_shadow_color),
Packit b099d7
     XmRImmediate, (XtPointer) INVALID_PIXEL
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNbottomShadowPixmap, XmCBottomShadowPixmap, XmRNoScalingDynamicPixmap,
Packit b099d7
     sizeof (Pixmap),
Packit b099d7
     XtOffsetOf(struct _XmSeparatorGCacheObjRec,
Packit b099d7
		separator_cache.bottom_shadow_pixmap),
Packit b099d7
     XmRImmediate, (XtPointer) XmUNSPECIFIED_PIXMAP
Packit b099d7
   },
Packit b099d7
};
Packit b099d7
Packit b099d7
static XmSyntheticResource cache_syn_resources[] = 
Packit b099d7
{
Packit b099d7
   {
Packit b099d7
      XmNmargin, 
Packit b099d7
      sizeof (Dimension),
Packit b099d7
      XtOffsetOf( struct _XmSeparatorGCacheObjRec, separator_cache.margin),
Packit b099d7
      XmeFromHorizontalPixels,
Packit b099d7
      XmeToHorizontalPixels,
Packit b099d7
   },
Packit b099d7
};
Packit b099d7
Packit b099d7
/* ext rec static initialization */
Packit b099d7
externaldef(xmseparatorgcacheobjclassrec)
Packit b099d7
XmSeparatorGCacheObjClassRec xmSeparatorGCacheObjClassRec =
Packit b099d7
{
Packit b099d7
  {
Packit b099d7
    /* superclass         */    (WidgetClass) &xmExtClassRec,
Packit b099d7
    /* class_name         */    "XmSeparatorGadget",
Packit b099d7
    /* widget_size        */    sizeof(XmSeparatorGCacheObjRec),
Packit b099d7
    /* class_initialize   */    NULL,
Packit b099d7
    /* chained class init */    NULL,
Packit b099d7
    /* class_inited       */    False,
Packit b099d7
    /* initialize         */    NULL,
Packit b099d7
    /* initialize hook    */    NULL,
Packit b099d7
    /* realize            */    NULL,
Packit b099d7
    /* actions            */    NULL,
Packit b099d7
    /* num_actions        */    0,
Packit b099d7
    /* resources          */    cache_resources,
Packit b099d7
    /* num_resources      */    XtNumber(cache_resources),
Packit b099d7
    /* xrm_class          */    NULLQUARK,
Packit b099d7
    /* compress_motion    */    False,
Packit b099d7
    /* compress_exposure  */    False,
Packit b099d7
    /* compress enter/exit*/    False,
Packit b099d7
    /* visible_interest   */    False,
Packit b099d7
    /* destroy            */    NULL,
Packit b099d7
    /* resize             */    NULL,
Packit b099d7
    /* expose             */    NULL,
Packit b099d7
    /* set_values         */    NULL,
Packit b099d7
    /* set values hook    */    NULL,
Packit b099d7
    /* set values almost  */    NULL,
Packit b099d7
    /* get values hook    */    NULL,
Packit b099d7
    /* accept_focus       */    NULL,
Packit b099d7
    /* version            */    XtVersion,
Packit b099d7
    /* callback offsetlst */    NULL,
Packit b099d7
    /* default trans      */    NULL,
Packit b099d7
    /* query geo proc     */    NULL,
Packit b099d7
    /* display accelerator*/    NULL,
Packit b099d7
    /* extension record   */    NULL,
Packit b099d7
  },
Packit b099d7
Packit b099d7
  {
Packit b099d7
    /* synthetic resources */   cache_syn_resources,
Packit b099d7
    /* num_syn_resources   */   XtNumber(cache_syn_resources),
Packit b099d7
    /* extension           */   NULL,
Packit b099d7
  }
Packit b099d7
};
Packit b099d7
Packit b099d7
static XmBaseClassExtRec   separatorBaseClassExtRec = {
Packit b099d7
    NULL,    					/* next_extension        */
Packit b099d7
    NULLQUARK,					/* record_typ            */
Packit b099d7
    XmBaseClassExtVersion,			/* version               */
Packit b099d7
    sizeof(XmBaseClassExtRec),			/* record_size           */
Packit b099d7
    XmInheritInitializePrehook,			/* initializePrehook     */
Packit b099d7
    SetValuesPrehook,				/* setValuesPrehook      */
Packit b099d7
    InitializePosthook,				/* initializePosthook    */
Packit b099d7
    SetValuesPosthook,				/* setValuesPosthook     */
Packit b099d7
    (WidgetClass)&xmSeparatorGCacheObjClassRec,	/* secondaryObjectClass  */
Packit b099d7
    SecondaryObjectCreate,		        /* secondaryObjectCreate */
Packit b099d7
    GetSeparatorGClassSecResData,	        /* getSecResData */
Packit b099d7
    {0},			                /* Other Flags           */
Packit b099d7
    GetValuesPrehook,				/* getValuesPrehook      */
Packit b099d7
    GetValuesPosthook,				/* getValuesPosthook     */
Packit b099d7
};
Packit b099d7
Packit b099d7
static XmCacheClassPart SeparatorClassCachePart = {
Packit b099d7
    {NULL, 0, 0},        /* head of class cache list */
Packit b099d7
    _XmCacheCopy,       /* Copy routine     */
Packit b099d7
    _XmCacheDelete,     /* Delete routine   */
Packit b099d7
    _XmSeparatorCacheCompare,    /* Comparison routine   */
Packit b099d7
};
Packit b099d7
Packit b099d7
Packit b099d7
/*  The Separator class record definition  */
Packit b099d7
Packit b099d7
externaldef(xmseparatorgadgetclassrec) XmSeparatorGadgetClassRec xmSeparatorGadgetClassRec =
Packit b099d7
Packit b099d7
{
Packit b099d7
   {
Packit b099d7
      (WidgetClass) &xmGadgetClassRec,  /* superclass            */
Packit b099d7
      "XmSeparatorGadget",              /* class_name	         */
Packit b099d7
      sizeof(XmSeparatorGadgetRec),     /* widget_size	         */
Packit b099d7
      ClassInitialize,         		/* class_initialize      */
Packit b099d7
      ClassPartInitialize,              /* class_part_initialize */
Packit b099d7
      FALSE,                            /* class_inited          */
Packit b099d7
      Initialize,                       /* initialize	         */
Packit b099d7
      NULL,                             /* initialize_hook       */
Packit b099d7
      NULL,	                        /* realize	         */
Packit b099d7
      NULL,                             /* actions               */
Packit b099d7
      0,			        /* num_actions    	 */
Packit b099d7
      resources,                        /* resources	         */
Packit b099d7
      XtNumber(resources),		/* num_resources         */
Packit b099d7
      NULLQUARK,                        /* xrm_class	         */
Packit b099d7
      TRUE,                             /* compress_motion       */
Packit b099d7
      TRUE,                             /* compress_exposure     */
Packit b099d7
      TRUE,                             /* compress_enterleave   */
Packit b099d7
      FALSE,                            /* visible_interest      */	
Packit b099d7
      Destroy,                          /* destroy               */	
Packit b099d7
      NULL,                             /* resize                */
Packit b099d7
      Redisplay,                        /* expose                */	
Packit b099d7
      SetValues,                        /* set_values	         */	
Packit b099d7
      NULL,                             /* set_values_hook       */
Packit b099d7
      XtInheritSetValuesAlmost,         /* set_values_almost     */
Packit b099d7
      NULL,                             /* get_values_hook       */
Packit b099d7
      NULL,                             /* accept_focus	         */	
Packit b099d7
      XtVersion,                        /* version               */
Packit b099d7
      NULL,                             /* callback private      */
Packit b099d7
      NULL,                             /* tm_table              */
Packit b099d7
      NULL,                             /* query_geometry        */
Packit b099d7
      NULL,				/* display_accelerator   */
Packit b099d7
      (XtPointer)&separatorBaseClassExtRec, /* extension         */
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
      NULL, 			/* border highlight   */
Packit b099d7
      NULL,      		/* border_unhighlight */
Packit b099d7
      NULL,			/* arm_and_activate   */
Packit b099d7
      InputDispatch,		/* input dispatch     */
Packit b099d7
      XmInheritVisualChange,	/* visual_change      */
Packit b099d7
      NULL,			/* syn_resources      */
Packit b099d7
      0,  			/* num_syn_resources  */
Packit b099d7
      &SeparatorClassCachePart, /* class cache part   */
Packit b099d7
      NULL,         		/* extension          */
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
      NULL,         		/* extension */
Packit b099d7
   }
Packit b099d7
};
Packit b099d7
Packit b099d7
externaldef(xmseparatorgadgetclass) WidgetClass xmSeparatorGadgetClass = 
Packit b099d7
   (WidgetClass) &xmSeparatorGadgetClassRec;
Packit b099d7
Packit b099d7

Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
SetTopShadowPixmapDefault(
Packit b099d7
        Widget widget,
Packit b099d7
        int offset,		/* unused */
Packit b099d7
        XrmValue *value )
Packit b099d7
{
Packit b099d7
   XmSeparatorGadget sg = (XmSeparatorGadget) widget;
Packit b099d7
   XmManagerWidget mw = (XmManagerWidget)XtParent(sg);
Packit b099d7
   static Pixmap pixmap;
Packit b099d7
Packit b099d7
   pixmap = XmUNSPECIFIED_PIXMAP;
Packit b099d7
Packit b099d7
   value->addr = (char *) &pixmap;
Packit b099d7
   value->size = sizeof (Pixmap);
Packit b099d7
Packit b099d7
   if (SEPG_TopShadowColor(sg) == SEPG_Background(sg))
Packit b099d7
      pixmap = XmGetPixmapByDepth (XtScreen (sg), XmS50_foreground,
Packit b099d7
                            SEPG_TopShadowColor(sg),
Packit b099d7
                            SEPG_Foreground(sg),
Packit b099d7
                            mw->core.depth);
Packit b099d7
Packit b099d7
   else if (DefaultDepthOfScreen (XtScreen (widget)) == 1)
Packit b099d7
      pixmap = XmGetPixmapByDepth (XtScreen (sg), XmS50_foreground,
Packit b099d7
                            SEPG_TopShadowColor(sg),
Packit b099d7
                            SEPG_Background(sg),
Packit b099d7
                            mw->core.depth);
Packit b099d7
}
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  InputDispatch
Packit b099d7
 *     This function catches input sent by a manager and dispatches it
Packit b099d7
 *     to the individual routines.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
InputDispatch(
Packit b099d7
        Widget sg,
Packit b099d7
        XEvent *event,
Packit b099d7
        Mask event_mask )
Packit b099d7
{
Packit b099d7
   if (event_mask & XmHELP_EVENT) Help (sg, event);
Packit b099d7
}
Packit b099d7
Packit b099d7
/*******************************************************************
Packit b099d7
 *
Packit b099d7
 *  _XmSeparatorCacheCompare
Packit b099d7
 *
Packit b099d7
 *******************************************************************/
Packit b099d7
int 
Packit b099d7
_XmSeparatorCacheCompare(
Packit b099d7
        XtPointer A,
Packit b099d7
        XtPointer B )
Packit b099d7
{
Packit b099d7
        XmSeparatorGCacheObjPart *separator_inst =
Packit b099d7
                                               (XmSeparatorGCacheObjPart *) A ;
Packit b099d7
        XmSeparatorGCacheObjPart *separator_cache_inst =
Packit b099d7
                                               (XmSeparatorGCacheObjPart *) B ;
Packit b099d7
    if((separator_inst->margin == separator_cache_inst->margin) &&
Packit b099d7
       (separator_inst->orientation == separator_cache_inst->orientation) &&
Packit b099d7
       (separator_inst->separator_type == separator_cache_inst->separator_type) &&
Packit b099d7
       (separator_inst-> separator_GC == separator_cache_inst->separator_GC) &&
Packit b099d7
       (separator_inst-> background_GC == separator_cache_inst->background_GC) &&
Packit b099d7
       (separator_inst-> top_shadow_GC == separator_cache_inst->top_shadow_GC) &&
Packit b099d7
       (separator_inst-> bottom_shadow_GC == separator_cache_inst->bottom_shadow_GC) &&
Packit b099d7
       (separator_inst-> background == separator_cache_inst->background) &&
Packit b099d7
       (separator_inst-> top_shadow_color == separator_cache_inst->top_shadow_color) &&
Packit b099d7
       (separator_inst-> top_shadow_pixmap == separator_cache_inst->top_shadow_pixmap) &&
Packit b099d7
       (separator_inst-> bottom_shadow_color ==
Packit b099d7
	separator_cache_inst->bottom_shadow_color) &&
Packit b099d7
       (separator_inst-> bottom_shadow_pixmap ==
Packit b099d7
	                 separator_cache_inst->bottom_shadow_pixmap))
Packit b099d7
       return 1;
Packit b099d7
    else
Packit b099d7
       return 0;
Packit b099d7
 }
Packit b099d7
Packit b099d7
/***********************************************************
Packit b099d7
*
Packit b099d7
*  ClassInitialize
Packit b099d7
*
Packit b099d7
************************************************************/
Packit b099d7
static void 
Packit b099d7
ClassInitialize( void )
Packit b099d7
{
Packit b099d7
    separatorBaseClassExtRec.record_type = XmQmotif;
Packit b099d7
Packit b099d7
    /* Install the menu savvy trait. */
Packit b099d7
    XmeTraitSet((XtPointer) xmSeparatorGadgetClass, XmQTmenuSavvy,
Packit b099d7
		(XtPointer) &MenuSavvySeparatorRecord);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ClassPartInitialize
Packit b099d7
 *     Set up the fast subclassing for the widget
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
ClassPartInitialize(
Packit b099d7
        WidgetClass wc )
Packit b099d7
{
Packit b099d7
   _XmFastSubclassInit (wc, XmSEPARATOR_GADGET_BIT);
Packit b099d7
  
Packit b099d7
   /* Install the careParentVisual trait for all subclasses as well. */
Packit b099d7
   XmeTraitSet((XtPointer)wc, XmQTcareParentVisual, (XtPointer)&SeparatoGCVT);
Packit b099d7
Packit b099d7
   /* Install the accessColors trait for all subclasses as well. */
Packit b099d7
   XmeTraitSet((XtPointer)wc, XmQTaccessColors, (XtPointer)&sepACT);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
*
Packit b099d7
*  SecondaryObjectCreate
Packit b099d7
*
Packit b099d7
************************************************************************/
Packit b099d7
/* ARGSUSED */
Packit b099d7
static void 
Packit b099d7
SecondaryObjectCreate(
Packit b099d7
        Widget req,
Packit b099d7
        Widget new_w,
Packit b099d7
        ArgList args,
Packit b099d7
        Cardinal *num_args )
Packit b099d7
{
Packit b099d7
  XmBaseClassExt              *cePtr;
Packit b099d7
  XmWidgetExtData             extData;
Packit b099d7
  WidgetClass                 wc;
Packit b099d7
  Cardinal                    size;
Packit b099d7
  XtPointer                   newSec, reqSec;
Packit b099d7
Packit b099d7
  _XmProcessLock();
Packit b099d7
  cePtr = _XmGetBaseClassExtPtr(XtClass(new_w), XmQmotif);
Packit b099d7
Packit b099d7
  wc = (*cePtr)->secondaryObjectClass;
Packit b099d7
  size = wc->core_class.widget_size;
Packit b099d7
Packit b099d7
  newSec = _XmExtObjAlloc(size);
Packit b099d7
  reqSec = _XmExtObjAlloc(size);
Packit b099d7
  _XmProcessUnlock();
Packit b099d7
Packit b099d7
  
Packit b099d7
/*
Packit b099d7
 *  Update pointers in instance records now so references to resources
Packit b099d7
 * in the cache record will be valid for use in CallProcs.
Packit b099d7
 */
Packit b099d7
 
Packit b099d7
  SEPG_Cache(new_w) = &(((XmSeparatorGCacheObject)newSec)->separator_cache);
Packit b099d7
  SEPG_Cache(req) = &(((XmSeparatorGCacheObject)reqSec)->separator_cache);
Packit b099d7
Packit b099d7
    /*
Packit b099d7
     * fetch the resources in superclass to subclass order
Packit b099d7
     */
Packit b099d7
  XtGetSubresources(new_w,
Packit b099d7
                    newSec,
Packit b099d7
                    NULL, NULL,
Packit b099d7
                    wc->core_class.resources,
Packit b099d7
                    wc->core_class.num_resources,
Packit b099d7
                    args, *num_args );
Packit b099d7
Packit b099d7
  extData = (XmWidgetExtData) XtCalloc(1, sizeof(XmWidgetExtDataRec));
Packit b099d7
  extData->widget = (Widget)newSec;
Packit b099d7
  extData->reqWidget = (Widget)reqSec;
Packit b099d7
Packit b099d7
  ((XmSeparatorGCacheObject)newSec)->ext.extensionType = XmCACHE_EXTENSION;
Packit b099d7
  ((XmSeparatorGCacheObject)newSec)->ext.logicalParent = new_w;
Packit b099d7
Packit b099d7
  _XmPushWidgetExtData(new_w, extData,
Packit b099d7
                      ((XmSeparatorGCacheObject)newSec)->ext.extensionType);
Packit b099d7
   memcpy(reqSec, newSec, size);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  InitializePosthook
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/* ARGSUSED */
Packit b099d7
static void 
Packit b099d7
InitializePosthook(
Packit b099d7
        Widget req,
Packit b099d7
        Widget new_w,
Packit b099d7
        ArgList args,
Packit b099d7
        Cardinal *num_args )
Packit b099d7
{
Packit b099d7
    XmWidgetExtData     ext;
Packit b099d7
    XmSeparatorGadget sw = (XmSeparatorGadget)new_w;
Packit b099d7
Packit b099d7
    /*
Packit b099d7
     * - register parts in cache.
Packit b099d7
     * - update cache pointers
Packit b099d7
     * - and free req
Packit b099d7
     */
Packit b099d7
Packit b099d7
    _XmProcessLock();
Packit b099d7
    SEPG_Cache(sw) = (XmSeparatorGCacheObjPart *)
Packit b099d7
      _XmCachePart( SEPG_ClassCachePart(sw),
Packit b099d7
                    (XtPointer) SEPG_Cache(sw),
Packit b099d7
                    sizeof(XmSeparatorGCacheObjPart));
Packit b099d7
Packit b099d7
    /*
Packit b099d7
     * might want to break up into per-class work that gets explicitly
Packit b099d7
     * chained. For right now, each class has to replicate all
Packit b099d7
     * superclass logic in hook routine
Packit b099d7
     */
Packit b099d7
Packit b099d7
    /*
Packit b099d7
     * free the req subobject used for comparisons
Packit b099d7
     */
Packit b099d7
    _XmPopWidgetExtData((Widget) sw, &ext, XmCACHE_EXTENSION);
Packit b099d7
    _XmExtObjFree((XtPointer) ext->widget);
Packit b099d7
    _XmExtObjFree((XtPointer) ext->reqWidget);
Packit b099d7
    _XmProcessUnlock();
Packit b099d7
    XtFree( (char *) ext);
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  SetValuesPrehook
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/* ARGSUSED */
Packit b099d7
static Boolean 
Packit b099d7
SetValuesPrehook(
Packit b099d7
        Widget oldParent,
Packit b099d7
        Widget refParent,
Packit b099d7
        Widget newParent,
Packit b099d7
        ArgList args,
Packit b099d7
        Cardinal *num_args )
Packit b099d7
{
Packit b099d7
    XmWidgetExtData             extData;
Packit b099d7
    XmBaseClassExt              *cePtr;
Packit b099d7
    WidgetClass                 ec;
Packit b099d7
    XmSeparatorGCacheObject     newSec, reqSec;
Packit b099d7
    Cardinal                    size;
Packit b099d7
Packit b099d7
    _XmProcessLock();
Packit b099d7
    cePtr = _XmGetBaseClassExtPtr(XtClass(newParent), XmQmotif);
Packit b099d7
    ec = (*cePtr)->secondaryObjectClass;
Packit b099d7
    size = ec->core_class.widget_size;
Packit b099d7
Packit b099d7
    newSec = (XmSeparatorGCacheObject)_XmExtObjAlloc(size);
Packit b099d7
    reqSec = (XmSeparatorGCacheObject)_XmExtObjAlloc(size);
Packit b099d7
    _XmProcessUnlock();
Packit b099d7
Packit b099d7
    newSec->object.self = (Widget)newSec;
Packit b099d7
    newSec->object.widget_class = ec;
Packit b099d7
    newSec->object.parent = XtParent(newParent);
Packit b099d7
    newSec->object.xrm_name = newParent->core.xrm_name;
Packit b099d7
    newSec->object.being_destroyed = False;
Packit b099d7
    newSec->object.destroy_callbacks = NULL;
Packit b099d7
    newSec->object.constraints = NULL;
Packit b099d7
Packit b099d7
    newSec->ext.logicalParent = newParent;
Packit b099d7
    newSec->ext.extensionType = XmCACHE_EXTENSION;
Packit b099d7
Packit b099d7
    memcpy( &(newSec->separator_cache),
Packit b099d7
            SEPG_Cache(newParent),
Packit b099d7
            sizeof(XmSeparatorGCacheObjPart));
Packit b099d7
Packit b099d7
    extData = (XmWidgetExtData) XtCalloc(1, sizeof(XmWidgetExtDataRec));
Packit b099d7
    extData->widget = (Widget)newSec;
Packit b099d7
    extData->reqWidget = (Widget)reqSec;
Packit b099d7
    _XmPushWidgetExtData(newParent, extData, XmCACHE_EXTENSION);
Packit b099d7
Packit b099d7
    XtSetSubvalues((XtPointer)newSec,
Packit b099d7
                   ec->core_class.resources,
Packit b099d7
                   ec->core_class.num_resources,
Packit b099d7
                   args, *num_args);
Packit b099d7
Packit b099d7
    memcpy((XtPointer)reqSec, (XtPointer)newSec, size);
Packit b099d7
Packit b099d7
    SEPG_Cache(newParent) = &(((XmSeparatorGCacheObject)newSec)->separator_cache);
Packit b099d7
    SEPG_Cache(refParent) =
Packit b099d7
	      &(((XmSeparatorGCacheObject)extData->reqWidget)->separator_cache);
Packit b099d7
Packit b099d7
    _XmExtImportArgs((Widget)newSec, args, num_args);
Packit b099d7
Packit b099d7
    return FALSE;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  GetValuesPrehook
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/* ARGSUSED */
Packit b099d7
static void 
Packit b099d7
GetValuesPrehook(
Packit b099d7
        Widget newParent,
Packit b099d7
        ArgList args,
Packit b099d7
        Cardinal *num_args )
Packit b099d7
{
Packit b099d7
    XmWidgetExtData             extData;
Packit b099d7
    XmBaseClassExt              *cePtr;
Packit b099d7
    WidgetClass                 ec;
Packit b099d7
    XmSeparatorGCacheObject     newSec;
Packit b099d7
    Cardinal                    size;
Packit b099d7
Packit b099d7
    _XmProcessLock();
Packit b099d7
    cePtr = _XmGetBaseClassExtPtr(XtClass(newParent), XmQmotif);
Packit b099d7
    ec = (*cePtr)->secondaryObjectClass;
Packit b099d7
    size = ec->core_class.widget_size;
Packit b099d7
Packit b099d7
    newSec = (XmSeparatorGCacheObject)_XmExtObjAlloc(size);
Packit b099d7
    _XmProcessUnlock();
Packit b099d7
Packit b099d7
    newSec->object.self = (Widget)newSec;
Packit b099d7
    newSec->object.widget_class = ec;
Packit b099d7
    newSec->object.parent = XtParent(newParent);
Packit b099d7
    newSec->object.xrm_name = newParent->core.xrm_name;
Packit b099d7
    newSec->object.being_destroyed = False;
Packit b099d7
    newSec->object.destroy_callbacks = NULL;
Packit b099d7
    newSec->object.constraints = NULL;
Packit b099d7
Packit b099d7
    newSec->ext.logicalParent = newParent;
Packit b099d7
    newSec->ext.extensionType = XmCACHE_EXTENSION;
Packit b099d7
Packit b099d7
    memcpy( &(newSec->separator_cache), 
Packit b099d7
            SEPG_Cache(newParent),
Packit b099d7
            sizeof(XmSeparatorGCacheObjPart));
Packit b099d7
Packit b099d7
    extData = (XmWidgetExtData) XtCalloc(1, sizeof(XmWidgetExtDataRec));
Packit b099d7
    extData->widget = (Widget)newSec;
Packit b099d7
    _XmPushWidgetExtData(newParent, extData, XmCACHE_EXTENSION);
Packit b099d7
Packit b099d7
    XtGetSubvalues((XtPointer)newSec,
Packit b099d7
                   ec->core_class.resources,
Packit b099d7
                   ec->core_class.num_resources,
Packit b099d7
                   args, *num_args);
Packit b099d7
Packit b099d7
    _XmExtGetValuesHook((Widget)newSec, args, num_args);
Packit b099d7
}
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  GetValuesPosthook
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/* ARGSUSED */
Packit b099d7
static void 
Packit b099d7
GetValuesPosthook(
Packit b099d7
        Widget new_w,
Packit b099d7
        ArgList args,
Packit b099d7
        Cardinal *num_args )
Packit b099d7
{
Packit b099d7
    XmWidgetExtData ext;
Packit b099d7
Packit b099d7
    _XmPopWidgetExtData(new_w, &ext, XmCACHE_EXTENSION);
Packit b099d7
Packit b099d7
    _XmProcessLock();
Packit b099d7
    _XmExtObjFree((XtPointer) ext->widget);
Packit b099d7
    _XmProcessUnlock();
Packit b099d7
    XtFree( (char *) ext);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  SetValuesPosthook
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static Boolean 
Packit b099d7
SetValuesPosthook(
Packit b099d7
        Widget current,
Packit b099d7
        Widget req,
Packit b099d7
        Widget new_w,
Packit b099d7
        ArgList args,
Packit b099d7
        Cardinal *num_args )
Packit b099d7
{
Packit b099d7
    XmWidgetExtData             ext;
Packit b099d7
Packit b099d7
    /*
Packit b099d7
     * - register parts in cache.
Packit b099d7
     * - update cache pointers
Packit b099d7
     * - and free req
Packit b099d7
     */
Packit b099d7
Packit b099d7
    /* assign if changed! */
Packit b099d7
    _XmProcessLock();
Packit b099d7
    if (!_XmSeparatorCacheCompare((XtPointer) SEPG_Cache(new_w),
Packit b099d7
				  (XtPointer) SEPG_Cache(current)))
Packit b099d7
    {
Packit b099d7
          _XmCacheDelete( (XtPointer) SEPG_Cache(current));  /* delete the old one */
Packit b099d7
          SEPG_Cache(new_w) = (XmSeparatorGCacheObjPart *)
Packit b099d7
            _XmCachePart(SEPG_ClassCachePart(new_w),
Packit b099d7
                         (XtPointer) SEPG_Cache(new_w),
Packit b099d7
                         sizeof(XmSeparatorGCacheObjPart));
Packit b099d7
     } else
Packit b099d7
           SEPG_Cache(new_w) = SEPG_Cache(current);
Packit b099d7
Packit b099d7
    _XmPopWidgetExtData(new_w, &ext, XmCACHE_EXTENSION);
Packit b099d7
Packit b099d7
    _XmExtObjFree((XtPointer) ext->widget);
Packit b099d7
    _XmExtObjFree((XtPointer) ext->reqWidget);
Packit b099d7
    _XmProcessUnlock();
Packit b099d7
Packit b099d7
    XtFree( (char *) ext);
Packit b099d7
Packit b099d7
    return FALSE;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
      
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  Initialize
Packit b099d7
 *     The main widget instance initialization routine.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
Initialize(
Packit b099d7
        Widget rw,
Packit b099d7
        Widget nw,
Packit b099d7
        ArgList args,
Packit b099d7
        Cardinal *num_args )
Packit b099d7
{
Packit b099d7
    XmSeparatorGadget request = (XmSeparatorGadget) rw ;
Packit b099d7
    XmSeparatorGadget new_w = (XmSeparatorGadget) nw ;
Packit b099d7
   new_w -> gadget.traversal_on = FALSE;
Packit b099d7
Packit b099d7
   /* Force highlightThickness to zero if in a menu. */
Packit b099d7
   if (XmIsRowColumn(XtParent(new_w)) &&
Packit b099d7
       ((RC_Type(XtParent(new_w)) == XmMENU_PULLDOWN) ||
Packit b099d7
        (RC_Type(XtParent(new_w)) == XmMENU_POPUP)))
Packit b099d7
     new_w->gadget.highlight_thickness = 0;
Packit b099d7
Packit b099d7
    if(    !XmRepTypeValidValue( XmRID_SEPARATOR_TYPE,
Packit b099d7
                                   SEPG_SeparatorType( new_w), (Widget) new_w)    )
Packit b099d7
   {
Packit b099d7
      SEPG_SeparatorType(new_w) = XmSHADOW_ETCHED_IN;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if(    !XmRepTypeValidValue( XmRID_ORIENTATION,
Packit b099d7
                                     SEPG_Orientation( new_w), (Widget) new_w)    )
Packit b099d7
   {
Packit b099d7
      SEPG_Orientation(new_w) = XmHORIZONTAL;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if (SEPG_Orientation(new_w) == XmHORIZONTAL)
Packit b099d7
   {
Packit b099d7
      if (request -> rectangle.width == 0)
Packit b099d7
	 new_w -> rectangle.width = 2 * new_w -> gadget.highlight_thickness +2;
Packit b099d7
Packit b099d7
      if (request -> rectangle.height == 0)
Packit b099d7
      {
Packit b099d7
	 new_w -> rectangle.height = 2 * new_w -> gadget.highlight_thickness;
Packit b099d7
Packit b099d7
	 if (SEPG_SeparatorType(new_w) == XmSINGLE_LINE ||
Packit b099d7
	     SEPG_SeparatorType(new_w) == XmSINGLE_DASHED_LINE)
Packit b099d7
	    new_w -> rectangle.height += 3;
Packit b099d7
	 else if (SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_IN ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_OUT ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_IN_DASH ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_OUT_DASH)
Packit b099d7
	    new_w -> rectangle.height += new_w -> gadget.shadow_thickness;
Packit b099d7
	 else if (SEPG_SeparatorType(new_w) == XmDOUBLE_LINE ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmDOUBLE_DASHED_LINE)
Packit b099d7
	    new_w -> rectangle.height += 5;
Packit b099d7
	 else
Packit b099d7
	    if (new_w -> rectangle.height == 0)
Packit b099d7
	       new_w -> rectangle.height = 1;
Packit b099d7
      }
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if (SEPG_Orientation(new_w) == XmVERTICAL)
Packit b099d7
   {
Packit b099d7
      if (request -> rectangle.height == 0)
Packit b099d7
	 new_w -> rectangle.height = 2 * new_w -> gadget.highlight_thickness +2;
Packit b099d7
Packit b099d7
      if (request -> rectangle.width == 0)
Packit b099d7
      {
Packit b099d7
	 new_w -> rectangle.width = 2 * new_w -> gadget.highlight_thickness;
Packit b099d7
Packit b099d7
	 if (SEPG_SeparatorType(new_w) == XmSINGLE_LINE ||
Packit b099d7
	     SEPG_SeparatorType(new_w) == XmSINGLE_DASHED_LINE)
Packit b099d7
	    new_w -> rectangle.width += 3;
Packit b099d7
	 else if (SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_IN ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_OUT ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_IN_DASH ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_OUT_DASH)
Packit b099d7
	    new_w -> rectangle.width += new_w -> gadget.shadow_thickness;
Packit b099d7
	 else if (SEPG_SeparatorType(new_w) == XmDOUBLE_LINE ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmDOUBLE_DASHED_LINE)
Packit b099d7
	    new_w -> rectangle.width += 5;
Packit b099d7
	 else
Packit b099d7
	    if (new_w -> rectangle.width == 0)
Packit b099d7
	       new_w -> rectangle.width = 1;
Packit b099d7
      }
Packit b099d7
   }
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
   DealWithColors(new_w);
Packit b099d7
   DealWithPixmaps(new_w);
Packit b099d7
   /*  Get the drawing graphics contexts.  */
Packit b099d7
Packit b099d7
    GetSeparatorGC (new_w);
Packit b099d7
    GetBackgroundGC (new_w);
Packit b099d7
    SEPG_TopShadowGC(new_w) =
Packit b099d7
	_XmGetPixmapBasedGC (XtParent(nw), 
Packit b099d7
			     SEPG_TopShadowColor(new_w),
Packit b099d7
			     SEPG_Background(new_w),
Packit b099d7
			     SEPG_TopShadowPixmap(new_w));
Packit b099d7
    SEPG_BottomShadowGC(new_w) =
Packit b099d7
	_XmGetPixmapBasedGC (XtParent(nw), 
Packit b099d7
			     SEPG_BottomShadowColor(new_w),
Packit b099d7
			     SEPG_Background(new_w),
Packit b099d7
			     SEPG_BottomShadowPixmap(new_w));
Packit b099d7
Packit b099d7
Packit b099d7
   /* only want help input events */
Packit b099d7
Packit b099d7
   new_w->gadget.event_mask = XmHELP_EVENT;
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
 /*
Packit b099d7
  *
Packit b099d7
  * DealWithColors
Packit b099d7
  *
Packit b099d7
  * Deal with compatibility.  
Packit b099d7
  * 
Packit b099d7
  *
Packit b099d7
  */
Packit b099d7
static void
Packit b099d7
DealWithColors(
Packit b099d7
        XmSeparatorGadget sg)
Packit b099d7
    {
Packit b099d7
    
Packit b099d7
    XmManagerWidget mw = (XmManagerWidget) XtParent(sg);
Packit b099d7
    
Packit b099d7
    
Packit b099d7
    /*
Packit b099d7
      If the gadget color is set to the tag value or it is the
Packit b099d7
      same as the manager color; bc mode is enabled otherwise
Packit b099d7
      initialize like a widget.
Packit b099d7
    */
Packit b099d7
    if((SEPG_Background(sg) == INVALID_PIXEL ||
Packit b099d7
       SEPG_Background(sg) == mw->core.background_pixel) &&
Packit b099d7
       (SEPG_Foreground(sg) == INVALID_PIXEL ||
Packit b099d7
       SEPG_Foreground(sg) == mw->manager.foreground) &&
Packit b099d7
   (SEPG_TopShadowColor(sg) == INVALID_PIXEL ||
Packit b099d7
   SEPG_TopShadowColor(sg) == mw->manager.top_shadow_color) &&
Packit b099d7
(SEPG_BottomShadowColor(sg) == INVALID_PIXEL || 
Packit b099d7
SEPG_BottomShadowColor(sg) == mw->manager.bottom_shadow_color)
Packit b099d7
       )
Packit b099d7
	{
Packit b099d7
	SEPG_Background(sg) = mw->core.background_pixel;
Packit b099d7
	SEPG_Foreground(sg) = mw->manager.foreground;
Packit b099d7
	SEPG_TopShadowColor(sg) = mw->manager.top_shadow_color;
Packit b099d7
	SEPG_BottomShadowColor(sg) = mw->manager.bottom_shadow_color;
Packit b099d7
	}
Packit b099d7
    else
Packit b099d7
	{
Packit b099d7
	InitNewColorBehavior(sg);
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * InitNewColorBehavior
Packit b099d7
 *
Packit b099d7
 * Initialize colors like a widget.  These are CallProcs so
Packit b099d7
 * they should be called with a correct offset. However offset
Packit b099d7
 * isn't used by these functions.  Even so I supply offset.
Packit b099d7
 * You make the call.
Packit b099d7
 *
Packit b099d7
 */
Packit b099d7
 
Packit b099d7
static void
Packit b099d7
InitNewColorBehavior(
Packit b099d7
        XmSeparatorGadget sg)
Packit b099d7
    {
Packit b099d7
    XrmValue value;
Packit b099d7
    
Packit b099d7
    value.size = sizeof(Pixel);
Packit b099d7
    
Packit b099d7
    if(SEPG_Background(sg) == INVALID_PIXEL)
Packit b099d7
	{
Packit b099d7
	_XmBackgroundColorDefault((Widget)sg,
Packit b099d7
        XtOffsetOf(struct _XmSeparatorGCacheObjRec,
Packit b099d7
		   separator_cache.background),
Packit b099d7
				  &value);
Packit b099d7
	memcpy((char*) &SEPG_Background(sg), value.addr, value.size);
Packit b099d7
	}
Packit b099d7
    
Packit b099d7
    if(SEPG_Foreground(sg) == INVALID_PIXEL)
Packit b099d7
	{
Packit b099d7
	_XmForegroundColorDefault((Widget)sg,
Packit b099d7
        XtOffsetOf(struct _XmSeparatorGCacheObjRec,
Packit b099d7
		   separator_cache.foreground),
Packit b099d7
				  &value);
Packit b099d7
	memcpy((char*) &SEPG_Foreground(sg), value.addr, value.size);
Packit b099d7
	}
Packit b099d7
	
Packit b099d7
    if(SEPG_TopShadowColor(sg) == INVALID_PIXEL)
Packit b099d7
	{
Packit b099d7
	_XmTopShadowColorDefault((Widget)sg,
Packit b099d7
         XtOffsetOf(struct _XmSeparatorGCacheObjRec,
Packit b099d7
		    separator_cache.top_shadow_color),
Packit b099d7
				 &value);
Packit b099d7
	memcpy((char*) &SEPG_TopShadowColor(sg), value.addr, value.size);
Packit b099d7
	}
Packit b099d7
    
Packit b099d7
    if(SEPG_BottomShadowColor(sg) == INVALID_PIXEL)
Packit b099d7
	{
Packit b099d7
	_XmBottomShadowColorDefault((Widget)sg,
Packit b099d7
        XtOffsetOf(struct _XmSeparatorGCacheObjRec,
Packit b099d7
		   separator_cache.bottom_shadow_color),
Packit b099d7
				    &value);
Packit b099d7
	memcpy((char*) &SEPG_BottomShadowColor(sg), value.addr, value.size);
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
Packit b099d7
 /*
Packit b099d7
  *
Packit b099d7
  * DealWithPixmaps
Packit b099d7
  *
Packit b099d7
  * Deal with compatibility.  
Packit b099d7
  *  If any resource is set initialize like a widget otherwise get
Packit b099d7
  * everything from the parent.
Packit b099d7
  * 
Packit b099d7
  *
Packit b099d7
  */
Packit b099d7
static void
Packit b099d7
DealWithPixmaps(
Packit b099d7
        XmSeparatorGadget sg)
Packit b099d7
    {
Packit b099d7
    
Packit b099d7
    XmManagerWidget mw = (XmManagerWidget) XtParent(sg);
Packit b099d7
    
Packit b099d7
    
Packit b099d7
    if(SEPG_TopShadowPixmap(sg) == INVALID_PIXMAP ||
Packit b099d7
       SEPG_TopShadowPixmap(sg) == mw->manager.top_shadow_pixmap
Packit b099d7
       )
Packit b099d7
	{
Packit b099d7
	SEPG_TopShadowPixmap(sg) = mw->manager.top_shadow_pixmap;
Packit b099d7
	}	
Packit b099d7
    else
Packit b099d7
	{
Packit b099d7
	InitNewPixmapBehavior(sg);
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
/*
Packit b099d7
 * InitNewPixmapBehavior
Packit b099d7
 *
Packit b099d7
 * Initialize colors like a widget.  These are CallProcs so
Packit b099d7
 * they should be called with a correct offset. However offset
Packit b099d7
 * isn't used by these functions.  Even so I supply offset.
Packit b099d7
 * You make the call.
Packit b099d7
 *
Packit b099d7
 */
Packit b099d7
 
Packit b099d7
static void
Packit b099d7
InitNewPixmapBehavior(
Packit b099d7
        XmSeparatorGadget sg)
Packit b099d7
    {
Packit b099d7
    XrmValue value;
Packit b099d7
    
Packit b099d7
    value.size = sizeof(Pixmap);
Packit b099d7
    
Packit b099d7
	
Packit b099d7
    if(SEPG_TopShadowPixmap(sg) == INVALID_PIXMAP)
Packit b099d7
	{
Packit b099d7
	SetTopShadowPixmapDefault((Widget)sg,
Packit b099d7
				  0,
Packit b099d7
				  &value);
Packit b099d7
	
Packit b099d7
	SEPG_TopShadowColor(sg) = *value.addr;
Packit b099d7
	memcpy((char*) &SEPG_TopShadowPixmap(sg), value.addr, value.size);
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
Packit b099d7
		     
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  GetBackgroundGC
Packit b099d7
 *     Get the graphics context used for drawing the separator.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
GetBackgroundGC(
Packit b099d7
        XmSeparatorGadget sg )
Packit b099d7
{
Packit b099d7
   XGCValues values;
Packit b099d7
   XtGCMask  valueMask;
Packit b099d7
   XmManagerWidget mw;
Packit b099d7
   
Packit b099d7
   mw = (XmManagerWidget) XtParent(sg);
Packit b099d7
Packit b099d7
   sg->separator.fill_bg_box = 
Packit b099d7
     ((mw->core.background_pixel != SEPG_Background(sg)) &&
Packit b099d7
      (mw->core.background_pixmap == XmUNSPECIFIED_PIXMAP));
Packit b099d7
Packit b099d7
   if (sg->separator.fill_bg_box)
Packit b099d7
     {
Packit b099d7
       valueMask = GCForeground | GCBackground;
Packit b099d7
Packit b099d7
       values.foreground = SEPG_Background(sg);
Packit b099d7
       values.background = SEPG_Foreground(sg);
Packit b099d7
Packit b099d7
       SEPG_BackgroundGC(sg) = XtGetGC ((Widget) mw, valueMask, &values);
Packit b099d7
     }
Packit b099d7
   else
Packit b099d7
     {
Packit b099d7
       /* CR 7650: At least initialize the field. */
Packit b099d7
       SEPG_BackgroundGC(sg) = (GC) None;
Packit b099d7
     }
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  GetSeparatorGC
Packit b099d7
 *     Get the graphics context used for drawing the separator.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
GetSeparatorGC(
Packit b099d7
        XmSeparatorGadget sg )
Packit b099d7
{
Packit b099d7
   XGCValues values;
Packit b099d7
   XtGCMask  valueMask;
Packit b099d7
   XmManagerWidget mw;
Packit b099d7
   
Packit b099d7
   mw = (XmManagerWidget) XtParent(sg);
Packit b099d7
Packit b099d7
   valueMask = GCForeground | GCBackground;
Packit b099d7
Packit b099d7
   values.foreground = SEPG_Foreground(sg);
Packit b099d7
   values.background = SEPG_Background(sg);
Packit b099d7
Packit b099d7
   if (SEPG_SeparatorType(sg) == XmSINGLE_DASHED_LINE ||
Packit b099d7
       SEPG_SeparatorType(sg) == XmDOUBLE_DASHED_LINE)
Packit b099d7
   {
Packit b099d7
      valueMask = valueMask | GCLineStyle;
Packit b099d7
      values.line_style = LineDoubleDash;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   SEPG_SeparatorGC(sg) = XtGetGC ((Widget) mw, valueMask, &values);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  Redisplay
Packit b099d7
 *     Invoke the application exposure callbacks.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
Redisplay(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,
Packit b099d7
        Region region )
Packit b099d7
    {
Packit b099d7
    XmSeparatorGadget sg = (XmSeparatorGadget) wid ;
Packit b099d7
    int background_x_offset, background_y_offset, background_width,
Packit b099d7
    background_height;
Packit b099d7
Packit b099d7
     if (XmIsRowColumn(XtParent(sg))) {
Packit b099d7
       Widget rowcol = XtParent(sg);
Packit b099d7
Packit b099d7
       if ((RC_Type(rowcol) == XmMENU_PULLDOWN ||
Packit b099d7
            RC_Type(rowcol) == XmMENU_POPUP)    &&
Packit b099d7
           (! ((ShellWidget)XtParent(rowcol))->shell.popped_up)) {
Packit b099d7
           /* in a menu system that is not yet popped up, ignore */
Packit b099d7
           return;
Packit b099d7
       }
Packit b099d7
     }
Packit b099d7
   
Packit b099d7
    background_height = (int) sg->rectangle.height - 2 *
Packit b099d7
	sg->gadget.highlight_thickness;
Packit b099d7
						  
Packit b099d7
    background_width = (int) sg->rectangle.width - 2 *
Packit b099d7
	sg->gadget.highlight_thickness;
Packit b099d7
Packit b099d7
    background_x_offset = sg->rectangle.x + sg->gadget.highlight_thickness;
Packit b099d7
    
Packit b099d7
    background_y_offset = sg->rectangle.y + sg->gadget.highlight_thickness;
Packit b099d7
   
Packit b099d7
Packit b099d7
    if (sg->separator.fill_bg_box)  {
Packit b099d7
      XFillRectangle(XtDisplay(sg),
Packit b099d7
		     XtWindow((Widget) sg),
Packit b099d7
		     SEPG_BackgroundGC(sg),
Packit b099d7
		     background_x_offset,
Packit b099d7
		     background_y_offset,
Packit b099d7
		     background_width,
Packit b099d7
		     background_height);
Packit b099d7
    }
Packit b099d7
Packit b099d7
    XmeDrawSeparator(XtDisplay((Widget) sg), XtWindow((Widget) sg),
Packit b099d7
                  SEPG_TopShadowGC(sg),
Packit b099d7
                  SEPG_BottomShadowGC(sg),
Packit b099d7
                  SEPG_SeparatorGC(sg),
Packit b099d7
                  sg->rectangle.x + sg->gadget.highlight_thickness,
Packit b099d7
                  sg->rectangle.y + sg->gadget.highlight_thickness ,
Packit b099d7
                  sg->rectangle.width - 2*sg->gadget.highlight_thickness,
Packit b099d7
                  sg->rectangle.height - 2*sg->gadget.highlight_thickness,
Packit b099d7
                  sg->gadget.shadow_thickness,
Packit b099d7
                  SEPG_Margin(sg),
Packit b099d7
                  SEPG_Orientation(sg),
Packit b099d7
                  SEPG_SeparatorType(sg));
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  Destroy
Packit b099d7
 *	Remove the callback lists.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
Destroy(
Packit b099d7
        Widget sg )
Packit b099d7
{
Packit b099d7
   XmManagerWidget mw = (XmManagerWidget) XtParent(sg);
Packit b099d7
Packit b099d7
   XtReleaseGC( (Widget) mw, SEPG_SeparatorGC(sg));
Packit b099d7
   if (((XmSeparatorGadget) sg)->separator.fill_bg_box)
Packit b099d7
     XtReleaseGC( (Widget) mw, SEPG_BackgroundGC(sg));
Packit b099d7
   XtReleaseGC( (Widget) mw, SEPG_TopShadowGC(sg));
Packit b099d7
   XtReleaseGC( (Widget) mw, SEPG_BottomShadowGC(sg));
Packit b099d7
Packit b099d7
   _XmProcessLock();
Packit b099d7
   _XmCacheDelete( (XtPointer) SEPG_Cache(sg));
Packit b099d7
   _XmProcessUnlock();
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
static Boolean 
Packit b099d7
HandleRedraw (
Packit b099d7
	Widget kid, 	       
Packit b099d7
	Widget cur_parent,
Packit b099d7
	Widget new_parent,
Packit b099d7
	Mask visual_flag)
Packit b099d7
    {
Packit b099d7
    XmSeparatorGadget sg = (XmSeparatorGadget) kid ;
Packit b099d7
    XmManagerWidget mw = (XmManagerWidget) new_parent;
Packit b099d7
    XmManagerWidget curmw = (XmManagerWidget) cur_parent;
Packit b099d7
    Boolean redraw = False;
Packit b099d7
    XmSeparatorGCacheObjPart oldCopy;
Packit b099d7
    
Packit b099d7
	
Packit b099d7
    _XmProcessLock();
Packit b099d7
    _XmCacheCopy((XtPointer) SEPG_Cache(sg), (XtPointer) &oldCopy,
Packit b099d7
		 sizeof(XmSeparatorGCacheObjPart));
Packit b099d7
    _XmCacheDelete ((XtPointer) SEPG_Cache(sg));
Packit b099d7
    SEPG_Cache(sg) = &oldCopy;
Packit b099d7
    _XmProcessUnlock();
Packit b099d7
Packit b099d7
    if ((visual_flag & VisualBackgroundPixel) &&
Packit b099d7
	(SEPG_Background(sg) == curmw->core.background_pixel))
Packit b099d7
	{
Packit b099d7
	XtReleaseGC (XtParent(sg), SEPG_SeparatorGC(sg));
Packit b099d7
	if (sg->separator.fill_bg_box)
Packit b099d7
	  XtReleaseGC (XtParent(sg), SEPG_BackgroundGC(sg));
Packit b099d7
Packit b099d7
	SEPG_Background(sg) = mw->core.background_pixel;
Packit b099d7
	
Packit b099d7
	GetSeparatorGC((XmSeparatorGadget)sg);
Packit b099d7
	GetBackgroundGC((XmSeparatorGadget)sg);
Packit b099d7
      
Packit b099d7
	
Packit b099d7
	redraw = True;
Packit b099d7
	}
Packit b099d7
Packit b099d7
    if (visual_flag & VisualBackgroundPixmap)
Packit b099d7
	{
Packit b099d7
	if (sg->separator.fill_bg_box)
Packit b099d7
	  XtReleaseGC (XtParent(sg), SEPG_BackgroundGC(sg));
Packit b099d7
Packit b099d7
	GetBackgroundGC((XmSeparatorGadget)sg);
Packit b099d7
	
Packit b099d7
	redraw = True;
Packit b099d7
	}
Packit b099d7
    
Packit b099d7
    if ((visual_flag & VisualForeground) &&
Packit b099d7
	(SEPG_Foreground(sg) == curmw->manager.foreground))
Packit b099d7
	{
Packit b099d7
	XtReleaseGC (XtParent(sg), SEPG_SeparatorGC(sg));
Packit b099d7
	XtReleaseGC (XtParent(sg), SEPG_TopShadowGC(sg));
Packit b099d7
Packit b099d7
	SEPG_Foreground(sg) = mw->manager.foreground;
Packit b099d7
	
Packit b099d7
	GetSeparatorGC((XmSeparatorGadget)sg);
Packit b099d7
	SEPG_TopShadowGC(sg) =
Packit b099d7
	    _XmGetPixmapBasedGC (XtParent(sg), 
Packit b099d7
				 SEPG_TopShadowColor(sg),
Packit b099d7
				 SEPG_Background(sg),
Packit b099d7
				 SEPG_TopShadowPixmap(sg));
Packit b099d7
	redraw = True;
Packit b099d7
	}
Packit b099d7
    
Packit b099d7
    if (visual_flag & (VisualTopShadowColor | VisualTopShadowPixmap))
Packit b099d7
	{
Packit b099d7
	XtReleaseGC (XtParent(sg), SEPG_TopShadowGC(sg));
Packit b099d7
Packit b099d7
	if(SEPG_TopShadowColor(sg) == curmw->manager.top_shadow_color)
Packit b099d7
	    SEPG_TopShadowColor(sg) = mw->manager.top_shadow_color;
Packit b099d7
	
Packit b099d7
	if(SEPG_TopShadowPixmap(sg) == curmw->manager.top_shadow_pixmap &&
Packit b099d7
	   (SEPG_TopShadowPixmap(sg) != XmUNSPECIFIED_PIXMAP
Packit b099d7
	    || SEPG_TopShadowColor(sg) == curmw->manager.top_shadow_color))
Packit b099d7
	    SEPG_TopShadowPixmap(sg) = mw->manager.top_shadow_pixmap;
Packit b099d7
	    
Packit b099d7
	SEPG_TopShadowGC(sg) =
Packit b099d7
	    _XmGetPixmapBasedGC (XtParent(sg), 
Packit b099d7
				 SEPG_TopShadowColor(sg),
Packit b099d7
				 SEPG_Background(sg),
Packit b099d7
				 SEPG_TopShadowPixmap(sg));
Packit b099d7
	
Packit b099d7
	redraw = True;
Packit b099d7
	}
Packit b099d7
Packit b099d7
    if (visual_flag & (VisualBottomShadowColor | VisualBottomShadowPixmap))
Packit b099d7
	{
Packit b099d7
	XtReleaseGC (XtParent(sg), SEPG_BottomShadowGC(sg));
Packit b099d7
Packit b099d7
	if(SEPG_BottomShadowColor(sg) == curmw->manager.bottom_shadow_color)
Packit b099d7
	    SEPG_BottomShadowColor(sg) = mw->manager.bottom_shadow_color;
Packit b099d7
	
Packit b099d7
	if(SEPG_BottomShadowPixmap(sg) == curmw->manager.bottom_shadow_pixmap &&
Packit b099d7
	   (SEPG_BottomShadowPixmap(sg) != XmUNSPECIFIED_PIXMAP 
Packit b099d7
	   || SEPG_BottomShadowColor(sg) == curmw->manager.bottom_shadow_color))
Packit b099d7
	    SEPG_BottomShadowPixmap(sg) = mw->manager.bottom_shadow_pixmap;
Packit b099d7
	    
Packit b099d7
	SEPG_BottomShadowGC(sg) =
Packit b099d7
	    _XmGetPixmapBasedGC (XtParent(sg), 
Packit b099d7
				 SEPG_BottomShadowColor(sg),
Packit b099d7
				 SEPG_Background(sg),
Packit b099d7
				 SEPG_BottomShadowPixmap(sg));
Packit b099d7
	
Packit b099d7
	redraw = True;
Packit b099d7
	}
Packit b099d7
    
Packit b099d7
    _XmProcessLock();
Packit b099d7
    SEPG_Cache(sg) = (XmSeparatorGCacheObjPart *)
Packit b099d7
	_XmCachePart(SEPG_ClassCachePart(sg), (XtPointer) SEPG_Cache(sg),
Packit b099d7
		     sizeof(XmSeparatorGCacheObjPart));
Packit b099d7
    _XmProcessUnlock();
Packit b099d7
		     
Packit b099d7
    return redraw ;
Packit b099d7
    }
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  SetValues
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static Boolean 
Packit b099d7
SetValues(
Packit b099d7
        Widget cw,
Packit b099d7
        Widget rw,
Packit b099d7
        Widget nw,
Packit b099d7
        ArgList args,		/* unused */
Packit b099d7
        Cardinal *num_args )	/* unused */
Packit b099d7
{
Packit b099d7
        XmSeparatorGadget current = (XmSeparatorGadget) cw ;
Packit b099d7
        XmSeparatorGadget request = (XmSeparatorGadget) rw ;
Packit b099d7
        XmSeparatorGadget new_w = (XmSeparatorGadget) nw ;
Packit b099d7
   Boolean flag = FALSE;   
Packit b099d7
   XmManagerWidget new_mw = (XmManagerWidget) XtParent(new_w);
Packit b099d7
Packit b099d7
   /*
Packit b099d7
    * We never allow our traversal flags to be changed during SetValues();
Packit b099d7
    * this is enforced by our superclass.
Packit b099d7
    */
Packit b099d7
   /*  Force traversal_on to FALSE */
Packit b099d7
   new_w -> gadget.traversal_on = FALSE;
Packit b099d7
 
Packit b099d7
   /* Force highlightThickness to zero if in a menu. */
Packit b099d7
   if (XmIsRowColumn(XtParent(new_w)) &&
Packit b099d7
       ((RC_Type(XtParent(new_w)) == XmMENU_PULLDOWN) ||
Packit b099d7
        (RC_Type(XtParent(new_w)) == XmMENU_POPUP)))
Packit b099d7
     new_w->gadget.highlight_thickness = 0;
Packit b099d7
Packit b099d7
   if(    !XmRepTypeValidValue( XmRID_SEPARATOR_TYPE,
Packit b099d7
                                   SEPG_SeparatorType( new_w), (Widget) new_w)    )
Packit b099d7
   {
Packit b099d7
      SEPG_SeparatorType(new_w) = SEPG_SeparatorType(current);
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if(    !XmRepTypeValidValue( XmRID_ORIENTATION,
Packit b099d7
                                     SEPG_Orientation( new_w), (Widget) new_w)    )
Packit b099d7
   {
Packit b099d7
      SEPG_Orientation(new_w) = SEPG_Orientation(current);
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if (SEPG_Orientation(new_w) == XmHORIZONTAL)
Packit b099d7
   {
Packit b099d7
      if (request -> rectangle.width == 0)
Packit b099d7
	 new_w -> rectangle.width = 2 * new_w -> gadget.highlight_thickness + 2;
Packit b099d7
Packit b099d7
      if (request -> rectangle.height == 0)
Packit b099d7
      {
Packit b099d7
	 new_w -> rectangle.height = 2 * new_w -> gadget.highlight_thickness;
Packit b099d7
Packit b099d7
	 if (SEPG_SeparatorType(new_w) == XmSINGLE_LINE ||
Packit b099d7
	     SEPG_SeparatorType(new_w) == XmSINGLE_DASHED_LINE)
Packit b099d7
	    new_w -> rectangle.height += 3;
Packit b099d7
	 else if (SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_IN ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_OUT ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_IN_DASH ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_OUT_DASH) 
Packit b099d7
	    new_w -> rectangle.height += new_w -> gadget.shadow_thickness;
Packit b099d7
	 else if (SEPG_SeparatorType(new_w) == XmDOUBLE_LINE ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmDOUBLE_DASHED_LINE)
Packit b099d7
	    new_w -> rectangle.height += 5;
Packit b099d7
	 else
Packit b099d7
	    if (new_w -> rectangle.height == 0)
Packit b099d7
	       new_w -> rectangle.height = 1;
Packit b099d7
      }
Packit b099d7
Packit b099d7
      if ((SEPG_SeparatorType(new_w) != SEPG_SeparatorType(current) ||
Packit b099d7
           new_w->gadget.shadow_thickness != current->gadget.shadow_thickness ||
Packit b099d7
           new_w->gadget.highlight_thickness != current->gadget.highlight_thickness) && 
Packit b099d7
	   request -> rectangle.height == current -> rectangle.height)
Packit b099d7
      {
Packit b099d7
	 if (SEPG_SeparatorType(new_w) == XmSINGLE_LINE ||
Packit b099d7
	     SEPG_SeparatorType(new_w) == XmSINGLE_DASHED_LINE)
Packit b099d7
	    new_w -> rectangle.height = 2 * new_w -> gadget.highlight_thickness + 3;
Packit b099d7
	 else if (SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_IN ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_OUT || 
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_IN_DASH ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_OUT_DASH) 
Packit b099d7
	    new_w -> rectangle.height = 2 * new_w -> gadget.highlight_thickness +
Packit b099d7
				       new_w -> gadget.shadow_thickness;
Packit b099d7
	 else if (SEPG_SeparatorType(new_w) == XmDOUBLE_LINE ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmDOUBLE_DASHED_LINE) 
Packit b099d7
	    new_w -> rectangle.height = 2 * new_w -> gadget.highlight_thickness + 5;
Packit b099d7
         } 
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if (SEPG_Orientation(new_w) == XmVERTICAL)
Packit b099d7
   {
Packit b099d7
      if (request -> rectangle.height == 0)
Packit b099d7
	 new_w -> rectangle.height = 2 * new_w -> gadget.highlight_thickness + 2;
Packit b099d7
Packit b099d7
      if (request -> rectangle.width == 0)
Packit b099d7
      {
Packit b099d7
	 new_w -> rectangle.width = 2 * new_w -> gadget.highlight_thickness;
Packit b099d7
Packit b099d7
	 if (SEPG_SeparatorType(new_w) == XmSINGLE_LINE ||
Packit b099d7
	     SEPG_SeparatorType(new_w) == XmSINGLE_DASHED_LINE)
Packit b099d7
	    new_w -> rectangle.width += 3;
Packit b099d7
	 else if (SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_IN ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_OUT ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_IN_DASH ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_OUT_DASH) 
Packit b099d7
	    new_w -> rectangle.width += new_w -> gadget.shadow_thickness;
Packit b099d7
	 else if (SEPG_SeparatorType(new_w) == XmDOUBLE_LINE ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmDOUBLE_DASHED_LINE)
Packit b099d7
	    new_w -> rectangle.width += 5;
Packit b099d7
	 else
Packit b099d7
	    if (new_w -> rectangle.width == 0)
Packit b099d7
	       new_w -> rectangle.width = 1;
Packit b099d7
      }
Packit b099d7
Packit b099d7
      if ((SEPG_SeparatorType(new_w) != SEPG_SeparatorType(current) ||
Packit b099d7
           new_w->gadget.shadow_thickness != current->gadget.shadow_thickness ||
Packit b099d7
           new_w->gadget.highlight_thickness != current->gadget.highlight_thickness) &&
Packit b099d7
	   request -> rectangle.width == current -> rectangle.width)
Packit b099d7
      {
Packit b099d7
	 if (SEPG_SeparatorType(new_w) == XmSINGLE_LINE ||
Packit b099d7
	     SEPG_SeparatorType(new_w) == XmSINGLE_DASHED_LINE)
Packit b099d7
	    new_w -> rectangle.width = 2 * new_w -> gadget.highlight_thickness + 3;
Packit b099d7
	 else if (SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_IN ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_OUT || 
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_IN_DASH ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmSHADOW_ETCHED_OUT_DASH) 
Packit b099d7
	    new_w -> rectangle.width = 2 * new_w -> gadget.highlight_thickness +
Packit b099d7
				       new_w -> gadget.shadow_thickness;
Packit b099d7
	 else if (SEPG_SeparatorType(new_w) == XmDOUBLE_LINE ||
Packit b099d7
		  SEPG_SeparatorType(new_w) == XmDOUBLE_DASHED_LINE) 
Packit b099d7
	    new_w -> rectangle.width = 2 * new_w -> gadget.highlight_thickness + 5;
Packit b099d7
         } 
Packit b099d7
   }
Packit b099d7
  
Packit b099d7
   if (SEPG_Orientation(new_w) != SEPG_Orientation(current) ||
Packit b099d7
       SEPG_Margin(new_w) != SEPG_Margin(current) ||
Packit b099d7
       new_w -> gadget.shadow_thickness != current -> gadget.shadow_thickness)
Packit b099d7
      flag = TRUE;
Packit b099d7
Packit b099d7
Packit b099d7
   if (SEPG_SeparatorType(new_w) != SEPG_SeparatorType(current) ||
Packit b099d7
       SEPG_Background(new_w)!= SEPG_Background(current) ||
Packit b099d7
       SEPG_Foreground(new_w)!= SEPG_Foreground(current))
Packit b099d7
   {
Packit b099d7
      XtReleaseGC( (Widget) new_mw, SEPG_SeparatorGC(new_w));
Packit b099d7
      GetSeparatorGC (new_w);
Packit b099d7
      flag = TRUE;
Packit b099d7
   }
Packit b099d7
  
Packit b099d7
   if (SEPG_Background(new_w)!= SEPG_Background(current))
Packit b099d7
   {
Packit b099d7
     if (new_w->separator.fill_bg_box)
Packit b099d7
       XtReleaseGC( (Widget) new_mw, SEPG_BackgroundGC(new_w));
Packit b099d7
      GetBackgroundGC (new_w);
Packit b099d7
      flag = TRUE;
Packit b099d7
   }
Packit b099d7
   
Packit b099d7
   if (SEPG_TopShadowColor(new_w)!= SEPG_TopShadowColor(current) ||
Packit b099d7
      (SEPG_TopShadowPixmap(new_w)!= SEPG_TopShadowPixmap(current)))
Packit b099d7
   {
Packit b099d7
      XtReleaseGC( (Widget) new_mw, SEPG_TopShadowGC(new_w));
Packit b099d7
      SEPG_TopShadowGC(new_w) =
Packit b099d7
	  _XmGetPixmapBasedGC ((Widget) new_mw, 
Packit b099d7
			       SEPG_TopShadowColor(new_w),
Packit b099d7
			       SEPG_Background(new_w),
Packit b099d7
			       SEPG_TopShadowPixmap(new_w));
Packit b099d7
      flag = TRUE;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if (SEPG_BottomShadowColor(new_w)!= SEPG_BottomShadowColor(current) ||
Packit b099d7
      (SEPG_BottomShadowPixmap(new_w)!= SEPG_BottomShadowPixmap(current)))
Packit b099d7
   {
Packit b099d7
      XtReleaseGC( (Widget) new_mw, SEPG_BottomShadowGC(new_w));
Packit b099d7
      SEPG_BottomShadowGC(new_w) =
Packit b099d7
	  _XmGetPixmapBasedGC ((Widget) new_mw, 
Packit b099d7
			       SEPG_BottomShadowColor(new_w),
Packit b099d7
			       SEPG_Background(new_w),
Packit b099d7
			       SEPG_BottomShadowPixmap(new_w));
Packit b099d7
      flag = TRUE;
Packit b099d7
   }
Packit b099d7
Packit b099d7
       
Packit b099d7
   /* SPB Why is this here? */
Packit b099d7
   /* Initialize the interesting input types */
Packit b099d7
   new_w->gadget.event_mask = XmHELP_EVENT;
Packit b099d7
Packit b099d7
   return (flag);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  Help
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
Help(
Packit b099d7
        Widget sg,
Packit b099d7
        XEvent *event )
Packit b099d7
{
Packit b099d7
   XmRowColumnWidget parent = (XmRowColumnWidget) XtParent(sg);
Packit b099d7
Packit b099d7
   if (XmIsRowColumn(parent))
Packit b099d7
   {
Packit b099d7
      if (RC_Type(parent) == XmMENU_POPUP ||
Packit b099d7
	  RC_Type(parent) == XmMENU_PULLDOWN)
Packit b099d7
      {
Packit b099d7
	 (* ((XmRowColumnWidgetClass) parent->core.widget_class)->
Packit b099d7
	  row_column_class.menuProcedures)
Packit b099d7
	     (XmMENU_POPDOWN, XtParent(sg), NULL, event, NULL);
Packit b099d7
      }
Packit b099d7
   }
Packit b099d7
Packit b099d7
   _XmSocorro( (Widget) sg, event, NULL, NULL);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  XmCreateSeparatorGadget
Packit b099d7
 *	Create an instance of a separator and return the widget id.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Widget 
Packit b099d7
XmCreateSeparatorGadget(
Packit b099d7
        Widget parent,
Packit b099d7
        char *name,
Packit b099d7
        ArgList arglist,
Packit b099d7
        Cardinal argcount )
Packit b099d7
{
Packit b099d7
   return (XtCreateWidget (name, xmSeparatorGadgetClass, 
Packit b099d7
                           parent, arglist, argcount));
Packit b099d7
}
Packit b099d7
Widget 
Packit b099d7
XmVaCreateSeparatorGadget(
Packit b099d7
        Widget parent,
Packit b099d7
        char *name,
Packit b099d7
        ...)
Packit b099d7
{
Packit b099d7
    register Widget w;
Packit b099d7
    va_list var;
Packit b099d7
    int count;
Packit b099d7
    
Packit b099d7
    Va_start(var,name);
Packit b099d7
    count = XmeCountVaListSimple(var);
Packit b099d7
    va_end(var);
Packit b099d7
Packit b099d7
    
Packit b099d7
    Va_start(var, name);
Packit b099d7
    w = XmeVLCreateWidget(name, 
Packit b099d7
                         xmSeparatorGadgetClass, 
Packit b099d7
                         parent, False, 
Packit b099d7
                         var, count);
Packit b099d7
    va_end(var);   
Packit b099d7
    return w;
Packit b099d7
    
Packit b099d7
}
Packit b099d7
Widget 
Packit b099d7
XmVaCreateManagedSeparatorGadget(
Packit b099d7
        Widget parent,
Packit b099d7
        char *name,
Packit b099d7
        ...)
Packit b099d7
{
Packit b099d7
    Widget w = NULL;
Packit b099d7
    va_list var;
Packit b099d7
    int count;
Packit b099d7
    
Packit b099d7
    Va_start(var, name);
Packit b099d7
    count = XmeCountVaListSimple(var);
Packit b099d7
    va_end(var);
Packit b099d7
    
Packit b099d7
    Va_start(var, name);
Packit b099d7
    w = XmeVLCreateWidget(name, 
Packit b099d7
                         xmSeparatorGadgetClass, 
Packit b099d7
                         parent, True, 
Packit b099d7
                         var, count);
Packit b099d7
    va_end(var);   
Packit b099d7
    return w;
Packit b099d7
    
Packit b099d7
}
Packit b099d7
Packit b099d7
/****************************************************
Packit b099d7
 *   Functions for manipulating Secondary Resources.
Packit b099d7
 *********************************************************/
Packit b099d7
/*
Packit b099d7
 * GetSeparatorGClassSecResData()
Packit b099d7
 *    Create a XmSecondaryResourceDataRec for each secondary resource;
Packit b099d7
 *    Put the pointers to these records in an array of pointers;
Packit b099d7
 *    Return the pointer to the array of pointers.
Packit b099d7
 *	client_data = Address of the structure in the class record which
Packit b099d7
 *	  represents the (template of ) the secondary data.
Packit b099d7
 */
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static Cardinal 
Packit b099d7
GetSeparatorGClassSecResData(
Packit b099d7
        WidgetClass w_class,	/* unused */
Packit b099d7
        XmSecondaryResourceData **data_rtn )
Packit b099d7
{   int arrayCount;
Packit b099d7
    XmBaseClassExt  bcePtr;
Packit b099d7
    String  resource_class, resource_name;
Packit b099d7
    XtPointer  client_data;
Packit b099d7
Packit b099d7
    _XmProcessLock();
Packit b099d7
    bcePtr = &(separatorBaseClassExtRec );
Packit b099d7
    client_data = NULL;
Packit b099d7
    resource_class = NULL;
Packit b099d7
    resource_name = NULL;
Packit b099d7
    arrayCount =
Packit b099d7
      _XmSecondaryResourceData ( bcePtr, data_rtn, client_data,
Packit b099d7
                resource_name, resource_class,
Packit b099d7
                GetSeparatorGClassSecResBase); 
Packit b099d7
    _XmProcessUnlock();
Packit b099d7
    return (arrayCount);
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * GetSeparatorGClassResBase ()
Packit b099d7
 *   retrun the address of the base of resources.
Packit b099d7
 *  If client data is the same as the address of the secndary data in the
Packit b099d7
 *	class record then send the base address of the cache-resources for this
Packit b099d7
 *	instance of the widget. 
Packit b099d7
 * Right now we  do not try to get the address of the cached_data from
Packit b099d7
 *  the Gadget component of this instance - since Gadget class does not
Packit b099d7
 *	have any cached_resources defined. If later secondary resources are
Packit b099d7
 *	defined for Gadget class then this routine will have to change.
Packit b099d7
 */
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static XtPointer 
Packit b099d7
GetSeparatorGClassSecResBase(
Packit b099d7
        Widget widget,
Packit b099d7
        XtPointer client_data )	/* unused */
Packit b099d7
{	XtPointer  widgetSecdataPtr; 
Packit b099d7
  
Packit b099d7
	_XmProcessLock();
Packit b099d7
	widgetSecdataPtr = (XtPointer) (SEPG_Cache(widget));
Packit b099d7
	_XmProcessUnlock();
Packit b099d7
Packit b099d7
Packit b099d7
    return (widgetSecdataPtr);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
static void
Packit b099d7
GetColors(Widget w, 
Packit b099d7
	  XmAccessColorData color_data)
Packit b099d7
{
Packit b099d7
    color_data->valueMask = AccessForeground | AccessBackgroundPixel |
Packit b099d7
	AccessHighlightColor | AccessTopShadowColor | AccessBottomShadowColor;
Packit b099d7
    color_data->background = SEPG_Background(w);
Packit b099d7
    color_data->foreground = SEPG_Foreground(w);
Packit b099d7
    color_data->highlight_color = SEPG_Foreground(w);
Packit b099d7
    color_data->top_shadow_color = SEPG_TopShadowColor(w);
Packit b099d7
    color_data->bottom_shadow_color = SEPG_BottomShadowColor(w);
Packit b099d7
}
Packit b099d7