Blame lib/Xm/Manager.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: Manager.c /main/22 1999/01/27 16:07:30 mgreess $"
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */
Packit b099d7
Packit b099d7
#include <Xm/AccColorT.h>
Packit b099d7
#include <Xm/CareVisualT.h>
Packit b099d7
#include <Xm/DrawP.h>
Packit b099d7
#include <Xm/LayoutT.h>
Packit b099d7
#include <Xm/TraitP.h>
Packit b099d7
#include <Xm/TransltnsP.h>
Packit b099d7
#include <Xm/UnitTypeT.h>
Packit b099d7
#include "BaseClassI.h"
Packit b099d7
#include "CareVisualTI.h"
Packit b099d7
#include "ColorI.h"
Packit b099d7
#include "DisplayP.h"
Packit b099d7
#include "GadgetI.h"
Packit b099d7
#include "GadgetUtiI.h"
Packit b099d7
#include "ImageCachI.h"
Packit b099d7
#include "ManagerI.h"
Packit b099d7
#include "MessagesI.h"
Packit b099d7
#include "PixConvI.h"
Packit b099d7
#include "RepTypeI.h"
Packit b099d7
#include "ResConverI.h"
Packit b099d7
#include "ResIndI.h"
Packit b099d7
#include "SyntheticI.h"
Packit b099d7
#include "TraitI.h"
Packit b099d7
#include "TravActI.h"
Packit b099d7
#include "TraversalI.h"
Packit b099d7
#include "UniqueEvnI.h"
Packit b099d7
#include "XmI.h"
Packit b099d7
Packit b099d7
#define MESSAGE1 _XmMMsgManager_0000
Packit b099d7
#define MESSAGE2 _XmMMsgManager_0001
Packit b099d7
Packit b099d7
/********    Static Function Declarations    ********/
Packit b099d7
Packit b099d7
static void GetXFromShell( 
Packit b099d7
                        Widget wid,
Packit b099d7
                        int resource_offset,
Packit b099d7
                        XtArgVal *value) ;
Packit b099d7
static void GetYFromShell( 
Packit b099d7
                        Widget wid,
Packit b099d7
                        int resource_offset,
Packit b099d7
                        XtArgVal *value) ;
Packit b099d7
static void ClassInitialize( void ) ;
Packit b099d7
static CompositeClassExtension FindCompClassExtension( 
Packit b099d7
                        WidgetClass widget_class) ;
Packit b099d7
static void BuildManagerResources(
Packit b099d7
			WidgetClass c) ;
Packit b099d7
static void ClassPartInitialize( 
Packit b099d7
                        WidgetClass wc) ;
Packit b099d7
static void Initialize( 
Packit b099d7
                        Widget request,
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
static void Realize( 
Packit b099d7
                        Widget w,
Packit b099d7
                        XtValueMask *p_valueMask,
Packit b099d7
                        XSetWindowAttributes *attributes) ;
Packit b099d7
static void Destroy( 
Packit b099d7
                        Widget w) ;
Packit b099d7
static Boolean SetValues( 
Packit b099d7
                        Widget current,
Packit b099d7
                        Widget request,
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
static void InsertChild( 
Packit b099d7
                        Widget child) ;
Packit b099d7
static void DeleteChild( 
Packit b099d7
                        Widget child) ;
Packit b099d7
static void ManagerMotion( 
Packit b099d7
                        Widget wid,
Packit b099d7
                        XtPointer closure,
Packit b099d7
                        XEvent *event,
Packit b099d7
                        Boolean *cont) ;
Packit b099d7
static void ManagerEnter( 
Packit b099d7
                        Widget wid,
Packit b099d7
                        XtPointer closure,
Packit b099d7
                        XEvent *event,
Packit b099d7
                        Boolean *cont) ;
Packit b099d7
static void ManagerLeave( 
Packit b099d7
                        Widget wid,
Packit b099d7
                        XtPointer closure,
Packit b099d7
                        XEvent *event,
Packit b099d7
                        Boolean *cont) ;
Packit b099d7
static void AddMotionHandlers( 
Packit b099d7
                        XmManagerWidget mw) ;
Packit b099d7
static void ConstraintInitialize( 
Packit b099d7
                        Widget request,
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
static void CheckRemoveMotionHandlers( 
Packit b099d7
                        XmManagerWidget mw) ;
Packit b099d7
static void ConstraintDestroy( 
Packit b099d7
                        Widget w) ;
Packit b099d7
static Boolean ConstraintSetValues( 
Packit b099d7
                        Widget current,
Packit b099d7
                        Widget request,
Packit b099d7
                        Widget new_w,
Packit b099d7
                        ArgList args,
Packit b099d7
                        Cardinal *num_args) ;
Packit b099d7
static Boolean ManagerParentProcess( 
Packit b099d7
                        Widget widget,
Packit b099d7
                        XmParentProcessData data) ;
Packit b099d7
static XmNavigability WidgetNavigable( 
Packit b099d7
                        Widget wid) ;
Packit b099d7
static Widget ObjectAtPoint(
Packit b099d7
			      Widget wid, 
Packit b099d7
			      Position x, Position y);
Packit b099d7
static XmDirection GetDirection(Widget);
Packit b099d7
static void GetColors(Widget widget, 
Packit b099d7
		      XmAccessColorData color_data);
Packit b099d7
static unsigned char GetUnitType(Widget);
Packit b099d7
Packit b099d7
/********    End Static Function Declarations    ********/
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/***********************************/
Packit b099d7
/*  Default actions for XmManager  */
Packit b099d7
Packit b099d7
static XtActionsRec actions[] = {
Packit b099d7
	{ "ManagerGadgetTraverseCurrent",  _XmGadgetTraverseCurrent },
Packit b099d7
	{ "ManagerEnter",               _XmManagerEnter },
Packit b099d7
	{ "ManagerLeave",               _XmManagerLeave },
Packit b099d7
	{ "ManagerFocusIn",             _XmManagerFocusIn },  
Packit b099d7
	{ "ManagerFocusOut",            _XmManagerFocusOut },  
Packit b099d7
	{ "ManagerGadgetPrevTabGroup",  _XmGadgetTraversePrevTabGroup},
Packit b099d7
	{ "ManagerGadgetNextTabGroup",  _XmGadgetTraverseNextTabGroup},
Packit b099d7
	{ "ManagerGadgetTraversePrev",  _XmGadgetTraversePrev },  
Packit b099d7
	{ "ManagerGadgetTraverseNext",  _XmGadgetTraverseNext },  
Packit b099d7
	{ "ManagerGadgetTraverseLeft",  _XmGadgetTraverseLeft },  
Packit b099d7
	{ "ManagerGadgetTraverseRight", _XmGadgetTraverseRight },  
Packit b099d7
	{ "ManagerGadgetTraverseUp",    _XmGadgetTraverseUp },  
Packit b099d7
	{ "ManagerGadgetTraverseDown",  _XmGadgetTraverseDown },  
Packit b099d7
	{ "ManagerGadgetTraverseHome",  _XmGadgetTraverseHome },
Packit b099d7
	{ "ManagerGadgetSelect",        _XmGadgetSelect },
Packit b099d7
	{ "ManagerParentActivate",      _XmManagerParentActivate },
Packit b099d7
	{ "ManagerParentCancel",        _XmManagerParentCancel },
Packit b099d7
	{ "ManagerGadgetButtonMotion",  _XmGadgetButtonMotion },
Packit b099d7
	{ "ManagerGadgetKeyInput",      _XmGadgetKeyInput },
Packit b099d7
	{ "ManagerGadgetHelp",          _XmManagerHelp },
Packit b099d7
        { "ManagerGadgetArm",           _XmGadgetArm },
Packit b099d7
        { "ManagerGadgetDrag",          _XmGadgetDrag },
Packit b099d7
	{ "ManagerGadgetActivate",      _XmGadgetActivate },
Packit b099d7
	{ "ManagerGadgetMultiArm",      _XmGadgetMultiArm },
Packit b099d7
	{ "ManagerGadgetMultiActivate", _XmGadgetMultiActivate },
Packit b099d7
        { "Enter",           _XmManagerEnter },         /* Motif 1.0 BC. */
Packit b099d7
        { "FocusIn",         _XmManagerFocusIn },       /* Motif 1.0 BC. */
Packit b099d7
        { "Help",            _XmManagerHelp },          /* Motif 1.0 BC. */
Packit b099d7
        { "Arm",             _XmGadgetArm },            /* Motif 1.0 BC. */
Packit b099d7
	{ "Activate",        _XmGadgetActivate },       /* Motif 1.0 BC. */
Packit b099d7
Packit b099d7
};
Packit b099d7
 
Packit b099d7
Packit b099d7
/****************************************/
Packit b099d7
/*  Resource definitions for XmManager  */
Packit b099d7
Packit b099d7
static XtResource resources[] =
Packit b099d7
{
Packit b099d7
   {
Packit b099d7
     XmNunitType, XmCUnitType, XmRUnitType, 
Packit b099d7
     sizeof (unsigned char), XtOffsetOf(XmManagerRec, manager.unit_type),
Packit b099d7
     XmRCallProc, (XtPointer) _XmUnitTypeDefault
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNx, XmCPosition, XmRHorizontalPosition, 
Packit b099d7
     sizeof(Position), XtOffsetOf(WidgetRec, core.x), 
Packit b099d7
     XmRImmediate, (XtPointer) 0
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNy, XmCPosition, XmRVerticalPosition, 
Packit b099d7
     sizeof(Position), XtOffsetOf(WidgetRec, core.y), 
Packit b099d7
     XmRImmediate, (XtPointer) 0
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNwidth, XmCDimension, XmRHorizontalDimension, 
Packit b099d7
     sizeof(Dimension), XtOffsetOf(WidgetRec, core.width), 
Packit b099d7
     XmRImmediate, (XtPointer) 0
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNheight, XmCDimension, XmRVerticalDimension, 
Packit b099d7
     sizeof(Dimension), XtOffsetOf(WidgetRec, core.height), 
Packit b099d7
     XmRImmediate, (XtPointer) 0
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNborderWidth, XmCBorderWidth, XmRHorizontalDimension, 
Packit b099d7
     sizeof(Dimension), XtOffsetOf(WidgetRec, core.border_width), 
Packit b099d7
     XmRImmediate, (XtPointer) 0
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNforeground, XmCForeground, XmRPixel, 
Packit b099d7
     sizeof (Pixel), XtOffsetOf(XmManagerRec, manager.foreground),
Packit b099d7
     XmRCallProc, (XtPointer) _XmForegroundColorDefault
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNbackground, XmCBackground, XmRPixel, 
Packit b099d7
     sizeof (Pixel), XtOffsetOf(WidgetRec, core.background_pixel),
Packit b099d7
     XmRCallProc, (XtPointer) _XmBackgroundColorDefault
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNbackgroundPixmap, XmCPixmap, XmRPixmap, 
Packit b099d7
     sizeof (Pixmap), XtOffsetOf(WidgetRec, core.background_pixmap),
Packit b099d7
     XmRImmediate, (XtPointer) XmUNSPECIFIED_PIXMAP
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNhighlightColor, XmCHighlightColor, XmRPixel, 
Packit b099d7
     sizeof (Pixel), XtOffsetOf(XmManagerRec, manager.highlight_color),
Packit b099d7
     XmRCallProc, (XtPointer) _XmHighlightColorDefault
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNhighlightPixmap, XmCHighlightPixmap, XmRNoScalingDynamicPixmap,
Packit b099d7
     sizeof (Pixmap), XtOffsetOf(XmManagerRec, manager.highlight_pixmap),
Packit b099d7
     XmRCallProc, (XtPointer) _XmHighlightPixmapDefault
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNnavigationType, XmCNavigationType, XmRNavigationType, 
Packit b099d7
     sizeof (unsigned char), 
Packit b099d7
     XtOffsetOf(XmManagerRec, manager.navigation_type),
Packit b099d7
     XmRImmediate, (XtPointer) XmTAB_GROUP,
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNshadowThickness, XmCShadowThickness, XmRHorizontalDimension, 
Packit b099d7
     sizeof (Dimension), XtOffsetOf(XmManagerRec, manager.shadow_thickness),
Packit b099d7
     XmRImmediate, (XtPointer) 0
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNtopShadowColor, XmCTopShadowColor, XmRPixel, 
Packit b099d7
     sizeof (Pixel), XtOffsetOf(XmManagerRec, manager.top_shadow_color),
Packit b099d7
     XmRCallProc, (XtPointer) _XmTopShadowColorDefault
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNtopShadowPixmap, XmCTopShadowPixmap, XmRNoScalingDynamicPixmap,
Packit b099d7
     sizeof (Pixmap), XtOffsetOf(XmManagerRec, manager.top_shadow_pixmap),
Packit b099d7
     XmRCallProc, (XtPointer) _XmTopShadowPixmapDefault
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNbottomShadowColor, XmCBottomShadowColor, XmRPixel, 
Packit b099d7
     sizeof (Pixel), XtOffsetOf(XmManagerRec, manager.bottom_shadow_color),
Packit b099d7
     XmRCallProc, (XtPointer) _XmBottomShadowColorDefault
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNbottomShadowPixmap, XmCBottomShadowPixmap, XmRNoScalingDynamicPixmap,
Packit b099d7
     sizeof (Pixmap), XtOffsetOf(XmManagerRec, manager.bottom_shadow_pixmap),
Packit b099d7
     XmRImmediate, (XtPointer) XmUNSPECIFIED_PIXMAP
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNhelpCallback, XmCCallback, XmRCallback, 
Packit b099d7
     sizeof(XtCallbackList), XtOffsetOf(XmManagerRec, manager.help_callback),
Packit b099d7
     XmRPointer, (XtPointer) NULL
Packit b099d7
   },
Packit b099d7
Packit b099d7
#ifndef XM_PART_BC
Packit b099d7
   {
Packit b099d7
     XmNpopupHandlerCallback, XmCCallback, XmRCallback, 
Packit b099d7
     sizeof(XtCallbackList), 
Packit b099d7
     XtOffsetOf(XmManagerRec, manager.popup_handler_callback),
Packit b099d7
     XmRPointer, (XtPointer) NULL
Packit b099d7
   },
Packit b099d7
#endif
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNuserData, XmCUserData, XmRPointer, 
Packit b099d7
     sizeof(XtPointer), XtOffsetOf(XmManagerRec, manager.user_data),
Packit b099d7
     XmRPointer, (XtPointer) NULL
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {
Packit b099d7
     XmNtraversalOn, XmCTraversalOn, XmRBoolean, 
Packit b099d7
     sizeof(Boolean), XtOffsetOf(XmManagerRec, manager.traversal_on),
Packit b099d7
     XmRImmediate, (XtPointer) TRUE
Packit b099d7
   },
Packit b099d7
   {
Packit b099d7
     XmNstringDirection, XmCStringDirection, XmRStringDirection,
Packit b099d7
     sizeof(XmStringDirection), 
Packit b099d7
     XtOffsetOf(XmManagerRec, manager.string_direction),
Packit b099d7
     XmRImmediate, (XtPointer) XmSTRING_DIRECTION_DEFAULT
Packit b099d7
   },
Packit b099d7
   {
Packit b099d7
     XmNlayoutDirection, XmCLayoutDirection, XmRDirection,
Packit b099d7
     sizeof(XmDirection), 
Packit b099d7
     XtOffsetOf(XmManagerRec, manager.string_direction),
Packit b099d7
     XmRCallProc, (XtPointer) _XmDirectionDefault
Packit b099d7
   },
Packit b099d7
   {   
Packit b099d7
     XmNinitialFocus, XmCInitialFocus, XmRWidget,
Packit b099d7
     sizeof(Widget), XtOffsetOf(XmManagerRec, manager.initial_focus),
Packit b099d7
     XmRImmediate, NULL
Packit b099d7
   } 
Packit b099d7
};
Packit b099d7
Packit b099d7
/***************************************/
Packit b099d7
/*  Definition for synthetic resources */
Packit b099d7
Packit b099d7
static XmSyntheticResource syn_resources[] =
Packit b099d7
{
Packit b099d7
   { XmNx,
Packit b099d7
     sizeof (Position), XtOffsetOf(WidgetRec, core.x), 
Packit b099d7
     GetXFromShell, XmeToHorizontalPixels },
Packit b099d7
Packit b099d7
   { XmNy,
Packit b099d7
     sizeof (Position), XtOffsetOf(WidgetRec, core.y), 
Packit b099d7
     GetYFromShell,  XmeToVerticalPixels },
Packit b099d7
Packit b099d7
   { XmNwidth,
Packit b099d7
     sizeof (Dimension), XtOffsetOf(WidgetRec, core.width),
Packit b099d7
     XmeFromHorizontalPixels, XmeToHorizontalPixels },
Packit b099d7
Packit b099d7
   { XmNheight,
Packit b099d7
     sizeof (Dimension), XtOffsetOf(WidgetRec, core.height), 
Packit b099d7
     XmeFromVerticalPixels, XmeToVerticalPixels },
Packit b099d7
Packit b099d7
   { XmNborderWidth, 
Packit b099d7
     sizeof (Dimension), XtOffsetOf(WidgetRec, core.border_width), 
Packit b099d7
     XmeFromHorizontalPixels, XmeToHorizontalPixels },
Packit b099d7
Packit b099d7
   { XmNshadowThickness, 
Packit b099d7
     sizeof (Dimension), XtOffsetOf(XmManagerRec, manager.shadow_thickness), 
Packit b099d7
     XmeFromHorizontalPixels, XmeToHorizontalPixels },
Packit b099d7
   
Packit b099d7
   { XmNstringDirection,
Packit b099d7
     sizeof(XmStringDirection), 
Packit b099d7
     XtOffsetOf(XmManagerRec, manager.string_direction),
Packit b099d7
     _XmFromLayoutDirection, _XmToLayoutDirection }
Packit b099d7
     
Packit b099d7
};
Packit b099d7
Packit b099d7
Packit b099d7
/*******************************************/
Packit b099d7
/*  Declaration of class extension records */
Packit b099d7
Packit b099d7
static XmBaseClassExtRec baseClassExtRec = {
Packit b099d7
    NULL,
Packit b099d7
    NULLQUARK,
Packit b099d7
    XmBaseClassExtVersion,
Packit b099d7
    sizeof(XmBaseClassExtRec),
Packit b099d7
    NULL,				/* InitializePrehook	*/
Packit b099d7
    NULL,				/* SetValuesPrehook	*/
Packit b099d7
    NULL,				/* InitializePosthook	*/
Packit b099d7
    NULL,				/* SetValuesPosthook	*/
Packit b099d7
    NULL,				/* secondaryObjectClass	*/
Packit b099d7
    NULL,				/* secondaryCreate	*/
Packit b099d7
    NULL,               		/* getSecRes data	*/
Packit b099d7
    { 0 },      			/* fastSubclass flags	*/
Packit b099d7
    NULL,				/* getValuesPrehook	*/
Packit b099d7
    NULL,				/* getValuesPosthook	*/
Packit b099d7
    NULL,                               /* ClassPartInitPrehook */
Packit b099d7
    NULL,                               /* classPartInitPosthook*/
Packit b099d7
    NULL,                               /* ext_resources        */
Packit b099d7
    NULL,                               /* compiled_ext_resources*/
Packit b099d7
    0,                                  /* num_ext_resources    */
Packit b099d7
    FALSE,                              /* use_sub_resources    */
Packit b099d7
    WidgetNavigable,                    /* widgetNavigable      */
Packit b099d7
    NULL                                /* focusChange          */
Packit b099d7
};
Packit b099d7
Packit b099d7
static CompositeClassExtensionRec compositeClassExtRec = {
Packit b099d7
    NULL,
Packit b099d7
    NULLQUARK,
Packit b099d7
    XtCompositeExtensionVersion,
Packit b099d7
    sizeof(CompositeClassExtensionRec),
Packit b099d7
    TRUE,                               /* accepts_objects */
Packit b099d7
};
Packit b099d7
Packit b099d7
static XmManagerClassExtRec managerClassExtRec = {
Packit b099d7
    NULL,
Packit b099d7
    NULLQUARK,
Packit b099d7
    XmManagerClassExtVersion,
Packit b099d7
    sizeof(XmManagerClassExtRec),
Packit b099d7
    NULL,                               /* traversal_children */
Packit b099d7
    ObjectAtPoint                       /* object_at_point */
Packit b099d7
};
Packit b099d7
Packit b099d7
/******************************************/
Packit b099d7
/*  The Manager class record definition.  */
Packit b099d7
Packit b099d7
externaldef(xmmanagerclassrec) XmManagerClassRec xmManagerClassRec =
Packit b099d7
{
Packit b099d7
   {
Packit b099d7
      (WidgetClass) &constraintClassRec,     /* superclass            */
Packit b099d7
     "XmManager",		             /* class_name	      */
Packit b099d7
      sizeof(XmManagerRec),                  /* widget_size	      */
Packit b099d7
      ClassInitialize,                       /* class_initialize      */
Packit b099d7
      ClassPartInitialize,                   /* class part initialize */
Packit b099d7
      False,                                 /* class_inited          */
Packit b099d7
      Initialize,                            /* initialize	      */
Packit b099d7
      NULL,                                  /* initialize hook       */
Packit b099d7
      Realize,                               /* realize	              */
Packit b099d7
      actions,                               /* actions               */
Packit b099d7
      XtNumber(actions),                     /* num_actions	      */
Packit b099d7
      resources,                             /* resources	      */
Packit b099d7
      XtNumber(resources),                   /* num_resources         */
Packit b099d7
      NULLQUARK,                             /* xrm_class	      */
Packit b099d7
      True,                                  /* compress_motion       */
Packit b099d7
      XtExposeCompressMaximal,               /* compress_exposure     */
Packit b099d7
      True,                                  /* compress enterleave   */
Packit b099d7
      False,                                 /* visible_interest      */
Packit b099d7
      Destroy,                               /* destroy               */
Packit b099d7
      NULL,                                  /* resize                */
Packit b099d7
      NULL,                                  /* expose                */
Packit b099d7
      SetValues,                             /* set_values	      */
Packit b099d7
      NULL,                                  /* set_values_hook       */
Packit b099d7
      XtInheritSetValuesAlmost,              /* set_values_almost     */
Packit b099d7
      _XmManagerGetValuesHook,               /* get_values_hook       */
Packit b099d7
      NULL,                                  /* accept_focus	      */
Packit b099d7
      XtVersion,                             /* version               */
Packit b099d7
      NULL,                                  /* callback private      */
Packit b099d7
      _XmManager_defaultTranslations,        /* tm_table              */
Packit b099d7
      NULL,                                  /* query geometry        */
Packit b099d7
      NULL,                                  /* display_accelerator   */
Packit b099d7
      (XtPointer)&baseClassExtRec,           /* extension             */
Packit b099d7
   },
Packit b099d7
   {					     /* composite class   */
Packit b099d7
      NULL,                                  /* Geometry Manager  */
Packit b099d7
      NULL,                                  /* Change Managed    */
Packit b099d7
      InsertChild,                           /* Insert Child      */
Packit b099d7
      DeleteChild,	                     /* Delete Child      */
Packit b099d7
      (XtPointer)&compositeClassExtRec,      /* extension         */
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {						/* constraint class	*/
Packit b099d7
      NULL,					/* resources		*/
Packit b099d7
      0,					/* num resources	*/
Packit b099d7
      sizeof (XmManagerConstraintRec),	        /* constraint record	*/
Packit b099d7
      ConstraintInitialize,			/* initialize		*/
Packit b099d7
      ConstraintDestroy,			/* destroy		*/
Packit b099d7
      ConstraintSetValues,			/* set values		*/
Packit b099d7
      NULL,					/* extension		*/
Packit b099d7
   },
Packit b099d7
Packit b099d7
   {						/* manager class	  */
Packit b099d7
      _XmManager_managerTraversalTranslations,  /* default translations   */
Packit b099d7
      syn_resources,				/* syn resources      	  */
Packit b099d7
      XtNumber(syn_resources),			/* num_syn_resources 	  */
Packit b099d7
      NULL,					/* syn_cont_resources     */
Packit b099d7
      0,					/* num_syn_cont_resources */
Packit b099d7
      ManagerParentProcess,                     /* parent_process         */
Packit b099d7
      (XtPointer)&managerClassExtRec,		/* extension		  */
Packit b099d7
   },
Packit b099d7
};
Packit b099d7
Packit b099d7
externaldef(xmmanagerwidgetclass) WidgetClass xmManagerWidgetClass = 
Packit b099d7
                                 (WidgetClass) &xmManagerClassRec;
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
static XmConst XmSpecifyLayoutDirectionTraitRec manLDT = {
Packit b099d7
  0,			/* version */
Packit b099d7
  GetDirection
Packit b099d7
};
Packit b099d7
Packit b099d7
Packit b099d7
/* Access Colors Trait record for Manager */
Packit b099d7
Packit b099d7
static XmConst XmAccessColorsTraitRec manACT = {
Packit b099d7
  0,			/* version */
Packit b099d7
  GetColors
Packit b099d7
};
Packit b099d7
Packit b099d7
/* Unit Type Trait record for Manager */
Packit b099d7
Packit b099d7
static XmConst XmSpecUnitTypeTraitRec manUTT = {
Packit b099d7
  0,			/* version */
Packit b099d7
  GetUnitType
Packit b099d7
};
Packit b099d7
Packit b099d7
/**************************************************************************
Packit b099d7
**
Packit b099d7
** Synthetic resource hooks function section
Packit b099d7
**
Packit b099d7
**************************************************************************/
Packit b099d7
Packit b099d7
static void 
Packit b099d7
GetXFromShell(
Packit b099d7
        Widget wid,
Packit b099d7
        int resource_offset,
Packit b099d7
        XtArgVal *value )
Packit b099d7
{   
Packit b099d7
    /* return the x in the child's unit type; for children of shell, return
Packit b099d7
     * the parent's x relative to the origin, in pixels */
Packit b099d7
Packit b099d7
    Widget parent = XtParent(wid);
Packit b099d7
    
Packit b099d7
    if (XtIsShell(parent)) {   
Packit b099d7
	/* at the moment menuShell doesn't reset x,y values to 0, so 
Packit b099d7
	** we'll have them counted twice if we use XtTranslateCoords
Packit b099d7
	*/
Packit b099d7
        *value = (XtArgVal) parent->core.x;
Packit b099d7
    } else {
Packit b099d7
	*value = (XtArgVal) wid->core.x ;
Packit b099d7
	XmeFromHorizontalPixels(wid,  resource_offset, value);
Packit b099d7
    }
Packit b099d7
}
Packit b099d7
Packit b099d7
static void 
Packit b099d7
GetYFromShell(
Packit b099d7
        Widget wid,
Packit b099d7
        int resource_offset,
Packit b099d7
        XtArgVal *value )
Packit b099d7
{   
Packit b099d7
    /* return the y in the child's unit type; for children of shell, return
Packit b099d7
     * the parent's y relative to the origin, in pixels */
Packit b099d7
Packit b099d7
    Widget parent = XtParent(wid);
Packit b099d7
Packit b099d7
    if (XtIsShell(parent)) {   
Packit b099d7
	/* at the moment menuShell doesn't reset x,y values to 0, so 
Packit b099d7
	** we'll have them counted twice if we use XtTranslateCoords
Packit b099d7
	*/
Packit b099d7
        *value = (XtArgVal) parent->core.y;
Packit b099d7
    } else {
Packit b099d7
	*value = (XtArgVal) wid->core.y ;
Packit b099d7
	XmeFromVerticalPixels(wid,  resource_offset, value);
Packit b099d7
    }
Packit b099d7
}
Packit b099d7
Packit b099d7
/*********************************************************************
Packit b099d7
 *
Packit b099d7
 * ClassInitialize
Packit b099d7
 *
Packit b099d7
 *********************************************************************/
Packit b099d7
static void 
Packit b099d7
ClassInitialize( void )
Packit b099d7
{
Packit b099d7
    /* These routines are called for each base classes,
Packit b099d7
       they just returned if it has been done already */
Packit b099d7
   _XmRegisterConverters();   
Packit b099d7
   _XmRegisterPixmapConverters();
Packit b099d7
   _XmInitializeExtensions();
Packit b099d7
   _XmInitializeTraits();
Packit b099d7
Packit b099d7
   baseClassExtRec.record_type = XmQmotif;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
static CompositeClassExtension 
Packit b099d7
FindCompClassExtension(
Packit b099d7
        WidgetClass widget_class )
Packit b099d7
{
Packit b099d7
    CompositeClassExtension ext;
Packit b099d7
    ext = (CompositeClassExtension)((CompositeWidgetClass)widget_class)
Packit b099d7
	       ->composite_class.extension;
Packit b099d7
    while ((ext != NULL) && (ext->record_type != NULLQUARK))
Packit b099d7
      ext = (CompositeClassExtension)ext->next_extension;
Packit b099d7
Packit b099d7
    if (ext != NULL) {
Packit b099d7
	/* fix for 9640: check for older version of the extension as well */
Packit b099d7
	if (  ext->version <= XtCompositeExtensionVersion &&
Packit b099d7
	      ext->record_size <= sizeof(CompositeClassExtensionRec)) {
Packit b099d7
	    /*EMPTY*/
Packit b099d7
	    /* continue */
Packit b099d7
	} else {
Packit b099d7
	    String params[1];
Packit b099d7
	    Cardinal num_params = 1;
Packit b099d7
	    params[0] = widget_class->core_class.class_name;
Packit b099d7
	    XtErrorMsg( "invalidExtension", "ManagerClassPartInitialize",
Packit b099d7
		        "XmToolkitError",
Packit b099d7
		       MESSAGE1, params, &num_params);
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
    return ext;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/**********************************************************************
Packit b099d7
 *
Packit b099d7
 *  BuildManagerResources
Packit b099d7
 *	Build up the manager's synthetic and constraint synthetic
Packit b099d7
 *	resource processing list by combining the super classes with 
Packit b099d7
 *	this class.
Packit b099d7
 *
Packit b099d7
 **********************************************************************/
Packit b099d7
static void 
Packit b099d7
BuildManagerResources(
Packit b099d7
        WidgetClass c )
Packit b099d7
{
Packit b099d7
    XmManagerWidgetClass wc = (XmManagerWidgetClass) c ;
Packit b099d7
    XmManagerWidgetClass sc;
Packit b099d7
Packit b099d7
    sc = (XmManagerWidgetClass) wc->core_class.superclass;
Packit b099d7
Packit b099d7
    _XmInitializeSyntheticResources(wc->manager_class.syn_resources,
Packit b099d7
				    wc->manager_class.num_syn_resources);
Packit b099d7
Packit b099d7
    _XmInitializeSyntheticResources(
Packit b099d7
			wc->manager_class.syn_constraint_resources,
Packit b099d7
			wc->manager_class.num_syn_constraint_resources);
Packit b099d7
Packit b099d7
    if (sc == (XmManagerWidgetClass) constraintWidgetClass) return;
Packit b099d7
    
Packit b099d7
    _XmBuildResources (&(wc->manager_class.syn_resources),
Packit b099d7
		       &(wc->manager_class.num_syn_resources),
Packit b099d7
		       sc->manager_class.syn_resources,
Packit b099d7
		       sc->manager_class.num_syn_resources);
Packit b099d7
Packit b099d7
    _XmBuildResources (&(wc->manager_class.syn_constraint_resources),
Packit b099d7
		       &(wc->manager_class.num_syn_constraint_resources),
Packit b099d7
		       sc->manager_class.syn_constraint_resources,
Packit b099d7
		       sc->manager_class.num_syn_constraint_resources);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*********************************************************************
Packit b099d7
 *
Packit b099d7
 * ClassPartInitialize
Packit b099d7
 *
Packit b099d7
 *********************************************************************/
Packit b099d7
static void 
Packit b099d7
ClassPartInitialize(
Packit b099d7
        WidgetClass wc )
Packit b099d7
{
Packit b099d7
    static Boolean first_time = TRUE;
Packit b099d7
    XmManagerWidgetClass mw = (XmManagerWidgetClass) wc;
Packit b099d7
    XmManagerWidgetClass super = (XmManagerWidgetClass)
Packit b099d7
	                        mw->core_class.superclass;
Packit b099d7
    XmManagerClassExt *mext = (XmManagerClassExt *)
Packit b099d7
	_XmGetClassExtensionPtr((XmGenericClassExt *)
Packit b099d7
				&(mw->manager_class.extension), NULLQUARK) ;
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
    _XmFastSubclassInit (wc, XmMANAGER_BIT);
Packit b099d7
Packit b099d7
    /*** start by doing the inheritance for Xt... */
Packit b099d7
    if (FindCompClassExtension(wc) == NULL) {
Packit b099d7
	CompositeClassExtension comp_ext ;
Packit b099d7
Packit b099d7
	XtPointer *comp_extP
Packit b099d7
	    = &((CompositeWidgetClass)wc)->composite_class.extension;
Packit b099d7
	comp_ext = XtNew(CompositeClassExtensionRec);
Packit b099d7
	memcpy(comp_ext, FindCompClassExtension(wc->core_class.superclass),
Packit b099d7
	       sizeof(CompositeClassExtensionRec));
Packit b099d7
	comp_ext->next_extension = *comp_extP;
Packit b099d7
	*comp_extP = (XtPointer)comp_ext;
Packit b099d7
    }
Packit b099d7
    
Packit b099d7
    /*** deal with inheritance for regular methods */
Packit b099d7
    if (mw->manager_class.translations == XtInheritTranslations)
Packit b099d7
	mw->manager_class.translations = super->manager_class.translations;
Packit b099d7
    else if (mw->manager_class.translations)
Packit b099d7
	mw->manager_class.translations = (String)
Packit b099d7
	    XtParseTranslationTable(mw->manager_class.translations);
Packit b099d7
    
Packit b099d7
    if (mw->manager_class.parent_process == XmInheritParentProcess)
Packit b099d7
	mw->manager_class.parent_process = 
Packit b099d7
	    super->manager_class.parent_process;
Packit b099d7
    
Packit b099d7
    /* synthetic resource management */
Packit b099d7
    BuildManagerResources((WidgetClass) wc);
Packit b099d7
Packit b099d7
Packit b099d7
    /*** then deal with class extension inheritance.
Packit b099d7
      if it's NULL, create a new one with inherit everywhere,
Packit b099d7
      then do the inheritance*/
Packit b099d7
Packit b099d7
    if (*mext == NULL) {
Packit b099d7
	*mext = (XmManagerClassExt) XtCalloc(1, sizeof(XmManagerClassExtRec));
Packit b099d7
	(*mext)->record_type     = NULLQUARK ;
Packit b099d7
	(*mext)->version = XmManagerClassExtVersion ;
Packit b099d7
	(*mext)->record_size     = sizeof( XmManagerClassExtRec) ;
Packit b099d7
	(*mext)->traversal_children = XmInheritTraversalChildrenProc ;
Packit b099d7
	(*mext)->object_at_point = XmInheritObjectAtPointProc ;
Packit b099d7
    }
Packit b099d7
Packit b099d7
    if ((WidgetClass)mw != xmManagerWidgetClass) {
Packit b099d7
Packit b099d7
	XmManagerClassExt *smext = (XmManagerClassExt *)
Packit b099d7
	    _XmGetClassExtensionPtr( (XmGenericClassExt *)
Packit b099d7
				    &(super->manager_class.extension),
Packit b099d7
				    NULLQUARK) ;
Packit b099d7
Packit b099d7
	if ((*mext)->traversal_children == XmInheritTraversalChildrenProc) {
Packit b099d7
	    (*mext)->traversal_children = (*smext)->traversal_children ;
Packit b099d7
	}
Packit b099d7
	if ((*mext)->object_at_point == XmInheritObjectAtPointProc) {
Packit b099d7
	    (*mext)->object_at_point = (*smext)->object_at_point ;
Packit b099d7
	}
Packit b099d7
    } 
Packit b099d7
    
Packit b099d7
    
Packit b099d7
   /*** Carry this ugly non portable code that deal with Xt internals.
Packit b099d7
      first_time because we want to do that onlt once but
Packit b099d7
      after Object ClassPartInit has been called */
Packit b099d7
    if (first_time) {
Packit b099d7
        _XmReOrderResourceList(xmManagerWidgetClass, XmNunitType, NULL);
Packit b099d7
	_XmReOrderResourceList(xmManagerWidgetClass, 
Packit b099d7
			       XmNforeground, XmNbackground);
Packit b099d7
        first_time = FALSE;
Packit b099d7
    }
Packit b099d7
    
Packit b099d7
Packit b099d7
    /*** setting up traits for all subclasses as well. */
Packit b099d7
Packit b099d7
    XmeTraitSet((XtPointer)wc, XmQTspecifyLayoutDirection, (XtPointer)&manLDT);
Packit b099d7
    XmeTraitSet((XtPointer)wc, XmQTaccessColors, (XtPointer)&manACT);
Packit b099d7
    XmeTraitSet((XtPointer)wc, XmQTspecifyUnitType, (XtPointer)&manUTT);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  Initialize
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
Initialize(
Packit b099d7
        Widget request,
Packit b099d7
        Widget new_w,
Packit b099d7
        ArgList args,
Packit b099d7
        Cardinal *num_args )
Packit b099d7
{
Packit b099d7
    XmManagerWidget mw = (XmManagerWidget) new_w ;
Packit b099d7
    XtTranslations translations ;
Packit b099d7
Packit b099d7
   /*  Initialize manager and composite instance data  */
Packit b099d7
Packit b099d7
   mw->manager.selected_gadget = NULL;
Packit b099d7
   mw->manager.highlighted_widget = NULL;
Packit b099d7
   mw->manager.event_handler_added = False;
Packit b099d7
   mw->manager.active_child = NULL;
Packit b099d7
   mw->manager.keyboard_list = NULL;
Packit b099d7
   mw->manager.num_keyboard_entries = 0;
Packit b099d7
   mw->manager.size_keyboard_list = 0;
Packit b099d7
   mw->manager.has_focus = False;
Packit b099d7
Packit b099d7
   _XmProcessLock();
Packit b099d7
   translations = (XtTranslations) ((XmManagerClassRec *)XtClass( mw))
Packit b099d7
                                      ->manager_class.translations ;
Packit b099d7
   _XmProcessUnlock();
Packit b099d7
Packit b099d7
   if(    mw->manager.traversal_on
Packit b099d7
       && translations  &&  mw->core.tm.translations
Packit b099d7
       && !XmIsRowColumn( mw)    )
Packit b099d7
   {   
Packit b099d7
       /*  If this widget is requesting traversal then augment its
Packit b099d7
       * translation table with some additional events.
Packit b099d7
       * We will only augment translations for a widget which
Packit b099d7
       * already has some translations defined; this allows widgets
Packit b099d7
       * which want to set different translations (i.e. menus) to
Packit b099d7
       * it at a later point in time.
Packit b099d7
       * We do not override RowColumn and Label subclasses, these
Packit b099d7
       * are handled by those classes.
Packit b099d7
       */
Packit b099d7
       XtOverrideTranslations( (Widget) mw, translations) ;
Packit b099d7
       } 
Packit b099d7
Packit b099d7
   if(    (mw->manager.navigation_type != XmDYNAMIC_DEFAULT_TAB_GROUP)
Packit b099d7
       && !XmRepTypeValidValue( XmRID_NAVIGATION_TYPE, 
Packit b099d7
                        mw->manager.navigation_type, (Widget) mw)    )
Packit b099d7
   {   mw->manager.navigation_type = XmNONE ;
Packit b099d7
       } 
Packit b099d7
   _XmNavigInitialize( request, new_w, args, num_args);
Packit b099d7
Packit b099d7
   /*  Verify resource data  */
Packit b099d7
Packit b099d7
   if(    !XmRepTypeValidValue( XmRID_UNIT_TYPE, mw->manager.unit_type,
Packit b099d7
                                          (Widget) mw)    )
Packit b099d7
   {
Packit b099d7
      mw->manager.unit_type = XmPIXELS;
Packit b099d7
   }
Packit b099d7
Packit b099d7
   /*  Convert the fields from unit values to pixel values  */
Packit b099d7
Packit b099d7
   _XmManagerImportArgs( (Widget) mw, args, num_args);
Packit b099d7
Packit b099d7
    if (mw->manager.string_direction == XmSTRING_DIRECTION_DEFAULT) {
Packit b099d7
      /* This indicates that layoutDirection was set in the arglist, but
Packit b099d7
         stringDirection defaulting overwrote the value */
Packit b099d7
      int i;
Packit b099d7
      for (i=0; i < *num_args; i++)
Packit b099d7
	if (strcmp(args[i].name, XmNlayoutDirection) == 0)
Packit b099d7
	  mw->manager.string_direction = (XmDirection)args[i].value;
Packit b099d7
    }
Packit b099d7
Packit b099d7
   /*  Get the shadow drawing GC's  */
Packit b099d7
Packit b099d7
    mw->manager.background_GC = 
Packit b099d7
	_XmGetPixmapBasedGC (new_w, 
Packit b099d7
			     mw->core.background_pixel,
Packit b099d7
			     mw->manager.foreground,
Packit b099d7
			     mw->core.background_pixmap);
Packit b099d7
    mw->manager.highlight_GC = 
Packit b099d7
	_XmGetPixmapBasedGC (new_w, 
Packit b099d7
			     mw->manager.highlight_color,
Packit b099d7
			     mw->core.background_pixel,
Packit b099d7
			     mw->manager.highlight_pixmap);
Packit b099d7
    mw->manager.top_shadow_GC = 
Packit b099d7
	_XmGetPixmapBasedGC (new_w, 
Packit b099d7
			     mw->manager.top_shadow_color,
Packit b099d7
			     mw->core.background_pixel,
Packit b099d7
			     mw->manager.top_shadow_pixmap);
Packit b099d7
    mw->manager.bottom_shadow_GC = 
Packit b099d7
	_XmGetPixmapBasedGC (new_w, 
Packit b099d7
			     mw->manager.bottom_shadow_color,
Packit b099d7
			     mw->core.background_pixel,
Packit b099d7
			     mw->manager.bottom_shadow_pixmap);
Packit b099d7
Packit b099d7
   /* Copy accelerator widget from parent or set to NULL.
Packit b099d7
    */
Packit b099d7
    {
Packit b099d7
      XmManagerWidget p = (XmManagerWidget) XtParent(mw);
Packit b099d7
Packit b099d7
      if (XmIsManager(p) && p->manager.accelerator_widget)
Packit b099d7
         mw->manager.accelerator_widget = p->manager.accelerator_widget;
Packit b099d7
      else
Packit b099d7
         mw->manager.accelerator_widget = NULL;
Packit b099d7
    }
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/*************************************************************************
Packit b099d7
 *
Packit b099d7
 *  Realize
Packit b099d7
 *
Packit b099d7
 *************************************************************************/
Packit b099d7
static void 
Packit b099d7
Realize(
Packit b099d7
        Widget w,
Packit b099d7
        XtValueMask *p_valueMask,
Packit b099d7
        XSetWindowAttributes *attributes )
Packit b099d7
{
Packit b099d7
   Mask valueMask = *p_valueMask;
Packit b099d7
Packit b099d7
    /*	Make sure height and width are not zero.
Packit b099d7
    */
Packit b099d7
   if (!XtWidth(w)) XtWidth(w) = 1 ;
Packit b099d7
   if (!XtHeight(w)) XtHeight(w) = 1 ;
Packit b099d7
    
Packit b099d7
   valueMask |= CWBitGravity | CWDontPropagate;
Packit b099d7
   attributes->bit_gravity = NorthWestGravity;
Packit b099d7
   attributes->do_not_propagate_mask =
Packit b099d7
      ButtonPressMask | ButtonReleaseMask |
Packit b099d7
      KeyPressMask | KeyReleaseMask | PointerMotionMask;
Packit b099d7
Packit b099d7
   XtCreateWindow (w, InputOutput, CopyFromParent, valueMask, attributes);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  Destroy
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
Destroy(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
   XmManagerWidget	mw = (XmManagerWidget) w;
Packit b099d7
Packit b099d7
   _XmNavigDestroy(w);
Packit b099d7
Packit b099d7
   XtReleaseGC (w, mw->manager.background_GC);
Packit b099d7
   XtReleaseGC (w, mw->manager.top_shadow_GC);
Packit b099d7
   XtReleaseGC (w, mw->manager.bottom_shadow_GC);
Packit b099d7
   XtReleaseGC (w, mw->manager.highlight_GC);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  SetValues
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static Boolean 
Packit b099d7
SetValues(
Packit b099d7
        Widget current,
Packit b099d7
        Widget request,
Packit b099d7
        Widget new_w,
Packit b099d7
        ArgList args,
Packit b099d7
        Cardinal *num_args )
Packit b099d7
{
Packit b099d7
    Boolean returnFlag = False;
Packit b099d7
    Mask visualFlag = NoVisualChange;
Packit b099d7
    XmManagerWidget curmw = (XmManagerWidget) current;
Packit b099d7
    XmManagerWidget newmw = (XmManagerWidget) new_w;
Packit b099d7
Packit b099d7
    /*  Process the change in values */
Packit b099d7
   
Packit b099d7
    /* CR 7124: XmNlayoutDirection and XmNstringDirection are CG resources. */
Packit b099d7
    if (curmw->manager.string_direction != newmw->manager.string_direction)
Packit b099d7
      {
Packit b099d7
	XmeWarning(new_w, MESSAGE2);
Packit b099d7
	newmw->manager.string_direction = curmw->manager.string_direction;
Packit b099d7
      }
Packit b099d7
Packit b099d7
    /* If traversal has been turned on, then augment the translations
Packit b099d7
    *    of the new widget.
Packit b099d7
    */
Packit b099d7
    if(    newmw->manager.traversal_on
Packit b099d7
        && (newmw->manager.traversal_on != curmw->manager.traversal_on)
Packit b099d7
        && newmw->core.tm.translations) {
Packit b099d7
Packit b099d7
    	   XtTranslations translations;
Packit b099d7
	   _XmProcessLock();
Packit b099d7
	   translations = (XtTranslations) 
Packit b099d7
	       ((XmManagerClassRec *) XtClass( newmw))
Packit b099d7
		   ->manager_class.translations;
Packit b099d7
	   _XmProcessUnlock();
Packit b099d7
Packit b099d7
	   if (translations)
Packit b099d7
        	XtOverrideTranslations( (Widget) newmw, translations);
Packit b099d7
        }
Packit b099d7
    if(    newmw->manager.initial_focus != curmw->manager.initial_focus    )
Packit b099d7
      {
Packit b099d7
	_XmSetInitialOfTabGroup( (Widget) newmw,
Packit b099d7
				newmw->manager.initial_focus) ;
Packit b099d7
      }
Packit b099d7
Packit b099d7
    if( curmw->manager.navigation_type != newmw->manager.navigation_type   )
Packit b099d7
      {
Packit b099d7
	if(    !XmRepTypeValidValue( XmRID_NAVIGATION_TYPE, 
Packit b099d7
			 newmw->manager.navigation_type, (Widget) newmw)    )
Packit b099d7
	  {
Packit b099d7
	    newmw->manager.navigation_type = curmw->manager.navigation_type ;
Packit b099d7
	  } 
Packit b099d7
      }
Packit b099d7
Packit b099d7
    returnFlag = _XmNavigSetValues(current, request, new_w, args, num_args);
Packit b099d7
Packit b099d7
    /*  Validate changed data.  */
Packit b099d7
Packit b099d7
    if(    !XmRepTypeValidValue( XmRID_UNIT_TYPE, newmw->manager.unit_type,
Packit b099d7
                                                        (Widget) newmw)    )
Packit b099d7
    {
Packit b099d7
       newmw->manager.unit_type = curmw->manager.unit_type;
Packit b099d7
    }
Packit b099d7
Packit b099d7
   /*  Convert the necessary fields from unit values to pixel values  */
Packit b099d7
Packit b099d7
   _XmManagerImportArgs( (Widget) newmw, args, num_args);
Packit b099d7
Packit b099d7
    /*  Checking for valid Direction */
Packit b099d7
    if(    !XmRepTypeValidValue( XmRID_DIRECTION,
Packit b099d7
                       newmw->manager.string_direction, (Widget) newmw)    )
Packit b099d7
    {
Packit b099d7
        newmw->manager.string_direction = curmw->manager.string_direction ;
Packit b099d7
    }
Packit b099d7
Packit b099d7
   /*  If either of the background, shadow, or highlight colors or  */
Packit b099d7
   /*  pixmaps have changed, destroy and recreate the gc's.         */
Packit b099d7
Packit b099d7
   if (curmw->core.background_pixel != newmw->core.background_pixel ||
Packit b099d7
       curmw->core.background_pixmap != newmw->core.background_pixmap)
Packit b099d7
   {
Packit b099d7
      XtReleaseGC ( (Widget) newmw, newmw->manager.background_GC);
Packit b099d7
      newmw->manager.background_GC = 
Packit b099d7
	  _XmGetPixmapBasedGC (new_w, 
Packit b099d7
			       newmw->core.background_pixel,
Packit b099d7
			       newmw->manager.foreground,
Packit b099d7
			       newmw->core.background_pixmap);
Packit b099d7
      returnFlag = True;
Packit b099d7
      visualFlag |= (VisualBackgroundPixel|VisualBackgroundPixmap);
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if (curmw->manager.top_shadow_color != newmw->manager.top_shadow_color ||
Packit b099d7
       curmw->manager.top_shadow_pixmap != newmw->manager.top_shadow_pixmap)
Packit b099d7
   {
Packit b099d7
      XtReleaseGC ((Widget) newmw, newmw->manager.top_shadow_GC);
Packit b099d7
      newmw->manager.top_shadow_GC = 
Packit b099d7
	_XmGetPixmapBasedGC (new_w, 
Packit b099d7
			     newmw->manager.top_shadow_color,
Packit b099d7
			     newmw->core.background_pixel,
Packit b099d7
			     newmw->manager.top_shadow_pixmap);
Packit b099d7
      returnFlag = True;
Packit b099d7
      visualFlag |= (VisualTopShadowColor|VisualTopShadowPixmap);
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if (curmw->manager.bottom_shadow_color != 
Packit b099d7
          newmw->manager.bottom_shadow_color ||
Packit b099d7
       curmw->manager.bottom_shadow_pixmap != 
Packit b099d7
          newmw->manager.bottom_shadow_pixmap)
Packit b099d7
   {
Packit b099d7
      XtReleaseGC ((Widget) newmw, newmw->manager.bottom_shadow_GC);
Packit b099d7
      newmw->manager.bottom_shadow_GC = 
Packit b099d7
	  _XmGetPixmapBasedGC (new_w, 
Packit b099d7
			       newmw->manager.bottom_shadow_color,
Packit b099d7
			       newmw->core.background_pixel,
Packit b099d7
			       newmw->manager.bottom_shadow_pixmap);
Packit b099d7
      returnFlag = True;
Packit b099d7
      visualFlag |= (VisualBottomShadowColor|VisualBottomShadowPixmap);
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if (curmw->manager.highlight_color != newmw->manager.highlight_color ||
Packit b099d7
       curmw->manager.highlight_pixmap != newmw->manager.highlight_pixmap)
Packit b099d7
   {
Packit b099d7
      XtReleaseGC ((Widget) newmw, newmw->manager.highlight_GC);
Packit b099d7
      newmw->manager.highlight_GC = 
Packit b099d7
	_XmGetPixmapBasedGC (new_w, 
Packit b099d7
			     newmw->manager.highlight_color,
Packit b099d7
			     newmw->core.background_pixel,
Packit b099d7
			     newmw->manager.highlight_pixmap);
Packit b099d7
      returnFlag = True;
Packit b099d7
      visualFlag |= (VisualHighlightColor|VisualHighlightPixmap);
Packit b099d7
   }
Packit b099d7
Packit b099d7
   if (curmw->manager.foreground != newmw->manager.foreground)
Packit b099d7
      visualFlag |= VisualForeground ;
Packit b099d7
Packit b099d7
Packit b099d7
   /*  Inform children of possible visual changes  */
Packit b099d7
Packit b099d7
   if (visualFlag)
Packit b099d7
      returnFlag |= _XmNotifyChildrenVisual (current, new_w, visualFlag);
Packit b099d7
Packit b099d7
Packit b099d7
   /*  Return flag to indicate if redraw is needed.  */
Packit b099d7
Packit b099d7
   return (returnFlag);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
   
Packit b099d7
/*********************************************************************
Packit b099d7
 *
Packit b099d7
 * InsertChild
Packit b099d7
 *
Packit b099d7
 *********************************************************************/
Packit b099d7
static void 
Packit b099d7
InsertChild(
Packit b099d7
        Widget child )
Packit b099d7
{
Packit b099d7
    CompositeClassRec *cc = (CompositeClassRec *) compositeWidgetClass;
Packit b099d7
    XtWidgetProc insert_child;
Packit b099d7
Packit b099d7
    if (!XtIsRectObj(child))
Packit b099d7
	return;
Packit b099d7
	
Packit b099d7
    _XmProcessLock();
Packit b099d7
    insert_child = cc->composite_class.insert_child;
Packit b099d7
    _XmProcessUnlock();
Packit b099d7
    (*insert_child)(child);
Packit b099d7
}
Packit b099d7
Packit b099d7
/*********************************************************************
Packit b099d7
 *
Packit b099d7
 * DeleteChild
Packit b099d7
 *
Packit b099d7
 *********************************************************************/
Packit b099d7
static void 
Packit b099d7
DeleteChild(
Packit b099d7
        Widget child )
Packit b099d7
{
Packit b099d7
    XmManagerWidget mw = (XmManagerWidget) child->core.parent;
Packit b099d7
    Widget tab_group ;
Packit b099d7
    CompositeClassRec *cc = (CompositeClassRec *) compositeWidgetClass;
Packit b099d7
    XtWidgetProc delete_child;
Packit b099d7
    
Packit b099d7
    if (!XtIsRectObj(child))
Packit b099d7
	return;
Packit b099d7
    
Packit b099d7
    if (mw->manager.selected_gadget == (XmGadget) child)
Packit b099d7
	mw->manager.selected_gadget = NULL;
Packit b099d7
    
Packit b099d7
    if(    mw->manager.initial_focus == child    )
Packit b099d7
	{
Packit b099d7
	    mw->manager.initial_focus = NULL ;
Packit b099d7
	}
Packit b099d7
    if(    mw->manager.active_child == child    )
Packit b099d7
	{
Packit b099d7
	    mw->manager.active_child = NULL;
Packit b099d7
	}
Packit b099d7
    if(    (tab_group = XmGetTabGroup( child))
Packit b099d7
       &&  (tab_group != (Widget) mw)
Packit b099d7
       &&  XmIsManager( tab_group)
Packit b099d7
       &&  (((XmManagerWidget) tab_group)->manager.active_child == child) )
Packit b099d7
	{
Packit b099d7
	    ((XmManagerWidget) tab_group)->manager.active_child = NULL ;
Packit b099d7
	}
Packit b099d7
Packit b099d7
    _XmProcessLock();
Packit b099d7
    delete_child = cc->composite_class.delete_child;
Packit b099d7
    _XmProcessUnlock();
Packit b099d7
    (*delete_child)(child);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ManagerMotion
Packit b099d7
 *	This function handles the generation of motion, enter, and leave
Packit b099d7
 *	window events for gadgets and the dispatching of these events to
Packit b099d7
 *	the gadgets.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
ManagerMotion(
Packit b099d7
        Widget wid,
Packit b099d7
        XtPointer closure,	/* unused */
Packit b099d7
        XEvent *event,
Packit b099d7
        Boolean *cont )		/* unused */
Packit b099d7
{
Packit b099d7
   XmManagerWidget mw = (XmManagerWidget) wid ;
Packit b099d7
   XmGadget gadget;
Packit b099d7
   XmGadget oldGadget;
Packit b099d7
Packit b099d7
   /*  Event on the managers window and not propagated from a child  */
Packit b099d7
Packit b099d7
   /* Old comment from 1.1:
Packit b099d7
    * ManagerMotion() creates misleading Enter/Leave events.  A race condition
Packit b099d7
    * exists such that it's possible that when ManagerMotion() is called, the
Packit b099d7
    * manager does not yet have the focus.  Dropping the Enter on the floor
Packit b099d7
    * caused ManagerMotion() to translate the first subsequent motion event
Packit b099d7
    * into an enter to dispatch to the gadget.  Subsequently button gadget 
Packit b099d7
    * (un)highlighting on enter/leave was unreliable.  This problem requires 
Packit b099d7
    * additional investigation. 
Packit b099d7
    * The quick fix, currently, is for ManagerEnter()
Packit b099d7
    * and ManagerLeave() to use the event whether or not the manager has the 
Packit b099d7
    * focus.  
Packit b099d7
    * In addition, in dispatching enter/leaves to gadgets here in this 
Packit b099d7
    * routine, ManagerMotion(), bear in mind that we are passing a 
Packit b099d7
    * XPointerMovedEvent and should probably be creating a synthethic 
Packit b099d7
    * XCrossingEvent instead.
Packit b099d7
    *
Packit b099d7
    * if ((event->subwindow != 0) || !mw->manager.has_focus)
Packit b099d7
    */
Packit b099d7
Packit b099d7
    /* CR 9362: 
Packit b099d7
     * ManagerMotion() was not keeping track of Enter/Leave events.
Packit b099d7
     * Pointer motion on a gadget which extended beyond the manager's
Packit b099d7
     * geometry was not being tracked correctly.  Thus we now use the 
Packit b099d7
     * has_focus flag to toggle between enter/leave states. Use of this
Packit b099d7
     * flag prevents us from having to use _XmGetPointVisibility which is
Packit b099d7
     * expensive.
Packit b099d7
     * Prior to 1.1, xcrossing.focus was used, but this proved incorrect, 
Packit b099d7
     * as the 1.1 comment above describes.  
Packit b099d7
     */
Packit b099d7
Packit b099d7
   if (event->xmotion.subwindow != 0 || !mw->manager.has_focus)
Packit b099d7
      return;
Packit b099d7
Packit b099d7
   gadget = _XmInputForGadget((Widget) mw, event->xmotion.x, 
Packit b099d7
			      event->xmotion.y);
Packit b099d7
   oldGadget = (XmGadget) mw->manager.highlighted_widget;
Packit b099d7
Packit b099d7
Packit b099d7
   /*  Dispatch motion events to the child  */
Packit b099d7
Packit b099d7
   if (gadget != NULL)
Packit b099d7
   {
Packit b099d7
      if (gadget->gadget.event_mask & XmMOTION_EVENT)
Packit b099d7
         _XmDispatchGadgetInput((Widget) gadget, event, XmMOTION_EVENT);
Packit b099d7
   }
Packit b099d7
Packit b099d7
Packit b099d7
   /*  Check for and process a leave window condition  */
Packit b099d7
Packit b099d7
   if (oldGadget != NULL && gadget != oldGadget)
Packit b099d7
   {
Packit b099d7
      if (oldGadget->gadget.event_mask & XmLEAVE_EVENT)
Packit b099d7
         _XmDispatchGadgetInput( (Widget) oldGadget, event, XmLEAVE_EVENT);
Packit b099d7
Packit b099d7
      mw->manager.highlighted_widget = NULL;
Packit b099d7
   }
Packit b099d7
Packit b099d7
Packit b099d7
   /*  Check for and process an enter window condition  */
Packit b099d7
Packit b099d7
   if (gadget != NULL && gadget != oldGadget)
Packit b099d7
   {
Packit b099d7
      if (gadget->gadget.event_mask & XmENTER_EVENT)
Packit b099d7
      {
Packit b099d7
         _XmDispatchGadgetInput( (Widget) gadget, event, XmENTER_EVENT);
Packit b099d7
         mw->manager.highlighted_widget = (Widget) gadget;
Packit b099d7
      }
Packit b099d7
      else
Packit b099d7
         mw->manager.highlighted_widget = NULL;
Packit b099d7
   }
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ManagerEnter
Packit b099d7
 *	This function handles the generation of motion and enter window
Packit b099d7
 *	events for gadgets and the dispatching of these events to the
Packit b099d7
 *	gadgets.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
ManagerEnter(
Packit b099d7
        Widget wid,
Packit b099d7
        XtPointer closure,	/* unused */
Packit b099d7
        XEvent *event,
Packit b099d7
        Boolean *cont )		/* unused */
Packit b099d7
{
Packit b099d7
   XmManagerWidget mw = (XmManagerWidget) wid ;
Packit b099d7
   XmGadget gadget;
Packit b099d7
Packit b099d7
   /* Old comment from 1.1:
Packit b099d7
    * See ManagerMotion()
Packit b099d7
    * if (!(mw->manager.has_focus = (Boolean) event->xcrossing.focus)) 
Packit b099d7
    *    return;
Packit b099d7
    */
Packit b099d7
Packit b099d7
    /* Toggle to entered state */
Packit b099d7
    mw->manager.has_focus = True;
Packit b099d7
Packit b099d7
   /*
Packit b099d7
    * call the traversal action in order to synch things up. This
Packit b099d7
    * should be cleaned up into a single module |||
Packit b099d7
    */
Packit b099d7
   _XmManagerEnter((Widget) mw, event, NULL, NULL);
Packit b099d7
Packit b099d7
   gadget = _XmInputForGadget( (Widget) mw, event->xcrossing.x,
Packit b099d7
                                           event->xcrossing.y);
Packit b099d7
   /*  Dispatch motion and enter events to the child  */
Packit b099d7
Packit b099d7
   if (gadget != NULL)
Packit b099d7
   {
Packit b099d7
      if (gadget->gadget.event_mask & XmMOTION_EVENT)
Packit b099d7
         _XmDispatchGadgetInput( (Widget) gadget, event, XmMOTION_EVENT);
Packit b099d7
Packit b099d7
      if (gadget->gadget.event_mask & XmENTER_EVENT)
Packit b099d7
      {
Packit b099d7
         _XmDispatchGadgetInput( (Widget) gadget, event, XmENTER_EVENT);
Packit b099d7
         mw->manager.highlighted_widget = (Widget) gadget;
Packit b099d7
      }
Packit b099d7
      else
Packit b099d7
         mw->manager.highlighted_widget = NULL;
Packit b099d7
Packit b099d7
   }
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ManagerLeave
Packit b099d7
 *	This function handles the generation of leave window events for
Packit b099d7
 *	gadgets and the dispatching of these events to the gadgets.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
ManagerLeave(
Packit b099d7
        Widget wid,
Packit b099d7
        XtPointer closure,	/* unused */
Packit b099d7
        XEvent *event,
Packit b099d7
        Boolean *cont )		/* unused */
Packit b099d7
{
Packit b099d7
   XmManagerWidget mw = (XmManagerWidget) wid ;
Packit b099d7
   XmGadget oldGadget;
Packit b099d7
Packit b099d7
   /* See ManagerMotion()
Packit b099d7
    * if (!(mw->manager.has_focus = (Boolean) event->xcrossing.focus)) 
Packit b099d7
    *    return;
Packit b099d7
    */
Packit b099d7
Packit b099d7
    /* Toggle to leave state */
Packit b099d7
    mw->manager.has_focus = False;
Packit b099d7
Packit b099d7
   oldGadget = (XmGadget) mw->manager.highlighted_widget;
Packit b099d7
Packit b099d7
   if (oldGadget != NULL)
Packit b099d7
   {
Packit b099d7
      if (oldGadget->gadget.event_mask & XmLEAVE_EVENT)
Packit b099d7
         _XmDispatchGadgetInput( (Widget) oldGadget, event, XmLEAVE_EVENT);
Packit b099d7
      mw->manager.highlighted_widget = NULL;
Packit b099d7
   }
Packit b099d7
   /*
Packit b099d7
    * call the traversal action in order to synch things up. This
Packit b099d7
    * should be cleaned up into a single module |||
Packit b099d7
    */
Packit b099d7
   _XmManagerLeave( (Widget) mw, event, NULL, NULL);
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  AddMotionHandlers
Packit b099d7
 *	Add the event handlers necessary to synthisize motion events
Packit b099d7
 *	for gadgets.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
AddMotionHandlers(
Packit b099d7
        XmManagerWidget mw )
Packit b099d7
{
Packit b099d7
   mw->manager.event_handler_added = True;
Packit b099d7
#if 1
Packit b099d7
     /* for tool tips */
Packit b099d7
     XtAddEventHandler ((Widget) mw, PointerMotionMask, False, 
Packit b099d7
			ManagerMotion, NULL);
Packit b099d7
#else
Packit b099d7
   /* The first version in this #ifdef is superior because it
Packit b099d7
      involves lower network traffic,  but causes problems in
Packit b099d7
      VTS and automation (CR 8943).  We can reexamine this later */
Packit b099d7
   if( _XmGetFocusPolicy( (Widget) mw) != XmEXPLICIT ) {
Packit b099d7
     XtAddEventHandler ((Widget) mw, PointerMotionMask, False, 
Packit b099d7
			ManagerMotion, NULL);
Packit b099d7
   } else {
Packit b099d7
     XtAddEventHandler ((Widget) mw, ButtonMotionMask, False, 
Packit b099d7
			ManagerMotion, NULL);
Packit b099d7
   }
Packit b099d7
#endif
Packit b099d7
Packit b099d7
   XtAddEventHandler ((Widget) mw, EnterWindowMask, False, 
Packit b099d7
		      ManagerEnter, NULL);
Packit b099d7
   XtAddEventHandler ((Widget) mw, LeaveWindowMask, False, 
Packit b099d7
		      ManagerLeave, NULL);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ConstraintInitialize
Packit b099d7
 *	The constraint destroy procedure checks to see if a gadget
Packit b099d7
 *	child is being destroyed.  If so, the managers motion processing
Packit b099d7
 *	event handlers are checked to see if they need to be removed.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static void 
Packit b099d7
ConstraintInitialize(
Packit b099d7
        Widget request,		/* unused */
Packit b099d7
        Widget new_w,
Packit b099d7
        ArgList args,		/* unused */
Packit b099d7
        Cardinal * num_args )	/* unused */
Packit b099d7
{
Packit b099d7
   XmGadget g;
Packit b099d7
   XmManagerWidget parent;
Packit b099d7
Packit b099d7
   if (!XtIsRectObj(new_w)) return;
Packit b099d7
Packit b099d7
   parent = (XmManagerWidget) new_w->core.parent;
Packit b099d7
Packit b099d7
   if (XmIsGadget (new_w))
Packit b099d7
   {
Packit b099d7
      g = (XmGadget) new_w;
Packit b099d7
Packit b099d7
Packit b099d7
      if ((g->gadget.event_mask & 
Packit b099d7
           (XmENTER_EVENT | XmLEAVE_EVENT | XmMOTION_EVENT)) &&
Packit b099d7
           parent->manager.event_handler_added == False)
Packit b099d7
         AddMotionHandlers (parent);
Packit b099d7
   }
Packit b099d7
   else if (XtIsWidget(new_w))
Packit b099d7
     {
Packit b099d7
       if (parent->manager.accelerator_widget)
Packit b099d7
         {
Packit b099d7
           XtInstallAccelerators (new_w, parent->manager.accelerator_widget);
Packit b099d7
         }
Packit b099d7
       /* else was the DoMagicCompatibility */
Packit b099d7
     }
Packit b099d7
   /* else non-widget non-gadget RectObj */
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  CheckRemoveMotionHandlers
Packit b099d7
 *	This function loops through the child set checking each gadget 
Packit b099d7
 *	to see if the need motion events or not.  If no gadget's need
Packit b099d7
 *	motion events and the motion event handlers have been added,
Packit b099d7
 *	then remove the event handlers.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
CheckRemoveMotionHandlers(
Packit b099d7
        XmManagerWidget mw )
Packit b099d7
{
Packit b099d7
   register int i;
Packit b099d7
   register Widget child;
Packit b099d7
Packit b099d7
Packit b099d7
   /*  If there are any gadgets which need motion events, return.  */
Packit b099d7
Packit b099d7
   if (!mw->core.being_destroyed)
Packit b099d7
   {
Packit b099d7
      for (i = 0; i < mw->composite.num_children; i++)
Packit b099d7
      {
Packit b099d7
         child = mw->composite.children[i];
Packit b099d7
   
Packit b099d7
         if (XmIsGadget(child))
Packit b099d7
         {
Packit b099d7
            if (((XmGadget) child)->gadget.event_mask & 
Packit b099d7
                (XmENTER_EVENT | XmLEAVE_EVENT | XmMOTION_EVENT))
Packit b099d7
            return;
Packit b099d7
         }
Packit b099d7
      }
Packit b099d7
   }
Packit b099d7
Packit b099d7
Packit b099d7
   /*  Remove the motion event handlers  */
Packit b099d7
Packit b099d7
   mw->manager.event_handler_added = False;
Packit b099d7
Packit b099d7
   XtRemoveEventHandler ((Widget) mw, PointerMotionMask, False, 
Packit b099d7
			 ManagerMotion, NULL);
Packit b099d7
   XtRemoveEventHandler ((Widget) mw, EnterWindowMask, False, 
Packit b099d7
			 ManagerEnter, NULL);
Packit b099d7
   XtRemoveEventHandler ((Widget) mw, LeaveWindowMask, False, 
Packit b099d7
			 ManagerLeave, NULL);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ConstraintDestroy
Packit b099d7
 *	The constraint destroy procedure checks to see if a gadget
Packit b099d7
 *	child is being destroyed.  If so, the managers motion processing
Packit b099d7
 *	event handlers are checked to see if they need to be removed.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static void 
Packit b099d7
ConstraintDestroy(
Packit b099d7
        Widget w )
Packit b099d7
{
Packit b099d7
   XmGadget g;
Packit b099d7
   XmManagerWidget parent;
Packit b099d7
Packit b099d7
   if (!XtIsRectObj(w)) return;
Packit b099d7
Packit b099d7
   if (XmIsGadget (w))
Packit b099d7
   {
Packit b099d7
      g = (XmGadget) w;
Packit b099d7
      parent = (XmManagerWidget) w->core.parent;
Packit b099d7
Packit b099d7
      if (g->gadget.event_mask & 
Packit b099d7
          (XmENTER_EVENT | XmLEAVE_EVENT | XmMOTION_EVENT))
Packit b099d7
         CheckRemoveMotionHandlers (parent);
Packit b099d7
Packit b099d7
      if (parent->manager.highlighted_widget == w)
Packit b099d7
         parent->manager.highlighted_widget = NULL;
Packit b099d7
Packit b099d7
      if (parent->manager.selected_gadget == g)
Packit b099d7
         parent->manager.selected_gadget = NULL;
Packit b099d7
   }
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ConstraintSetValues
Packit b099d7
 *	Make sure the managers event handler is set appropriately for
Packit b099d7
 *	gadget event handling.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
/*ARGSUSED*/
Packit b099d7
static Boolean 
Packit b099d7
ConstraintSetValues(
Packit b099d7
        Widget current,
Packit b099d7
        Widget request,		/* unused */
Packit b099d7
        Widget new_w,
Packit b099d7
        ArgList args,		/* unused */
Packit b099d7
        Cardinal * num_args )	/* unused */
Packit b099d7
{
Packit b099d7
   XmGadget currentg, newg;
Packit b099d7
   XmManagerWidget parent;
Packit b099d7
   unsigned int motion_events;
Packit b099d7
Packit b099d7
   if (!XtIsRectObj(new_w)) return(FALSE);
Packit b099d7
Packit b099d7
   /*  If the child is a gadget and its event mask has changed with  */
Packit b099d7
   /*  respect to the event types which need motion events on the    */
Packit b099d7
   /*  parent.                                                       */
Packit b099d7
Packit b099d7
   if (XmIsGadget (new_w))
Packit b099d7
   {
Packit b099d7
      currentg = (XmGadget) current;
Packit b099d7
      newg = (XmGadget) new_w;
Packit b099d7
      parent = (XmManagerWidget) new_w->core.parent;
Packit b099d7
Packit b099d7
      motion_events = XmENTER_EVENT | XmLEAVE_EVENT | XmMOTION_EVENT;
Packit b099d7
Packit b099d7
      if ((newg->gadget.event_mask & motion_events) !=
Packit b099d7
          (currentg->gadget.event_mask & motion_events))
Packit b099d7
      {
Packit b099d7
         if ((newg->gadget.event_mask & motion_events) &&
Packit b099d7
             parent->manager.event_handler_added == False)
Packit b099d7
            AddMotionHandlers (parent);
Packit b099d7
Packit b099d7
         if ((~(newg->gadget.event_mask & motion_events)) &&
Packit b099d7
             parent->manager.event_handler_added == True)
Packit b099d7
            CheckRemoveMotionHandlers (parent);
Packit b099d7
      }
Packit b099d7
   }
Packit b099d7
Packit b099d7
   return (False);
Packit b099d7
}
Packit b099d7
Packit b099d7
/****************************************************************/
Packit b099d7
static Boolean 
Packit b099d7
ManagerParentProcess(
Packit b099d7
        Widget widget,
Packit b099d7
        XmParentProcessData data )
Packit b099d7
{
Packit b099d7
Packit b099d7
    return( _XmParentProcess( XtParent( widget), data)) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  ObjectAtPoint method
Packit b099d7
 *	Given a composite widget and an (x, y) coordinate, see if the
Packit b099d7
 *	(x, y) lies within one of the gadgets contained within the
Packit b099d7
 *	composite.  Return the gadget if found, otherwise return NULL.
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
static Widget 
Packit b099d7
ObjectAtPoint(
Packit b099d7
        Widget wid,
Packit b099d7
        Position  x,
Packit b099d7
        Position  y )
Packit b099d7
{
Packit b099d7
    CompositeWidget cw = (CompositeWidget) wid ;
Packit b099d7
    register int i;
Packit b099d7
    register Widget widget;
Packit b099d7
Packit b099d7
   /* For the case of overlapping gadgets, the last one in the
Packit b099d7
    * composite list will be the visible gadget (see order of
Packit b099d7
    * redisplay in XmeRedisplayGadgets).  So, search the child
Packit b099d7
    * list from the tail to the head to get this visible gadget
Packit b099d7
    * as the one to get the input.
Packit b099d7
    */
Packit b099d7
    i = cw->composite.num_children ;
Packit b099d7
    while( i-- ) {
Packit b099d7
	widget = cw->composite.children[i];
Packit b099d7
Packit b099d7
	if (XmIsGadget(widget) && XtIsManaged (widget)) {
Packit b099d7
	    if (x >= widget->core.x && y >= widget->core.y && 
Packit b099d7
		x < widget->core.x + widget->core.width    && 
Packit b099d7
		y < widget->core.y + widget->core.height)
Packit b099d7
		return (widget);
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
Packit b099d7
    return (NULL);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
static XmNavigability
Packit b099d7
WidgetNavigable(
Packit b099d7
        Widget wid)
Packit b099d7
{   
Packit b099d7
    if(    XtIsSensitive(wid)
Packit b099d7
       &&  ((XmManagerWidget) wid)->manager.traversal_on    )
Packit b099d7
	{ 
Packit b099d7
	    XmNavigationType nav_type = ((XmManagerWidget) wid)
Packit b099d7
		->manager.navigation_type ;
Packit b099d7
	    if(    (nav_type == XmSTICKY_TAB_GROUP)
Packit b099d7
	       ||  (nav_type == XmEXCLUSIVE_TAB_GROUP)
Packit b099d7
	       ||  (    (nav_type == XmTAB_GROUP)
Packit b099d7
		    &&  !_XmShellIsExclusive( wid))    )
Packit b099d7
		{
Packit b099d7
		    return XmDESCENDANTS_TAB_NAVIGABLE ;
Packit b099d7
		}
Packit b099d7
	    return XmDESCENDANTS_NAVIGABLE ;
Packit b099d7
	}
Packit b099d7
    return XmNOT_NAVIGABLE ;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
/****************************************************************
Packit b099d7
 ****************************************************************
Packit b099d7
 **
Packit b099d7
 ** Trait methods
Packit b099d7
 **
Packit b099d7
 ****************************************************************
Packit b099d7
 ****************************************************************/
Packit b099d7
Packit b099d7
static XmDirection 
Packit b099d7
GetDirection(Widget w)
Packit b099d7
{
Packit b099d7
  return (XmDirection)((XmManagerWidget)(w))->manager.string_direction;
Packit b099d7
}
Packit b099d7
Packit b099d7
static unsigned char
Packit b099d7
GetUnitType(Widget w)
Packit b099d7
{
Packit b099d7
    return ((XmManagerWidget) w)->manager.unit_type ;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
static void
Packit b099d7
GetColors(Widget w, 
Packit b099d7
	  XmAccessColorData color_data)
Packit b099d7
{
Packit b099d7
    XmManagerWidget mw = (XmManagerWidget) w ;
Packit b099d7
Packit b099d7
    color_data->valueMask = AccessForeground | AccessBackgroundPixel |
Packit b099d7
	AccessHighlightColor | AccessTopShadowColor | AccessBottomShadowColor;
Packit b099d7
    color_data->background = w->core.background_pixel;
Packit b099d7
    color_data->foreground = mw->manager.foreground;
Packit b099d7
    color_data->highlight_color = mw->manager.highlight_color;
Packit b099d7
    color_data->top_shadow_color = mw->manager.top_shadow_color;
Packit b099d7
    color_data->bottom_shadow_color = mw->manager.bottom_shadow_color;
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
/****************************************************************
Packit b099d7
 ****************************************************************
Packit b099d7
 **
Packit b099d7
 ** External functions, both _Xm and Xm.
Packit b099d7
 ** First come the action procs and then the other external entry points.
Packit b099d7
 **
Packit b099d7
 ****************************************************************
Packit b099d7
 ****************************************************************/
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGadgetTraversePrevTabGroup(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,		/* unused */
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{
Packit b099d7
  Widget ref_wid = ((XmManagerWidget) wid)->manager.active_child ;
Packit b099d7
  Boolean button_tab;
Packit b099d7
  XmDisplay xm_dpy;
Packit b099d7
Packit b099d7
  if (ref_wid == NULL)
Packit b099d7
    ref_wid = wid ;
Packit b099d7
Packit b099d7
  xm_dpy = (XmDisplay) XmGetXmDisplay(XtDisplayOfObject(ref_wid));
Packit b099d7
  button_tab = xm_dpy->display.enable_button_tab;
Packit b099d7
Packit b099d7
  if (button_tab)
Packit b099d7
    _XmMgrTraversal(ref_wid,  XmTRAVERSE_GLOBALLY_BACKWARD);
Packit b099d7
  else
Packit b099d7
    _XmMgrTraversal(ref_wid,  XmTRAVERSE_PREV_TAB_GROUP);
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGadgetTraverseNextTabGroup(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,		/* unused */
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{
Packit b099d7
  Widget ref_wid = ((XmManagerWidget) wid)->manager.active_child ;
Packit b099d7
  Boolean button_tab;
Packit b099d7
  XmDisplay xm_dpy;
Packit b099d7
Packit b099d7
  if (ref_wid == NULL)
Packit b099d7
    ref_wid = wid ;
Packit b099d7
Packit b099d7
  xm_dpy = (XmDisplay) XmGetXmDisplay(XtDisplayOfObject(ref_wid));
Packit b099d7
  button_tab = xm_dpy->display.enable_button_tab;
Packit b099d7
Packit b099d7
  if (button_tab)
Packit b099d7
    _XmMgrTraversal(ref_wid, XmTRAVERSE_GLOBALLY_FORWARD);
Packit b099d7
  else
Packit b099d7
    _XmMgrTraversal(ref_wid, XmTRAVERSE_NEXT_TAB_GROUP);
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGadgetTraverseCurrent(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{
Packit b099d7
  Widget child ;
Packit b099d7
  
Packit b099d7
  child = (Widget) _XmInputForGadget(wid, event->xbutton.x, event->xbutton.y); 
Packit b099d7
  XmProcessTraversal(child, XmTRAVERSE_CURRENT) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGadgetTraverseLeft(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,		/* unused */
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{
Packit b099d7
  Widget ref_wid = ((XmManagerWidget) wid)->manager.active_child ;
Packit b099d7
Packit b099d7
  if(    ref_wid == NULL    )
Packit b099d7
    {
Packit b099d7
      ref_wid = wid ;
Packit b099d7
    }
Packit b099d7
  _XmMgrTraversal( ref_wid, XmTRAVERSE_LEFT) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGadgetTraverseRight(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,		/* unused */
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{
Packit b099d7
  Widget ref_wid = ((XmManagerWidget) wid)->manager.active_child ;
Packit b099d7
Packit b099d7
  if(    ref_wid == NULL    )
Packit b099d7
    {
Packit b099d7
      ref_wid = wid ;
Packit b099d7
    }
Packit b099d7
  _XmMgrTraversal( ref_wid, XmTRAVERSE_RIGHT) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGadgetTraverseUp(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,		/* unused */
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{
Packit b099d7
  Widget ref_wid = ((XmManagerWidget) wid)->manager.active_child ;
Packit b099d7
Packit b099d7
  if(    ref_wid == NULL    )
Packit b099d7
    {
Packit b099d7
      ref_wid = wid ;
Packit b099d7
    }
Packit b099d7
  _XmMgrTraversal( ref_wid, XmTRAVERSE_UP) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGadgetTraverseDown(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,		/* unused */
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{
Packit b099d7
  Widget ref_wid = ((XmManagerWidget) wid)->manager.active_child ;
Packit b099d7
Packit b099d7
  if(    ref_wid == NULL    )
Packit b099d7
    {
Packit b099d7
      ref_wid = wid ;
Packit b099d7
    }
Packit b099d7
  _XmMgrTraversal( ref_wid, XmTRAVERSE_DOWN) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGadgetTraverseNext(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,		/* unused */
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{
Packit b099d7
  Widget ref_wid = ((XmManagerWidget) wid)->manager.active_child ;
Packit b099d7
Packit b099d7
  if(    ref_wid == NULL    )
Packit b099d7
    {
Packit b099d7
      ref_wid = wid ;
Packit b099d7
    }
Packit b099d7
  _XmMgrTraversal( ref_wid, XmTRAVERSE_NEXT) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGadgetTraversePrev(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,		/* unused */
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{
Packit b099d7
  Widget ref_wid = ((XmManagerWidget) wid)->manager.active_child ;
Packit b099d7
Packit b099d7
  if(    ref_wid == NULL    )
Packit b099d7
    {
Packit b099d7
      ref_wid = wid ;
Packit b099d7
    }
Packit b099d7
  _XmMgrTraversal( ref_wid, XmTRAVERSE_PREV) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGadgetTraverseHome(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,		/* unused */
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{
Packit b099d7
  Widget ref_wid = ((XmManagerWidget) wid)->manager.active_child ;
Packit b099d7
Packit b099d7
  if(    ref_wid == NULL    )
Packit b099d7
    {
Packit b099d7
      ref_wid = wid ;
Packit b099d7
    }
Packit b099d7
  _XmMgrTraversal( ref_wid, XmTRAVERSE_HOME) ;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGadgetSelect(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{   
Packit b099d7
   XmManagerWidget mw = (XmManagerWidget) wid ;
Packit b099d7
            Widget child ;
Packit b099d7
Packit b099d7
    if(    _XmGetFocusPolicy( (Widget) mw) == XmEXPLICIT    )
Packit b099d7
    {   
Packit b099d7
        child = mw->manager.active_child ;
Packit b099d7
        if(    child  &&  !XmIsGadget( child)    )
Packit b099d7
        {   child = NULL ;
Packit b099d7
            } 
Packit b099d7
        }
Packit b099d7
    else /* FocusPolicy == XmPOINTER */
Packit b099d7
    {   child = (Widget) _XmInputForGadget( (Widget) mw, event->xkey.x, event->xkey.y) ;
Packit b099d7
        } 
Packit b099d7
    if(    child
Packit b099d7
        && (((XmGadgetClass)XtClass( child))->gadget_class.arm_and_activate)  )
Packit b099d7
    {   
Packit b099d7
        (*(((XmGadgetClass)XtClass( child))->gadget_class.arm_and_activate))(
Packit b099d7
                                                    child, event, NULL, NULL) ;
Packit b099d7
        }
Packit b099d7
    return ;
Packit b099d7
    }
Packit b099d7
Packit b099d7
void 
Packit b099d7
_XmManagerParentActivate( 
Packit b099d7
        Widget mw,
Packit b099d7
        XEvent *event,
Packit b099d7
        String *params,
Packit b099d7
        Cardinal *num_params )
Packit b099d7
{   
Packit b099d7
    XmParentInputActionRec  pp_data ;
Packit b099d7
Packit b099d7
    pp_data.process_type = XmINPUT_ACTION ;
Packit b099d7
    pp_data.action = XmPARENT_ACTIVATE ;
Packit b099d7
    pp_data.event = event ;
Packit b099d7
    pp_data.params = params ;
Packit b099d7
    pp_data.num_params = num_params ;
Packit b099d7
Packit b099d7
    _XmParentProcess( mw, (XmParentProcessData) &pp_data);
Packit b099d7
}
Packit b099d7
Packit b099d7
void 
Packit b099d7
_XmManagerParentCancel( 
Packit b099d7
        Widget mw,
Packit b099d7
        XEvent *event,
Packit b099d7
        String *params,
Packit b099d7
        Cardinal *num_params )
Packit b099d7
{   
Packit b099d7
	XmParentInputActionRec  pp_data ;
Packit b099d7
Packit b099d7
    pp_data.process_type = XmINPUT_ACTION ;
Packit b099d7
    pp_data.action = XmPARENT_CANCEL ;
Packit b099d7
    pp_data.event = event ;
Packit b099d7
    pp_data.params = params ;
Packit b099d7
    pp_data.num_params = num_params ;
Packit b099d7
Packit b099d7
    _XmParentProcess( mw, (XmParentProcessData) &pp_data) ;
Packit b099d7
    }
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGadgetButtonMotion(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{
Packit b099d7
   XmManagerWidget mw = (XmManagerWidget) wid ;
Packit b099d7
            Widget child ;
Packit b099d7
Packit b099d7
    if(    _XmGetFocusPolicy( (Widget) mw) == XmEXPLICIT    )
Packit b099d7
    {   
Packit b099d7
        child = mw->manager.active_child ;
Packit b099d7
        if(    child  &&  !XmIsGadget( child)    )
Packit b099d7
        {   child = NULL ;
Packit b099d7
            } 
Packit b099d7
        }
Packit b099d7
    else /* FocusPolicy == XmPOINTER */
Packit b099d7
    {   child = (Widget) _XmInputForGadget( (Widget) mw, event->xmotion.x,
Packit b099d7
					   event->xmotion.y) ;
Packit b099d7
        } 
Packit b099d7
    if(    child    )
Packit b099d7
    {   _XmDispatchGadgetInput( child, event, XmMOTION_EVENT);
Packit b099d7
        }
Packit b099d7
    return ;
Packit b099d7
    }
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGadgetKeyInput(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{
Packit b099d7
            XmManagerWidget mw = (XmManagerWidget) wid ;
Packit b099d7
            Widget child ;
Packit b099d7
Packit b099d7
    if(    _XmGetFocusPolicy( (Widget) mw) == XmEXPLICIT    )
Packit b099d7
    {   
Packit b099d7
        child = mw->manager.active_child ;
Packit b099d7
        if(    child  &&  !XmIsGadget( child)    )
Packit b099d7
        {   child = NULL ;
Packit b099d7
            } 
Packit b099d7
        }
Packit b099d7
    else /* FocusPolicy == XmPOINTER */
Packit b099d7
	{   
Packit b099d7
	    child = (Widget) _XmInputForGadget( (Widget) mw, 
Packit b099d7
					       event->xkey.x, event->xkey.y) ;
Packit b099d7
        } 
Packit b099d7
    if(    child    )
Packit b099d7
    {   _XmDispatchGadgetInput( child, event, XmKEY_EVENT);
Packit b099d7
        }
Packit b099d7
    return ;
Packit b099d7
    }
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGadgetArm(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{
Packit b099d7
    XmManagerWidget mw = (XmManagerWidget) wid ;
Packit b099d7
    XmGadget gadget;
Packit b099d7
Packit b099d7
    if ((gadget = _XmInputForGadget( (Widget) mw, event->xbutton.x,
Packit b099d7
				    event->xbutton.y)) != NULL)
Packit b099d7
    {
Packit b099d7
	XmProcessTraversal( (Widget) gadget, XmTRAVERSE_CURRENT);
Packit b099d7
        _XmDispatchGadgetInput( (Widget) gadget, event, XmARM_EVENT);
Packit b099d7
        mw->manager.selected_gadget = gadget;
Packit b099d7
    }
Packit b099d7
    else
Packit b099d7
      {
Packit b099d7
        if(    _XmIsNavigable( wid)    )
Packit b099d7
          {   
Packit b099d7
            XmProcessTraversal( wid, XmTRAVERSE_CURRENT) ;
Packit b099d7
          } 
Packit b099d7
      }
Packit b099d7
Packit b099d7
    mw->manager.eligible_for_multi_button_event = NULL;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGadgetDrag(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{
Packit b099d7
    XmManagerWidget mw = (XmManagerWidget) wid ;
Packit b099d7
    XmGadget gadget;
Packit b099d7
Packit b099d7
    /* CR 5141: Don't let multi-button drags cause confusion. */
Packit b099d7
    if ( !(event->xbutton.state &
Packit b099d7
         ~((Button1Mask >> 1) << event->xbutton.button) &
Packit b099d7
         (Button1Mask | Button2Mask | Button3Mask | Button4Mask | Button5Mask))
Packit b099d7
	&& (gadget = _XmInputForGadget((Widget) mw, event->xbutton.x,
Packit b099d7
				    event->xbutton.y)) != NULL)
Packit b099d7
    {
Packit b099d7
        _XmDispatchGadgetInput( (Widget) gadget, event, XmBDRAG_EVENT);
Packit b099d7
        mw->manager.selected_gadget = gadget;
Packit b099d7
    }
Packit b099d7
Packit b099d7
    mw->manager.eligible_for_multi_button_event = NULL;
Packit b099d7
}
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmGadgetActivate(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{
Packit b099d7
        XmManagerWidget mw = (XmManagerWidget) wid ;	
Packit b099d7
        XmGadget gadget;
Packit b099d7
Packit b099d7
    /* we emulate automatic grab with owner_events = false by sending
Packit b099d7
     * the button up to the button down gadget
Packit b099d7
     */
Packit b099d7
    if ((gadget = mw->manager.selected_gadget) != NULL)
Packit b099d7
    {
Packit b099d7
        _XmDispatchGadgetInput( (Widget) gadget, event, XmACTIVATE_EVENT);
Packit b099d7
        mw->manager.selected_gadget = NULL;
Packit b099d7
        mw->manager.eligible_for_multi_button_event = gadget;
Packit b099d7
        }
Packit b099d7
    }
Packit b099d7
Packit b099d7
Packit b099d7
/*ARGSUSED*/
Packit b099d7
void 
Packit b099d7
_XmManagerHelp(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,
Packit b099d7
        String *params,		/* unused */
Packit b099d7
        Cardinal *num_params )	/* unused */
Packit b099d7
{
Packit b099d7
        XmManagerWidget mw = (XmManagerWidget) wid ;
Packit b099d7
	Widget widget;
Packit b099d7
Packit b099d7
	if (!_XmIsEventUnique(event))
Packit b099d7
	   return;
Packit b099d7
Packit b099d7
        if (_XmGetFocusPolicy( (Widget) mw) == XmEXPLICIT)
Packit b099d7
        {
Packit b099d7
          if ((widget = mw->manager.active_child) != NULL)
Packit b099d7
             _XmDispatchGadgetInput(widget, event, XmHELP_EVENT);
Packit b099d7
          else
Packit b099d7
             _XmSocorro( (Widget) mw, event, NULL, NULL);
Packit b099d7
        }
Packit b099d7
        else
Packit b099d7
        {
Packit b099d7
	    if ((widget = XmObjectAtPoint( (Widget) mw, 
Packit b099d7
					  event->xkey.x,
Packit b099d7
					  event->xkey.y)) != NULL)
Packit b099d7
               _XmDispatchGadgetInput(widget, event, XmHELP_EVENT);
Packit b099d7
          else
Packit b099d7
               _XmSocorro( (Widget) mw, event, NULL, NULL);
Packit b099d7
        }
Packit b099d7
Packit b099d7
	_XmRecordEvent(event);
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
void 
Packit b099d7
_XmGadgetMultiArm(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,
Packit b099d7
        String *params,
Packit b099d7
        Cardinal *num_params )
Packit b099d7
{
Packit b099d7
    XmManagerWidget mw = (XmManagerWidget) wid ;	
Packit b099d7
    XmGadget gadget;
Packit b099d7
Packit b099d7
    gadget = _XmInputForGadget( (Widget) mw, event->xbutton.x,
Packit b099d7
			       event->xbutton.y);
Packit b099d7
    /*
Packit b099d7
     * If we're not set up for multi_button events, check to see if the
Packit b099d7
     * input gadget has changed from the active_child.  This means that the
Packit b099d7
     * user is quickly clicking between gadgets of this manager widget.  
Packit b099d7
     * If so, arm the gadget as if it were the first button press.
Packit b099d7
     */
Packit b099d7
    if (mw->manager.eligible_for_multi_button_event &&
Packit b099d7
	((gadget = _XmInputForGadget( (Widget) mw, event->xbutton.x,
Packit b099d7
				     event->xbutton.y)) ==
Packit b099d7
	  mw->manager.eligible_for_multi_button_event))
Packit b099d7
    {
Packit b099d7
        _XmDispatchGadgetInput( (Widget) gadget, event, XmMULTI_ARM_EVENT);
Packit b099d7
	    mw->manager.selected_gadget = gadget;
Packit b099d7
    }
Packit b099d7
    else
Packit b099d7
       if (gadget && (gadget != (XmGadget)mw->manager.active_child))
Packit b099d7
	   _XmGadgetArm( (Widget) mw, event, params, num_params);
Packit b099d7
       else
Packit b099d7
	   mw->manager.eligible_for_multi_button_event = NULL;
Packit b099d7
}
Packit b099d7
Packit b099d7
void 
Packit b099d7
_XmGadgetMultiActivate(
Packit b099d7
        Widget wid,
Packit b099d7
        XEvent *event,
Packit b099d7
        String *params,
Packit b099d7
        Cardinal *num_params )
Packit b099d7
{
Packit b099d7
    XmManagerWidget mw = (XmManagerWidget) wid ;	
Packit b099d7
    XmGadget gadget;
Packit b099d7
Packit b099d7
    /*
Packit b099d7
     * If we're not set up for multi_button events, call _XmGadgetActivate
Packit b099d7
     * in case we're quickly selecting a new gadget in which it should
Packit b099d7
     * be activated as if it were the first button press.
Packit b099d7
     */
Packit b099d7
    if (mw->manager.eligible_for_multi_button_event &&
Packit b099d7
	   ((gadget = mw->manager.selected_gadget) ==
Packit b099d7
	      mw->manager.eligible_for_multi_button_event))
Packit b099d7
    {
Packit b099d7
        _XmDispatchGadgetInput((Widget) gadget, event,
Packit b099d7
		   XmMULTI_ACTIVATE_EVENT);
Packit b099d7
    }
Packit b099d7
    else
Packit b099d7
       _XmGadgetActivate( (Widget) mw, event, params, num_params);
Packit b099d7
}
Packit b099d7
Packit b099d7