|
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 |
|