Blame lib/Xm/VendorSE.c

Packit b099d7
/* 
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
*/ 
Packit b099d7
/* 
Packit b099d7
 * HISTORY
Packit b099d7
*/ 
Packit b099d7
#ifdef HAVE_CONFIG_H
Packit b099d7
#include <config.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
Packit b099d7
#ifdef REV_INFO
Packit b099d7
#ifndef lint
Packit b099d7
static char rcsid[] = "$TOG: VendorSE.c /main/21 1997/10/13 14:58:18 cshi $"
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
/* (c) Copyright 1989, 1990  DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
Packit b099d7
/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */
Packit b099d7
/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY  */
Packit b099d7
/* (c) Copyright 1988 MICROSOFT CORPORATION */
Packit b099d7
/*
Packit b099d7
 *  (c) Copyright 1995 FUJITSU LIMITED
Packit b099d7
 *  This is source code modified by FUJITSU LIMITED under the Joint
Packit b099d7
 *  Development Agreement for the CDEnext PST.
Packit b099d7
 *  This is unpublished proprietary source code of FUJITSU LIMITED
Packit b099d7
 */
Packit b099d7
Packit b099d7
/* Make sure all wm properties can make it out of the resource manager */
Packit b099d7
Packit b099d7
Packit b099d7
#ifndef X_NOT_STDC_ENV
Packit b099d7
#include <stdlib.h>
Packit b099d7
#endif
Packit b099d7
#include <string.h>
Packit b099d7
#include <Xm/Xm.h>		/* To make cpp on Sun happy. CR 5943 */
Packit b099d7
#include <X11/IntrinsicP.h>
Packit b099d7
#include <X11/ShellP.h>
Packit b099d7
#include <Xm/AtomMgr.h>
Packit b099d7
#include <Xm/BaseClassP.h>
Packit b099d7
#include <Xm/LayoutT.h>
Packit b099d7
#include <Xm/RepType.h>
Packit b099d7
#include <Xm/TraitP.h>
Packit b099d7
#include <Xm/VendorSEP.h>
Packit b099d7
#include "BaseClassI.h"
Packit b099d7
#include "CallbackI.h"
Packit b099d7
#include "MessagesI.h"
Packit b099d7
#include "ResIndI.h"
Packit b099d7
#include "SyntheticI.h"
Packit b099d7
#include "TraversalI.h"
Packit b099d7
#include "VendorSEI.h"
Packit b099d7
#include "XmI.h"
Packit b099d7
Packit b099d7
#define NOTVENDORSHELL	_XmMMsgProtocols_0000
Packit b099d7
Packit b099d7
#define DONT_CARE	-1L
Packit b099d7
#define BIGSIZE		((Dimension)32767)
Packit b099d7
Packit b099d7
Packit b099d7
/********    Static Function Declarations    ********/
Packit b099d7
Packit b099d7
static Boolean CvtStringToHorizontalInt( 
Packit b099d7
                        Display *dpy,
Packit b099d7
                        XrmValue *args,
Packit b099d7
                        Cardinal *num_args,
Packit b099d7
                        XrmValue *from_val,
Packit b099d7
                        XrmValue *toVal,
Packit b099d7
                        XtPointer *data) ;
Packit b099d7
static Boolean CvtStringToVerticalInt( 
Packit b099d7
                        Display *dpy,
Packit b099d7
                        XrmValue *args,
Packit b099d7
                        Cardinal *num_args,
Packit b099d7
                        XrmValue *from_val,
Packit b099d7
                        XrmValue *toVal,
Packit b099d7
                        XtPointer *data) ;
Packit b099d7
static void ClassInitialize( void ) ;
Packit b099d7
static void ClassPartInitialize( 
Packit b099d7
                        WidgetClass w) ;
Packit b099d7
static void DeleteWindowHandler( 
Packit b099d7
                        Widget wid,
Packit b099d7
                        XtPointer closure,
Packit b099d7
                        XtPointer call_data) ;
Packit b099d7
static void OffsetHandler( 
Packit b099d7
                        Widget shell,
Packit b099d7
                        XtPointer clientData,
Packit b099d7
                        XtPointer cd) ;
Packit b099d7
static void InitializePrehook( 
Packit b099d7
                        Widget req,
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
static void Destroy( 
Packit b099d7
                        Widget wid) ;
Packit b099d7
static void GetMWMFunctionsFromProperty( 
Packit b099d7
                        Widget wid,
Packit b099d7
                        int resource_offset,
Packit b099d7
                        XtArgVal *value) ;
Packit b099d7
static void CheckSetRenderTables(Widget wid,
Packit b099d7
				int offset,
Packit b099d7
				XrmValue *value); 
Packit b099d7
Packit b099d7
/********    End Static Function Declarations    ********/
Packit b099d7
Packit b099d7
Packit b099d7
static XtConvertArgRec selfConvertArgs[] = {
Packit b099d7
    { XtBaseOffset, (XtPointer) 0, sizeof(int) }
Packit b099d7
};
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/***************************************************************************
Packit b099d7
 *
Packit b099d7
 * Vendor shell class record
Packit b099d7
 *
Packit b099d7
 ***************************************************************************/
Packit b099d7
Packit b099d7
#define Offset(field) XtOffsetOf( struct _XmVendorShellExtRec, vendor.field)
Packit b099d7
Packit b099d7
static XtResource extResources[] =
Packit b099d7
{
Packit b099d7
    {
Packit b099d7
	XmNextensionType,
Packit b099d7
	XmCExtensionType, XmRExtensionType, sizeof (unsigned char),
Packit b099d7
	XtOffsetOf( struct _XmExtRec, ext.extensionType),
Packit b099d7
	XmRImmediate, (XtPointer)XmSHELL_EXTENSION,
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
	XmNdefaultFontList,
Packit b099d7
	XmCDefaultFontList, XmRFontList, sizeof (XmFontList),
Packit b099d7
	Offset (default_font_list),
Packit b099d7
	XmRImmediate, (XtPointer) NULL, 
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
        "pri.vate",
Packit b099d7
        "Pri.vate", XmRUnsignedChar, sizeof (unsigned char),
Packit b099d7
        Offset (mapStyle),
Packit b099d7
	XmRImmediate, 0
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
        XmNbuttonFontList,
Packit b099d7
        XmCButtonFontList, XmRButtonFontList, sizeof (XmFontList),
Packit b099d7
        Offset (button_font_list),
Packit b099d7
	XmRCallProc, (XtPointer)CheckSetRenderTables, 
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
        XmNlabelFontList,
Packit b099d7
        XmCLabelFontList, XmRLabelFontList, sizeof (XmFontList),
Packit b099d7
        Offset (label_font_list),
Packit b099d7
	XmRCallProc, (XtPointer)CheckSetRenderTables, 
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
        XmNtextFontList,
Packit b099d7
        XmCTextFontList, XmRTextFontList, sizeof (XmFontList),
Packit b099d7
        Offset (text_font_list),
Packit b099d7
	XmRCallProc, (XtPointer)CheckSetRenderTables, 
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
        XmNbuttonRenderTable,
Packit b099d7
        XmCButtonRenderTable, XmRButtonRenderTable, sizeof (XmRenderTable),
Packit b099d7
        Offset (button_font_list),
Packit b099d7
	XmRCallProc, (XtPointer)CheckSetRenderTables, 
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
        XmNlabelRenderTable,
Packit b099d7
        XmCLabelRenderTable, XmRLabelRenderTable, sizeof (XmRenderTable),
Packit b099d7
        Offset (label_font_list),
Packit b099d7
	XmRCallProc, (XtPointer)CheckSetRenderTables, 
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
        XmNtextRenderTable,
Packit b099d7
        XmCTextRenderTable, XmRTextRenderTable, sizeof (XmRenderTable),
Packit b099d7
        Offset (text_font_list),
Packit b099d7
	XmRCallProc, (XtPointer)CheckSetRenderTables, 
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
	XmNaudibleWarning, XmCAudibleWarning, XmRAudibleWarning,
Packit b099d7
	sizeof (Boolean), Offset (audible_warning),
Packit b099d7
	XmRImmediate, (XtPointer) XmBELL,
Packit b099d7
    },    
Packit b099d7
    {
Packit b099d7
	XmNshellUnitType, XmCShellUnitType, XmRUnitType, 
Packit b099d7
	sizeof (unsigned char), Offset (unit_type),
Packit b099d7
	XmRImmediate, (XtPointer) XmPIXELS,
Packit b099d7
    },	
Packit b099d7
    {
Packit b099d7
	XmNdeleteResponse, XmCDeleteResponse, 
Packit b099d7
	XmRDeleteResponse, sizeof(unsigned char),
Packit b099d7
	Offset(delete_response), 
Packit b099d7
	XmRImmediate, (XtPointer) XmDESTROY,
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
	XmNinputPolicy, XmCInputPolicy, 
Packit b099d7
	XmRInputPolicy, sizeof(XmInputPolicy),
Packit b099d7
	Offset(input_policy), 
Packit b099d7
	XmRImmediate, (XtPointer) XmPER_SHELL,
Packit b099d7
    },    
Packit b099d7
    {
Packit b099d7
	XmNkeyboardFocusPolicy, XmCKeyboardFocusPolicy, XmRKeyboardFocusPolicy, 
Packit b099d7
	sizeof(unsigned char),
Packit b099d7
	Offset(focus_policy), 
Packit b099d7
	XmRImmediate, (XtPointer)XmEXPLICIT,
Packit b099d7
    },
Packit b099d7
    { 
Packit b099d7
	XmNmwmDecorations, XmCMwmDecorations, XmRInt, 
Packit b099d7
	sizeof(int), Offset(mwm_hints.decorations), 
Packit b099d7
	XmRImmediate, (XtPointer) DONT_CARE,
Packit b099d7
    },
Packit b099d7
    { 
Packit b099d7
	XmNmwmFunctions, XmCMwmFunctions, XmRInt, 
Packit b099d7
	sizeof(int), Offset(mwm_hints.functions), 
Packit b099d7
	XmRImmediate, (XtPointer) DONT_CARE,
Packit b099d7
    },
Packit b099d7
    { 
Packit b099d7
	XmNmwmInputMode, XmCMwmInputMode, XmRInt, 
Packit b099d7
	sizeof(int), Offset(mwm_hints.input_mode), 
Packit b099d7
	XmRImmediate, (XtPointer) DONT_CARE,
Packit b099d7
    },
Packit b099d7
    { 
Packit b099d7
	XmNmwmMenu, XmCMwmMenu, XmRString, 
Packit b099d7
	sizeof(String), Offset(mwm_menu), 
Packit b099d7
	XmRImmediate, (XtPointer) NULL, 
Packit b099d7
    },
Packit b099d7
    { 
Packit b099d7
	XmNfocusMovedCallback, XmCCallback, XmRCallback, 
Packit b099d7
	sizeof(XtCallbackList), Offset(focus_moved_callback), 
Packit b099d7
	XmRImmediate, NULL,
Packit b099d7
    },
Packit b099d7
    { 
Packit b099d7
	XmNrealizeCallback, XmCCallback, XmRCallback, 
Packit b099d7
	sizeof(XtCallbackList), Offset(realize_callback), 
Packit b099d7
	XmRImmediate, NULL,
Packit b099d7
    },
Packit b099d7
    { 
Packit b099d7
	XmNinputMethod, XmCInputMethod, XmRString, 
Packit b099d7
	sizeof(String), Offset(input_method_string), 
Packit b099d7
	XmRImmediate, NULL,
Packit b099d7
    },
Packit b099d7
    { 
Packit b099d7
	XmNpreeditType, XmCPreeditType, XmRString, 
Packit b099d7
	sizeof(String), Offset(preedit_type_string), 
Packit b099d7
	XmRImmediate, "OverTheSpot,OffTheSpot,Root,OnTheSpot",
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
      XmNlightThreshold, XmCLightThreshold, XmRInt,
Packit b099d7
      sizeof(unsigned int), Offset(light_threshold),
Packit b099d7
      XmRImmediate, NULL,
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
      XmNdarkThreshold, XmCDarkThreshold, XmRInt,
Packit b099d7
      sizeof(unsigned int), Offset(dark_threshold),
Packit b099d7
      XmRImmediate, NULL,
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
      XmNforegroundThreshold, XmCForegroundThreshold, XmRInt,
Packit b099d7
      sizeof(unsigned int), Offset(foreground_threshold),
Packit b099d7
      XmRImmediate, NULL,
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
      XmNlayoutDirection, XmCLayoutDirection, XmRDirection,
Packit b099d7
      sizeof(XmDirection), Offset(layout_direction),
Packit b099d7
      XmRImmediate, (XtPointer) XmLEFT_TO_RIGHT,
Packit b099d7
    },
Packit b099d7
    /* add a synonym to ShellUnitType */
Packit b099d7
    {
Packit b099d7
	XmNunitType, XmCUnitType, XmRUnitType, 
Packit b099d7
	sizeof (unsigned char), Offset (unit_type),
Packit b099d7
	XmRImmediate, (XtPointer) XmPIXELS,
Packit b099d7
    },	
Packit b099d7
    {
Packit b099d7
        XmNverifyPreedit, XmCVerifyPreedit, XmRBoolean,
Packit b099d7
        sizeof (Boolean), Offset (verify_preedit),
Packit b099d7
        XmRImmediate, (XtPointer) False,
Packit b099d7
    },
Packit b099d7
};
Packit b099d7
#undef Offset
Packit b099d7
Packit b099d7
/*  Definition for resources that need special processing in get values  */
Packit b099d7
Packit b099d7
#define ParentOffset(x) 	\
Packit b099d7
	(XtOffsetOf(VendorShellRec, x) | XmLOGICAL_PARENT_RESOURCE)
Packit b099d7
#define ExtOffset(x)		XtOffsetOf(XmVendorShellExtRec, x)
Packit b099d7
Packit b099d7
static XmSyntheticResource synResources[] =
Packit b099d7
{
Packit b099d7
    { 
Packit b099d7
	XmNx, sizeof (Position),
Packit b099d7
	ParentOffset (core.x), 
Packit b099d7
	XmeFromHorizontalPixels,
Packit b099d7
	XmeToHorizontalPixels,
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
	XmNy, sizeof (Position),
Packit b099d7
	ParentOffset (core.y), 
Packit b099d7
	XmeFromVerticalPixels,
Packit b099d7
	XmeToVerticalPixels,
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
	XmNwidth, sizeof (Dimension),
Packit b099d7
	ParentOffset (core.width), 
Packit b099d7
	XmeFromHorizontalPixels,
Packit b099d7
	XmeToHorizontalPixels,
Packit b099d7
    },
Packit b099d7
    { 
Packit b099d7
	XmNheight, sizeof (Dimension),
Packit b099d7
	ParentOffset (core.height), 
Packit b099d7
	XmeFromVerticalPixels,
Packit b099d7
	XmeToVerticalPixels,
Packit b099d7
    },
Packit b099d7
    {
Packit b099d7
	XmNborderWidth, sizeof (Dimension),
Packit b099d7
	ParentOffset (core.border_width), 
Packit b099d7
	XmeFromHorizontalPixels,
Packit b099d7
	XmeToHorizontalPixels,
Packit b099d7
    },
Packit b099d7
Packit b099d7
/* size_hints minus things stored in core */
Packit b099d7
Packit b099d7
    { 
Packit b099d7
	XmNminWidth, sizeof(int),
Packit b099d7
	ParentOffset(wm.size_hints.min_width), 
Packit b099d7
	XmeFromHorizontalPixels,
Packit b099d7
	XmeToHorizontalPixels,
Packit b099d7
    },	
Packit b099d7
    { 
Packit b099d7
	XmNminHeight, sizeof(int),
Packit b099d7
	ParentOffset(wm.size_hints.min_height), 
Packit b099d7
	XmeFromVerticalPixels,
Packit b099d7
	XmeToVerticalPixels,
Packit b099d7
    },
Packit b099d7
    { 
Packit b099d7
	XmNmaxWidth, sizeof(int),
Packit b099d7
	ParentOffset(wm.size_hints.max_width), 
Packit b099d7
	XmeFromHorizontalPixels,
Packit b099d7
	XmeToHorizontalPixels,
Packit b099d7
    },	
Packit b099d7
    { 	
Packit b099d7
	XmNmaxHeight,sizeof(int),
Packit b099d7
	ParentOffset(wm.size_hints.max_height),
Packit b099d7
	XmeFromVerticalPixels,
Packit b099d7
	XmeToVerticalPixels,
Packit b099d7
    },
Packit b099d7
Packit b099d7
/* wm_hints */
Packit b099d7
Packit b099d7
    { 
Packit b099d7
	XmNiconX, sizeof(int),
Packit b099d7
	ParentOffset(wm.wm_hints.icon_x), 
Packit b099d7
	XmeFromHorizontalPixels,
Packit b099d7
	XmeToHorizontalPixels,
Packit b099d7
    },
Packit b099d7
    { 
Packit b099d7
	XmNiconY, sizeof(int),
Packit b099d7
	ParentOffset(wm.wm_hints.icon_y),  
Packit b099d7
	XmeFromVerticalPixels,
Packit b099d7
	XmeToVerticalPixels,
Packit b099d7
    },
Packit b099d7
    { 
Packit b099d7
	XmNmwmFunctions, sizeof(int),
Packit b099d7
	ExtOffset(vendor.mwm_hints.functions),
Packit b099d7
	GetMWMFunctionsFromProperty,
Packit b099d7
	(XmImportProc)NULL,
Packit b099d7
    },
Packit b099d7
};
Packit b099d7
Packit b099d7
#undef ParentOffset
Packit b099d7
#undef ExtOffset
Packit b099d7
Packit b099d7
static XmBaseClassExtRec myBaseClassExtRec = {
Packit b099d7
    NULL,                               /* Next extension         */
Packit b099d7
    NULLQUARK,                          /* record type XmQmotif   */
Packit b099d7
    XmBaseClassExtVersion,              /* version                */
Packit b099d7
    sizeof(XmBaseClassExtRec),          /* size                   */
Packit b099d7
    InitializePrehook,		        /* initialize prehook     */
Packit b099d7
    XmInheritSetValuesPrehook,	        /* set_values prehook     */
Packit b099d7
    (XtInitProc)NULL,		        /* initialize posthook    */
Packit b099d7
    (XtSetValuesFunc)NULL,	        /* set_values posthook    */
Packit b099d7
    NULL,				/* secondary class        */
Packit b099d7
    (XtInitProc)NULL,		        /* creation proc          */
Packit b099d7
    (XmGetSecResDataFunc)NULL,          /* getSecRes data         */
Packit b099d7
    {0},                                /* fast subclass          */
Packit b099d7
    XmInheritGetValuesPrehook,	        /* get_values prehook     */
Packit b099d7
    (XtArgsProc)NULL,		        /* get_values posthook    */
Packit b099d7
    XmInheritClassPartInitPrehook,	/* class_part_prehook     */
Packit b099d7
    XmInheritClassPartInitPosthook,     /* class_part_posthook    */
Packit b099d7
    NULL,	 			/* compiled_ext_resources */   
Packit b099d7
    NULL,	 			/* ext_resources       	  */   
Packit b099d7
    0,					/* resource_count     	  */   
Packit b099d7
    TRUE,				/* use_sub_resources	  */
Packit b099d7
};
Packit b099d7
Packit b099d7
externaldef(xmvendorshellextclassrec)
Packit b099d7
XmVendorShellExtClassRec xmVendorShellExtClassRec = {
Packit b099d7
    {	
Packit b099d7
	(WidgetClass) &xmShellExtClassRec,/* superclass		*/   
Packit b099d7
	"VendorShell",			/* class_name 		*/   
Packit b099d7
	sizeof(XmVendorShellExtRec), 	/* size 		*/   
Packit b099d7
	ClassInitialize, 		/* Class Initializer 	*/   
Packit b099d7
	ClassPartInitialize,	        /* class_part_init 	*/ 
Packit b099d7
	FALSE, 				/* Class init'ed ? 	*/   
Packit b099d7
	(XtInitProc)NULL,		/* initialize         	*/   
Packit b099d7
	(XtArgsProc)NULL, 		/* initialize_notify    */ 
Packit b099d7
	NULL,	 			/* realize            	*/   
Packit b099d7
	NULL,		 		/* actions            	*/   
Packit b099d7
	0,				/* num_actions        	*/   
Packit b099d7
	extResources, 			/* resources          	*/   
Packit b099d7
	XtNumber(extResources),		/* resource_count     	*/   
Packit b099d7
	NULLQUARK, 			/* xrm_class          	*/   
Packit b099d7
	FALSE, 				/* compress_motion    	*/   
Packit b099d7
	FALSE, 				/* compress_exposure  	*/   
Packit b099d7
	FALSE, 				/* compress_enterleave	*/   
Packit b099d7
	FALSE, 				/* visible_interest   	*/   
Packit b099d7
	Destroy,			/* destroy            	*/   
Packit b099d7
	NULL,	 			/* resize             	*/   
Packit b099d7
	NULL, 				/* expose             	*/   
Packit b099d7
	(XtSetValuesFunc)NULL,		/* set_values         	*/   
Packit b099d7
	(XtArgsFunc)NULL, 		/* set_values_hook      */ 
Packit b099d7
	NULL,	 			/* set_values_almost    */ 
Packit b099d7
	(XtArgsProc)NULL,		/* get_values_hook      */ 
Packit b099d7
	NULL,				/* accept_focus       	*/   
Packit b099d7
	XtVersion, 			/* intrinsics version 	*/   
Packit b099d7
	NULL, 				/* callback offsets   	*/   
Packit b099d7
	NULL,				/* tm_table           	*/   
Packit b099d7
	NULL, 				/* query_geometry       */ 
Packit b099d7
	NULL,				/* display_accelerator  */ 
Packit b099d7
	(XtPointer)&myBaseClassExtRec,	/* extension            */ 
Packit b099d7
    },	
Packit b099d7
    {					/* ext			*/
Packit b099d7
	synResources,			/* synthetic resources	*/
Packit b099d7
	XtNumber(synResources),		/* num syn resources	*/
Packit b099d7
	NULL,				/* extension		*/
Packit b099d7
    },
Packit b099d7
    {					/* desktop		*/
Packit b099d7
	NULL,				/* child_class		*/
Packit b099d7
	XtInheritInsertChild,		/* insert_child		*/
Packit b099d7
	XtInheritDeleteChild,		/* delete_child		*/
Packit b099d7
	NULL,				/* extension		*/
Packit b099d7
    },
Packit b099d7
    {					/* shell ext		*/
Packit b099d7
	XmInheritEventHandler,		/* structureNotify	*/
Packit b099d7
	NULL,				/* extension		*/
Packit b099d7
    },
Packit b099d7
    {					/* vendor ext		*/
Packit b099d7
	DeleteWindowHandler,            /* delete window handler*/
Packit b099d7
	OffsetHandler,	                /* offset handler	*/
Packit b099d7
	NULL,				/* extension		*/
Packit b099d7
    },
Packit b099d7
};
Packit b099d7
Packit b099d7
externaldef(xmVendorShellExtobjectclass) WidgetClass 
Packit b099d7
       xmVendorShellExtObjectClass = (WidgetClass) (&xmVendorShellExtClassRec);
Packit b099d7
Packit b099d7
Packit b099d7

Packit b099d7
/* ARGSUSED */
Packit b099d7
static Boolean 
Packit b099d7
CvtStringToHorizontalInt(
Packit b099d7
        Display *display,	
Packit b099d7
        XrmValue *args,
Packit b099d7
        Cardinal *num_args,	/* unused */
Packit b099d7
        XrmValue *from,
Packit b099d7
        XrmValue *to,
Packit b099d7
        XtPointer *converter_data)
Packit b099d7
{
Packit b099d7
    Widget widget = *(Widget*) args[0].addr ;
Packit b099d7
    Screen * screen = XtScreen(widget) ;
Packit b099d7
    unsigned char defaultFromType = _XmGetUnitType(widget) ;
Packit b099d7
    int tmpPix;
Packit b099d7
    Boolean parseError;
Packit b099d7
 
Packit b099d7
    tmpPix = (int)
Packit b099d7
      _XmConvertStringToUnits (screen, from->addr, (int) defaultFromType,
Packit b099d7
			       XmHORIZONTAL, XmPIXELS, (XtEnum*) &parseError);
Packit b099d7
    if (parseError)
Packit b099d7
        {
Packit b099d7
        XtDisplayStringConversionWarning(display, (char *)from->addr, 
Packit b099d7
					 XmRHorizontalDimension);
Packit b099d7
        return False;
Packit b099d7
        }
Packit b099d7
    else
Packit b099d7
        _XM_CONVERTER_DONE( to, int, tmpPix, ; )
Packit b099d7
}
Packit b099d7
Packit b099d7
/* ARGSUSED */
Packit b099d7
static Boolean 
Packit b099d7
CvtStringToVerticalInt(
Packit b099d7
        Display *display,	
Packit b099d7
        XrmValue *args,
Packit b099d7
        Cardinal *num_args,	/* unused */
Packit b099d7
        XrmValue *from,
Packit b099d7
        XrmValue *to,
Packit b099d7
        XtPointer *converter_data)
Packit b099d7
{
Packit b099d7
    Widget widget = *(Widget*) args[0].addr ;
Packit b099d7
    Screen * screen = XtScreen(widget) ;
Packit b099d7
    unsigned char defaultFromType = _XmGetUnitType(widget) ;
Packit b099d7
    int tmpPix;
Packit b099d7
    Boolean parseError;
Packit b099d7
 
Packit b099d7
    tmpPix = (int)
Packit b099d7
	_XmConvertStringToUnits(screen, from->addr, (int) defaultFromType,
Packit b099d7
				XmVERTICAL, XmPIXELS, (XtEnum*) &parseError);
Packit b099d7
    if (parseError)
Packit b099d7
	{
Packit b099d7
            XtDisplayStringConversionWarning(display, (char *)from->addr, 
Packit b099d7
					     XmRVerticalPosition);
Packit b099d7
            return False;
Packit b099d7
	}
Packit b099d7
    else
Packit b099d7
	_XM_CONVERTER_DONE( to, int, tmpPix, ; )
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ClassInitialize
Packit b099d7
 *    Set up the converters for VendorShell int pixels
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
ClassInitialize( void )
Packit b099d7
{
Packit b099d7
    XtSetTypeConverter(XmRString, 
Packit b099d7
		       XmRHorizontalInt, 
Packit b099d7
		       CvtStringToHorizontalInt, 
Packit b099d7
		       selfConvertArgs, 
Packit b099d7
		       XtNumber(selfConvertArgs),
Packit b099d7
		       XtCacheNone, (XtDestructor)NULL);
Packit b099d7
    XtSetTypeConverter(XmRString, 
Packit b099d7
		       XmRVerticalInt, 
Packit b099d7
		       CvtStringToVerticalInt, 
Packit b099d7
		       selfConvertArgs, 
Packit b099d7
		       XtNumber(selfConvertArgs),
Packit b099d7
		       XtCacheNone, (XtDestructor)NULL);
Packit b099d7
Packit b099d7
    myBaseClassExtRec.record_type = XmQmotif;
Packit b099d7
}
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ClassPartInitialize
Packit b099d7
 *    Set up the inheritance mechanism for the routines exported by
Packit b099d7
 *    vendorShells class part.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
ClassPartInitialize(
Packit b099d7
        WidgetClass w )
Packit b099d7
{
Packit b099d7
    XmVendorShellExtObjectClass wc = (XmVendorShellExtObjectClass) w;
Packit b099d7
    XmVendorShellExtObjectClass sc =
Packit b099d7
      (XmVendorShellExtObjectClass) wc->object_class.superclass;
Packit b099d7
    
Packit b099d7
    if (wc == (XmVendorShellExtObjectClass)xmVendorShellExtObjectClass)
Packit b099d7
      return;
Packit b099d7
Packit b099d7
    if (wc->vendor_class.delete_window_handler == XmInheritProtocolHandler)
Packit b099d7
      wc->vendor_class.delete_window_handler = 
Packit b099d7
	sc->vendor_class.delete_window_handler;
Packit b099d7
Packit b099d7
    if (wc->vendor_class.offset_handler == XmInheritProtocolHandler)
Packit b099d7
      wc->vendor_class.offset_handler = 
Packit b099d7
	sc->vendor_class.offset_handler;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *  DeleteWindowHandler
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void
Packit b099d7
DeleteWindowHandler(
Packit b099d7
        Widget wid,
Packit b099d7
        XtPointer closure,
Packit b099d7
        XtPointer call_data )	/* unused */
Packit b099d7
{
Packit b099d7
        VendorShellWidget w = (VendorShellWidget) wid ;
Packit b099d7
    XmVendorShellExtObject ve = (XmVendorShellExtObject) closure;
Packit b099d7
Packit b099d7
    switch(ve->vendor.delete_response)
Packit b099d7
      {
Packit b099d7
	case XmUNMAP:
Packit b099d7
	  if (w->shell.popped_up)
Packit b099d7
	    XtPopdown((Widget) w);
Packit b099d7
	  else
Packit b099d7
	    XtUnmapWidget((Widget) w);
Packit b099d7
	  break;
Packit b099d7
	  
Packit b099d7
	case XmDESTROY:
Packit b099d7
	  if (XtIsApplicationShell((Widget) w))
Packit b099d7
	    {
Packit b099d7
		XtDestroyApplicationContext
Packit b099d7
		  (XtWidgetToApplicationContext((Widget) w));
Packit b099d7
		exit(0);
Packit b099d7
	    }
Packit b099d7
	  else
Packit b099d7
	    XtDestroyWidget((Widget) w);
Packit b099d7
	  break;
Packit b099d7
	  
Packit b099d7
	case XmDO_NOTHING:
Packit b099d7
	default:
Packit b099d7
	  break;
Packit b099d7
      }
Packit b099d7
}    
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *     OffsetHandler
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void
Packit b099d7
OffsetHandler(
Packit b099d7
        Widget shell,		/* unused */
Packit b099d7
        XtPointer clientData,
Packit b099d7
        XtPointer cd )
Packit b099d7
{
Packit b099d7
        XmAnyCallbackStruct *callData = (XmAnyCallbackStruct *) cd ;
Packit b099d7
    XClientMessageEvent		*offsetEvent;
Packit b099d7
    XmVendorShellExtObject	ve = (XmVendorShellExtObject)clientData;
Packit b099d7
Packit b099d7
    offsetEvent = (XClientMessageEvent *) callData->event;
Packit b099d7
Packit b099d7
    ve->vendor.lastOffsetSerial = offsetEvent->serial;
Packit b099d7
    ve->vendor.xOffset = (Position) offsetEvent->data.l[1];
Packit b099d7
    ve->vendor.yOffset = (Position) offsetEvent->data.l[2];
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *     InitializePrehook
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
InitializePrehook(
Packit b099d7
        Widget req,
Packit b099d7
        Widget new_w,
Packit b099d7
        ArgList args,
Packit b099d7
        Cardinal *num_args )
Packit b099d7
{
Packit b099d7
    XmExtObjectClass		ec = (XmExtObjectClass) XtClass(new_w);
Packit b099d7
    XmBaseClassExt		*wcePtr;
Packit b099d7
    XmExtObject			ne = (XmExtObject) new_w;
Packit b099d7
    Widget			parent = ne->ext.logicalParent;
Packit b099d7
    XmExtObjectClass		pec = (XmExtObjectClass) XtClass(parent);
Packit b099d7
    XmBaseClassExt		*pcePtr;
Packit b099d7
    XmWidgetExtData		extData;
Packit b099d7
Packit b099d7
    wcePtr = _XmGetBaseClassExtPtr(ec, XmQmotif);
Packit b099d7
    pcePtr = _XmGetBaseClassExtPtr(pec, XmQmotif);
Packit b099d7
Packit b099d7
    if ((*wcePtr)->use_sub_resources)
Packit b099d7
      {
Packit b099d7
          _XmProcessLock();
Packit b099d7
	  /*
Packit b099d7
	   * get a uncompiled resource list to use with
Packit b099d7
	   * XtGetSubresources. We can't do this in
Packit b099d7
	   * ClassPartInitPosthook because Xt doesn't set class_inited at
Packit b099d7
	   * the right place and thereby mishandles the
Packit b099d7
	   * XtGetResourceList call
Packit b099d7
	   */
Packit b099d7
	  if ((*wcePtr)->ext_resources == NULL)
Packit b099d7
	    {
Packit b099d7
		ec->object_class.resources =
Packit b099d7
		  (*wcePtr)->compiled_ext_resources;
Packit b099d7
		ec->object_class.num_resources =		
Packit b099d7
		  (*wcePtr)->num_ext_resources;
Packit b099d7
Packit b099d7
		XtGetResourceList((WidgetClass) ec,
Packit b099d7
				  &((*wcePtr)->ext_resources),
Packit b099d7
				  &((*wcePtr)->num_ext_resources));
Packit b099d7
Packit b099d7
	    }
Packit b099d7
	  if ((*pcePtr)->ext_resources == NULL)
Packit b099d7
	    {
Packit b099d7
		XtGetResourceList((WidgetClass) pec,
Packit b099d7
				  &((*pcePtr)->ext_resources),
Packit b099d7
				  &((*pcePtr)->num_ext_resources));
Packit b099d7
	    }
Packit b099d7
	  XtGetSubresources(parent,
Packit b099d7
			    (XtPointer)new_w,
Packit b099d7
			    NULL, NULL,
Packit b099d7
			    (*wcePtr)->ext_resources,
Packit b099d7
			    (*wcePtr)->num_ext_resources,
Packit b099d7
			    args, *num_args);
Packit b099d7
Packit b099d7
	  extData = (XmWidgetExtData) XtCalloc(1, sizeof(XmWidgetExtDataRec));
Packit b099d7
	  _XmPushWidgetExtData(parent, extData, ne->ext.extensionType);
Packit b099d7
	  
Packit b099d7
	  extData->widget = new_w;
Packit b099d7
	  extData->reqWidget = (Widget)
Packit b099d7
	    XtMalloc(XtClass(new_w)->core_class.widget_size);
Packit b099d7
	  memcpy( extData->reqWidget, req,
Packit b099d7
		XtClass(new_w)->core_class.widget_size);
Packit b099d7
	  
Packit b099d7
	  /*  Convert the fields from unit values to pixel values  */
Packit b099d7
Packit b099d7
	  XtGetSubresources(parent,
Packit b099d7
			    (XtPointer)parent,
Packit b099d7
			    NULL, NULL,
Packit b099d7
			    (*pcePtr)->ext_resources,
Packit b099d7
			    (*pcePtr)->num_ext_resources,
Packit b099d7
			    args, *num_args);
Packit b099d7
Packit b099d7
	  _XmExtImportArgs(new_w, args, num_args);
Packit b099d7
	  _XmProcessUnlock();
Packit b099d7
      }
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  Destroy
Packit b099d7
 *
Packit b099d7
 *    This needs to be in the ext object because the extension gets
Packit b099d7
 *    blown away before the primary does since it's a child. Otherwise
Packit b099d7
 *    we'd have it in the primary.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
Destroy(
Packit b099d7
        Widget wid )
Packit b099d7
{
Packit b099d7
    XmVendorShellExtObject ve = (XmVendorShellExtObject) wid ;
Packit b099d7
    if (ve->vendor.mwm_menu)
Packit b099d7
      XtFree(ve->vendor.mwm_menu);
Packit b099d7
    if (ve->vendor.input_method_string)
Packit b099d7
      XtFree(ve->vendor.input_method_string);
Packit b099d7
    if (ve->vendor.preedit_type_string)
Packit b099d7
      XtFree(ve->vendor.preedit_type_string);
Packit b099d7
    if (ve->vendor.label)
Packit b099d7
	XtDestroyWidget(ve->vendor.label);
Packit b099d7
    if (ve->vendor.slider)
Packit b099d7
	XtDestroyWidget(ve->vendor.slider);
Packit b099d7
    if (ve->vendor.timer)
Packit b099d7
	XtRemoveTimeOut(ve->vendor.timer);
Packit b099d7
    if (ve->vendor.duration_timer)
Packit b099d7
	XtRemoveTimeOut(ve->vendor.duration_timer);
Packit b099d7
    _XmDestroyFocusData(ve->vendor.focus_data);
Packit b099d7
}
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * XmRCallProc routine for checking VendorShell render table resources
Packit b099d7
 * before setting them to NULL if no value is specified
Packit b099d7
 * for both XmN<foo>renderTable and XmN<foo>fontList.
Packit b099d7
 * If the appropriate bit in "mapStyle" has been set, then the
Packit b099d7
 * function has been called twice on same widget and resource offset, thus
Packit b099d7
 * resource needs to be set NULL, otherwise leave it alone.
Packit b099d7
 */
Packit b099d7
/* ARGSUSED */
Packit b099d7
static void 
Packit b099d7
CheckSetRenderTables(Widget wid,
Packit b099d7
		     int offset,
Packit b099d7
		     XrmValue *value )
Packit b099d7
{
Packit b099d7
  XmVendorShellExtObject ve;
Packit b099d7
  XmWidgetExtData extData;
Packit b099d7
Packit b099d7
#define SET_BFL(state) (state |= 0x01)
Packit b099d7
#define IS_SET_BFL(state) (state & 0x01)
Packit b099d7
#define SET_LFL(state) (state |= 0x02)
Packit b099d7
#define IS_SET_LFL(state) (state & 0x02)
Packit b099d7
#define SET_TFL(state) (state |= 0x04)
Packit b099d7
#define IS_SET_TFL(state) (state & 0x04)
Packit b099d7
  
Packit b099d7
  extData = _XmGetWidgetExtData(wid, XmSHELL_EXTENSION);
Packit b099d7
Packit b099d7
if(extData == NULL)
Packit b099d7
{
Packit b099d7
#ifdef DEBUG
Packit b099d7
        XmeWarning(NULL, "_XmGetWidgetExtData() returned NULL pointer.");
Packit b099d7
#endif
Packit b099d7
        return;
Packit b099d7
}
Packit b099d7
Packit b099d7
  ve = (XmVendorShellExtObject)(extData->widget);
Packit b099d7
Packit b099d7
  if (((char *)ve + offset) == (char *) &(ve->vendor.button_font_list)) {
Packit b099d7
	if (IS_SET_BFL(ve->vendor.mapStyle))
Packit b099d7
		value->addr = NULL;
Packit b099d7
	else {
Packit b099d7
		SET_BFL(ve->vendor.mapStyle);
Packit b099d7
		value->addr = ((char *)ve + offset);
Packit b099d7
	}
Packit b099d7
  }
Packit b099d7
  else if (((char *)ve + offset) == (char *) &(ve->vendor.label_font_list)) {
Packit b099d7
	if (IS_SET_LFL(ve->vendor.mapStyle))
Packit b099d7
		value->addr = NULL;
Packit b099d7
	else {
Packit b099d7
		SET_LFL(ve->vendor.mapStyle);
Packit b099d7
		value->addr = ((char *)ve + offset);
Packit b099d7
	}
Packit b099d7
  }
Packit b099d7
  else if (((char *)ve + offset) == (char *) &(ve->vendor.text_font_list)) {
Packit b099d7
	if (IS_SET_TFL(ve->vendor.mapStyle))
Packit b099d7
		value->addr = NULL;
Packit b099d7
	else {
Packit b099d7
		SET_TFL(ve->vendor.mapStyle);
Packit b099d7
		value->addr = ((char *)ve + offset);
Packit b099d7
	}
Packit b099d7
  }
Packit b099d7
}
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  _XmGetAudibleWarning
Packit b099d7
 *       This function is called by a widget to get the audibleWarning
Packit b099d7
 *   value. This is done by checking to see if any of the widgets, 
Packit b099d7
 *   in the widget's parent hierarchy is a subclass of VendorShell widget 
Packit b099d7
 *   class, and if it is, returning the  VendorShell resource value. 
Packit b099d7
 *   If no VendorShell is found, returns XmBELL, since it is the default
Packit b099d7
 *   value for this resource.
Packit b099d7
 *************************************************************************/
Packit b099d7
unsigned char
Packit b099d7
_XmGetAudibleWarning(Widget w)
Packit b099d7
{
Packit b099d7
  XmWidgetExtData extData ;
Packit b099d7
  XmVendorShellExtObject vendorExt;
Packit b099d7
Packit b099d7
  while (w) {
Packit b099d7
    if (XmIsVendorShell (w))
Packit b099d7
      {
Packit b099d7
	extData = _XmGetWidgetExtData(w, XmSHELL_EXTENSION); 
Packit b099d7
Packit b099d7
        if(extData == NULL)
Packit b099d7
          {
Packit b099d7
#ifdef DEBUG
Packit b099d7
            XmeWarning(NULL, "_XmGetWidgetExtData() returned NULL pointer.");
Packit b099d7
#endif
Packit b099d7
            return XmBELL;
Packit b099d7
        }
Packit b099d7
Packit b099d7
Packit b099d7
	vendorExt = (XmVendorShellExtObject) extData->widget;
Packit b099d7
	return vendorExt->vendor.audible_warning;
Packit b099d7
      }
Packit b099d7
    else
Packit b099d7
      w = XtParent(w);
Packit b099d7
  }
Packit b099d7
  return (XmBELL);
Packit b099d7
} 
Packit b099d7
Packit b099d7
/****************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
GetMWMFunctionsFromProperty(
Packit b099d7
        Widget wid,
Packit b099d7
        int resource_offset,	/* unused */
Packit b099d7
        XtArgVal *value )
Packit b099d7
{
Packit b099d7
  Atom actual_type;
Packit b099d7
  int actual_format;
Packit b099d7
  unsigned long num_items, bytes_after;
Packit b099d7
  PropMwmHints *prop = NULL ;
Packit b099d7
  XmVendorShellExtObject ve = (XmVendorShellExtObject) wid ;
Packit b099d7
  Widget shell = ve->ext.logicalParent ;
Packit b099d7
  Atom mwm_hints_atom ;
Packit b099d7
Packit b099d7
  if(    !XtIsRealized( shell)    )
Packit b099d7
    {   
Packit b099d7
      *value = (XtArgVal) ve->vendor.mwm_hints.functions ;
Packit b099d7
      return ;
Packit b099d7
    } 
Packit b099d7
  mwm_hints_atom = XInternAtom( XtDisplay( shell), _XA_MWM_HINTS, FALSE);
Packit b099d7
  XGetWindowProperty( XtDisplay( shell), XtWindow( shell), mwm_hints_atom, 0,
Packit b099d7
		     (long) PROP_MWM_HINTS_ELEMENTS, FALSE, mwm_hints_atom,
Packit b099d7
		     &actual_type, &actual_format, &num_items, &bytes_after,
Packit b099d7
		     (unsigned char **) &prop);
Packit b099d7
  if(    (actual_type != mwm_hints_atom)
Packit b099d7
     ||  (actual_format != 32)
Packit b099d7
     ||  (num_items < PROP_MWM_HINTS_ELEMENTS)
Packit b099d7
     ||  (prop == NULL)    )
Packit b099d7
    {
Packit b099d7
      if(    prop != NULL    )
Packit b099d7
	{
Packit b099d7
	  XFree( (char *)prop) ;
Packit b099d7
	}
Packit b099d7
      *value = (XtArgVal) ve->vendor.mwm_hints.functions ;
Packit b099d7
      return ;
Packit b099d7
    }
Packit b099d7
  *value = (XtArgVal) prop->functions ;
Packit b099d7
  XFree( (char *) prop) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/******* XmeFunctions ********/
Packit b099d7
Packit b099d7
void
Packit b099d7
XmeAddFocusChangeCallback(Widget w, 
Packit b099d7
			  XtCallbackProc proc, 
Packit b099d7
			  XtPointer data)
Packit b099d7
{
Packit b099d7
  XmWidgetExtData extData ;
Packit b099d7
  XmVendorShellExtObject vendorExt;
Packit b099d7
  _XmWidgetToAppContext(w);
Packit b099d7
Packit b099d7
  _XmAppLock(app);
Packit b099d7
Packit b099d7
  if (XmIsVendorShell(w) == False) {
Packit b099d7
    XmeWarning(w, NOTVENDORSHELL);
Packit b099d7
    _XmAppUnlock(app);
Packit b099d7
    return;
Packit b099d7
  }
Packit b099d7
Packit b099d7
  extData = _XmGetWidgetExtData(w, XmSHELL_EXTENSION); 
Packit b099d7
Packit b099d7
  if(extData == NULL)
Packit b099d7
  {
Packit b099d7
#ifdef DEBUG
Packit b099d7
    XmeWarning(NULL, "_XmGetWidgetExtData() returned NULL pointer.");
Packit b099d7
#endif
Packit b099d7
    _XmAppUnlock(app);
Packit b099d7
    return;
Packit b099d7
  }
Packit b099d7
Packit b099d7
  vendorExt = (XmVendorShellExtObject) extData->widget;
Packit b099d7
Packit b099d7
  _XmAddCallback((InternalCallbackList *) 
Packit b099d7
		 &(vendorExt->vendor.focus_moved_callback), proc, data);
Packit b099d7
  _XmAppUnlock(app);
Packit b099d7
}
Packit b099d7
Packit b099d7
void
Packit b099d7
XmeRemoveFocusChangeCallback(Widget w, 
Packit b099d7
			     XtCallbackProc proc, 
Packit b099d7
			     XtPointer data)
Packit b099d7
{
Packit b099d7
  XmWidgetExtData extData ;
Packit b099d7
  XmVendorShellExtObject vendorExt;
Packit b099d7
  _XmWidgetToAppContext(w);
Packit b099d7
Packit b099d7
  _XmAppLock(app);
Packit b099d7
Packit b099d7
  if (XmIsVendorShell(w) == False) {
Packit b099d7
    XmeWarning(w, NOTVENDORSHELL);
Packit b099d7
    _XmAppUnlock(app);
Packit b099d7
    return;
Packit b099d7
  }
Packit b099d7
Packit b099d7
  extData = _XmGetWidgetExtData(w, XmSHELL_EXTENSION); 
Packit b099d7
Packit b099d7
  if(extData == NULL)
Packit b099d7
  {
Packit b099d7
#ifdef DEBUG
Packit b099d7
    XmeWarning(NULL, "_XmGetWidgetExtData() returned NULL pointer.");
Packit b099d7
#endif
Packit b099d7
    _XmAppUnlock(app);
Packit b099d7
    return;
Packit b099d7
  }
Packit b099d7
Packit b099d7
  vendorExt = (XmVendorShellExtObject) extData->widget;
Packit b099d7
Packit b099d7
  _XmRemoveCallback((InternalCallbackList *) 
Packit b099d7
		    &(vendorExt->vendor.focus_moved_callback), proc, data);
Packit b099d7
  _XmAppUnlock(app);
Packit b099d7
}