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