|
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 REV_INFO
|
|
Packit |
b099d7 |
#ifndef lint
|
|
Packit |
b099d7 |
static char rcsid[] = "$XConsortium: ExtObject.c /main/13 1995/10/25 20:03:50 cde-sun $"
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
|
|
Packit |
b099d7 |
/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */
|
|
Packit |
b099d7 |
/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */
|
|
Packit |
b099d7 |
/* (c) Copyright 1988 MICROSOFT CORPORATION */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
b099d7 |
#include <config.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <string.h>
|
|
Packit |
b099d7 |
#include "BaseClassI.h"
|
|
Packit |
b099d7 |
#include "ExtObjectI.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 ClassInitialize(void);
|
|
Packit |
b099d7 |
static void ClassPartInitPrehook(WidgetClass c);
|
|
Packit |
b099d7 |
static void ClassPartInitPosthook(WidgetClass c);
|
|
Packit |
b099d7 |
static void ClassPartInitialize(WidgetClass c);
|
|
Packit |
b099d7 |
static void InitializePrehook(Widget req, Widget new_w,
|
|
Packit |
b099d7 |
ArgList args, Cardinal *num_args);
|
|
Packit |
b099d7 |
static void Initialize(Widget req, Widget new_w,
|
|
Packit |
b099d7 |
ArgList args, Cardinal *num_args);
|
|
Packit |
b099d7 |
static Boolean SetValuesPrehook(Widget req, Widget curr, Widget new_w,
|
|
Packit |
b099d7 |
ArgList args, Cardinal *num_args);
|
|
Packit |
b099d7 |
static void GetValuesPrehook(Widget new_w, ArgList args, Cardinal *num_args);
|
|
Packit |
b099d7 |
static Boolean SetValues(Widget old, Widget ref, Widget new_w,
|
|
Packit |
b099d7 |
ArgList args, Cardinal *num_args);
|
|
Packit |
b099d7 |
static void GetValuesHook(Widget new_w, ArgList args, Cardinal *num_args);
|
|
Packit |
b099d7 |
static void Destroy(Widget wid);
|
|
Packit |
b099d7 |
static void UseParent(Widget w, int offset, XrmValue *value);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/******** End Static Function Declarations ********/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ExtObject Resources
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
***************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define Offset(field) XtOffsetOf(struct _XmExtRec, ext.field)
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XtResource extResources[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNlogicalParent, XmCLogicalParent, XmRWidget,
|
|
Packit |
b099d7 |
sizeof (Widget), Offset (logicalParent),
|
|
Packit |
b099d7 |
XmRCallProc, (XtPointer)UseParent
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNextensionType, XmCExtensionType, XmRExtensionType,
|
|
Packit |
b099d7 |
sizeof (unsigned char), Offset (extensionType),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer)XmDEFAULT_EXTENSION
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
#undef Offset
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define XmNUM_ELEMENTS 4
|
|
Packit |
b099d7 |
#define XmNUM_BYTES 255
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
typedef struct _XmExtCache {
|
|
Packit |
b099d7 |
char data[XmNUM_BYTES];
|
|
Packit |
b099d7 |
Boolean inuse;
|
|
Packit |
b099d7 |
} XmExtCache;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
typedef union {
|
|
Packit |
b099d7 |
XmExtCache cache;
|
|
Packit |
b099d7 |
double force_alignment;
|
|
Packit |
b099d7 |
} Aligned_XmExtCache;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Aligned_XmExtCache extarray[XmNUM_ELEMENTS];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmBaseClassExtRec myBaseClassExtRec = {
|
|
Packit |
b099d7 |
NULL, /* Next extension */
|
|
Packit |
b099d7 |
NULLQUARK, /* record type XmQmotif */
|
|
Packit |
b099d7 |
XmBaseClassExtVersion, /* version */
|
|
Packit |
b099d7 |
sizeof(XmBaseClassExtRec), /* size */
|
|
Packit |
b099d7 |
InitializePrehook, /* initialize prehook */
|
|
Packit |
b099d7 |
SetValuesPrehook, /* set_values prehook */
|
|
Packit |
b099d7 |
NULL, /* initialize posthook */
|
|
Packit |
b099d7 |
NULL, /* set_values posthook */
|
|
Packit |
b099d7 |
NULL, /* secondary class */
|
|
Packit |
b099d7 |
NULL, /* creation proc */
|
|
Packit |
b099d7 |
NULL, /* getSecRes data */
|
|
Packit |
b099d7 |
{ 0 }, /* fast subclass */
|
|
Packit |
b099d7 |
GetValuesPrehook, /* get_values prehook */
|
|
Packit |
b099d7 |
NULL, /* get_values posthook */
|
|
Packit |
b099d7 |
ClassPartInitPrehook, /* class_part_prehook */
|
|
Packit |
b099d7 |
ClassPartInitPosthook, /* class_part_posthook */
|
|
Packit |
b099d7 |
NULL, /* compiled_ext_resources */
|
|
Packit |
b099d7 |
NULL, /* ext_resources */
|
|
Packit |
b099d7 |
0, /* resource_count */
|
|
Packit |
b099d7 |
FALSE /* use_sub_resources */
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
externaldef(xmextclassrec)
|
|
Packit |
b099d7 |
XmExtClassRec xmExtClassRec = {
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(WidgetClass) &objectClassRec,/* superclass */
|
|
Packit |
b099d7 |
"dynamic", /* class_name */
|
|
Packit |
b099d7 |
sizeof(XmExtRec), /* size */
|
|
Packit |
b099d7 |
ClassInitialize, /* Class Initializer */
|
|
Packit |
b099d7 |
ClassPartInitialize, /* class_part_init */
|
|
Packit |
b099d7 |
FALSE, /* Class init'ed ? */
|
|
Packit |
b099d7 |
Initialize, /* initialize */
|
|
Packit |
b099d7 |
NULL, /* initialize_notify */
|
|
Packit |
b099d7 |
NULL, /* realize */
|
|
Packit |
b099d7 |
NULL, /* actions */
|
|
Packit |
b099d7 |
0, /* num_actions */
|
|
Packit |
b099d7 |
extResources, /* resources */
|
|
Packit |
b099d7 |
XtNumber(extResources), /* resource_count */
|
|
Packit |
b099d7 |
NULLQUARK, /* xrm_class */
|
|
Packit |
b099d7 |
FALSE, /* compress_motion */
|
|
Packit |
b099d7 |
FALSE, /* compress_exposure */
|
|
Packit |
b099d7 |
FALSE, /* compress_enterleave */
|
|
Packit |
b099d7 |
FALSE, /* visible_interest */
|
|
Packit |
b099d7 |
Destroy, /* destroy */
|
|
Packit |
b099d7 |
NULL, /* resize */
|
|
Packit |
b099d7 |
NULL, /* expose */
|
|
Packit |
b099d7 |
SetValues, /* set_values */
|
|
Packit |
b099d7 |
NULL, /* set_values_hook */
|
|
Packit |
b099d7 |
NULL, /* set_values_almost */
|
|
Packit |
b099d7 |
GetValuesHook, /* get_values_hook */
|
|
Packit |
b099d7 |
NULL, /* accept_focus */
|
|
Packit |
b099d7 |
XtVersion, /* intrinsics version */
|
|
Packit |
b099d7 |
NULL, /* callback offsets */
|
|
Packit |
b099d7 |
NULL, /* tm_table */
|
|
Packit |
b099d7 |
NULL, /* query_geometry */
|
|
Packit |
b099d7 |
NULL, /* display_accelerator */
|
|
Packit |
b099d7 |
(XtPointer)&myBaseClassExtRec /* extension */
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
NULL, /* synthetic resources */
|
|
Packit |
b099d7 |
0 /* num syn resources */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
externaldef(xmextobjectclass)
|
|
Packit |
b099d7 |
WidgetClass xmExtObjectClass = (WidgetClass) (&xmExtClassRec);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
UseParent(Widget w,
|
|
Packit |
b099d7 |
int offset, /* unused */
|
|
Packit |
b099d7 |
XrmValue *value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
value->addr = (XPointer) &(w->core.parent);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ClassInitialize
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ClassInitialize(void)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
myBaseClassExtRec.record_type = XmQmotif;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ClassPartInitPrehook
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ClassPartInitPrehook(WidgetClass c)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmExtObjectClass wc = (XmExtObjectClass) c;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((WidgetClass)wc != xmExtObjectClass)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmExtObjectClass sc = (XmExtObjectClass) c->core_class.superclass;
|
|
Packit |
b099d7 |
XmBaseClassExt *scePtr = _XmGetBaseClassExtPtr(sc, XmQmotif);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* If our superclass uses subresources, then we need to
|
|
Packit |
b099d7 |
* temporarily fill it's core resource fields so that objectClass
|
|
Packit |
b099d7 |
* classPartInit will be able to find them for merging. We
|
|
Packit |
b099d7 |
* assume that we only need to set things up for the
|
|
Packit |
b099d7 |
* superclass and not any deeper ancestors.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ((*scePtr)->use_sub_resources)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
sc->object_class.resources = (*scePtr)->compiled_ext_resources;
|
|
Packit |
b099d7 |
sc->object_class.num_resources = (*scePtr)->num_ext_resources;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ClassPartInitPosthook
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ClassPartInitPosthook(WidgetClass c)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmExtObjectClass wc = (XmExtObjectClass) c;
|
|
Packit |
b099d7 |
XmBaseClassExt *wcePtr = _XmGetBaseClassExtPtr(wc, XmQmotif);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((*wcePtr) && (*wcePtr)->use_sub_resources)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Put our compiled resources back and zero out oject class so
|
|
Packit |
b099d7 |
* it's invisible to object class create processing.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
(*wcePtr)->compiled_ext_resources = wc->object_class.resources;
|
|
Packit |
b099d7 |
(*wcePtr)->num_ext_resources = wc->object_class.num_resources;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ClassPartInitialize
|
|
Packit |
b099d7 |
* Set up the inheritance mechanism for the routines exported by
|
|
Packit |
b099d7 |
* vendorShells class part.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ClassPartInitialize(WidgetClass c)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmExtObjectClass wc = (XmExtObjectClass) c;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (wc == (XmExtObjectClass)xmExtObjectClass)
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmBuildExtResources(c);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
InitializePrehook(Widget req, /* unused */
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmExtObjectClass ec = (XmExtObjectClass) XtClass(new_w);
|
|
Packit |
b099d7 |
XmBaseClassExt *wcePtr = _XmGetBaseClassExtPtr(ec, XmQmotif);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((*wcePtr)->use_sub_resources)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Get a uncompiled resource list to use with XtGetSubresources.
|
|
Packit |
b099d7 |
* We can't do this in ClassPartInitPosthook because Xt doesn't
|
|
Packit |
b099d7 |
* set class_inited at the right place and thereby mishandles
|
|
Packit |
b099d7 |
* the XtGetResourceList call.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
if ((*wcePtr)->ext_resources == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ec->object_class.resources = (*wcePtr)->compiled_ext_resources;
|
|
Packit |
b099d7 |
ec->object_class.num_resources = (*wcePtr)->num_ext_resources;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtGetResourceList((WidgetClass) ec,
|
|
Packit |
b099d7 |
&((*wcePtr)->ext_resources),
|
|
Packit |
b099d7 |
&((*wcePtr)->num_ext_resources));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtGetSubresources(XtParent(new_w),
|
|
Packit |
b099d7 |
(XtPointer)new_w,
|
|
Packit |
b099d7 |
NULL, NULL,
|
|
Packit |
b099d7 |
(*wcePtr)->ext_resources,
|
|
Packit |
b099d7 |
(*wcePtr)->num_ext_resources,
|
|
Packit |
b099d7 |
args, *num_args);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Initialize(Widget req,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmExtObject ne = (XmExtObject) new_w;
|
|
Packit |
b099d7 |
XmExtObjectClass ec = (XmExtObjectClass) XtClass(new_w);
|
|
Packit |
b099d7 |
Widget resParent = ne->ext.logicalParent;
|
|
Packit |
b099d7 |
XmWidgetExtData extData;
|
|
Packit |
b099d7 |
XmBaseClassExt *wcePtr = _XmGetBaseClassExtPtr(ec, XmQmotif);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!(*wcePtr)->use_sub_resources)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (resParent)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
extData = (XmWidgetExtData) XtCalloc(1, sizeof(XmWidgetExtDataRec));
|
|
Packit |
b099d7 |
_XmPushWidgetExtData(resParent, extData, ne->ext.extensionType);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
extData->widget = new_w;
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
extData->reqWidget = (Widget)
|
|
Packit |
b099d7 |
_XmExtObjAlloc(XtClass(new_w)->core_class.widget_size);
|
|
Packit |
b099d7 |
memcpy((char *)extData->reqWidget, (char *)req,
|
|
Packit |
b099d7 |
XtClass(new_w)->core_class.widget_size);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Convert the fields from unit values to pixel values */
|
|
Packit |
b099d7 |
_XmExtImportArgs(new_w, args, num_args);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
SetValuesPrehook(Widget req, /* unused */
|
|
Packit |
b099d7 |
Widget curr, /* unused */
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmExtObjectClass ec = (XmExtObjectClass) XtClass(new_w);
|
|
Packit |
b099d7 |
XmBaseClassExt *wcePtr = _XmGetBaseClassExtPtr(ec, XmQmotif);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((*wcePtr)->use_sub_resources)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
XtSetSubvalues((XtPointer)new_w,
|
|
Packit |
b099d7 |
(*wcePtr)->ext_resources,
|
|
Packit |
b099d7 |
(*wcePtr)->num_ext_resources,
|
|
Packit |
b099d7 |
args, *num_args);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return False;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
GetValuesPrehook(Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmExtObjectClass ec = (XmExtObjectClass) XtClass(new_w);
|
|
Packit |
b099d7 |
XmBaseClassExt *wcePtr = _XmGetBaseClassExtPtr(ec, XmQmotif);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((*wcePtr)->use_sub_resources)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
XtGetSubvalues((XtPointer)new_w,
|
|
Packit |
b099d7 |
(*wcePtr)->ext_resources,
|
|
Packit |
b099d7 |
(*wcePtr)->num_ext_resources,
|
|
Packit |
b099d7 |
args, *num_args);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SetValues
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
SetValues(Widget old,
|
|
Packit |
b099d7 |
Widget ref,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmExtObject ne = (XmExtObject) new_w;
|
|
Packit |
b099d7 |
Widget resParent = ne->ext.logicalParent;
|
|
Packit |
b099d7 |
XmWidgetExtData ext = _XmGetWidgetExtData(resParent, ne->ext.extensionType);
|
|
Packit |
b099d7 |
Cardinal extSize;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if(ext == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
#ifdef DEBUG
|
|
Packit |
b099d7 |
XmeWarning(NULL, "_XmGetWidgetExtData() returned NULL pointer.");
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
return FALSE;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (resParent)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
extSize = XtClass(new_w)->core_class.widget_size;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ext->widget = new_w;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ext->oldWidget = (Widget) _XmExtObjAlloc(extSize);
|
|
Packit |
b099d7 |
memcpy((char *)ext->oldWidget, (char *)old, extSize);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ext->reqWidget = (Widget) _XmExtObjAlloc(extSize);
|
|
Packit |
b099d7 |
memcpy((char *)ext->reqWidget, (char *)ref, extSize);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Convert the necessary fields from unit values to pixel values. */
|
|
Packit |
b099d7 |
_XmExtImportArgs(new_w, args, num_args);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return FALSE;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* GetValuesHook
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
GetValuesHook(Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmExtObject ne = (XmExtObject) new_w;
|
|
Packit |
b099d7 |
Widget resParent = ne->ext.logicalParent;
|
|
Packit |
b099d7 |
XmWidgetExtData ext;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (resParent)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ext = _XmGetWidgetExtData(resParent, ne->ext.extensionType);
|
|
Packit |
b099d7 |
if(ext == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
#ifdef DEBUG
|
|
Packit |
b099d7 |
XmeWarning(NULL, "_XmGetWidgetExtData() returned NULL pointer.");
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ext->widget = new_w;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmExtGetValuesHook(new_w, args, num_args);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Destroy
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Destroy(Widget wid)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmExtObject extObj = (XmExtObject) wid;
|
|
Packit |
b099d7 |
Widget resParent = extObj->ext.logicalParent;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (resParent)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmWidgetExtData extData;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmPopWidgetExtData(resParent, &extData, extObj->ext.extensionType);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((char *) extData);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
char *
|
|
Packit |
b099d7 |
_XmExtObjAlloc(int size)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (size <= XmNUM_BYTES)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
for (i = 0; i < XmNUM_ELEMENTS; i++)
|
|
Packit |
b099d7 |
if (! extarray[i].cache.inuse)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
extarray[i].cache.inuse = TRUE;
|
|
Packit |
b099d7 |
return extarray[i].cache.data;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return XtMalloc(size);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmExtObjFree(XtPointer element)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < XmNUM_ELEMENTS; i++)
|
|
Packit |
b099d7 |
if (extarray[i].cache.data == (char*)element)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
extarray[i].cache.inuse = FALSE;
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((char *) element);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/**********************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmBuildExtResources
|
|
Packit |
b099d7 |
* Build up the ext's synthetic
|
|
Packit |
b099d7 |
* resource processing list by combining the super classes with
|
|
Packit |
b099d7 |
* this class.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
**********************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmBuildExtResources(WidgetClass c)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmExtObjectClass wc = (XmExtObjectClass) c;
|
|
Packit |
b099d7 |
XmExtObjectClass sc;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
_XmInitializeSyntheticResources(wc->ext_class.syn_resources,
|
|
Packit |
b099d7 |
wc->ext_class.num_syn_resources);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (wc != (XmExtObjectClass) xmExtObjectClass)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
sc = (XmExtObjectClass) wc->object_class.superclass;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmBuildResources (&(wc->ext_class.syn_resources),
|
|
Packit |
b099d7 |
&(wc->ext_class.num_syn_resources),
|
|
Packit |
b099d7 |
sc->ext_class.syn_resources,
|
|
Packit |
b099d7 |
sc->ext_class.num_syn_resources);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
}
|