Blame lib/Xm/BaseClass.c

Packit b099d7
/* 
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
*/ 
Packit b099d7
/* 
Packit b099d7
 * HISTORY
Packit b099d7
*/ 
Packit b099d7
#ifdef REV_INFO
Packit b099d7
#ifndef lint
Packit b099d7
static char rcsid[] = "$TOG: BaseClass.c /main/20 1997/03/31 13:14:31 dbl $"
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */
Packit b099d7
/* (c) Copyright 1989, 1990 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
Packit b099d7
/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY  */
Packit b099d7
#define HAVE_EXTENSIONS
Packit b099d7
Packit b099d7
#ifdef HAVE_CONFIG_H
Packit b099d7
#include <config.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
Packit b099d7
#include <Xm/XmP.h>
Packit b099d7
#include <X11/ShellP.h>
Packit b099d7
#include <Xm/ExtObjectP.h>
Packit b099d7
#include <Xm/Screen.h>
Packit b099d7
#include <Xm/VendorSEP.h>
Packit b099d7
#include <Xm/XmosP.h>		/* for bzero */
Packit b099d7
#include "BaseClassI.h"
Packit b099d7
#include "CallbackI.h"
Packit b099d7
#include "DropSMgrI.h"
Packit b099d7
#include "MessagesI.h"
Packit b099d7
#include "TraversalI.h"
Packit b099d7
#include "XmI.h"
Packit b099d7
Packit b099d7
Packit b099d7
#define FIX_1392
Packit b099d7
Packit b099d7
#define MSG1	_XmMMsgBaseClass_0000
Packit b099d7
#define MSG2	_XmMMsgBaseClass_0001
Packit b099d7
Packit b099d7
Packit b099d7
#define IsBaseClass(wc) \
Packit b099d7
  ((wc == xmGadgetClass) 		||\
Packit b099d7
   (wc == xmManagerWidgetClass)		||\
Packit b099d7
   (wc == xmPrimitiveWidgetClass)	||\
Packit b099d7
   (wc == vendorShellWidgetClass) 	||\
Packit b099d7
   (wc == xmDisplayClass)		||\
Packit b099d7
   (wc == xmScreenClass)		||\
Packit b099d7
   (wc == xmExtObjectClass)		||\
Packit b099d7
   (_XmIsFastSubclass(wc, XmMENU_SHELL_BIT)))
Packit b099d7
Packit b099d7
#define isWrappedXtClass(wc) \
Packit b099d7
   ((wc == rectObjClass)	||\
Packit b099d7
    (wc == compositeWidgetClass))
Packit b099d7
Packit b099d7
	  
Packit b099d7
/*
Packit b099d7
 * These must be initialized; otherwise they are "secondary symbols" 
Packit b099d7
 * and are not actually present in the library under HP/UX 10.0.  That
Packit b099d7
 * caused exportlistgen to hide them entirely, causing links to fail.
Packit b099d7
 */
Packit b099d7
externaldef(baseclass) XrmQuark XmQmotif = NULLQUARK;
Packit b099d7
externaldef(baseclass) XmBaseClassExt *_Xm_fastPtr = NULL;
Packit b099d7
Packit b099d7
typedef struct _XmObjectClassWrapper {
Packit b099d7
    XtInitProc		initialize;
Packit b099d7
    XtSetValuesFunc	setValues;
Packit b099d7
    XtArgsProc		getValues;
Packit b099d7
    XtWidgetClassProc	classPartInit;
Packit b099d7
} XmObjectClassWrapper;
Packit b099d7
Packit b099d7
static XmObjectClassWrapper objectClassWrapper;
Packit b099d7
static XContext resizeRefWContext = 0;
Packit b099d7
static XContext geoRefWContext = 0;
Packit b099d7
Packit b099d7
#define GetRefW(dpy, context, w) \
Packit b099d7
	if (XFindContext(dpy, None, context, (XPointer *) &w))  w = NULL
Packit b099d7
#define SetRefW(dpy, context, w) \
Packit b099d7
	XSaveContext(dpy, None, context, (char *)w)
Packit b099d7
Packit b099d7
externaldef(xminheritclass) int _XmInheritClass = 0;
Packit b099d7
Packit b099d7
Packit b099d7
/********    Static Function Declarations    ********/
Packit b099d7
Packit b099d7
static XmWrapperData GetWrapperData(WidgetClass w_class);
Packit b099d7
static XContext ExtTypeToContext(unsigned char extType);
Packit b099d7
static void RealizeWrapper0(Widget w, Mask *vmask, XSetWindowAttributes *attr);
Packit b099d7
static void RealizeWrapper1(Widget w, Mask *vmask, XSetWindowAttributes *attr);
Packit b099d7
static void RealizeWrapper2(Widget w, Mask *vmask, XSetWindowAttributes *attr);
Packit b099d7
static void RealizeWrapper3(Widget w, Mask *vmask, XSetWindowAttributes *attr);
Packit b099d7
static void RealizeWrapper4(Widget w, Mask *vmask, XSetWindowAttributes *attr);
Packit b099d7
static void RealizeWrapper5(Widget w, Mask *vmask, XSetWindowAttributes *attr);
Packit b099d7
static void RealizeWrapper6(Widget w, Mask *vmask, XSetWindowAttributes *attr);
Packit b099d7
static void RealizeWrapper7(Widget w, Mask *vmask, XSetWindowAttributes *attr);
Packit b099d7
static void RealizeWrapper8(Widget w, Mask *vmask, XSetWindowAttributes *attr);
Packit b099d7
static void RealizeWrapper9(Widget w, Mask *vmask, XSetWindowAttributes *attr);
Packit b099d7
static void RealizeWrapper10(Widget w, Mask *vmask, XSetWindowAttributes *attr);
Packit b099d7
static Cardinal GetRealizeDepth(WidgetClass wc);
Packit b099d7
static void RealizeWrapper(Widget w,
Packit b099d7
			   Mask *vmask,
Packit b099d7
			   XSetWindowAttributes *attr,
Packit b099d7
			   Cardinal depth);
Packit b099d7
static void ResizeWrapper0(Widget w);
Packit b099d7
static void ResizeWrapper1(Widget w);
Packit b099d7
static void ResizeWrapper2(Widget w);
Packit b099d7
static void ResizeWrapper3(Widget w);
Packit b099d7
static void ResizeWrapper4(Widget w);
Packit b099d7
static void ResizeWrapper5(Widget w);
Packit b099d7
static void ResizeWrapper6(Widget w);
Packit b099d7
static void ResizeWrapper7(Widget w);
Packit b099d7
static void ResizeWrapper8(Widget w);
Packit b099d7
static void ResizeWrapper9(Widget w);
Packit b099d7
static void ResizeWrapper10(Widget w);
Packit b099d7
static void ResizeWrapper11(Widget w);
Packit b099d7
static void ResizeWrapper12(Widget w);
Packit b099d7
static void ResizeWrapper13(Widget w);
Packit b099d7
static Cardinal GetResizeDepth(WidgetClass wc);
Packit b099d7
static void ResizeWrapper(Widget w, int depth);
Packit b099d7
static XtGeometryResult GeometryHandlerWrapper0(Widget w,
Packit b099d7
						XtWidgetGeometry *desired,
Packit b099d7
						XtWidgetGeometry *allowed);
Packit b099d7
static XtGeometryResult GeometryHandlerWrapper1(Widget w,
Packit b099d7
						XtWidgetGeometry *desired,
Packit b099d7
						XtWidgetGeometry *allowed);
Packit b099d7
static XtGeometryResult GeometryHandlerWrapper2(Widget w,
Packit b099d7
						XtWidgetGeometry *desired,
Packit b099d7
						XtWidgetGeometry *allowed);
Packit b099d7
static XtGeometryResult GeometryHandlerWrapper3(Widget w,
Packit b099d7
						XtWidgetGeometry *desired,
Packit b099d7
						XtWidgetGeometry *allowed);
Packit b099d7
static XtGeometryResult GeometryHandlerWrapper4(Widget w,
Packit b099d7
						XtWidgetGeometry *desired,
Packit b099d7
						XtWidgetGeometry *allowed);
Packit b099d7
static XtGeometryResult GeometryHandlerWrapper5(Widget w,
Packit b099d7
						XtWidgetGeometry *desired,
Packit b099d7
						XtWidgetGeometry *allowed);
Packit b099d7
static XtGeometryResult GeometryHandlerWrapper6(Widget w,
Packit b099d7
						XtWidgetGeometry *desired,
Packit b099d7
						XtWidgetGeometry *allowed);
Packit b099d7
static XtGeometryResult GeometryHandlerWrapper7(Widget w,
Packit b099d7
						XtWidgetGeometry *desired,
Packit b099d7
						XtWidgetGeometry *allowed);
Packit b099d7
static XtGeometryResult GeometryHandlerWrapper8(Widget w,
Packit b099d7
						XtWidgetGeometry *desired,
Packit b099d7
						XtWidgetGeometry *allowed);
Packit b099d7
static XtGeometryResult GeometryHandlerWrapper9(Widget w,
Packit b099d7
						XtWidgetGeometry *desired,
Packit b099d7
						XtWidgetGeometry *allowed);
Packit b099d7
static XtGeometryResult GeometryHandlerWrapper10(Widget w,
Packit b099d7
						XtWidgetGeometry *desired,
Packit b099d7
						XtWidgetGeometry *allowed);
Packit b099d7
static XtGeometryResult GeometryHandlerWrapper11(Widget w,
Packit b099d7
						XtWidgetGeometry *desired,
Packit b099d7
						XtWidgetGeometry *allowed);
Packit b099d7
static XtGeometryResult GeometryHandlerWrapper12(Widget w,
Packit b099d7
						XtWidgetGeometry *desired,
Packit b099d7
						XtWidgetGeometry *allowed);
Packit b099d7
static Cardinal GetGeometryHandlerDepth(WidgetClass wc);
Packit b099d7
static XtGeometryResult GeometryHandlerWrapper(Widget w,
Packit b099d7
					       XtWidgetGeometry *desired,
Packit b099d7
					       XtWidgetGeometry *allowed,
Packit b099d7
					       int depth);
Packit b099d7
static XmBaseClassExt * BaseClassPartInitialize(WidgetClass wc);
Packit b099d7
static void ClassPartInitRootWrapper(WidgetClass wc);
Packit b099d7
static void ClassPartInitLeafWrapper(WidgetClass wc);
Packit b099d7
static XtResourceList * CreateIndirectionTable(XtResourceList resources,
Packit b099d7
						 Cardinal num_resources);
Packit b099d7
static void InitializeRootWrapper( 
Packit b099d7
			Widget req,
Packit b099d7
		   	Widget new_w,
Packit b099d7
			ArgList args,
Packit b099d7
			Cardinal *num_args) ;
Packit b099d7
static void InitializeLeafWrapper( 
Packit b099d7
			Widget req,
Packit b099d7
			Widget new_w,
Packit b099d7
			ArgList args,
Packit b099d7
			Cardinal *num_args,
Packit b099d7
			int depth);
Packit b099d7
static void CInitializeLeafWrapper( 
Packit b099d7
			Widget req, 
Packit b099d7
			Widget new_w, 
Packit b099d7
			ArgList args, 
Packit b099d7
			Cardinal *num_args, 
Packit b099d7
			int depth);
Packit b099d7
static Boolean SetValuesRootWrapper( 
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 Boolean SetValuesLeafWrapper(
Packit b099d7
                        Widget current,
Packit b099d7
                        Widget req,
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args,
Packit b099d7
			int depth);
Packit b099d7
static Boolean CSetValuesLeafWrapper(
Packit b099d7
                        Widget current,
Packit b099d7
                        Widget req,
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args,
Packit b099d7
			int depth);
Packit b099d7
static void GetValuesRootWrapper(
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args);
Packit b099d7
static void GetValuesLeafWrapper(
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args,
Packit b099d7
			int depth);
Packit b099d7
static int GetDepth(WidgetClass wc);
Packit b099d7
Packit b099d7
static void InitializeLeafWrapper0(
Packit b099d7
			Widget req,
Packit b099d7
			Widget new_w,
Packit b099d7
			ArgList args,
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void InitializeLeafWrapper1(
Packit b099d7
			Widget req,
Packit b099d7
			Widget new_w,
Packit b099d7
			ArgList args,
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void InitializeLeafWrapper2(
Packit b099d7
			Widget req,
Packit b099d7
			Widget new_w,
Packit b099d7
			ArgList args,
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void InitializeLeafWrapper3(
Packit b099d7
			Widget req,
Packit b099d7
			Widget new_w,
Packit b099d7
			ArgList args,
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void InitializeLeafWrapper4(
Packit b099d7
			Widget req,
Packit b099d7
			Widget new_w,
Packit b099d7
			ArgList args,
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void InitializeLeafWrapper5(
Packit b099d7
			Widget req,
Packit b099d7
			Widget new_w,
Packit b099d7
			ArgList args,
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void InitializeLeafWrapper6(
Packit b099d7
			Widget req,
Packit b099d7
			Widget new_w,
Packit b099d7
			ArgList args,
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void InitializeLeafWrapper7(
Packit b099d7
			Widget req,
Packit b099d7
			Widget new_w,
Packit b099d7
			ArgList args,
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void InitializeLeafWrapper8(
Packit b099d7
			Widget req,
Packit b099d7
			Widget new_w,
Packit b099d7
			ArgList args,
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void InitializeLeafWrapper9(
Packit b099d7
			Widget req,
Packit b099d7
			Widget new_w,
Packit b099d7
			ArgList args,
Packit b099d7
			Cardinal *num_args);
Packit b099d7
Packit b099d7
static void CInitializeLeafWrapper0(
Packit b099d7
			Widget req, 
Packit b099d7
			Widget new_w, 
Packit b099d7
			ArgList args, 
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void CInitializeLeafWrapper1(
Packit b099d7
			Widget req, 
Packit b099d7
			Widget new_w, 
Packit b099d7
			ArgList args, 
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void CInitializeLeafWrapper2(
Packit b099d7
			Widget req, 
Packit b099d7
			Widget new_w, 
Packit b099d7
			ArgList args, 
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void CInitializeLeafWrapper3(
Packit b099d7
			Widget req, 
Packit b099d7
			Widget new_w, 
Packit b099d7
			ArgList args, 
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void CInitializeLeafWrapper4(
Packit b099d7
			Widget req, 
Packit b099d7
			Widget new_w, 
Packit b099d7
			ArgList args, 
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void CInitializeLeafWrapper5(
Packit b099d7
			Widget req, 
Packit b099d7
			Widget new_w, 
Packit b099d7
			ArgList args, 
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void CInitializeLeafWrapper6(
Packit b099d7
			Widget req, 
Packit b099d7
			Widget new_w, 
Packit b099d7
			ArgList args, 
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void CInitializeLeafWrapper7(
Packit b099d7
			Widget req, 
Packit b099d7
			Widget new_w, 
Packit b099d7
			ArgList args, 
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void CInitializeLeafWrapper8(
Packit b099d7
			Widget req, 
Packit b099d7
			Widget new_w, 
Packit b099d7
			ArgList args, 
Packit b099d7
			Cardinal *num_args);
Packit b099d7
static void CInitializeLeafWrapper9(
Packit b099d7
			Widget req, 
Packit b099d7
			Widget new_w, 
Packit b099d7
			ArgList args, 
Packit b099d7
			Cardinal *num_args);
Packit b099d7
Packit b099d7
Packit b099d7
static Boolean SetValuesLeafWrapper0(
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 Boolean SetValuesLeafWrapper1(
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 Boolean SetValuesLeafWrapper2(
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 Boolean SetValuesLeafWrapper3(
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 Boolean SetValuesLeafWrapper4(
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 Boolean SetValuesLeafWrapper5(
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 Boolean SetValuesLeafWrapper6(
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 Boolean SetValuesLeafWrapper7(
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 Boolean SetValuesLeafWrapper8(
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 Boolean SetValuesLeafWrapper9(
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
static Boolean CSetValuesLeafWrapper0(
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 Boolean CSetValuesLeafWrapper1(
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 Boolean CSetValuesLeafWrapper2(
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 Boolean CSetValuesLeafWrapper3(
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 Boolean CSetValuesLeafWrapper4(
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 Boolean CSetValuesLeafWrapper5(
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 Boolean CSetValuesLeafWrapper6(
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 Boolean CSetValuesLeafWrapper7(
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 Boolean CSetValuesLeafWrapper8(
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 Boolean CSetValuesLeafWrapper9(
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
Packit b099d7
static void GetValuesLeafWrapper0(
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args);
Packit b099d7
static void GetValuesLeafWrapper1(
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args);
Packit b099d7
static void GetValuesLeafWrapper2(
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args);
Packit b099d7
static void GetValuesLeafWrapper3(
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args);
Packit b099d7
static void GetValuesLeafWrapper4(
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args);
Packit b099d7
static void GetValuesLeafWrapper5(
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args);
Packit b099d7
static void GetValuesLeafWrapper6(
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args);
Packit b099d7
static void GetValuesLeafWrapper7(
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args);
Packit b099d7
static void GetValuesLeafWrapper8(
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args);
Packit b099d7
static void GetValuesLeafWrapper9(
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args);
Packit b099d7
Packit b099d7
/********    End Static Function Declarations    ********/
Packit b099d7
 
Packit b099d7

Packit b099d7
XmGenericClassExt * 
Packit b099d7
_XmGetClassExtensionPtr(
Packit b099d7
        XmGenericClassExt *listHeadPtr,
Packit b099d7
        XrmQuark owner )
Packit b099d7
{
Packit b099d7
  XmGenericClassExt *lclPtr = listHeadPtr;
Packit b099d7
  
Packit b099d7
#ifdef DEBUG    
Packit b099d7
  if (!lclPtr) 
Packit b099d7
    {
Packit b099d7
      XmeWarning(NULL, "_XmGetClassExtensionPtr: invalid class ext pointer");
Packit b099d7
      return NULL;
Packit b099d7
    }
Packit b099d7
#endif /* DEBUG */
Packit b099d7
Packit b099d7
  while (lclPtr && *lclPtr && ((*lclPtr)->record_type != owner))
Packit b099d7
    lclPtr = (XmGenericClassExt *) &((*lclPtr)->next_extension);
Packit b099d7
  
Packit b099d7
  return lclPtr;
Packit b099d7
}
Packit b099d7

Packit b099d7
static XmWrapperData 
Packit b099d7
GetWrapperData(
Packit b099d7
        WidgetClass w_class )
Packit b099d7
{
Packit b099d7
  XmBaseClassExt *wcePtr;
Packit b099d7
  
Packit b099d7
  wcePtr = _XmGetBaseClassExtPtr( w_class, XmQmotif);
Packit b099d7
  
Packit b099d7
  if (!*wcePtr)
Packit b099d7
    {
Packit b099d7
      *wcePtr = (XmBaseClassExt) XtCalloc(1, sizeof(XmBaseClassExtRec));
Packit b099d7
      (*wcePtr)->next_extension = NULL;
Packit b099d7
      (*wcePtr)->record_type 	= XmQmotif;
Packit b099d7
      (*wcePtr)->version	= XmBaseClassExtVersion;
Packit b099d7
      (*wcePtr)->record_size	= sizeof( XmBaseClassExtRec);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  if ((*wcePtr)->version < XmBaseClassExtVersion)
Packit b099d7
    return NULL;
Packit b099d7
Packit b099d7
  if (!((*wcePtr)->wrapperData))
Packit b099d7
    (*wcePtr)->wrapperData = 
Packit b099d7
      (XmWrapperData) XtCalloc(1, sizeof(XmWrapperDataRec));
Packit b099d7
Packit b099d7
  return (*wcePtr)->wrapperData;
Packit b099d7
}
Packit b099d7

Packit b099d7
Packit b099d7
typedef struct _ExtToContextRec {
Packit b099d7
    unsigned char	extType;
Packit b099d7
    XContext		context;
Packit b099d7
} ExtToContextRec, *ExtToContext;
Packit b099d7
Packit b099d7
static XContext 
Packit b099d7
ExtTypeToContext(
Packit b099d7
        unsigned char extType )
Packit b099d7
{
Packit b099d7
  static ExtToContextRec extToContextMap[16];
Packit b099d7
  Cardinal		 i;
Packit b099d7
  ExtToContext		 curr;
Packit b099d7
  XContext		 context = (XContext) NULL;
Packit b099d7
  
Packit b099d7
  _XmProcessLock();
Packit b099d7
  for (i = 0, curr = &extToContextMap[0];
Packit b099d7
       i < XtNumber(extToContextMap) && !context;
Packit b099d7
       i++, curr++)
Packit b099d7
    {
Packit b099d7
      if (curr->extType == extType)
Packit b099d7
	context = curr->context;
Packit b099d7
      else if (!curr->extType)
Packit b099d7
	{
Packit b099d7
	  curr->extType = extType;
Packit b099d7
	  context = curr->context = XUniqueContext();
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
  _XmProcessUnlock();
Packit b099d7
Packit b099d7
  if (!context)
Packit b099d7
    XmeWarning(NULL, MSG1);
Packit b099d7
Packit b099d7
  return context;
Packit b099d7
}
Packit b099d7
	 
Packit b099d7
typedef struct _XmAssocDataRec {
Packit b099d7
    XtPointer			data;
Packit b099d7
    struct _XmAssocDataRec	*next;
Packit b099d7
} XmAssocDataRec, *XmAssocData;
Packit b099d7
Packit b099d7
void 
Packit b099d7
_XmPushWidgetExtData(
Packit b099d7
        Widget widget,
Packit b099d7
        XmWidgetExtData data,
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
        unsigned int extType )
Packit b099d7
#else
Packit b099d7
        unsigned char extType )
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
{
Packit b099d7
  XmAssocData  newData;
Packit b099d7
  XmAssocData  assocData = NULL;
Packit b099d7
  XmAssocData *assocDataPtr;
Packit b099d7
  Boolean      empty;
Packit b099d7
  XContext     widgetExtContext = ExtTypeToContext(extType);
Packit b099d7
  
Packit b099d7
  newData = (XmAssocData) XtCalloc(1, sizeof(XmAssocDataRec));
Packit b099d7
  
Packit b099d7
  newData->data = (XtPointer)data;
Packit b099d7
  
Packit b099d7
  empty = XFindContext(XtDisplay(widget), (Window) widget,
Packit b099d7
		       widgetExtContext, (char **) &assocData);
Packit b099d7
  
Packit b099d7
  assocDataPtr = &assocData;
Packit b099d7
  while (*assocDataPtr)
Packit b099d7
    assocDataPtr = &((*assocDataPtr)->next);
Packit b099d7
  
Packit b099d7
  *assocDataPtr = newData;
Packit b099d7
  
Packit b099d7
  if (empty)
Packit b099d7
    XSaveContext(XtDisplay(widget), (Window) widget,
Packit b099d7
		 widgetExtContext, (XPointer) assocData);
Packit b099d7
}
Packit b099d7

Packit b099d7
void
Packit b099d7
_XmPopWidgetExtData(
Packit b099d7
        Widget widget,
Packit b099d7
        XmWidgetExtData *dataRtn,
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
        unsigned int extType )
Packit b099d7
#else
Packit b099d7
        unsigned char extType )
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
{
Packit b099d7
  XmAssocData  assocData = NULL;
Packit b099d7
  XmAssocData *assocDataPtr;
Packit b099d7
  XContext     widgetExtContext = ExtTypeToContext(extType);
Packit b099d7
  
Packit b099d7
  /* Initialize the return parameter. */
Packit b099d7
  *dataRtn = NULL;
Packit b099d7
Packit b099d7
  if (XFindContext(XtDisplay(widget),
Packit b099d7
		   (Window) widget,
Packit b099d7
		   widgetExtContext,
Packit b099d7
		   (char **) &assocData))
Packit b099d7
    {
Packit b099d7
#ifdef DEBUG
Packit b099d7
      XmeWarning(NULL, MSG2);
Packit b099d7
#endif 
Packit b099d7
      return;
Packit b099d7
    }
Packit b099d7
  
Packit b099d7
  assocDataPtr = &assocData; 
Packit b099d7
  while ((*assocDataPtr) && (*assocDataPtr)->next)
Packit b099d7
    assocDataPtr = &((*assocDataPtr)->next);
Packit b099d7
  
Packit b099d7
  if (*assocDataPtr == assocData)
Packit b099d7
    XDeleteContext(XtDisplay(widget), (Window)widget, widgetExtContext);
Packit b099d7
Packit b099d7
  if (*assocDataPtr) 
Packit b099d7
    {
Packit b099d7
      *dataRtn = (XmWidgetExtData) (*assocDataPtr)->data;
Packit b099d7
      XtFree((char *) *assocDataPtr);
Packit b099d7
      *assocDataPtr = NULL;
Packit b099d7
    }
Packit b099d7
}
Packit b099d7

Packit b099d7
XmWidgetExtData 
Packit b099d7
_XmGetWidgetExtData(
Packit b099d7
        Widget widget,
Packit b099d7
#if NeedWidePrototypes
Packit b099d7
        unsigned int extType )
Packit b099d7
#else
Packit b099d7
        unsigned char extType )
Packit b099d7
#endif /* NeedWidePrototypes */
Packit b099d7
{
Packit b099d7
  XmAssocData  assocData = NULL;
Packit b099d7
  XmAssocData *assocDataPtr;
Packit b099d7
  XContext     widgetExtContext = ExtTypeToContext(extType);
Packit b099d7
  
Packit b099d7
  
Packit b099d7
  if ((XFindContext(XtDisplay(widget),
Packit b099d7
		    (Window) widget,
Packit b099d7
		    widgetExtContext,
Packit b099d7
		    (char **) &assocData)))
Packit b099d7
    {
Packit b099d7
#ifdef DEBUG
Packit b099d7
      XmeWarning(NULL, "no extension data on stack");
Packit b099d7
#endif /* DEBUG */
Packit b099d7
      return NULL;
Packit b099d7
    }
Packit b099d7
  else
Packit b099d7
    {
Packit b099d7
      assocDataPtr = &assocData; 
Packit b099d7
      while ((*assocDataPtr)->next)
Packit b099d7
	assocDataPtr = &((*assocDataPtr)->next);
Packit b099d7
      
Packit b099d7
      return (XmWidgetExtData) (*assocDataPtr)->data;
Packit b099d7
    }
Packit b099d7
}
Packit b099d7
 
Packit b099d7

Packit b099d7
Boolean
Packit b099d7
_XmIsSubclassOf(
Packit b099d7
	WidgetClass wc,
Packit b099d7
	WidgetClass sc)
Packit b099d7
{
Packit b099d7
  WidgetClass p = wc;
Packit b099d7
  
Packit b099d7
  while ((p) && (p != sc))
Packit b099d7
    p = p->core_class.superclass;
Packit b099d7
Packit b099d7
  return (p == sc);
Packit b099d7
}
Packit b099d7

Packit b099d7
/*********************************************************************
Packit b099d7
 *
Packit b099d7
 *  RealizeWrappers for vendorShell
Packit b099d7
 *
Packit b099d7
 *********************************************************************/
Packit b099d7
Packit b099d7
static void 
Packit b099d7
RealizeWrapper0(
Packit b099d7
        Widget w,
Packit b099d7
        Mask *vmask,
Packit b099d7
        XSetWindowAttributes *attr )
Packit b099d7
{
Packit b099d7
  RealizeWrapper(w, vmask, attr, 0);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
RealizeWrapper1(
Packit b099d7
        Widget w,
Packit b099d7
        Mask *vmask,
Packit b099d7
        XSetWindowAttributes *attr )
Packit b099d7
{
Packit b099d7
  RealizeWrapper(w, vmask, attr, 1);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
RealizeWrapper2(
Packit b099d7
        Widget w,
Packit b099d7
        Mask *vmask,
Packit b099d7
        XSetWindowAttributes *attr )
Packit b099d7
{
Packit b099d7
  RealizeWrapper(w, vmask, attr, 2);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
RealizeWrapper3(
Packit b099d7
        Widget w,
Packit b099d7
        Mask *vmask,
Packit b099d7
        XSetWindowAttributes *attr )
Packit b099d7
{
Packit b099d7
  RealizeWrapper(w, vmask, attr, 3);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
RealizeWrapper4(
Packit b099d7
        Widget w,
Packit b099d7
        Mask *vmask,
Packit b099d7
        XSetWindowAttributes *attr )
Packit b099d7
{
Packit b099d7
  RealizeWrapper(w, vmask, attr, 4);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
RealizeWrapper5(
Packit b099d7
        Widget w,
Packit b099d7
        Mask *vmask,
Packit b099d7
        XSetWindowAttributes *attr )
Packit b099d7
{
Packit b099d7
  RealizeWrapper(w, vmask, attr, 5);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
RealizeWrapper6(
Packit b099d7
        Widget w,
Packit b099d7
        Mask *vmask,
Packit b099d7
        XSetWindowAttributes *attr )
Packit b099d7
{
Packit b099d7
  RealizeWrapper(w, vmask, attr, 6);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
RealizeWrapper7(
Packit b099d7
        Widget w,
Packit b099d7
        Mask *vmask,
Packit b099d7
        XSetWindowAttributes *attr )
Packit b099d7
{
Packit b099d7
  RealizeWrapper(w, vmask, attr, 7);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
RealizeWrapper8(
Packit b099d7
        Widget w,
Packit b099d7
        Mask *vmask,
Packit b099d7
        XSetWindowAttributes *attr )
Packit b099d7
{
Packit b099d7
  RealizeWrapper(w, vmask, attr, 8);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
RealizeWrapper9(
Packit b099d7
        Widget w,
Packit b099d7
        Mask *vmask,
Packit b099d7
        XSetWindowAttributes *attr )
Packit b099d7
{
Packit b099d7
  RealizeWrapper(w, vmask, attr, 9);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
RealizeWrapper10(
Packit b099d7
        Widget w,
Packit b099d7
        Mask *vmask,
Packit b099d7
        XSetWindowAttributes *attr )
Packit b099d7
{
Packit b099d7
  RealizeWrapper(w, vmask, attr, 10);
Packit b099d7
}
Packit b099d7
Packit b099d7
/* Used to be XmConst, but this was not linking on Solaris */
Packit b099d7
static XtRealizeProc realizeWrappers[] = {
Packit b099d7
    RealizeWrapper0,
Packit b099d7
    RealizeWrapper1,
Packit b099d7
    RealizeWrapper2,
Packit b099d7
    RealizeWrapper3,
Packit b099d7
    RealizeWrapper4,
Packit b099d7
    RealizeWrapper5,
Packit b099d7
    RealizeWrapper6,
Packit b099d7
    RealizeWrapper7,
Packit b099d7
    RealizeWrapper8,
Packit b099d7
    RealizeWrapper9,
Packit b099d7
    RealizeWrapper10
Packit b099d7
};
Packit b099d7

Packit b099d7
static Cardinal 
Packit b099d7
GetRealizeDepth(
Packit b099d7
        WidgetClass wc )
Packit b099d7
{
Packit b099d7
  Cardinal i;
Packit b099d7
  
Packit b099d7
  i = 0; 
Packit b099d7
  while (wc && wc != vendorShellWidgetClass) 
Packit b099d7
    {
Packit b099d7
      i++;
Packit b099d7
      wc = wc->core_class.superclass;
Packit b099d7
    }
Packit b099d7
  
Packit b099d7
  if (wc)
Packit b099d7
    return i;
Packit b099d7
#ifdef DEBUG
Packit b099d7
  else
Packit b099d7
    XtError("bad class for shell realize");
Packit b099d7
#endif /* DEBUG */
Packit b099d7
Packit b099d7
  return 0;
Packit b099d7
}
Packit b099d7

Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  RealizeWrapper
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Packit b099d7
static void 
Packit b099d7
RealizeWrapper(
Packit b099d7
        Widget w,
Packit b099d7
        Mask *vmask,
Packit b099d7
        XSetWindowAttributes *attr,
Packit b099d7
        Cardinal depth )
Packit b099d7
{
Packit b099d7
  if (XmIsVendorShell(w))
Packit b099d7
    {
Packit b099d7
      XmWidgetExtData	extData;
Packit b099d7
      WidgetClass	wc = XtClass(w);
Packit b099d7
      XmWrapperData	wrapperData;
Packit b099d7
      XtRealizeProc 	realize;
Packit b099d7
      Cardinal		leafDepth = GetRealizeDepth(wc);
Packit b099d7
      Cardinal		depthDiff = leafDepth - depth;
Packit b099d7
Packit b099d7
      while (depthDiff) 
Packit b099d7
	{
Packit b099d7
	  depthDiff--;
Packit b099d7
	  wc = wc->core_class.superclass;
Packit b099d7
	}
Packit b099d7
      
Packit b099d7
      _XmProcessLock();
Packit b099d7
      wrapperData = GetWrapperData(wc);
Packit b099d7
      realize = wrapperData ? wrapperData->realize : NULL;
Packit b099d7
      _XmProcessUnlock();
Packit b099d7
      if (realize)
Packit b099d7
	(*realize)(w, vmask, attr);
Packit b099d7
      
Packit b099d7
#if 0
Packit b099d7
      /* DRK 6/20/94 -- This change breaks our test environment; when
Packit b099d7
       *	present the normal shell isn't added to the grab list
Packit b099d7
       *	because VendorExtRealize is never called.  It used to
Packit b099d7
       *	be called for the ApplicationShell class.
Packit b099d7
       */
Packit b099d7
Packit b099d7
      /*
Packit b099d7
       * CR 9266: Only call the RealizeCallback if we're doing the
Packit b099d7
       * VendorShell class level. Do not call multiple times for
Packit b099d7
       * VendorShell subclasses.
Packit b099d7
       */
Packit b099d7
      if ((extData = _XmGetWidgetExtData(w, XmSHELL_EXTENSION)) &&
Packit b099d7
	  (extData->widget) && wc == vendorShellWidgetClass)
Packit b099d7
#else
Packit b099d7
      /*
Packit b099d7
       * CR 3353 - Avoid calling the RealizeCallback twice for DialogShells 
Packit b099d7
       *	by checking the WidgetClass name.  If it is XmDialogShell,
Packit b099d7
       *	do not call the callback (it will be called prior when
Packit b099d7
       *	the WidgetClass is VendorShell).
Packit b099d7
       */
Packit b099d7
      if ((extData = _XmGetWidgetExtData(w, XmSHELL_EXTENSION)) &&
Packit b099d7
	  (extData->widget) && 
Packit b099d7
	  strcmp(wc->core_class.class_name, "XmDialogShell"))
Packit b099d7
#endif
Packit b099d7
	{
Packit b099d7
	  _XmCallCallbackList(extData->widget, 
Packit b099d7
			      ((XmVendorShellExtObject)
Packit b099d7
			       (extData->widget))->vendor.realize_callback,
Packit b099d7
			      NULL);
Packit b099d7
	}
Packit b099d7
#ifdef DEBUG
Packit b099d7
      else
Packit b099d7
	XmeWarning(NULL, "we only support realize callbacks on shells");
Packit b099d7
#endif /* DEBUG */
Packit b099d7
    }
Packit b099d7
}
Packit b099d7

Packit b099d7
/*********************************************************************
Packit b099d7
 *
Packit b099d7
 *  ResizeWrappers for rectObj
Packit b099d7
 *
Packit b099d7
 *********************************************************************/
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ResizeWrapper0(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  ResizeWrapper(w, 0);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ResizeWrapper1(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  ResizeWrapper(w, 1);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ResizeWrapper2(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  ResizeWrapper(w, 2);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ResizeWrapper3(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  ResizeWrapper(w, 3);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ResizeWrapper4(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  ResizeWrapper(w, 4);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ResizeWrapper5(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  ResizeWrapper(w, 5);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ResizeWrapper6(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  ResizeWrapper(w, 6);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ResizeWrapper7(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  ResizeWrapper(w, 7);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ResizeWrapper8(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  ResizeWrapper(w, 8);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ResizeWrapper9(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  ResizeWrapper(w, 9);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ResizeWrapper10(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  ResizeWrapper(w, 10);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ResizeWrapper11(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  ResizeWrapper(w, 11);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ResizeWrapper12(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  ResizeWrapper(w, 12);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ResizeWrapper13(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
  ResizeWrapper(w, 13);
Packit b099d7
}
Packit b099d7
Packit b099d7
/* Used to be XmConst, but this was not linking on Solaris */
Packit b099d7
static XtWidgetProc resizeWrappers[] = {
Packit b099d7
    ResizeWrapper0,
Packit b099d7
    ResizeWrapper1,
Packit b099d7
    ResizeWrapper2,
Packit b099d7
    ResizeWrapper3,
Packit b099d7
    ResizeWrapper4,
Packit b099d7
    ResizeWrapper5,
Packit b099d7
    ResizeWrapper6,
Packit b099d7
    ResizeWrapper7,
Packit b099d7
    ResizeWrapper8,
Packit b099d7
    ResizeWrapper9,
Packit b099d7
    ResizeWrapper10,
Packit b099d7
    ResizeWrapper11,
Packit b099d7
    ResizeWrapper12,
Packit b099d7
    ResizeWrapper13
Packit b099d7
};
Packit b099d7

Packit b099d7
static Cardinal 
Packit b099d7
GetResizeDepth(
Packit b099d7
        WidgetClass wc )
Packit b099d7
{
Packit b099d7
  Cardinal i;
Packit b099d7
  
Packit b099d7
  i = 0; 
Packit b099d7
  while (wc && wc != rectObjClass) 
Packit b099d7
    {
Packit b099d7
      i++;
Packit b099d7
      wc = wc->core_class.superclass;
Packit b099d7
    }
Packit b099d7
  
Packit b099d7
  if (wc)
Packit b099d7
    return i;
Packit b099d7
Packit b099d7
  return 0;
Packit b099d7
}
Packit b099d7

Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ResizeWrapper
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
Packit b099d7
static void 
Packit b099d7
ResizeWrapper(
Packit b099d7
        Widget w,
Packit b099d7
	int depth )
Packit b099d7
{
Packit b099d7
  Widget refW = NULL;
Packit b099d7
  WidgetClass	wc = XtClass(w);
Packit b099d7
  Display *dpy = XtDisplay(w);
Packit b099d7
  XmWrapperData	wrapperData;
Packit b099d7
  XtWidgetProc  resize;
Packit b099d7
  Cardinal	leafDepth = GetResizeDepth(wc);
Packit b099d7
  Cardinal	depthDiff = leafDepth - depth;
Packit b099d7
  Boolean	call_navig_resize = FALSE;
Packit b099d7
  
Packit b099d7
  /* Call _XmNavigResize() only once per resize event, so nested
Packit b099d7
   *	resize calls are completed before evaluating the status of
Packit b099d7
   *	the focus widget.  Only check for lost focus in
Packit b099d7
   *	response to resize events from a Shell; otherwise
Packit b099d7
   *	_XmNavigResize may (prematurely) determine that the
Packit b099d7
   *	focus widget is no longer traversable before the
Packit b099d7
   *	new layout is complete.
Packit b099d7
   */
Packit b099d7
  if (XtParent(w) && XtIsShell(XtParent(w)))
Packit b099d7
    call_navig_resize = TRUE;
Packit b099d7
Packit b099d7
  while (depthDiff) 
Packit b099d7
    {
Packit b099d7
      depthDiff--;
Packit b099d7
      wc = wc->core_class.superclass;
Packit b099d7
    }
Packit b099d7
  
Packit b099d7
  GetRefW(dpy, resizeRefWContext, refW);
Packit b099d7
  _XmProcessLock();
Packit b099d7
  wrapperData = GetWrapperData(wc);
Packit b099d7
  resize = wrapperData ? wrapperData->resize: NULL;
Packit b099d7
  _XmProcessUnlock();
Packit b099d7
  
Packit b099d7
  if (resize)
Packit b099d7
    {
Packit b099d7
      if ((refW == NULL) && (_XmDropSiteWrapperCandidate(w)))
Packit b099d7
	{
Packit b099d7
	  refW = w;
Packit b099d7
	  SetRefW(dpy, resizeRefWContext, refW);
Packit b099d7
	  XmDropSiteStartUpdate(refW);
Packit b099d7
	  (*resize)(w);
Packit b099d7
	  XmDropSiteEndUpdate(refW);
Packit b099d7
	  refW = NULL;
Packit b099d7
	  SetRefW(dpy, resizeRefWContext, refW);
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	(*resize)(w);
Packit b099d7
    }
Packit b099d7
Packit b099d7
  if (call_navig_resize)
Packit b099d7
    _XmNavigResize( w);
Packit b099d7
}
Packit b099d7

Packit b099d7
/*********************************************************************
Packit b099d7
 *
Packit b099d7
 *  GeometryHandlerWrappers for composite
Packit b099d7
 *
Packit b099d7
 *********************************************************************/
Packit b099d7
Packit b099d7
static XtGeometryResult 
Packit b099d7
GeometryHandlerWrapper0(
Packit b099d7
        Widget w,
Packit b099d7
	XtWidgetGeometry *desired,
Packit b099d7
	XtWidgetGeometry *allowed )
Packit b099d7
{
Packit b099d7
  return GeometryHandlerWrapper(w, desired, allowed, 0);
Packit b099d7
}
Packit b099d7
Packit b099d7
static XtGeometryResult 
Packit b099d7
GeometryHandlerWrapper1(
Packit b099d7
        Widget w,
Packit b099d7
	XtWidgetGeometry *desired,
Packit b099d7
	XtWidgetGeometry *allowed )
Packit b099d7
{
Packit b099d7
  return GeometryHandlerWrapper(w, desired, allowed, 1);
Packit b099d7
}
Packit b099d7
Packit b099d7
static XtGeometryResult 
Packit b099d7
GeometryHandlerWrapper2(
Packit b099d7
        Widget w,
Packit b099d7
	XtWidgetGeometry *desired,
Packit b099d7
	XtWidgetGeometry *allowed )
Packit b099d7
{
Packit b099d7
  return GeometryHandlerWrapper(w, desired, allowed, 2);
Packit b099d7
}
Packit b099d7
Packit b099d7
static XtGeometryResult 
Packit b099d7
GeometryHandlerWrapper3(
Packit b099d7
        Widget w,
Packit b099d7
	XtWidgetGeometry *desired,
Packit b099d7
	XtWidgetGeometry *allowed )
Packit b099d7
{
Packit b099d7
  return GeometryHandlerWrapper(w, desired, allowed, 3);
Packit b099d7
}
Packit b099d7
Packit b099d7
static XtGeometryResult 
Packit b099d7
GeometryHandlerWrapper4(
Packit b099d7
        Widget w,
Packit b099d7
	XtWidgetGeometry *desired,
Packit b099d7
	XtWidgetGeometry *allowed )
Packit b099d7
{
Packit b099d7
  return GeometryHandlerWrapper(w, desired, allowed, 4);
Packit b099d7
}
Packit b099d7
Packit b099d7
static XtGeometryResult 
Packit b099d7
GeometryHandlerWrapper5(
Packit b099d7
        Widget w,
Packit b099d7
	XtWidgetGeometry *desired,
Packit b099d7
	XtWidgetGeometry *allowed )
Packit b099d7
{
Packit b099d7
  return GeometryHandlerWrapper(w, desired, allowed, 5);
Packit b099d7
}
Packit b099d7
Packit b099d7
static XtGeometryResult 
Packit b099d7
GeometryHandlerWrapper6(
Packit b099d7
        Widget w,
Packit b099d7
	XtWidgetGeometry *desired,
Packit b099d7
	XtWidgetGeometry *allowed )
Packit b099d7
{
Packit b099d7
  return GeometryHandlerWrapper(w, desired, allowed, 6);
Packit b099d7
}
Packit b099d7
Packit b099d7
static XtGeometryResult 
Packit b099d7
GeometryHandlerWrapper7(
Packit b099d7
        Widget w,
Packit b099d7
	XtWidgetGeometry *desired,
Packit b099d7
	XtWidgetGeometry *allowed )
Packit b099d7
{
Packit b099d7
  return GeometryHandlerWrapper(w, desired, allowed, 7);
Packit b099d7
}
Packit b099d7
Packit b099d7
static XtGeometryResult 
Packit b099d7
GeometryHandlerWrapper8(
Packit b099d7
        Widget w,
Packit b099d7
	XtWidgetGeometry *desired,
Packit b099d7
	XtWidgetGeometry *allowed )
Packit b099d7
{
Packit b099d7
  return GeometryHandlerWrapper(w, desired, allowed, 8);
Packit b099d7
}
Packit b099d7
Packit b099d7
static XtGeometryResult 
Packit b099d7
GeometryHandlerWrapper9(
Packit b099d7
        Widget w,
Packit b099d7
	XtWidgetGeometry *desired,
Packit b099d7
	XtWidgetGeometry *allowed )
Packit b099d7
{
Packit b099d7
  return GeometryHandlerWrapper(w, desired, allowed, 9);
Packit b099d7
}
Packit b099d7
Packit b099d7
static XtGeometryResult 
Packit b099d7
GeometryHandlerWrapper10(
Packit b099d7
        Widget w,
Packit b099d7
	XtWidgetGeometry *desired,
Packit b099d7
	XtWidgetGeometry *allowed )
Packit b099d7
{
Packit b099d7
  return GeometryHandlerWrapper(w, desired, allowed, 10);
Packit b099d7
}
Packit b099d7
Packit b099d7
static XtGeometryResult 
Packit b099d7
GeometryHandlerWrapper11(
Packit b099d7
        Widget w,
Packit b099d7
	XtWidgetGeometry *desired,
Packit b099d7
	XtWidgetGeometry *allowed )
Packit b099d7
{
Packit b099d7
  return GeometryHandlerWrapper(w, desired, allowed, 11);
Packit b099d7
}
Packit b099d7
Packit b099d7
static XtGeometryResult 
Packit b099d7
GeometryHandlerWrapper12(
Packit b099d7
        Widget w,
Packit b099d7
	XtWidgetGeometry *desired,
Packit b099d7
	XtWidgetGeometry *allowed )
Packit b099d7
{
Packit b099d7
  return GeometryHandlerWrapper(w, desired, allowed, 12);
Packit b099d7
}
Packit b099d7
Packit b099d7
/* Used to be XmConst, but this was not linkking on Solaris */
Packit b099d7
static XtGeometryHandler geometryHandlerWrappers[] = {
Packit b099d7
    GeometryHandlerWrapper0,
Packit b099d7
    GeometryHandlerWrapper1,
Packit b099d7
    GeometryHandlerWrapper2,
Packit b099d7
    GeometryHandlerWrapper3,
Packit b099d7
    GeometryHandlerWrapper4,
Packit b099d7
    GeometryHandlerWrapper5,
Packit b099d7
    GeometryHandlerWrapper6,
Packit b099d7
    GeometryHandlerWrapper7,
Packit b099d7
    GeometryHandlerWrapper8,
Packit b099d7
    GeometryHandlerWrapper9,
Packit b099d7
    GeometryHandlerWrapper10,
Packit b099d7
    GeometryHandlerWrapper11,
Packit b099d7
    GeometryHandlerWrapper12
Packit b099d7
};
Packit b099d7

Packit b099d7
static Cardinal 
Packit b099d7
GetGeometryHandlerDepth(
Packit b099d7
        WidgetClass wc )
Packit b099d7
{
Packit b099d7
  Cardinal i;
Packit b099d7
  
Packit b099d7
  i = 0; 
Packit b099d7
  while (wc && wc != rectObjClass) 
Packit b099d7
    {
Packit b099d7
      i++;
Packit b099d7
      wc = wc->core_class.superclass;
Packit b099d7
    }
Packit b099d7
  
Packit b099d7
  if (wc)
Packit b099d7
    return i;
Packit b099d7
Packit b099d7
  return 0;
Packit b099d7
}
Packit b099d7

Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  GeometryHandlerWrapper
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static XtGeometryResult 
Packit b099d7
GeometryHandlerWrapper(
Packit b099d7
        Widget w,
Packit b099d7
	XtWidgetGeometry *desired,
Packit b099d7
	XtWidgetGeometry *allowed,
Packit b099d7
	int depth)
Packit b099d7
{
Packit b099d7
  Widget 	    refW = NULL;
Packit b099d7
  XtGeometryResult  result = XtGeometryNo;
Packit b099d7
  Widget	    parent = XtParent(w);
Packit b099d7
  WidgetClass	    wc = XtClass(parent);
Packit b099d7
  Display 	    *dpy = XtDisplay(w);
Packit b099d7
  XmWrapperData	    wrapperData;
Packit b099d7
  XtGeometryHandler geometry_manager;
Packit b099d7
  Cardinal	    leafDepth = GetGeometryHandlerDepth(wc);
Packit b099d7
  Cardinal	    depthDiff = leafDepth - depth;
Packit b099d7
  
Packit b099d7
  while (depthDiff) 
Packit b099d7
    {
Packit b099d7
      depthDiff--;
Packit b099d7
      wc = wc->core_class.superclass;
Packit b099d7
    }
Packit b099d7
  
Packit b099d7
  GetRefW(dpy, geoRefWContext, refW);
Packit b099d7
  _XmProcessLock();
Packit b099d7
  wrapperData = GetWrapperData(wc);
Packit b099d7
  geometry_manager = wrapperData ? wrapperData->geometry_manager: NULL;
Packit b099d7
  _XmProcessUnlock();
Packit b099d7
Packit b099d7
  if (geometry_manager)
Packit b099d7
    {
Packit b099d7
      if ((refW == NULL) && (_XmDropSiteWrapperCandidate(w)))
Packit b099d7
	{
Packit b099d7
	  refW = w;
Packit b099d7
	  SetRefW(dpy, geoRefWContext, refW);
Packit b099d7
	  XmDropSiteStartUpdate(refW);
Packit b099d7
	  result = (*geometry_manager) (w, desired, allowed);
Packit b099d7
	  XmDropSiteEndUpdate(refW);
Packit b099d7
	  refW = NULL;
Packit b099d7
	  SetRefW(dpy, geoRefWContext, refW);
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	result = (*geometry_manager) (w, desired, allowed);
Packit b099d7
    }
Packit b099d7
  
Packit b099d7
  return result;
Packit b099d7
}
Packit b099d7

Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  BaseClassPartInitialize
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static XmBaseClassExt * 
Packit b099d7
BaseClassPartInitialize(
Packit b099d7
        WidgetClass wc )
Packit b099d7
{
Packit b099d7
  XmBaseClassExt	*wcePtr, *scePtr;
Packit b099d7
  Cardinal		i;
Packit b099d7
  Boolean		inited;
Packit b099d7
  XmWrapperData		wcData, scData;
Packit b099d7
  Boolean		isBaseClass = IsBaseClass(wc);
Packit b099d7
Packit b099d7
  /* 
Packit b099d7
   * This routine is called out of the ClassPartInitRootWrapper. It
Packit b099d7
   * needs to make sure that this is a Motif class and if it is,
Packit b099d7
   * then to initialize it.  We assume that the base classes always
Packit b099d7
   * have a static initializer !!!
Packit b099d7
   */
Packit b099d7
  
Packit b099d7
  wcePtr = _XmGetBaseClassExtPtr(wc, XmQmotif);
Packit b099d7
  scePtr = _XmGetBaseClassExtPtr(wc->core_class.superclass, XmQmotif);
Packit b099d7
  
Packit b099d7
  if (!isBaseClass && 
Packit b099d7
      !isWrappedXtClass(wc) &&
Packit b099d7
      (!scePtr || !(*scePtr)))
Packit b099d7
    return NULL;
Packit b099d7
  
Packit b099d7
  if ((isBaseClass) || (scePtr && (*scePtr)))
Packit b099d7
    {
Packit b099d7
      if (!(*wcePtr))
Packit b099d7
	{
Packit b099d7
	  inited = False;
Packit b099d7
	  *wcePtr = (XmBaseClassExt) XtCalloc(1, sizeof(XmBaseClassExtRec));
Packit b099d7
	  (*wcePtr)->classPartInitPrehook  = XmInheritClassPartInitPrehook;
Packit b099d7
	  (*wcePtr)->classPartInitPosthook = XmInheritClassPartInitPosthook;
Packit b099d7
	  (*wcePtr)->initializePrehook     = XmInheritInitializePrehook;
Packit b099d7
	  (*wcePtr)->setValuesPrehook      = XmInheritSetValuesPrehook;
Packit b099d7
	  (*wcePtr)->getValuesPrehook      = XmInheritGetValuesPrehook;
Packit b099d7
	  (*wcePtr)->initializePosthook    = XmInheritInitializePosthook;
Packit b099d7
	  (*wcePtr)->setValuesPosthook     = XmInheritSetValuesPosthook;
Packit b099d7
	  (*wcePtr)->getValuesPosthook     = XmInheritGetValuesPosthook;
Packit b099d7
	  (*wcePtr)->secondaryObjectClass  = XmInheritClass;
Packit b099d7
	  (*wcePtr)->secondaryObjectCreate = XmInheritSecObjectCreate;
Packit b099d7
	  (*wcePtr)->getSecResData         = XmInheritGetSecResData;
Packit b099d7
	  (*wcePtr)->widgetNavigable       = XmInheritWidgetNavigable;
Packit b099d7
	  (*wcePtr)->focusChange           = XmInheritFocusChange;
Packit b099d7
	}
Packit b099d7
      else
Packit b099d7
	inited = True;
Packit b099d7
      
Packit b099d7
      /* this should get done by the static initializers */
Packit b099d7
      for (i = 0; i < 32; i++)
Packit b099d7
	(*wcePtr)->flags[i] = 0;
Packit b099d7
      
Packit b099d7
      if (scePtr && *scePtr)
Packit b099d7
	{
Packit b099d7
	  if (!inited)
Packit b099d7
	    {
Packit b099d7
	      (*wcePtr)->next_extension = NULL;
Packit b099d7
	      (*wcePtr)->record_type 	= (*scePtr)->record_type;
Packit b099d7
	      (*wcePtr)->version	= (*scePtr)->version;
Packit b099d7
	      (*wcePtr)->record_size	= (*scePtr)->record_size;
Packit b099d7
	    }
Packit b099d7
	  if ((*wcePtr)->classPartInitPrehook == XmInheritClassPartInitPrehook)
Packit b099d7
	    (*wcePtr)->classPartInitPrehook = (*scePtr)->classPartInitPrehook;
Packit b099d7
	  if ((*wcePtr)->classPartInitPosthook == XmInheritClassPartInitPosthook)
Packit b099d7
	    (*wcePtr)->classPartInitPosthook = (*scePtr)->classPartInitPosthook;
Packit b099d7
	  if ((*wcePtr)->initializePrehook == XmInheritInitializePrehook)
Packit b099d7
	    (*wcePtr)->initializePrehook = (*scePtr)->initializePrehook;
Packit b099d7
	  if ((*wcePtr)->setValuesPrehook == XmInheritSetValuesPrehook)
Packit b099d7
	    (*wcePtr)->setValuesPrehook = (*scePtr)->setValuesPrehook;
Packit b099d7
	  if ((*wcePtr)->getValuesPrehook == XmInheritGetValuesPrehook)
Packit b099d7
	    (*wcePtr)->getValuesPrehook = (*scePtr)->getValuesPrehook;
Packit b099d7
	  if ((*wcePtr)->initializePosthook == XmInheritInitializePosthook)
Packit b099d7
	    (*wcePtr)->initializePosthook = (*scePtr)->initializePosthook;
Packit b099d7
	  if ((*wcePtr)->setValuesPosthook == XmInheritSetValuesPosthook)
Packit b099d7
	    (*wcePtr)->setValuesPosthook = (*scePtr)->setValuesPosthook;
Packit b099d7
	  if ((*wcePtr)->getValuesPosthook == XmInheritGetValuesPosthook)
Packit b099d7
	    (*wcePtr)->getValuesPosthook = (*scePtr)->getValuesPosthook;
Packit b099d7
	  if ((*wcePtr)->secondaryObjectClass == XmInheritClass)
Packit b099d7
	    (*wcePtr)->secondaryObjectClass = (*scePtr)->secondaryObjectClass;
Packit b099d7
	  if ((*wcePtr)->secondaryObjectCreate == XmInheritSecObjectCreate)
Packit b099d7
	    (*wcePtr)->secondaryObjectCreate = (*scePtr)->secondaryObjectCreate;
Packit b099d7
	  if ((*wcePtr)->getSecResData == XmInheritGetSecResData)
Packit b099d7
	    (*wcePtr)->getSecResData = (*scePtr)->getSecResData;
Packit b099d7
	  if ((*wcePtr)->widgetNavigable == XmInheritWidgetNavigable)
Packit b099d7
	    (*wcePtr)->widgetNavigable = (*scePtr)->widgetNavigable;
Packit b099d7
	  if ((*wcePtr)->focusChange == XmInheritFocusChange)
Packit b099d7
	    (*wcePtr)->focusChange = (*scePtr)->focusChange;
Packit b099d7
	}
Packit b099d7
#ifdef DEBUG
Packit b099d7
      else if (!IsBaseClass(wc))
Packit b099d7
	XtError("class must have non-null superclass extension");
Packit b099d7
#endif /* DEBUG */
Packit b099d7
      
Packit b099d7
      /*
Packit b099d7
       * If this class has a secondary object class and that
Packit b099d7
       * class does not have it's own extension (or has not
Packit b099d7
       * been class inited because its a pseudo class) then
Packit b099d7
       * we will give a dummy pointer so that fast subclass
Packit b099d7
       * checking will not fail for the meta classes
Packit b099d7
       * (gadget, manager, etc...)
Packit b099d7
       */
Packit b099d7
      {
Packit b099d7
	WidgetClass	sec = (*wcePtr)->secondaryObjectClass;
Packit b099d7
	static XmBaseClassExtRec       xmExtExtensionRec = {
Packit b099d7
	  NULL,                                     /* Next extension       */
Packit b099d7
	  NULLQUARK,                                /* record type XmQmotif */
Packit b099d7
	  XmBaseClassExtVersion,                    /* version              */
Packit b099d7
	  sizeof(XmBaseClassExtRec),                /* size                 */
Packit b099d7
	};
Packit b099d7
	
Packit b099d7
	if (xmExtExtensionRec.record_type == NULLQUARK)
Packit b099d7
	  xmExtExtensionRec.record_type = XmQmotif;
Packit b099d7
	
Packit b099d7
	if (sec && !sec->core_class.extension)
Packit b099d7
	  sec->core_class.extension = (XtPointer)&xmExtExtensionRec;
Packit b099d7
      }
Packit b099d7
    }
Packit b099d7
Packit b099d7
  wcData = GetWrapperData(wc);
Packit b099d7
  scData = GetWrapperData(wc->core_class.superclass);
Packit b099d7
  
Packit b099d7
  if ((wc == vendorShellWidgetClass) ||
Packit b099d7
      _XmIsSubclassOf(wc, vendorShellWidgetClass))
Packit b099d7
    {
Packit b099d7
      /* Wrap Realize */
Packit b099d7
      /*
Packit b099d7
       * check if this widget was using XtInherit and got the wrapper
Packit b099d7
       * from the superclass
Packit b099d7
       */
Packit b099d7
      if (wc->core_class.realize == XtInheritRealize)
Packit b099d7
	{
Packit b099d7
	  wcData->realize = scData->realize;
Packit b099d7
	}
Packit b099d7
      /*
Packit b099d7
       * It has declared it's own realize routine so save it
Packit b099d7
       */
Packit b099d7
      else
Packit b099d7
	{
Packit b099d7
	  wcData->realize = wc->core_class.realize;
Packit b099d7
	}
Packit b099d7
      wc->core_class.realize = realizeWrappers[GetRealizeDepth(wc)];
Packit b099d7
    }
Packit b099d7
  
Packit b099d7
  if ((wc == rectObjClass) ||
Packit b099d7
      _XmIsSubclassOf(wc, rectObjClass))
Packit b099d7
    {
Packit b099d7
      /* Wrap resize */
Packit b099d7
      /*
Packit b099d7
       * check if this widget was using XtInherit and got the wrapper
Packit b099d7
       * from the superclass
Packit b099d7
       */
Packit b099d7
      if (wc->core_class.resize == XtInheritResize)
Packit b099d7
	{
Packit b099d7
	  wcData->resize = scData->resize;
Packit b099d7
	}
Packit b099d7
      /*
Packit b099d7
       * It has declared it's own resize routine so save it
Packit b099d7
       */
Packit b099d7
      else
Packit b099d7
	{
Packit b099d7
	  wcData->resize = wc->core_class.resize;
Packit b099d7
	}
Packit b099d7
      wc->core_class.resize = resizeWrappers[GetResizeDepth(wc)];
Packit b099d7
    }
Packit b099d7
  
Packit b099d7
  if ((wc == compositeWidgetClass) ||
Packit b099d7
      _XmIsSubclassOf(wc, compositeWidgetClass))
Packit b099d7
    {
Packit b099d7
      /* Wrap GeometryManager */
Packit b099d7
      /*
Packit b099d7
       * check if this widget was using XtInherit and got the wrapper
Packit b099d7
       * from the superclass
Packit b099d7
       */
Packit b099d7
      if (((CompositeWidgetClass) wc)->composite_class.geometry_manager
Packit b099d7
	  == XtInheritGeometryManager)
Packit b099d7
	{
Packit b099d7
	  wcData->geometry_manager = scData->geometry_manager;
Packit b099d7
	}
Packit b099d7
      /*
Packit b099d7
       * It has declared it's own resize routine so save it
Packit b099d7
       */
Packit b099d7
      else
Packit b099d7
	{
Packit b099d7
	  wcData->geometry_manager = ((CompositeWidgetClass) wc)
Packit b099d7
	    ->composite_class.geometry_manager;
Packit b099d7
	}
Packit b099d7
      ((CompositeWidgetClass) wc)->composite_class.geometry_manager =
Packit b099d7
	(XtGeometryHandler) 
Packit b099d7
	  geometryHandlerWrappers[GetGeometryHandlerDepth(wc)];
Packit b099d7
    }
Packit b099d7
  
Packit b099d7
  return wcePtr;
Packit b099d7
}
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * This function replaces the objectClass classPartInit slot and is
Packit b099d7
 * called at the start of the first XtCreate invocation.
Packit b099d7
 */
Packit b099d7
static void 
Packit b099d7
ClassPartInitRootWrapper(
Packit b099d7
        WidgetClass wc )
Packit b099d7
{
Packit b099d7
  XtWidgetClassProc *leafFuncPtr;
Packit b099d7
  XmBaseClassExt    *wcePtr;
Packit b099d7
  
Packit b099d7
  
Packit b099d7
  wcePtr = BaseClassPartInitialize(wc);
Packit b099d7
  /*
Packit b099d7
   * check that it's a class that we know about
Packit b099d7
   */
Packit b099d7
  if (wcePtr && *wcePtr)
Packit b099d7
    {
Packit b099d7
      if ((*wcePtr)->classPartInitPrehook)
Packit b099d7
	(*((*wcePtr)->classPartInitPrehook)) (wc);
Packit b099d7
      
Packit b099d7
      /*
Packit b099d7
       * If we have a prehook, then envelop the leaf class function
Packit b099d7
       * that whould be called last. 
Packit b099d7
       */
Packit b099d7
      if ((*wcePtr)->classPartInitPosthook)
Packit b099d7
	{
Packit b099d7
	  XmWrapperData wrapperData;
Packit b099d7
	  
Packit b099d7
	  wrapperData = GetWrapperData(wc);
Packit b099d7
	  leafFuncPtr = (XtWidgetClassProc *)
Packit b099d7
	    &(wc->core_class.class_part_initialize);
Packit b099d7
	  wrapperData->classPartInitLeaf = *leafFuncPtr;
Packit b099d7
	  *leafFuncPtr = ClassPartInitLeafWrapper;
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
Packit b099d7
  if (objectClassWrapper.classPartInit)
Packit b099d7
    (* objectClassWrapper.classPartInit) (wc);
Packit b099d7
}
Packit b099d7

Packit b099d7
static void 
Packit b099d7
ClassPartInitLeafWrapper(
Packit b099d7
        WidgetClass wc )
Packit b099d7
{
Packit b099d7
  XtWidgetClassProc *leafFuncPtr;
Packit b099d7
  XmBaseClassExt    *wcePtr;
Packit b099d7
  
Packit b099d7
  wcePtr = _XmGetBaseClassExtPtr(wc, XmQmotif); 
Packit b099d7
  
Packit b099d7
  if (*wcePtr && (*wcePtr)->classPartInitPosthook)
Packit b099d7
    {
Packit b099d7
      XmWrapperData wrapperData;
Packit b099d7
Packit b099d7
      wrapperData = GetWrapperData(wc);
Packit b099d7
      leafFuncPtr = (XtWidgetClassProc *)
Packit b099d7
	&(wc->core_class.class_part_initialize);
Packit b099d7
      
Packit b099d7
      if (wrapperData->classPartInitLeaf)
Packit b099d7
	(* wrapperData->classPartInitLeaf) (wc);
Packit b099d7
      if ((*wcePtr)->classPartInitPosthook)
Packit b099d7
	(*((*wcePtr)->classPartInitPosthook)) (wc);
Packit b099d7
#ifdef DEBUG
Packit b099d7
      else
Packit b099d7
	XmeWarning(NULL, "there should be a non-null hook for a leaf wrapper");
Packit b099d7
#endif /* DEBUG */
Packit b099d7
      *leafFuncPtr = wrapperData->classPartInitLeaf;
Packit b099d7
      wrapperData->classPartInitLeaf = NULL;
Packit b099d7
    }
Packit b099d7
}
Packit b099d7

Packit b099d7
static Boolean 
Packit b099d7
is_constraint_subclass(WidgetClass cls)
Packit b099d7
{
Packit b099d7
  WidgetClass sc;
Packit b099d7
Packit b099d7
  for (sc = cls; sc != NULL; sc = sc->core_class.superclass)
Packit b099d7
    if (sc == (WidgetClass) &constraintClassRec)
Packit b099d7
      return True;
Packit b099d7
Packit b099d7
  return False;
Packit b099d7
}
Packit b099d7

Packit b099d7
Packit b099d7
void 
Packit b099d7
_XmInitializeExtensions( void )
Packit b099d7
{
Packit b099d7
  static Boolean firstTime = True;
Packit b099d7
  
Packit b099d7
  if (firstTime)
Packit b099d7
    {
Packit b099d7
      XmQmotif = XrmPermStringToQuark("OSF_MOTIF");
Packit b099d7
      
Packit b099d7
      objectClassWrapper.initialize =
Packit b099d7
	objectClass->core_class.initialize;
Packit b099d7
      objectClassWrapper.setValues =
Packit b099d7
	objectClass->core_class.set_values;
Packit b099d7
      objectClassWrapper.getValues =
Packit b099d7
	objectClass->core_class.get_values_hook;
Packit b099d7
      objectClassWrapper.classPartInit =
Packit b099d7
	objectClass->core_class.class_part_initialize;
Packit b099d7
      objectClass->core_class.class_part_initialize = 
Packit b099d7
	ClassPartInitRootWrapper;
Packit b099d7
      objectClass->core_class.initialize = 
Packit b099d7
	InitializeRootWrapper;
Packit b099d7
      objectClass->core_class.set_values = 
Packit b099d7
	SetValuesRootWrapper;
Packit b099d7
      objectClass->core_class.get_values_hook =
Packit b099d7
	GetValuesRootWrapper;
Packit b099d7
      firstTime = False;
Packit b099d7
    }
Packit b099d7
    resizeRefWContext = XUniqueContext();
Packit b099d7
    geoRefWContext = XUniqueContext();
Packit b099d7
}
Packit b099d7

Packit b099d7
Packit b099d7
Cardinal 
Packit b099d7
_XmSecondaryResourceData(
Packit b099d7
        XmBaseClassExt bcePtr,
Packit b099d7
        XmSecondaryResourceData **secResDataRtn,
Packit b099d7
        XtPointer client_data,
Packit b099d7
        String name,
Packit b099d7
        String class_name,
Packit b099d7
        XmResourceBaseProc basefunctionpointer )
Packit b099d7
{
Packit b099d7
  WidgetClass		  secObjClass;
Packit b099d7
  XmSecondaryResourceData secResData, *sd;
Packit b099d7
  Cardinal 		  count = 0;
Packit b099d7
  
Packit b099d7
  if (bcePtr)
Packit b099d7
    {
Packit b099d7
      secObjClass = ( (bcePtr)->secondaryObjectClass);
Packit b099d7
      if (secObjClass)
Packit b099d7
	{
Packit b099d7
	  secResData = XtNew(XmSecondaryResourceDataRec);
Packit b099d7
	  
Packit b099d7
	  _XmTransformSubResources(secObjClass->core_class.resources,
Packit b099d7
				   secObjClass->core_class.num_resources,
Packit b099d7
				   &(secResData->resources),
Packit b099d7
				   &(secResData->num_resources));
Packit b099d7
	  
Packit b099d7
	  secResData->name = name;
Packit b099d7
	  secResData->res_class = class_name;
Packit b099d7
	  secResData->client_data = client_data;
Packit b099d7
	  secResData->base_proc = basefunctionpointer;
Packit b099d7
	  sd = XtNew(XmSecondaryResourceData); 
Packit b099d7
	  *sd = secResData;
Packit b099d7
	  *secResDataRtn = sd;
Packit b099d7
	  count++;
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
  
Packit b099d7
  return count;
Packit b099d7
}
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * This function makes assumptions about what the Intrinsics is
Packit b099d7
 * doing with the resource lists.  It is based on the X11R5 version
Packit b099d7
 * of the Intrinsics.  It is used as a work around for a bug in
Packit b099d7
 * the Intrinsics that deals with recompiling already compiled resource
Packit b099d7
 * lists.  When that bug is fixed, this function should be removed.
Packit b099d7
 */
Packit b099d7
static XtResourceList*
Packit b099d7
CreateIndirectionTable(XtResourceList resources, 
Packit b099d7
			 Cardinal num_resources)
Packit b099d7
{
Packit b099d7
  register int i;
Packit b099d7
  XtResourceList* table;
Packit b099d7
  
Packit b099d7
  table = (XtResourceList*)XtMalloc(num_resources * sizeof(XtResourceList));
Packit b099d7
  for (i = 0; i < num_resources; i++)
Packit b099d7
    table[i] = (XtResourceList)(&(resources[i]));
Packit b099d7
Packit b099d7
  return table;
Packit b099d7
}
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * The statement in this function calls CreateIndirectionTable() which
Packit b099d7
 * is scheduled for removal (see comment in function above).
Packit b099d7
 * It is used as a work around for an X11R5 Intrinsics bug.  When the
Packit b099d7
 * bug is fixed, change to the assignement statement so the 
Packit b099d7
 * constraint_class.reources is assigned comp_resources.  Next,
Packit b099d7
 * change the class_inited field of the core_class record to False.
Packit b099d7
 * Then remove the check for class_inited, in the conditional statement
Packit b099d7
 * which calls XtInitializeWidgetClass() and move the call to
Packit b099d7
 * XtInitializeWidgetClass() to just above the call to
Packit b099d7
 * XtGetConstraintResourceList().  Then remove the call to
Packit b099d7
 * XtFree() and the last two assignment statements.
Packit b099d7
 */
Packit b099d7
void
Packit b099d7
_XmTransformSubResources(
Packit b099d7
	XtResourceList comp_resources,
Packit b099d7
	Cardinal num_comp_resources,
Packit b099d7
	XtResourceList *resources,
Packit b099d7
	Cardinal *num_resources)
Packit b099d7
{
Packit b099d7
   static ConstraintClassRec shadowObjectClassRec = {
Packit b099d7
      {
Packit b099d7
       /* superclass           */  (WidgetClass) &constraintClassRec,
Packit b099d7
       /* class_name           */  "Shadow",
Packit b099d7
       /* widget_size          */  sizeof(ConstraintRec),
Packit b099d7
       /* class_initialize     */  NULL,
Packit b099d7
       /* class_part_initialize*/  NULL,
Packit b099d7
       /* class_inited         */  FALSE,
Packit b099d7
       /* initialize           */  NULL,
Packit b099d7
       /* initialize_hook      */  NULL,
Packit b099d7
       /* realize              */  XtInheritRealize,
Packit b099d7
       /* actions              */  NULL,
Packit b099d7
       /* num_actions          */  0,
Packit b099d7
       /* resources            */  NULL,
Packit b099d7
       /* num_resources        */  0,
Packit b099d7
       /* xrm_class            */  NULLQUARK,
Packit b099d7
       /* compress_motion      */  FALSE,
Packit b099d7
       /* compress_exposure    */  TRUE,
Packit b099d7
       /* compress_enterleave  */  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    */  XtInheritSetValuesAlmost,
Packit b099d7
       /* get_values_hook      */  NULL,
Packit b099d7
       /* accept_focus         */  NULL,
Packit b099d7
       /* version              */  XtVersion,
Packit b099d7
       /* callback_offsets     */  NULL,
Packit b099d7
       /* tm_table             */  NULL,
Packit b099d7
       /* query_geometry       */  NULL,
Packit b099d7
       /* display_accelerator  */  NULL,
Packit b099d7
       /* extension            */  NULL
Packit b099d7
     },
Packit b099d7
Packit b099d7
     { /**** CompositePart *****/
Packit b099d7
       /* geometry_handler     */  NULL,
Packit b099d7
       /* change_managed       */  NULL,
Packit b099d7
       /* insert_child         */  XtInheritInsertChild,
Packit b099d7
       /* delete_child         */  XtInheritDeleteChild,
Packit b099d7
       /* extension            */  NULL
Packit b099d7
     },
Packit b099d7
Packit b099d7
     { /**** ConstraintPart ****/
Packit b099d7
       /* resources            */  NULL,
Packit b099d7
       /* num_resources        */  0,
Packit b099d7
       /* constraint_size      */  0,
Packit b099d7
       /* initialize           */  NULL,
Packit b099d7
       /* destroy              */  NULL,
Packit b099d7
       /* set_values           */  NULL,
Packit b099d7
       /* extension            */  NULL
Packit b099d7
     }
Packit b099d7
   };
Packit b099d7
   
Packit b099d7
   if (((int)comp_resources[0].resource_offset) >= 0) 
Packit b099d7
     {
Packit b099d7
       XtResourceList tmp_resources;
Packit b099d7
       
Packit b099d7
       tmp_resources = (XtResourceList)
Packit b099d7
	 XtMalloc(sizeof(XtResource) * num_comp_resources);
Packit b099d7
       
Packit b099d7
       memcpy(tmp_resources, comp_resources,
Packit b099d7
	      sizeof(XtResource) * num_comp_resources);
Packit b099d7
       
Packit b099d7
       *resources = tmp_resources;
Packit b099d7
       *num_resources = num_comp_resources;
Packit b099d7
     } 
Packit b099d7
   else 
Packit b099d7
     {
Packit b099d7
       if (!shadowObjectClassRec.core_class.class_inited)
Packit b099d7
	 XtInitializeWidgetClass((WidgetClass) &shadowObjectClassRec);
Packit b099d7
       
Packit b099d7
       /* This next statement is marked for change */
Packit b099d7
       shadowObjectClassRec.constraint_class.resources = (XtResourceList)
Packit b099d7
	 CreateIndirectionTable(comp_resources, num_comp_resources);
Packit b099d7
       
Packit b099d7
       shadowObjectClassRec.constraint_class.num_resources = num_comp_resources;
Packit b099d7
       
Packit b099d7
       XtGetConstraintResourceList((WidgetClass) &shadowObjectClassRec,
Packit b099d7
				   resources, num_resources);
Packit b099d7
       
Packit b099d7
       if (shadowObjectClassRec.constraint_class.resources)
Packit b099d7
	 XtFree((char *) shadowObjectClassRec.constraint_class.resources);
Packit b099d7
       
Packit b099d7
       shadowObjectClassRec.constraint_class.resources = NULL;
Packit b099d7
       shadowObjectClassRec.constraint_class.num_resources = 0;
Packit b099d7
     }
Packit b099d7
}
Packit b099d7
Packit b099d7
static XtInitProc InitializeLeafWrappers[] = {
Packit b099d7
	InitializeLeafWrapper0,
Packit b099d7
	InitializeLeafWrapper1,
Packit b099d7
	InitializeLeafWrapper2,
Packit b099d7
	InitializeLeafWrapper3,
Packit b099d7
	InitializeLeafWrapper4,
Packit b099d7
	InitializeLeafWrapper5,
Packit b099d7
	InitializeLeafWrapper6,
Packit b099d7
	InitializeLeafWrapper7,
Packit b099d7
	InitializeLeafWrapper8,
Packit b099d7
	InitializeLeafWrapper9
Packit b099d7
};
Packit b099d7
static XtInitProc CInitializeLeafWrappers[] = {
Packit b099d7
	CInitializeLeafWrapper0,
Packit b099d7
	CInitializeLeafWrapper1,
Packit b099d7
	CInitializeLeafWrapper2,
Packit b099d7
	CInitializeLeafWrapper3,
Packit b099d7
	CInitializeLeafWrapper4,
Packit b099d7
	CInitializeLeafWrapper5,
Packit b099d7
	CInitializeLeafWrapper6,
Packit b099d7
	CInitializeLeafWrapper7,
Packit b099d7
	CInitializeLeafWrapper8,
Packit b099d7
	CInitializeLeafWrapper9
Packit b099d7
};
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * This function replaces the objectClass initialize slot and is
Packit b099d7
 * called at the start of every XtCreate invocation.
Packit b099d7
 */
Packit b099d7
static void
Packit b099d7
InitializeRootWrapper(
Packit b099d7
        Widget req,
Packit b099d7
        Widget new_w,
Packit b099d7
        ArgList args,
Packit b099d7
        Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	WidgetClass wc = XtClass(new_w);
Packit b099d7
	XmBaseClassExt *wcePtr;
Packit b099d7
Packit b099d7
	wcePtr = _XmGetBaseClassExtPtr(wc, XmQmotif);
Packit b099d7
Packit b099d7
	if (wcePtr && *wcePtr) {
Packit b099d7
Packit b099d7
	   if ((*wcePtr)->initializePrehook)
Packit b099d7
		(*((*wcePtr)->initializePrehook))(req, new_w, args, num_args);
Packit b099d7
	
Packit b099d7
Packit b099d7
	   if ((*wcePtr)->initializePosthook) {
Packit b099d7
		XmWrapperData wrapperData;
Packit b099d7
Packit b099d7
	   	_XmProcessLock();
Packit b099d7
Packit b099d7
		if (!XtIsShell(new_w) && XtParent(new_w) 
Packit b099d7
			&& XtIsConstraint(XtParent(new_w))) {
Packit b099d7
			ConstraintWidgetClass cwc;
Packit b099d7
Packit b099d7
			cwc = (ConstraintWidgetClass) XtClass(XtParent(new_w));
Packit b099d7
			wrapperData = GetWrapperData((WidgetClass) cwc);
Packit b099d7
			if (wrapperData->constraintInitializeLeafCount ==0)
Packit b099d7
			{
Packit b099d7
				wrapperData->constraintInitializeLeaf =
Packit b099d7
					cwc->constraint_class.initialize;
Packit b099d7
				cwc->constraint_class.initialize =
Packit b099d7
					CInitializeLeafWrappers[
Packit b099d7
						GetDepth((WidgetClass) cwc)];
Packit b099d7
			}
Packit b099d7
			(wrapperData->constraintInitializeLeafCount)++;
Packit b099d7
		}
Packit b099d7
		else {
Packit b099d7
			wrapperData = GetWrapperData(wc);
Packit b099d7
			if (wrapperData->initializeLeafCount ==0) {
Packit b099d7
				wrapperData->initializeLeaf =
Packit b099d7
					wc->core_class.initialize;
Packit b099d7
				wc->core_class.initialize =
Packit b099d7
					InitializeLeafWrappers[
Packit b099d7
						GetDepth(wc)];
Packit b099d7
			}
Packit b099d7
			(wrapperData->initializeLeafCount)++;
Packit b099d7
		}
Packit b099d7
Packit b099d7
		_XmProcessUnlock();
Packit b099d7
	   }
Packit b099d7
Packit b099d7
	   if (objectClassWrapper.initialize)
Packit b099d7
		(*objectClassWrapper.initialize)(req, new_w,args, num_args);
Packit b099d7
	}
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
InitializeLeafWrapper(
Packit b099d7
			Widget req,
Packit b099d7
			Widget new_w,
Packit b099d7
			ArgList args,
Packit b099d7
			Cardinal *num_args,
Packit b099d7
			int depth)
Packit b099d7
{
Packit b099d7
	WidgetClass wc = XtClass(new_w);
Packit b099d7
	XtInitProc init_proc = NULL;
Packit b099d7
	XtInitProc post_proc = NULL;
Packit b099d7
	int leafDepth = GetDepth(wc);
Packit b099d7
	XmWrapperData wrapperData;
Packit b099d7
Packit b099d7
	_XmProcessLock();
Packit b099d7
Packit b099d7
	if (leafDepth == depth) { /* Correct depth */
Packit b099d7
	   wrapperData = GetWrapperData(wc);
Packit b099d7
Packit b099d7
	   if (!XtIsShell(new_w) && XtParent(new_w) && 
Packit b099d7
			XtIsConstraint(XtParent(new_w))) {
Packit b099d7
		init_proc = wrapperData->initializeLeaf;
Packit b099d7
	   }
Packit b099d7
	   else {
Packit b099d7
		/* We're home ! */
Packit b099d7
	   	XmBaseClassExt *wcePtr = _XmGetBaseClassExtPtr(wc, XmQmotif);
Packit b099d7
		init_proc = wrapperData->initializeLeaf;
Packit b099d7
		post_proc = (*wcePtr)->initializePosthook;
Packit b099d7
Packit b099d7
#ifdef FIX_1392
Packit b099d7
		if (post_proc) {
Packit b099d7
#endif
Packit b099d7
		    if ((--(wrapperData->initializeLeafCount)) == 0)
Packit b099d7
			wc->core_class.initialize = 
Packit b099d7
				wrapperData->initializeLeaf;
Packit b099d7
#ifdef FIX_1392
Packit b099d7
		}
Packit b099d7
#endif
Packit b099d7
	   }
Packit b099d7
	}
Packit b099d7
	else {
Packit b099d7
		int depthDiff = leafDepth - depth;
Packit b099d7
Packit b099d7
		for ( ; depthDiff; 
Packit b099d7
		        depthDiff--, wc = wc->core_class.superclass)
Packit b099d7
			{};
Packit b099d7
		
Packit b099d7
		wrapperData = GetWrapperData(wc);
Packit b099d7
		init_proc = wrapperData->initializeLeaf;
Packit b099d7
	}
Packit b099d7
Packit b099d7
	_XmProcessUnlock();
Packit b099d7
Packit b099d7
	if (init_proc)
Packit b099d7
		(*init_proc)(req, new_w, args, num_args);
Packit b099d7
	if (post_proc)
Packit b099d7
		(*post_proc)(req, new_w, args, num_args);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
CInitializeLeafWrapper(
Packit b099d7
			Widget req, 
Packit b099d7
			Widget new_w, 
Packit b099d7
			ArgList args, 
Packit b099d7
			Cardinal *num_args, 
Packit b099d7
			int depth)
Packit b099d7
{
Packit b099d7
	WidgetClass wc = XtClass(new_w);
Packit b099d7
	ConstraintWidgetClass cwc = (ConstraintWidgetClass)
Packit b099d7
					XtClass(XtParent(new_w));
Packit b099d7
	XtInitProc init_proc = NULL;
Packit b099d7
	XtInitProc post_proc = NULL;
Packit b099d7
	int leafDepth = GetDepth((WidgetClass) cwc);
Packit b099d7
	XmWrapperData wrapperData;
Packit b099d7
Packit b099d7
	_XmProcessLock();
Packit b099d7
Packit b099d7
	if (leafDepth == depth) {
Packit b099d7
		XmBaseClassExt *wcePtr = _XmGetBaseClassExtPtr(wc, XmQmotif);
Packit b099d7
		wrapperData = GetWrapperData((WidgetClass) cwc);
Packit b099d7
Packit b099d7
		init_proc = wrapperData->constraintInitializeLeaf;
Packit b099d7
		post_proc = (*wcePtr)->initializePosthook;
Packit b099d7
Packit b099d7
#ifdef FIX_1392
Packit b099d7
		if (post_proc) {
Packit b099d7
#endif
Packit b099d7
		    if ((--(wrapperData->constraintInitializeLeafCount)) ==0)
Packit b099d7
			cwc->constraint_class.initialize =
Packit b099d7
				wrapperData->constraintInitializeLeaf;
Packit b099d7
#ifdef FIX_1392
Packit b099d7
		}
Packit b099d7
#endif
Packit b099d7
	}
Packit b099d7
	else {
Packit b099d7
		int depthDiff = leafDepth - depth;
Packit b099d7
Packit b099d7
		for ( ; depthDiff; 
Packit b099d7
		        depthDiff--, cwc = (ConstraintWidgetClass) 
Packit b099d7
		                           cwc->core_class.superclass)
Packit b099d7
			{};
Packit b099d7
		
Packit b099d7
		wrapperData = GetWrapperData((WidgetClass) cwc);
Packit b099d7
		init_proc = wrapperData->constraintInitializeLeaf;
Packit b099d7
	}
Packit b099d7
Packit b099d7
	_XmProcessUnlock();
Packit b099d7
Packit b099d7
	if (init_proc)
Packit b099d7
		(*init_proc)(req, new_w, args, num_args);
Packit b099d7
	if (post_proc)
Packit b099d7
		(*post_proc)(req, new_w, args, num_args);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
InitializeLeafWrapper0(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	InitializeLeafWrapper(req, new_w, args, num_args, 0);
Packit b099d7
}
Packit b099d7
static void 
Packit b099d7
InitializeLeafWrapper1(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	InitializeLeafWrapper(req, new_w, args, num_args, 1);
Packit b099d7
}
Packit b099d7
static void 
Packit b099d7
InitializeLeafWrapper2(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	InitializeLeafWrapper(req, new_w, args, num_args, 2);
Packit b099d7
}
Packit b099d7
static void 
Packit b099d7
InitializeLeafWrapper3(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	InitializeLeafWrapper(req, new_w, args, num_args, 3);
Packit b099d7
}
Packit b099d7
static void 
Packit b099d7
InitializeLeafWrapper4(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	InitializeLeafWrapper(req, new_w, args, num_args, 4);
Packit b099d7
}
Packit b099d7
static void 
Packit b099d7
InitializeLeafWrapper5(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	InitializeLeafWrapper(req, new_w, args, num_args, 5);
Packit b099d7
}
Packit b099d7
static void 
Packit b099d7
InitializeLeafWrapper6(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	InitializeLeafWrapper(req, new_w, args, num_args, 6);
Packit b099d7
}
Packit b099d7
static void 
Packit b099d7
InitializeLeafWrapper7(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	InitializeLeafWrapper(req, new_w, args, num_args, 7);
Packit b099d7
}
Packit b099d7
static void 
Packit b099d7
InitializeLeafWrapper8(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	InitializeLeafWrapper(req, new_w, args, num_args, 8);
Packit b099d7
}
Packit b099d7
static void 
Packit b099d7
InitializeLeafWrapper9(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	InitializeLeafWrapper(req, new_w, args, num_args, 9);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void
Packit b099d7
CInitializeLeafWrapper0(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	CInitializeLeafWrapper(req, new_w, args, num_args,0);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
CInitializeLeafWrapper1(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	CInitializeLeafWrapper(req, new_w, args, num_args,1);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
CInitializeLeafWrapper2(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	CInitializeLeafWrapper(req, new_w, args, num_args,2);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
CInitializeLeafWrapper3(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	CInitializeLeafWrapper(req, new_w, args, num_args,3);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
CInitializeLeafWrapper4(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	CInitializeLeafWrapper(req, new_w, args, num_args,4);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
CInitializeLeafWrapper5(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	CInitializeLeafWrapper(req, new_w, args, num_args,5);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
CInitializeLeafWrapper6(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	CInitializeLeafWrapper(req, new_w, args, num_args,6);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
CInitializeLeafWrapper7(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	CInitializeLeafWrapper(req, new_w, args, num_args,7);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
CInitializeLeafWrapper8(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	CInitializeLeafWrapper(req, new_w, args, num_args,8);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
CInitializeLeafWrapper9(
Packit b099d7
	Widget req, Widget new_w, ArgList args, Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	CInitializeLeafWrapper(req, new_w, args, num_args,9);
Packit b099d7
}
Packit b099d7
Packit b099d7
static XtSetValuesFunc SetValuesLeafWrappers[] = {
Packit b099d7
	SetValuesLeafWrapper0,
Packit b099d7
	SetValuesLeafWrapper1,
Packit b099d7
	SetValuesLeafWrapper2,
Packit b099d7
	SetValuesLeafWrapper3,
Packit b099d7
	SetValuesLeafWrapper4,
Packit b099d7
	SetValuesLeafWrapper5,
Packit b099d7
	SetValuesLeafWrapper6,
Packit b099d7
	SetValuesLeafWrapper7,
Packit b099d7
	SetValuesLeafWrapper8,
Packit b099d7
	SetValuesLeafWrapper9
Packit b099d7
};
Packit b099d7
static XtSetValuesFunc CSetValuesLeafWrappers[] = {
Packit b099d7
	CSetValuesLeafWrapper0,
Packit b099d7
	CSetValuesLeafWrapper1,
Packit b099d7
	CSetValuesLeafWrapper2,
Packit b099d7
	CSetValuesLeafWrapper3,
Packit b099d7
	CSetValuesLeafWrapper4,
Packit b099d7
	CSetValuesLeafWrapper5,
Packit b099d7
	CSetValuesLeafWrapper6,
Packit b099d7
	CSetValuesLeafWrapper7,
Packit b099d7
	CSetValuesLeafWrapper8,
Packit b099d7
	CSetValuesLeafWrapper9
Packit b099d7
};
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * This function replaces the objectClass set_values slot and is
Packit b099d7
 * called at the start of every XtSetValues invocation.
Packit b099d7
 */
Packit b099d7
static Boolean 
Packit b099d7
SetValuesRootWrapper(
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
	WidgetClass wc = XtClass(new_w);
Packit b099d7
	XmBaseClassExt *wcePtr;
Packit b099d7
	Boolean returnVal = False;
Packit b099d7
Packit b099d7
	wcePtr = _XmGetBaseClassExtPtr(wc, XmQmotif);
Packit b099d7
Packit b099d7
	if (wcePtr && *wcePtr) {
Packit b099d7
Packit b099d7
	   if ((*wcePtr)->setValuesPrehook)
Packit b099d7
		returnVal |= (*((*wcePtr)->setValuesPrehook))
Packit b099d7
				(current, req, new_w, args,  num_args);
Packit b099d7
Packit b099d7
	   if ((*wcePtr)->setValuesPosthook) {
Packit b099d7
	    	XmWrapperData wrapperData;
Packit b099d7
Packit b099d7
	    	_XmProcessLock();
Packit b099d7
Packit b099d7
	    	if (!XtIsShell(new_w) && XtParent(new_w)
Packit b099d7
		    	&& XtIsConstraint(XtParent(new_w))) {
Packit b099d7
	    		ConstraintWidgetClass cwc;
Packit b099d7
Packit b099d7
			cwc = (ConstraintWidgetClass) XtClass(XtParent(new_w));
Packit b099d7
			wrapperData = GetWrapperData((WidgetClass) cwc);
Packit b099d7
			if (wrapperData->constraintSetValuesLeafCount ==0)
Packit b099d7
			{
Packit b099d7
				wrapperData->constraintSetValuesLeaf =
Packit b099d7
					cwc->constraint_class.set_values;
Packit b099d7
				cwc->constraint_class.set_values =
Packit b099d7
					CSetValuesLeafWrappers[
Packit b099d7
						GetDepth((WidgetClass) cwc)];
Packit b099d7
			}
Packit b099d7
			(wrapperData->constraintSetValuesLeafCount)++;
Packit b099d7
		}
Packit b099d7
		else {
Packit b099d7
			wrapperData = GetWrapperData(wc);
Packit b099d7
			if (wrapperData->setValuesLeafCount ==0) {
Packit b099d7
				wrapperData->setValuesLeaf =
Packit b099d7
					wc->core_class.set_values;
Packit b099d7
				wc->core_class.set_values =
Packit b099d7
					SetValuesLeafWrappers[
Packit b099d7
						GetDepth(wc)];
Packit b099d7
			}
Packit b099d7
			(wrapperData->setValuesLeafCount)++;
Packit b099d7
		}
Packit b099d7
Packit b099d7
	   	_XmProcessUnlock();
Packit b099d7
	   }
Packit b099d7
	}
Packit b099d7
Packit b099d7
	if (objectClassWrapper.setValues)
Packit b099d7
	    returnVal |= (*objectClassWrapper.setValues) 
Packit b099d7
				(current, req, new_w, args, num_args);
Packit b099d7
	
Packit b099d7
	return returnVal;
Packit b099d7
}
Packit b099d7
Packit b099d7
static Boolean 
Packit b099d7
SetValuesLeafWrapper(
Packit b099d7
                        Widget current,
Packit b099d7
                        Widget req,
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args,
Packit b099d7
			int depth)
Packit b099d7
{
Packit b099d7
	WidgetClass wc = XtClass(new_w);
Packit b099d7
	XtSetValuesFunc setvalues_proc = NULL;
Packit b099d7
	XtSetValuesFunc post_proc = NULL;
Packit b099d7
	Boolean returnVal = False;
Packit b099d7
	int leafDepth = GetDepth(wc);
Packit b099d7
	XmWrapperData wrapperData;
Packit b099d7
Packit b099d7
	_XmProcessLock();
Packit b099d7
Packit b099d7
	if (leafDepth == depth) { /* Correct depth */
Packit b099d7
	   wrapperData = GetWrapperData(wc);
Packit b099d7
Packit b099d7
	   if (!XtIsShell(new_w) && XtParent(new_w) &&
Packit b099d7
			   XtIsConstraint(XtParent(new_w))) {
Packit b099d7
		setvalues_proc = wrapperData->setValuesLeaf;
Packit b099d7
	   }
Packit b099d7
	   else {
Packit b099d7
		/* We're home ! */
Packit b099d7
	   	XmBaseClassExt *wcePtr = _XmGetBaseClassExtPtr(wc, XmQmotif);
Packit b099d7
		setvalues_proc = wrapperData->setValuesLeaf;
Packit b099d7
		post_proc = (*wcePtr)->setValuesPosthook;
Packit b099d7
		
Packit b099d7
#ifdef FIX_1392
Packit b099d7
		if (post_proc) {
Packit b099d7
#endif
Packit b099d7
		    if ((--(wrapperData->setValuesLeafCount)) ==0)
Packit b099d7
			wc->core_class.set_values = 
Packit b099d7
				wrapperData->setValuesLeaf;
Packit b099d7
#ifdef FIX_1392
Packit b099d7
		}
Packit b099d7
#endif
Packit b099d7
	   }
Packit b099d7
	}
Packit b099d7
	else {
Packit b099d7
		int depthDiff = leafDepth - depth;
Packit b099d7
Packit b099d7
		for ( ; depthDiff;
Packit b099d7
			depthDiff--, wc = wc->core_class.superclass)
Packit b099d7
			{};
Packit b099d7
		
Packit b099d7
		wrapperData = GetWrapperData(wc);
Packit b099d7
		setvalues_proc = wrapperData->setValuesLeaf;
Packit b099d7
	}
Packit b099d7
Packit b099d7
	_XmProcessUnlock();
Packit b099d7
Packit b099d7
	if (setvalues_proc)
Packit b099d7
		returnVal |= (*setvalues_proc)
Packit b099d7
				(current, req, new_w, args, num_args);
Packit b099d7
	if (post_proc)
Packit b099d7
		returnVal |= (*post_proc)
Packit b099d7
				(current, req, new_w, args, num_args);
Packit b099d7
	
Packit b099d7
	return returnVal;
Packit b099d7
}
Packit b099d7
Packit b099d7
static Boolean 
Packit b099d7
CSetValuesLeafWrapper(
Packit b099d7
                        Widget current,
Packit b099d7
                        Widget req,
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args,
Packit b099d7
			int depth)
Packit b099d7
{
Packit b099d7
	WidgetClass wc = XtClass(new_w);
Packit b099d7
	ConstraintWidgetClass cwc = (ConstraintWidgetClass) 
Packit b099d7
					XtClass(XtParent(new_w));
Packit b099d7
	XtSetValuesFunc setvalues_proc = NULL;
Packit b099d7
	XtSetValuesFunc post_proc = NULL;
Packit b099d7
	Boolean returnVal = False;
Packit b099d7
	int leafDepth = GetDepth((WidgetClass) cwc);
Packit b099d7
	XmWrapperData wrapperData;
Packit b099d7
Packit b099d7
	_XmProcessLock();
Packit b099d7
Packit b099d7
	if (leafDepth == depth) {
Packit b099d7
		XmBaseClassExt *wcePtr = _XmGetBaseClassExtPtr(wc, XmQmotif);
Packit b099d7
		wrapperData = GetWrapperData((WidgetClass) cwc);
Packit b099d7
		
Packit b099d7
		setvalues_proc = wrapperData->constraintSetValuesLeaf;
Packit b099d7
		post_proc = (*wcePtr)->setValuesPosthook;
Packit b099d7
#ifdef FIX_1392
Packit b099d7
		if (post_proc) {
Packit b099d7
#endif
Packit b099d7
		    if ((--(wrapperData->constraintSetValuesLeafCount)) ==0)
Packit b099d7
			cwc->constraint_class.set_values =
Packit b099d7
				wrapperData->constraintSetValuesLeaf;
Packit b099d7
#ifdef FIX_1392
Packit b099d7
		}
Packit b099d7
#endif
Packit b099d7
	}
Packit b099d7
	else {
Packit b099d7
		int depthDiff = leafDepth - depth;
Packit b099d7
				 
Packit b099d7
	 	for ( ; depthDiff;
Packit b099d7
		 	depthDiff--, cwc = (ConstraintWidgetClass) 
Packit b099d7
		                           cwc->core_class.superclass)
Packit b099d7
			{};
Packit b099d7
		
Packit b099d7
		wrapperData = GetWrapperData((WidgetClass) cwc);
Packit b099d7
		setvalues_proc = wrapperData->constraintSetValuesLeaf;
Packit b099d7
	}
Packit b099d7
Packit b099d7
	_XmProcessUnlock();
Packit b099d7
Packit b099d7
	if (setvalues_proc)
Packit b099d7
		returnVal |= (*setvalues_proc)
Packit b099d7
				(current, req, new_w, args, num_args);
Packit b099d7
	if (post_proc)
Packit b099d7
		returnVal |= (*post_proc)
Packit b099d7
				(current, req, new_w, args, num_args);
Packit b099d7
Packit b099d7
	return returnVal;
Packit b099d7
}
Packit b099d7
Packit b099d7
static Boolean
Packit b099d7
SetValuesLeafWrapper0(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args )
Packit b099d7
{
Packit b099d7
	return SetValuesLeafWrapper(current, req, new_w, args, num_args, 0);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
SetValuesLeafWrapper1(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return SetValuesLeafWrapper(current, req, new_w, args, num_args, 1);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
SetValuesLeafWrapper2(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return SetValuesLeafWrapper(current, req, new_w, args, num_args, 2);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
SetValuesLeafWrapper3(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return SetValuesLeafWrapper(current, req, new_w, args, num_args, 3);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
SetValuesLeafWrapper4(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return SetValuesLeafWrapper(current, req, new_w, args, num_args, 4);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
SetValuesLeafWrapper5(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return SetValuesLeafWrapper(current, req, new_w, args, num_args, 5);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
SetValuesLeafWrapper6(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return SetValuesLeafWrapper(current, req, new_w, args, num_args, 6);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
SetValuesLeafWrapper7(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return SetValuesLeafWrapper(current, req, new_w, args, num_args, 7);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
SetValuesLeafWrapper8(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return SetValuesLeafWrapper(current, req, new_w, args, num_args, 8);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
SetValuesLeafWrapper9(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return SetValuesLeafWrapper(current, req, new_w, args, num_args, 9);
Packit b099d7
}
Packit b099d7
Packit b099d7
static Boolean
Packit b099d7
CSetValuesLeafWrapper0(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return CSetValuesLeafWrapper(current, req, new_w, args, num_args, 0);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
CSetValuesLeafWrapper1(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return CSetValuesLeafWrapper(current, req, new_w, args, num_args, 1);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
CSetValuesLeafWrapper2(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return CSetValuesLeafWrapper(current, req, new_w, args, num_args, 2);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
CSetValuesLeafWrapper3(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return CSetValuesLeafWrapper(current, req, new_w, args, num_args, 3);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
CSetValuesLeafWrapper4(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return CSetValuesLeafWrapper(current, req, new_w, args, num_args, 4);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
CSetValuesLeafWrapper5(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return CSetValuesLeafWrapper(current, req, new_w, args, num_args, 5);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
CSetValuesLeafWrapper6(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return CSetValuesLeafWrapper(current, req, new_w, args, num_args, 6);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
CSetValuesLeafWrapper7(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return CSetValuesLeafWrapper(current, req, new_w, args, num_args, 7);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
CSetValuesLeafWrapper8(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return CSetValuesLeafWrapper(current, req, new_w, args, num_args, 8);
Packit b099d7
}
Packit b099d7
static Boolean
Packit b099d7
CSetValuesLeafWrapper9(
Packit b099d7
	Widget current, Widget req, Widget new_w, ArgList args,
Packit b099d7
		Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	return CSetValuesLeafWrapper(current, req, new_w, args, num_args, 9);
Packit b099d7
}
Packit b099d7
Packit b099d7
static XtArgsProc GetValuesLeafWrappers[] = {
Packit b099d7
	GetValuesLeafWrapper0,
Packit b099d7
	GetValuesLeafWrapper1,
Packit b099d7
	GetValuesLeafWrapper2,
Packit b099d7
	GetValuesLeafWrapper3,
Packit b099d7
	GetValuesLeafWrapper4,
Packit b099d7
	GetValuesLeafWrapper5,
Packit b099d7
	GetValuesLeafWrapper6,
Packit b099d7
	GetValuesLeafWrapper7,
Packit b099d7
	GetValuesLeafWrapper8,
Packit b099d7
	GetValuesLeafWrapper9
Packit b099d7
};
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * This function replaces the objectClass get_values slot and is
Packit b099d7
 * called at the start of every XtGetValues invocation.
Packit b099d7
 */
Packit b099d7
static void 
Packit b099d7
GetValuesRootWrapper(
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	WidgetClass wc = XtClass(new_w);
Packit b099d7
	XmBaseClassExt *wcePtr;
Packit b099d7
Packit b099d7
	wcePtr = _XmGetBaseClassExtPtr(wc, XmQmotif);
Packit b099d7
Packit b099d7
	if (wcePtr && *wcePtr) {
Packit b099d7
	   
Packit b099d7
	   if ((*wcePtr)->getValuesPrehook)
Packit b099d7
		(*((*wcePtr)->getValuesPrehook))(new_w, args, num_args);
Packit b099d7
	
Packit b099d7
	   if ((*wcePtr)->getValuesPosthook) {
Packit b099d7
		XmWrapperData wrapperData;
Packit b099d7
Packit b099d7
		_XmProcessLock();
Packit b099d7
Packit b099d7
		wrapperData = GetWrapperData(wc);
Packit b099d7
		if (wrapperData->getValuesLeafCount == 0) {
Packit b099d7
			wrapperData->getValuesLeaf =
Packit b099d7
				wc->core_class.get_values_hook;
Packit b099d7
			wc->core_class.get_values_hook =
Packit b099d7
				GetValuesLeafWrappers[GetDepth(wc)];
Packit b099d7
		}
Packit b099d7
		(wrapperData->getValuesLeafCount)++;
Packit b099d7
	  
Packit b099d7
		_XmProcessUnlock();
Packit b099d7
	   }
Packit b099d7
	}
Packit b099d7
	if (objectClassWrapper.getValues)
Packit b099d7
		(*objectClassWrapper.getValues) (new_w, args, num_args);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
GetValuesLeafWrapper(
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args,
Packit b099d7
			int depth)
Packit b099d7
{
Packit b099d7
	WidgetClass wc = XtClass(new_w);
Packit b099d7
	XtArgsProc getvalues_proc = NULL;
Packit b099d7
	XtArgsProc post_proc = NULL;
Packit b099d7
	int leafDepth = GetDepth(wc);
Packit b099d7
	XmWrapperData wrapperData;
Packit b099d7
Packit b099d7
	_XmProcessLock();
Packit b099d7
Packit b099d7
	if (leafDepth == depth) { /* Correct depth */
Packit b099d7
	   XmBaseClassExt *wcePtr = _XmGetBaseClassExtPtr(wc, XmQmotif);
Packit b099d7
Packit b099d7
	   wrapperData = GetWrapperData(wc);
Packit b099d7
	   getvalues_proc = wrapperData->getValuesLeaf;
Packit b099d7
	   post_proc = ((*wcePtr)->getValuesPosthook);
Packit b099d7
Packit b099d7
#ifdef FIX_1392
Packit b099d7
	   if (post_proc) {
Packit b099d7
#endif
Packit b099d7
	    if ((--(wrapperData->getValuesLeafCount)) == 0)
Packit b099d7
		wc->core_class.get_values_hook =
Packit b099d7
			wrapperData->getValuesLeaf;
Packit b099d7
#ifdef FIX_1392
Packit b099d7
	   }
Packit b099d7
#endif
Packit b099d7
	}
Packit b099d7
	else {
Packit b099d7
		int depthDiff = leafDepth - depth;
Packit b099d7
Packit b099d7
		for ( ; depthDiff;
Packit b099d7
			depthDiff--, wc = wc->core_class.superclass)
Packit b099d7
			{};
Packit b099d7
		
Packit b099d7
		wrapperData = GetWrapperData(wc);
Packit b099d7
		getvalues_proc = wrapperData->getValuesLeaf;
Packit b099d7
	}
Packit b099d7
Packit b099d7
	_XmProcessUnlock();
Packit b099d7
Packit b099d7
	if (getvalues_proc)
Packit b099d7
		(*getvalues_proc)(new_w, args, num_args);
Packit b099d7
	if (post_proc)
Packit b099d7
		(*post_proc)(new_w, args,  num_args);
Packit b099d7
}
Packit b099d7
Packit b099d7
static void
Packit b099d7
GetValuesLeafWrapper0( Widget new_w, ArgList args,Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	GetValuesLeafWrapper(new_w, args, num_args, 0);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
GetValuesLeafWrapper1( Widget new_w, ArgList args,Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	GetValuesLeafWrapper(new_w, args, num_args, 1);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
GetValuesLeafWrapper2( Widget new_w, ArgList args,Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	GetValuesLeafWrapper(new_w, args, num_args, 2);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
GetValuesLeafWrapper3( Widget new_w, ArgList args,Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	GetValuesLeafWrapper(new_w, args, num_args, 3);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
GetValuesLeafWrapper4( Widget new_w, ArgList args,Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	GetValuesLeafWrapper(new_w, args, num_args, 4);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
GetValuesLeafWrapper5( Widget new_w, ArgList args,Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	GetValuesLeafWrapper(new_w, args, num_args, 5);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
GetValuesLeafWrapper6( Widget new_w, ArgList args,Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	GetValuesLeafWrapper(new_w, args, num_args, 6);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
GetValuesLeafWrapper7( Widget new_w, ArgList args,Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	GetValuesLeafWrapper(new_w, args, num_args, 7);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
GetValuesLeafWrapper8( Widget new_w, ArgList args,Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	GetValuesLeafWrapper(new_w, args, num_args, 8);
Packit b099d7
}
Packit b099d7
static void
Packit b099d7
GetValuesLeafWrapper9( Widget new_w, ArgList args,Cardinal *num_args)
Packit b099d7
{
Packit b099d7
	GetValuesLeafWrapper(new_w, args, num_args, 9);
Packit b099d7
}
Packit b099d7
Packit b099d7
static int 
Packit b099d7
GetDepth(WidgetClass wc)
Packit b099d7
{
Packit b099d7
	int i;
Packit b099d7
Packit b099d7
	for (i = 0;
Packit b099d7
	     wc && wc != rectObjClass;
Packit b099d7
	     i++, wc = wc->core_class.superclass) {};
Packit b099d7
Packit b099d7
	if (wc)
Packit b099d7
		return i;
Packit b099d7
	else
Packit b099d7
		return 0;
Packit b099d7
}
Packit b099d7

Packit b099d7
/*
Packit b099d7
 * These symbols must always be present so applications compiling with
Packit b099d7
 * -DXTHREADS can still link against libraries built without it.  How
Packit b099d7
 * those applications recognize non MT-safe libraries is a different
Packit b099d7
 * issue.
Packit b099d7
 */
Packit b099d7
#ifndef XTHREADS
Packit b099d7
# undef _XmFastSubclassInit
Packit b099d7
# undef _XmIsFastSubclass
Packit b099d7
#endif
Packit b099d7
Packit b099d7
void
Packit b099d7
_XmFastSubclassInit(WidgetClass wc, unsigned int bit)
Packit b099d7
{
Packit b099d7
	XmBaseClassExt *basePtr = _XmGetBaseClassExtPtr(wc, XmQmotif);
Packit b099d7
Packit b099d7
	if (basePtr && (*basePtr))
Packit b099d7
		_XmSetFlagsBit(((*basePtr)->flags), bit);
Packit b099d7
}
Packit b099d7
Packit b099d7
Boolean
Packit b099d7
_XmIsFastSubclass(WidgetClass wc, unsigned int bit)
Packit b099d7
{
Packit b099d7
	XmBaseClassExt *basePtr = _XmGetBaseClassExtPtr(wc, XmQmotif);
Packit b099d7
Packit b099d7
	if (!basePtr || !(*basePtr))
Packit b099d7
		return False;
Packit b099d7
	
Packit b099d7
	if (_XmGetFlagsBit(((*basePtr)->flags), bit))
Packit b099d7
		return True;
Packit b099d7
	else
Packit b099d7
		return False;
Packit b099d7
}
Packit b099d7