|
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: VendorS.c /main/21 1999/08/09 10:49:41 mgreess $"
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
/* (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 HEWLETT-PACKARD COMPANY */
|
|
Packit |
b099d7 |
/* (c) Copyright 1987, 1988, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
|
|
Packit |
b099d7 |
/* (c) Copyright 1988 MASSACHUSETTS INSTITUTE OF TECHNOLOGY */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Make sure all wm properties can make it out of the resource manager */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <stdio.h>
|
|
Packit |
b099d7 |
#include <Xm/AccColorT.h>
|
|
Packit |
b099d7 |
#include <Xm/AtomMgr.h>
|
|
Packit |
b099d7 |
#include <Xm/DisplayP.h>
|
|
Packit |
b099d7 |
#include <Xm/LayoutT.h>
|
|
Packit |
b099d7 |
#include <Xm/MenuShell.h>
|
|
Packit |
b099d7 |
#include <Xm/ProtocolsP.h>
|
|
Packit |
b099d7 |
#include <Xm/ScreenP.h>
|
|
Packit |
b099d7 |
#include <Xm/SpecRenderT.h>
|
|
Packit |
b099d7 |
#include <Xm/TraitP.h>
|
|
Packit |
b099d7 |
#include <Xm/UnitTypeT.h>
|
|
Packit |
b099d7 |
#include <Xm/VendorSEP.h>
|
|
Packit |
b099d7 |
#include <Xm/VendorSP.h>
|
|
Packit |
b099d7 |
#include <Xm/XmosP.h> /* for bzero */
|
|
Packit |
b099d7 |
#include <Xm/ToolTipCT.h>
|
|
Packit |
b099d7 |
#include "BaseClassI.h"
|
|
Packit |
b099d7 |
#include "CallbackI.h"
|
|
Packit |
b099d7 |
#include "ExtObjectI.h"
|
|
Packit |
b099d7 |
#include "MenuShellI.h"
|
|
Packit |
b099d7 |
#include "MessagesI.h"
|
|
Packit |
b099d7 |
#include "PixConvI.h"
|
|
Packit |
b099d7 |
#include "ProtocolsI.h"
|
|
Packit |
b099d7 |
#include "ResConverI.h"
|
|
Packit |
b099d7 |
#include "SyntheticI.h"
|
|
Packit |
b099d7 |
#include "TraitI.h"
|
|
Packit |
b099d7 |
#include "TravActI.h"
|
|
Packit |
b099d7 |
#include "TraversalI.h"
|
|
Packit |
b099d7 |
#include "XmImI.h"
|
|
Packit |
b099d7 |
#include "VendorSI.h"
|
|
Packit |
b099d7 |
#include "EditresComI.h"
|
|
Packit |
b099d7 |
#include "XmI.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifndef NO_MESSAGE_CATALOG
|
|
Packit |
b099d7 |
#if !defined(NL_CAT_LOCALE)
|
|
Packit |
b099d7 |
#define NL_CAT_LOCALE 0
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* #define DEBUG_GRABS */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define MSG1 _XmMMsgVendor_0000
|
|
Packit |
b099d7 |
#define MSG2 _XmMMsgVendor_0001
|
|
Packit |
b099d7 |
#define MSG3 _XmMMsgVendor_0002
|
|
Packit |
b099d7 |
#define MSG4 _XmMMsgVendor_0003
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define DONT_CARE -1
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
typedef struct {
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve ;
|
|
Packit |
b099d7 |
Widget shell ;
|
|
Packit |
b099d7 |
} XmDestroyGrabRec, *XmDestroyGrabList ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/******** Static Function Declarations ********/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XtPointer BaseProc(
|
|
Packit |
b099d7 |
Widget widget,
|
|
Packit |
b099d7 |
XtPointer client_data) ;
|
|
Packit |
b099d7 |
static Cardinal GetSecResData(
|
|
Packit |
b099d7 |
WidgetClass w_class,
|
|
Packit |
b099d7 |
XmSecondaryResourceData **secResDataRtn) ;
|
|
Packit |
b099d7 |
static void ClassInitialize( void ) ;
|
|
Packit |
b099d7 |
static void ClassPartInitialize(
|
|
Packit |
b099d7 |
WidgetClass wc) ;
|
|
Packit |
b099d7 |
static void SetMwmStuff(
|
|
Packit |
b099d7 |
XmVendorShellExtObject ove,
|
|
Packit |
b099d7 |
XmVendorShellExtObject nve) ;
|
|
Packit |
b099d7 |
static void AddGrab(
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve,
|
|
Packit |
b099d7 |
Widget shell,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int exclusive,
|
|
Packit |
b099d7 |
int springLoaded,
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
Boolean exclusive,
|
|
Packit |
b099d7 |
Boolean springLoaded,
|
|
Packit |
b099d7 |
#endif /* NeedWidePrototypes */
|
|
Packit |
b099d7 |
XmVendorShellExtObject origKid) ;
|
|
Packit |
b099d7 |
static void RemoveGrab(
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int being_destroyed,
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
Boolean being_destroyed,
|
|
Packit |
b099d7 |
#endif /* NeedWidePrototypes */
|
|
Packit |
b099d7 |
Widget shell) ;
|
|
Packit |
b099d7 |
static void RemoveGrabCallback(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
XtPointer client_data,
|
|
Packit |
b099d7 |
XtPointer call_data) ;
|
|
Packit |
b099d7 |
static void AddToGrabList(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
Widget excludedKid,
|
|
Packit |
b099d7 |
Widget origKid) ;
|
|
Packit |
b099d7 |
static void AddCousinsToGrabList(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
Widget excludedKid,
|
|
Packit |
b099d7 |
Widget origKid) ;
|
|
Packit |
b099d7 |
static Boolean IsPopupShell(
|
|
Packit |
b099d7 |
Widget shell) ;
|
|
Packit |
b099d7 |
static void PopupCallback(
|
|
Packit |
b099d7 |
Widget shellParent,
|
|
Packit |
b099d7 |
XtPointer closure,
|
|
Packit |
b099d7 |
XtPointer callData) ;
|
|
Packit |
b099d7 |
static void PopdownCallback(
|
|
Packit |
b099d7 |
Widget shellParent,
|
|
Packit |
b099d7 |
XtPointer closure,
|
|
Packit |
b099d7 |
XtPointer callData) ;
|
|
Packit |
b099d7 |
static Widget GetNextShell(
|
|
Packit |
b099d7 |
Widget vw) ;
|
|
Packit |
b099d7 |
static XmDesktopObject GetShellDesktopParent(
|
|
Packit |
b099d7 |
VendorShellWidget vw,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static void SecondaryObjectCreate(
|
|
Packit |
b099d7 |
Widget req,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static void InitializePrehook(
|
|
Packit |
b099d7 |
Widget req,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static void VendorExtInitialize(
|
|
Packit |
b099d7 |
Widget req,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static void MotifWarningHandler (
|
|
Packit |
b099d7 |
String name,
|
|
Packit |
b099d7 |
String type,
|
|
Packit |
b099d7 |
String s_class,
|
|
Packit |
b099d7 |
String message,
|
|
Packit |
b099d7 |
String * params,
|
|
Packit |
b099d7 |
Cardinal* num_params);
|
|
Packit |
b099d7 |
static void Initialize(
|
|
Packit |
b099d7 |
Widget req,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static void InitializePosthook(
|
|
Packit |
b099d7 |
Widget req,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static Boolean SetValuesPrehook(
|
|
Packit |
b099d7 |
Widget old,
|
|
Packit |
b099d7 |
Widget ref,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static Boolean VendorExtSetValues(
|
|
Packit |
b099d7 |
Widget old,
|
|
Packit |
b099d7 |
Widget ref,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static Boolean SetValues(
|
|
Packit |
b099d7 |
Widget current,
|
|
Packit |
b099d7 |
Widget req,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static Boolean SetValuesPosthook(
|
|
Packit |
b099d7 |
Widget current,
|
|
Packit |
b099d7 |
Widget req,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static void GetValuesPrehook(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static void GetValuesHook(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static void GetValuesPosthook(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static void PendingTransientDestroyed(
|
|
Packit |
b099d7 |
Widget vw,
|
|
Packit |
b099d7 |
XtPointer cl_data,
|
|
Packit |
b099d7 |
XtPointer ca_data) ;
|
|
Packit |
b099d7 |
static void SetTransientFor(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
XtPointer closure,
|
|
Packit |
b099d7 |
XtPointer call_data) ;
|
|
Packit |
b099d7 |
static void Resize(
|
|
Packit |
b099d7 |
Widget w) ;
|
|
Packit |
b099d7 |
static void ChangeManaged(
|
|
Packit |
b099d7 |
Widget wid) ;
|
|
Packit |
b099d7 |
static void UpdateCoreGeometry(
|
|
Packit |
b099d7 |
VendorShellWidget vw,
|
|
Packit |
b099d7 |
XmVendorShellExtObject vendorExt) ;
|
|
Packit |
b099d7 |
static void Realize(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XtValueMask *vmask,
|
|
Packit |
b099d7 |
XSetWindowAttributes *attr) ;
|
|
Packit |
b099d7 |
static XtGeometryResult GeometryManager(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XtWidgetGeometry *request,
|
|
Packit |
b099d7 |
XtWidgetGeometry *reply) ;
|
|
Packit |
b099d7 |
static XtGeometryResult RootGeometryManager(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XtWidgetGeometry *request,
|
|
Packit |
b099d7 |
XtWidgetGeometry *reply) ;
|
|
Packit |
b099d7 |
static void SetMwmHints(
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve) ;
|
|
Packit |
b099d7 |
static void SetMwmMenu(
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve) ;
|
|
Packit |
b099d7 |
static void VendorExtRealize(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
XtPointer closure,
|
|
Packit |
b099d7 |
XtPointer call_data) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void AddDLEntry(
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve,
|
|
Packit |
b099d7 |
Widget shell) ;
|
|
Packit |
b099d7 |
static void RemoveDLEntry(
|
|
Packit |
b099d7 |
unsigned pos) ;
|
|
Packit |
b099d7 |
static void Destroy(
|
|
Packit |
b099d7 |
Widget wid) ;
|
|
Packit |
b099d7 |
static void Redisplay(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XEvent *event,
|
|
Packit |
b099d7 |
Region region) ;
|
|
Packit |
b099d7 |
static XmFontList GetTable(Widget wid,
|
|
Packit |
b099d7 |
XtEnum type);
|
|
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 |
#ifdef DEBUG_GRABS
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void PrintModal(
|
|
Packit |
b099d7 |
XmModalData modal) ;
|
|
Packit |
b099d7 |
static void PrintXmGrabs(
|
|
Packit |
b099d7 |
Widget wid) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#endif /* DEBUG_GRABS */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
char _XmVersionString[] = XmVERSION_STRING ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmDestroyGrabList destroy_list ;
|
|
Packit |
b099d7 |
static unsigned short destroy_list_size ;
|
|
Packit |
b099d7 |
static unsigned short destroy_list_cnt ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Display * _XmDisplayHandle = NULL ;
|
|
Packit |
b099d7 |
static XtErrorMsgHandler previousWarningHandler = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Vendor shell class record
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
***************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define Offset(field) (XtOffsetOf(WMShellRec, field))
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static int default_unspecified_shell_int = XtUnspecifiedShellInt;
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Warning, casting XtUnspecifiedShellInt (which is -1) to an (XtPointer)
|
|
Packit |
b099d7 |
* can result is loss of bits on some machines (i.e. crays)
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XtResource resources[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNx, XmCPosition, XmRHorizontalPosition, sizeof(Position),
|
|
Packit |
b099d7 |
XtOffsetOf(WidgetRec, core.x), XmRImmediate, (XtPointer) 0,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNy, XmCPosition, XmRVerticalPosition, sizeof(Position),
|
|
Packit |
b099d7 |
XtOffsetOf(WidgetRec, core.y), XmRImmediate, (XtPointer) 0,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNwidth, XmCDimension, XmRHorizontalDimension, sizeof(Dimension),
|
|
Packit |
b099d7 |
XtOffsetOf(WidgetRec, core.width), XmRImmediate, (XtPointer) 0,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNheight, XmCDimension, XmRVerticalDimension, sizeof(Dimension),
|
|
Packit |
b099d7 |
XtOffsetOf(WidgetRec, core.height), XmRImmediate, (XtPointer) 0,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNborderWidth, XmCBorderWidth, XmRHorizontalDimension,
|
|
Packit |
b099d7 |
sizeof(Dimension),
|
|
Packit |
b099d7 |
XtOffsetOf(WidgetRec, core.border_width), XmRImmediate, (XtPointer) 0,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* size_hints minus things stored in core */
|
|
Packit |
b099d7 |
{ XmNbaseWidth, XmCBaseWidth, XmRHorizontalInt, sizeof(int),
|
|
Packit |
b099d7 |
Offset(wm.base_width),
|
|
Packit |
b099d7 |
XmRHorizontalInt, (XtPointer) &default_unspecified_shell_int},
|
|
Packit |
b099d7 |
{ XmNbaseHeight, XmCBaseHeight, XmRVerticalInt, sizeof(int),
|
|
Packit |
b099d7 |
Offset(wm.base_height),
|
|
Packit |
b099d7 |
XmRVerticalInt, (XtPointer) &default_unspecified_shell_int},
|
|
Packit |
b099d7 |
{ XmNminWidth, XmCMinWidth, XmRHorizontalInt, sizeof(int),
|
|
Packit |
b099d7 |
Offset(wm.size_hints.min_width),
|
|
Packit |
b099d7 |
XmRHorizontalInt, (XtPointer) &default_unspecified_shell_int},
|
|
Packit |
b099d7 |
{ XmNminHeight, XmCMinHeight, XmRVerticalInt, sizeof(int),
|
|
Packit |
b099d7 |
Offset(wm.size_hints.min_height),
|
|
Packit |
b099d7 |
XmRVerticalInt, (XtPointer) &default_unspecified_shell_int},
|
|
Packit |
b099d7 |
{ XmNmaxWidth, XmCMaxWidth, XmRHorizontalInt, sizeof(int),
|
|
Packit |
b099d7 |
Offset(wm.size_hints.max_width),
|
|
Packit |
b099d7 |
XmRHorizontalInt, (XtPointer) &default_unspecified_shell_int},
|
|
Packit |
b099d7 |
{ XmNmaxHeight, XmCMaxHeight, XmRVerticalInt, sizeof(int),
|
|
Packit |
b099d7 |
Offset(wm.size_hints.max_height),
|
|
Packit |
b099d7 |
XmRVerticalInt, (XtPointer) &default_unspecified_shell_int},
|
|
Packit |
b099d7 |
{ XmNwidthInc, XmCWidthInc, XmRHorizontalInt, sizeof(int),
|
|
Packit |
b099d7 |
Offset(wm.size_hints.width_inc),
|
|
Packit |
b099d7 |
XmRHorizontalInt, (XtPointer) &default_unspecified_shell_int},
|
|
Packit |
b099d7 |
{ XmNheightInc, XmCHeightInc, XmRVerticalInt, sizeof(int),
|
|
Packit |
b099d7 |
Offset(wm.size_hints.height_inc),
|
|
Packit |
b099d7 |
XmRVerticalInt, (XtPointer) &default_unspecified_shell_int},
|
|
Packit |
b099d7 |
{ XmNminAspectX, XmCMinAspectX, XmRHorizontalInt, sizeof(int),
|
|
Packit |
b099d7 |
Offset(wm.size_hints.min_aspect.x),
|
|
Packit |
b099d7 |
XmRHorizontalInt, (XtPointer) &default_unspecified_shell_int},
|
|
Packit |
b099d7 |
{ XmNminAspectY, XmCMinAspectY, XmRVerticalInt, sizeof(int),
|
|
Packit |
b099d7 |
Offset(wm.size_hints.min_aspect.y),
|
|
Packit |
b099d7 |
XmRVerticalInt, (XtPointer) &default_unspecified_shell_int},
|
|
Packit |
b099d7 |
{ XmNmaxAspectX, XmCMaxAspectX, XmRHorizontalInt, sizeof(int),
|
|
Packit |
b099d7 |
Offset(wm.size_hints.max_aspect.x),
|
|
Packit |
b099d7 |
XmRHorizontalInt, (XtPointer) &default_unspecified_shell_int},
|
|
Packit |
b099d7 |
{ XmNmaxAspectY, XmCMaxAspectY, XmRVerticalInt, sizeof(int),
|
|
Packit |
b099d7 |
Offset(wm.size_hints.max_aspect.y),
|
|
Packit |
b099d7 |
XmRVerticalInt, (XtPointer) &default_unspecified_shell_int},
|
|
Packit |
b099d7 |
/* wm_hints */
|
|
Packit |
b099d7 |
{ XmNiconPixmap, XmCIconPixmap, XmRDynamicPixmap, sizeof(Pixmap),
|
|
Packit |
b099d7 |
Offset(wm.wm_hints.icon_pixmap), XmRPixmap, NULL},
|
|
Packit |
b099d7 |
{ XmNiconX, XmCIconX, XmRHorizontalInt, sizeof(int),
|
|
Packit |
b099d7 |
Offset(wm.wm_hints.icon_x),
|
|
Packit |
b099d7 |
XmRHorizontalInt, (XtPointer) &default_unspecified_shell_int},
|
|
Packit |
b099d7 |
{ XmNiconY, XmCIconY, XmRVerticalInt, sizeof(int),
|
|
Packit |
b099d7 |
Offset(wm.wm_hints.icon_y),
|
|
Packit |
b099d7 |
XmRVerticalInt, (XtPointer) &default_unspecified_shell_int},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{ /* override dec default */
|
|
Packit |
b099d7 |
XmNinput, XmCInput, XmRBool,
|
|
Packit |
b099d7 |
sizeof(Bool), Offset(wm.wm_hints.input),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) TRUE,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ /* override incorrect default in Shell.c */
|
|
Packit |
b099d7 |
XmNwindowGroup, XmCWindowGroup, XmRWindow, sizeof(Window),
|
|
Packit |
b099d7 |
Offset(wm.wm_hints.window_group),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer)XtUnspecifiedWindowGroup,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ /* default visual dynamically, see _XmDefaultVisualResources */
|
|
Packit |
b099d7 |
XtNvisual, XtCVisual,
|
|
Packit |
b099d7 |
XtRVisual, sizeof(Visual*),
|
|
Packit |
b099d7 |
XtOffsetOf(ShellRec, shell.visual),
|
|
Packit |
b099d7 |
XtRImmediate, (XtPointer)INVALID_VISUAL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
#undef Offset
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XtResource subresources[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNtoolTipPostDelay, XmCToolTipPostDelay, XmRInt,
|
|
Packit |
b099d7 |
sizeof(unsigned int), XtOffsetOf(XmToolTipConfigTraitRec, post_delay),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) 5000,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNtoolTipPostDuration, XmCToolTipPostDuration, XmRInt,
|
|
Packit |
b099d7 |
sizeof(unsigned int), XtOffsetOf(XmToolTipConfigTraitRec, post_duration),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) 5000,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNtoolTipEnable, XmCToolTipEnable, XmRBoolean,
|
|
Packit |
b099d7 |
sizeof(Boolean), XtOffsetOf(XmToolTipConfigTraitRec, enable),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) False,
|
|
Packit |
b099d7 |
},
|
|
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,
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static ShellClassExtensionRec shellClassExtRec = {
|
|
Packit |
b099d7 |
NULL,
|
|
Packit |
b099d7 |
NULLQUARK,
|
|
Packit |
b099d7 |
XtShellExtensionVersion,
|
|
Packit |
b099d7 |
sizeof(ShellClassExtensionRec),
|
|
Packit |
b099d7 |
RootGeometryManager,
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmBaseClassExtRec baseClassExtRec = {
|
|
Packit |
b099d7 |
NULL,
|
|
Packit |
b099d7 |
NULLQUARK,
|
|
Packit |
b099d7 |
XmBaseClassExtVersion,
|
|
Packit |
b099d7 |
sizeof(XmBaseClassExtRec),
|
|
Packit |
b099d7 |
InitializePrehook, /* init prehook */
|
|
Packit |
b099d7 |
SetValuesPrehook, /* setval prehook */
|
|
Packit |
b099d7 |
InitializePosthook, /* init posthook */
|
|
Packit |
b099d7 |
SetValuesPosthook, /* setval posthook */
|
|
Packit |
b099d7 |
(WidgetClass)&xmVendorShellExtClassRec, /* secondary class */
|
|
Packit |
b099d7 |
SecondaryObjectCreate, /* secondary create */
|
|
Packit |
b099d7 |
GetSecResData, /* getSecRes data */
|
|
Packit |
b099d7 |
{0}, /* class flags */
|
|
Packit |
b099d7 |
GetValuesPrehook, /* get_values_prehook */
|
|
Packit |
b099d7 |
GetValuesPosthook, /* get_values_posthook */
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
externaldef(vendorshellclassrec)
|
|
Packit |
b099d7 |
VendorShellClassRec vendorShellClassRec = {
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(WidgetClass) &wmShellClassRec, /* superclass */
|
|
Packit |
b099d7 |
"VendorShell", /* class_name */
|
|
Packit |
b099d7 |
sizeof(VendorShellRec), /* size */
|
|
Packit |
b099d7 |
ClassInitialize, /* Class Initializer */
|
|
Packit |
b099d7 |
ClassPartInitialize, /* class_part_init */
|
|
Packit |
b099d7 |
FALSE, /* Class init'ed ? */
|
|
Packit |
b099d7 |
Initialize, /* initialize */
|
|
Packit |
b099d7 |
NULL, /* initialize_hook */
|
|
Packit |
b099d7 |
Realize, /* realize */
|
|
Packit |
b099d7 |
NULL, /* actions */
|
|
Packit |
b099d7 |
0, /* num_actions */
|
|
Packit |
b099d7 |
resources, /* resources */
|
|
Packit |
b099d7 |
XtNumber(resources), /* resource_count */
|
|
Packit |
b099d7 |
NULLQUARK, /* xrm_class */
|
|
Packit |
b099d7 |
FALSE, /* compress_motion */
|
|
Packit |
b099d7 |
XtExposeCompressSeries, /* compress_exposure */
|
|
Packit |
b099d7 |
FALSE, /* compress_enterleave */
|
|
Packit |
b099d7 |
FALSE, /* visible_interest */
|
|
Packit |
b099d7 |
Destroy, /* destroy */
|
|
Packit |
b099d7 |
Resize, /* resize */
|
|
Packit |
b099d7 |
NULL, /* expose */
|
|
Packit |
b099d7 |
SetValues, /* set_values */
|
|
Packit |
b099d7 |
NULL, /* set_values_hook */
|
|
Packit |
b099d7 |
XtInheritSetValuesAlmost, /* set_values_almost */
|
|
Packit |
b099d7 |
GetValuesHook, /* get_values_hook */
|
|
Packit |
b099d7 |
NULL, /* accept_focus */
|
|
Packit |
b099d7 |
XtVersion, /* intrinsics version */
|
|
Packit |
b099d7 |
NULL, /* callback offsets */
|
|
Packit |
b099d7 |
NULL, /* tm_table */
|
|
Packit |
b099d7 |
NULL, /* query_geometry */
|
|
Packit |
b099d7 |
NULL, /* display_accelerator */
|
|
Packit |
b099d7 |
(XtPointer)&baseClassExtRec, /* extension */
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ /* composite_class */
|
|
Packit |
b099d7 |
GeometryManager, /* geometry_manager */
|
|
Packit |
b099d7 |
ChangeManaged, /* change_managed */
|
|
Packit |
b099d7 |
XtInheritInsertChild, /* insert_child */
|
|
Packit |
b099d7 |
XtInheritDeleteChild, /* delete_child */
|
|
Packit |
b099d7 |
(XtPointer)&compositeClassExtRec,/* extension */
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ /* shell class */
|
|
Packit |
b099d7 |
(XtPointer)&shellClassExtRec, /* extension */
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ /* wmshell class */
|
|
Packit |
b099d7 |
NULL, /* extension */
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ /* vendorshell class */
|
|
Packit |
b099d7 |
NULL, /* extension */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
externaldef(vendorshellwidgetclass) WidgetClass
|
|
Packit |
b099d7 |
vendorShellWidgetClass = (WidgetClass) (&vendorShellClassRec);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Trait record for VendorS specify render table */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmConst XmSpecRenderTraitRec vsSRT = {
|
|
Packit |
b099d7 |
0, /* version */
|
|
Packit |
b099d7 |
GetTable,
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Trait record for VendorS specify layout direction */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmConst XmSpecifyLayoutDirectionTraitRec vsLDT = {
|
|
Packit |
b099d7 |
0, /* version */
|
|
Packit |
b099d7 |
GetDirection
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Access Colors Trait record for vendor shell */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmConst XmAccessColorsTraitRec vsACT = {
|
|
Packit |
b099d7 |
0, /* version */
|
|
Packit |
b099d7 |
GetColors
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Unit Type Trait record for VendorShell */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmConst XmSpecUnitTypeTraitRec vsUTT = {
|
|
Packit |
b099d7 |
0, /* version */
|
|
Packit |
b099d7 |
GetUnitType
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* BaseProc
|
|
Packit |
b099d7 |
* This function can be used to check if the widget has actually
|
|
Packit |
b099d7 |
* been initialize (vs in the process of creation, like a conversion)
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static XtPointer
|
|
Packit |
b099d7 |
BaseProc(
|
|
Packit |
b099d7 |
Widget widget,
|
|
Packit |
b099d7 |
XtPointer client_data ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmWidgetExtData extData;
|
|
Packit |
b099d7 |
Widget secObj = NULL;
|
|
Packit |
b099d7 |
_XmWidgetToAppContext(widget);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((extData = _XmGetWidgetExtData(widget, XmSHELL_EXTENSION)))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
secObj = extData->widget;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return secObj;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* GetSecResData
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
static Cardinal
|
|
Packit |
b099d7 |
GetSecResData(
|
|
Packit |
b099d7 |
WidgetClass w_class,
|
|
Packit |
b099d7 |
XmSecondaryResourceData **secResDataRtn )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmBaseClassExt *bcePtr;
|
|
Packit |
b099d7 |
int arrayCount = 0;
|
|
Packit |
b099d7 |
String resource_class, resource_name;
|
|
Packit |
b099d7 |
XtPointer client_data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
if ((bcePtr = _XmGetBaseClassExtPtr(w_class, XmQmotif)) &&
|
|
Packit |
b099d7 |
(bcePtr) && (*bcePtr) &&
|
|
Packit |
b099d7 |
((*bcePtr)->secondaryObjectClass))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
client_data = NULL;
|
|
Packit |
b099d7 |
resource_class = NULL;
|
|
Packit |
b099d7 |
resource_name = NULL;
|
|
Packit |
b099d7 |
arrayCount =
|
|
Packit |
b099d7 |
_XmSecondaryResourceData ( *bcePtr, secResDataRtn, client_data,
|
|
Packit |
b099d7 |
resource_name, resource_class,
|
|
Packit |
b099d7 |
BaseProc) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
return arrayCount;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ClassInitialize
|
|
Packit |
b099d7 |
* Initialize the vendorShell class structure. This is called only
|
|
Packit |
b099d7 |
* the first time a vendorShell widget is created. It registers the
|
|
Packit |
b099d7 |
* resource type converters unique to this class.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ClassInitialize( void )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Cardinal wc_num_res, sc_num_res;
|
|
Packit |
b099d7 |
XtResource *merged_list;
|
|
Packit |
b099d7 |
int i, j;
|
|
Packit |
b099d7 |
XtResourceList uncompiled;
|
|
Packit |
b099d7 |
Cardinal num;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/**************************************************************************
|
|
Packit |
b099d7 |
ShellExt's and VendorShellExt's resource lists are being merged into one
|
|
Packit |
b099d7 |
and assigned to xmVendorShellExtObjectClassRec. This is for performance
|
|
Packit |
b099d7 |
reasons, since, instead of two calls to XtGetSubResources() XtGetSubvaluse()
|
|
Packit |
b099d7 |
and XtSetSubvalues() for both the superclass and the widget class, now
|
|
Packit |
b099d7 |
we have just one call with a merged resource list.
|
|
Packit |
b099d7 |
NOTE: At this point the resource lists for ShellExt and VendorShellExt do
|
|
Packit |
b099d7 |
have unique entries, but if there are resources in the superclass
|
|
Packit |
b099d7 |
that are being overwritten by the subclass then the merged_lists
|
|
Packit |
b099d7 |
need to be created differently.
|
|
Packit |
b099d7 |
****************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
wc_num_res = xmVendorShellExtClassRec.object_class.num_resources;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
sc_num_res = xmShellExtClassRec.object_class.num_resources;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
merged_list = (XtResource *)XtMalloc((sizeof(XtResource) * (wc_num_res +
|
|
Packit |
b099d7 |
sc_num_res)));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmTransformSubResources(xmShellExtClassRec.object_class.resources,
|
|
Packit |
b099d7 |
sc_num_res, &uncompiled, &num);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < num; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
merged_list[i] = uncompiled[i];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
for (i = 0, j = num; i < wc_num_res; i++, j++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
merged_list[j] =
|
|
Packit |
b099d7 |
xmVendorShellExtClassRec.object_class.resources[i];
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
xmVendorShellExtClassRec.object_class.resources = merged_list;
|
|
Packit |
b099d7 |
xmVendorShellExtClassRec.object_class.num_resources = wc_num_res + sc_num_res ;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmRegisterConverters();
|
|
Packit |
b099d7 |
_XmRegisterPixmapConverters();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmInitializeExtensions();
|
|
Packit |
b099d7 |
_XmInitializeTraits();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtProc class_initialize;
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
class_initialize = xmVendorShellExtObjectClass->core_class.class_initialize;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
(*class_initialize) ();
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
baseClassExtRec.record_type = XmQmotif;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmBuildExtResources((WidgetClass) baseClassExtRec.secondaryObjectClass);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (((XmShellExtObjectClass)baseClassExtRec.secondaryObjectClass)->desktop_class.insert_child ==
|
|
Packit |
b099d7 |
XtInheritInsertChild)
|
|
Packit |
b099d7 |
((XmShellExtObjectClass)baseClassExtRec.secondaryObjectClass)->desktop_class.insert_child =
|
|
Packit |
b099d7 |
((XmShellExtObjectClass) xmDesktopClass)->desktop_class.insert_child;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (((XmShellExtObjectClass)baseClassExtRec.secondaryObjectClass)->desktop_class.delete_child ==
|
|
Packit |
b099d7 |
XtInheritDeleteChild)
|
|
Packit |
b099d7 |
((XmShellExtObjectClass)baseClassExtRec.secondaryObjectClass)->desktop_class.delete_child =
|
|
Packit |
b099d7 |
((XmShellExtObjectClass) xmDesktopClass)->desktop_class.delete_child;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (((XmShellExtObjectClass)baseClassExtRec.secondaryObjectClass)->shell_class.structureNotifyHandler ==
|
|
Packit |
b099d7 |
XmInheritEventHandler)
|
|
Packit |
b099d7 |
((XmShellExtObjectClass)baseClassExtRec.secondaryObjectClass)->shell_class.structureNotifyHandler =
|
|
Packit |
b099d7 |
((XmShellExtObjectClass) xmShellExtObjectClass)->shell_class.structureNotifyHandler;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (((XmVendorShellExtObjectClass)baseClassExtRec.secondaryObjectClass)->vendor_class.offset_handler ==
|
|
Packit |
b099d7 |
XmInheritProtocolHandler)
|
|
Packit |
b099d7 |
((XmVendorShellExtObjectClass)baseClassExtRec.secondaryObjectClass)->vendor_class.offset_handler =
|
|
Packit |
b099d7 |
((XmVendorShellExtObjectClass) xmVendorShellExtObjectClass)->vendor_class.offset_handler;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((char *)uncompiled);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifndef NO_MESSAGE_CATALOG
|
|
Packit |
b099d7 |
Xm_catd = catopen("Xm", NL_CAT_LOCALE);
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ClassPartInitialize
|
|
Packit |
b099d7 |
* Set up the inheritance mechanism for the routines exported by
|
|
Packit |
b099d7 |
* vendorShells class part.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ClassPartInitialize(
|
|
Packit |
b099d7 |
WidgetClass wc )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
CompositeWidgetClass compWc = (CompositeWidgetClass)wc;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CompositeClassExtensionRec **compExtPtr;
|
|
Packit |
b099d7 |
XmBaseClassExt *wcePtr, *scePtr;
|
|
Packit |
b099d7 |
XmVendorShellWidgetClass vc = (XmVendorShellWidgetClass) wc;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CompositeWidgetClass superWc;
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
superWc = (CompositeWidgetClass)wc->core_class.superclass;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
wcePtr = _XmGetBaseClassExtPtr(wc, XmQmotif);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
scePtr = _XmGetBaseClassExtPtr(wc->core_class.superclass, XmQmotif);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( (vc != (XmVendorShellWidgetClass)vendorShellWidgetClass) &&
|
|
Packit |
b099d7 |
scePtr && *scePtr &&
|
|
Packit |
b099d7 |
(*wcePtr)->secondaryObjectClass != NULL &&
|
|
Packit |
b099d7 |
((*scePtr)->secondaryObjectClass != (*wcePtr)->secondaryObjectClass)){
|
|
Packit |
b099d7 |
XmVendorShellExtObjectClass wceClass, sceClass;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
wceClass = (XmVendorShellExtObjectClass)(*wcePtr)->
|
|
Packit |
b099d7 |
secondaryObjectClass;
|
|
Packit |
b099d7 |
sceClass = (XmVendorShellExtObjectClass)(*scePtr)->
|
|
Packit |
b099d7 |
secondaryObjectClass;
|
|
Packit |
b099d7 |
_XmBuildExtResources((WidgetClass) (*wcePtr)->secondaryObjectClass);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (wceClass->desktop_class.insert_child == XtInheritInsertChild)
|
|
Packit |
b099d7 |
wceClass->desktop_class.insert_child =
|
|
Packit |
b099d7 |
sceClass->desktop_class.insert_child;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (wceClass->desktop_class.delete_child == XtInheritDeleteChild)
|
|
Packit |
b099d7 |
wceClass->desktop_class.delete_child =
|
|
Packit |
b099d7 |
sceClass->desktop_class.delete_child;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (wceClass->shell_class.structureNotifyHandler ==
|
|
Packit |
b099d7 |
XmInheritEventHandler)
|
|
Packit |
b099d7 |
wceClass->shell_class.structureNotifyHandler =
|
|
Packit |
b099d7 |
sceClass->shell_class.structureNotifyHandler;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (wceClass->vendor_class.offset_handler == XmInheritProtocolHandler)
|
|
Packit |
b099d7 |
wceClass->vendor_class.offset_handler =
|
|
Packit |
b099d7 |
sceClass->vendor_class.offset_handler;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
compExtPtr = (CompositeClassExtensionRec **)
|
|
Packit |
b099d7 |
&(compWc->composite_class.extension);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
compExtPtr = (CompositeClassExtensionRec **)
|
|
Packit |
b099d7 |
_XmGetClassExtensionPtr( (XmGenericClassExt *) compExtPtr, NULLQUARK);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (*compExtPtr == NULL) {
|
|
Packit |
b099d7 |
CompositeClassExtensionRec **superExtPtr;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
superExtPtr = (CompositeClassExtensionRec **) &(superWc->composite_class.extension);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
superExtPtr = (CompositeClassExtensionRec **)
|
|
Packit |
b099d7 |
_XmGetClassExtensionPtr(
|
|
Packit |
b099d7 |
(XmGenericClassExt *) superExtPtr,
|
|
Packit |
b099d7 |
NULLQUARK);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*compExtPtr = XtNew(CompositeClassExtensionRec);
|
|
Packit |
b099d7 |
memcpy((char*)*compExtPtr, (char*)*superExtPtr,
|
|
Packit |
b099d7 |
sizeof(CompositeClassExtensionRec));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Do this here because of bug in Xt */
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
wc->core_class.expose = Redisplay;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Install the render table trait for all subclasses as well. */
|
|
Packit |
b099d7 |
XmeTraitSet((XtPointer)wc, XmQTspecifyRenderTable, (XtPointer)&vsSRT);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Install the direction trait for all subclasses as well. */
|
|
Packit |
b099d7 |
XmeTraitSet((XtPointer)wc, XmQTspecifyLayoutDirection, (XtPointer)&vsLDT);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Install the accessColors trait for all subclasses as well. */
|
|
Packit |
b099d7 |
XmeTraitSet((XtPointer)wc, XmQTaccessColors, (XtPointer)&vsACT);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Install the unit type trait for all subclasses as well. */
|
|
Packit |
b099d7 |
XmeTraitSet((XtPointer)wc, XmQTspecifyUnitType, (XtPointer)&vsUTT);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SetMwmStuff
|
|
Packit |
b099d7 |
* ov will be null when called from Initialize
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
SetMwmStuff(
|
|
Packit |
b099d7 |
XmVendorShellExtObject ove,
|
|
Packit |
b099d7 |
XmVendorShellExtObject nve )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Boolean changed = FALSE;
|
|
Packit |
b099d7 |
Widget extParent = nve->ext.logicalParent;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!ove || (ove->vendor.mwm_menu != nve->vendor.mwm_menu))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* make mwm_menu local */
|
|
Packit |
b099d7 |
if (ove && ove->vendor.mwm_menu)
|
|
Packit |
b099d7 |
XtFree(ove->vendor.mwm_menu);
|
|
Packit |
b099d7 |
if (nve->vendor.mwm_menu)
|
|
Packit |
b099d7 |
nve->vendor.mwm_menu = XtNewString(nve->vendor.mwm_menu);
|
|
Packit |
b099d7 |
if (XtIsRealized(extParent))
|
|
Packit |
b099d7 |
SetMwmMenu(nve);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!ove || (ove->vendor.mwm_hints.functions != nve->vendor.mwm_hints.functions))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (nve->vendor.mwm_hints.functions == DONT_CARE)
|
|
Packit |
b099d7 |
nve->vendor.mwm_hints.flags &= ~MWM_HINTS_FUNCTIONS;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
nve->vendor.mwm_hints.flags |= MWM_HINTS_FUNCTIONS;
|
|
Packit |
b099d7 |
changed |= TRUE;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!ove || (ove->vendor.mwm_hints.decorations != nve->vendor.mwm_hints.decorations))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (nve->vendor.mwm_hints.decorations == DONT_CARE)
|
|
Packit |
b099d7 |
nve->vendor.mwm_hints.flags &= ~MWM_HINTS_DECORATIONS;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
nve->vendor.mwm_hints.flags |= MWM_HINTS_DECORATIONS;
|
|
Packit |
b099d7 |
changed |= TRUE;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!ove || (ove->vendor.mwm_hints.input_mode != nve->vendor.mwm_hints.input_mode))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (nve->vendor.mwm_hints.input_mode == DONT_CARE)
|
|
Packit |
b099d7 |
nve->vendor.mwm_hints.flags &= ~MWM_HINTS_INPUT_MODE;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
nve->vendor.mwm_hints.flags |= MWM_HINTS_INPUT_MODE;
|
|
Packit |
b099d7 |
changed |= TRUE;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (changed && XtIsRealized(extParent))
|
|
Packit |
b099d7 |
SetMwmHints(nve);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* The AddGrab and RemoveGrab routines manage a virtual Xt modal
|
|
Packit |
b099d7 |
* cascade that allows us to remove entries in the list without
|
|
Packit |
b099d7 |
* flushing out the grabs of all following entries.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmAddGrab(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int exclusive,
|
|
Packit |
b099d7 |
int spring_loaded)
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
Boolean exclusive,
|
|
Packit |
b099d7 |
Boolean spring_loaded)
|
|
Packit |
b099d7 |
#endif /* NeedWidePrototypes */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
AddGrab( NULL, wid, exclusive, spring_loaded, NULL) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmRemoveGrab(
|
|
Packit |
b099d7 |
Widget wid)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
RemoveGrab( NULL, FALSE, wid) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
AddGrab(
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve,
|
|
Packit |
b099d7 |
Widget shell,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int exclusive,
|
|
Packit |
b099d7 |
int springLoaded,
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
Boolean exclusive,
|
|
Packit |
b099d7 |
Boolean springLoaded,
|
|
Packit |
b099d7 |
#endif /* NeedWidePrototypes */
|
|
Packit |
b099d7 |
XmVendorShellExtObject origKid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Cardinal position;
|
|
Packit |
b099d7 |
XmModalData modals;
|
|
Packit |
b099d7 |
XmDisplay xmDisplay;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( shell == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
shell = ve->ext.logicalParent ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
xmDisplay = (XmDisplay) XmGetXmDisplay(XtDisplay(shell));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
modals = xmDisplay->display.modals;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
position = xmDisplay->display.numModals;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (xmDisplay->display.numModals == xmDisplay->display.maxModals) {
|
|
Packit |
b099d7 |
/* Allocate more space */
|
|
Packit |
b099d7 |
xmDisplay->display.maxModals += (xmDisplay->display.maxModals / 2) + 2;
|
|
Packit |
b099d7 |
xmDisplay->display.modals = modals = (XmModalData)
|
|
Packit |
b099d7 |
XtRealloc((char *) modals, (unsigned)
|
|
Packit |
b099d7 |
((xmDisplay->display.maxModals) * sizeof(XmModalDataRec)));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
modals[position].wid = shell;
|
|
Packit |
b099d7 |
modals[position].ve = ve;
|
|
Packit |
b099d7 |
modals[position].grabber = origKid;
|
|
Packit |
b099d7 |
modals[position].exclusive = exclusive;
|
|
Packit |
b099d7 |
modals[position].springLoaded = springLoaded;
|
|
Packit |
b099d7 |
xmDisplay->display.numModals++;
|
|
Packit |
b099d7 |
XtAddGrab((Widget) shell,
|
|
Packit |
b099d7 |
exclusive,
|
|
Packit |
b099d7 |
springLoaded);
|
|
Packit |
b099d7 |
#ifdef DEBUG_GRABS
|
|
Packit |
b099d7 |
printf( "AddGrab: XtAddGrab( %s, excl: %d, spring: %d); grabber: %s\n",
|
|
Packit |
b099d7 |
shell->core.name, exclusive, springLoaded,
|
|
Packit |
b099d7 |
origKid ? origKid->ext.logicalParent->core.name : "NULL") ;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* If the shell gets destroyed, we don't have to worry about removing
|
|
Packit |
b099d7 |
* the Xt grab, but we do have to remove the ve from the list of modals.
|
|
Packit |
b099d7 |
* Should the client_data be ve or origKid?
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XtAddCallback((Widget) shell, XmNdestroyCallback, RemoveGrabCallback,(XtPointer)ve);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* we add a new argument here, being_destroyed. If true, it means that
|
|
Packit |
b099d7 |
* we are being called from a callback triggered by the destruction of a
|
|
Packit |
b099d7 |
* shell. If it is true, we should remove shells from the list of modals,
|
|
Packit |
b099d7 |
* but we should not call XtRemoveGrab on them, because the intrinsics
|
|
Packit |
b099d7 |
* already handle that.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
RemoveGrab(
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int being_destroyed,
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
Boolean being_destroyed,
|
|
Packit |
b099d7 |
#endif /* NeedWidePrototypes */
|
|
Packit |
b099d7 |
Widget shell)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmDisplay xmDisplay;
|
|
Packit |
b099d7 |
Cardinal incr, i, numRemoves, numModals;
|
|
Packit |
b099d7 |
XmModalData modals;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( !being_destroyed )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* The "shell" argument of this routine is required when the
|
|
Packit |
b099d7 |
* "being_destroyed" argument is TRUE, since the vendor
|
|
Packit |
b099d7 |
* extension record may be already de-allocated before the
|
|
Packit |
b099d7 |
* RemoveGrabCallback is called, and thus cannot be de-referenced
|
|
Packit |
b099d7 |
* to get the shell logical parent. We will assume that the
|
|
Packit |
b099d7 |
* shell argument is ignored by callers when the "being_destroyed"
|
|
Packit |
b099d7 |
* argument is FALSE.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if( shell == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
shell = ve->ext.logicalParent ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
XtRemoveCallback( shell, XmNdestroyCallback, RemoveGrabCallback,
|
|
Packit |
b099d7 |
(XtPointer) ve) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
#ifdef DEBUG_GRABS
|
|
Packit |
b099d7 |
printf( "\n**** Entering RemoveGrab on %s (0x%x) ****\n",
|
|
Packit |
b099d7 |
shell->core.name, ve) ;
|
|
Packit |
b099d7 |
PrintXmGrabs( (Widget) shell) ;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmDisplay = (XmDisplay) XmGetXmDisplay(XtDisplay(shell));
|
|
Packit |
b099d7 |
modals = xmDisplay->display.modals;
|
|
Packit |
b099d7 |
numModals = xmDisplay->display.numModals;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0, numRemoves = 0;
|
|
Packit |
b099d7 |
i < numModals;
|
|
Packit |
b099d7 |
i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( (modals[i].wid == shell) && (modals[i].ve == ve) )
|
|
Packit |
b099d7 |
numRemoves++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
#ifdef DEBUG_GRABS
|
|
Packit |
b099d7 |
printf( "RemoveGrab: numRemoves: %d\n", numRemoves) ;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
if (numRemoves == 0) return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!being_destroyed)
|
|
Packit |
b099d7 |
for (i = 0; i < numRemoves; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtRemoveGrab((Widget) shell);
|
|
Packit |
b099d7 |
#ifdef DEBUG_GRABS
|
|
Packit |
b099d7 |
printf( "RemoveGrab: XtRemoveGrab( %s)\n",
|
|
Packit |
b099d7 |
((Widget)shell)->core.name) ;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Add back all the grabs that were flushed by the removes */
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
** What this piece of code is trying to do is to iterate over the list,
|
|
Packit |
b099d7 |
** and for each item to be removed, skip ahead and find a good one to
|
|
Packit |
b099d7 |
** replace it with. "incr" being set below indicates that a replacement
|
|
Packit |
b099d7 |
** in fact was found.
|
|
Packit |
b099d7 |
** However, the code is not obviously replacing items that are to be
|
|
Packit |
b099d7 |
** discarded; rather, it's simply letting them fall off the end via
|
|
Packit |
b099d7 |
** the magic of the combination of i, incr, numRemoves, and numModals
|
|
Packit |
b099d7 |
** incr should probably be absolute w.r.t. the front of the list and
|
|
Packit |
b099d7 |
** should not double as a marker.
|
|
Packit |
b099d7 |
** It's easy to know where the first removed item was, and
|
|
Packit |
b099d7 |
** to add the grabs back in to later widgets.
|
|
Packit |
b099d7 |
** As is, it's not obvious when modals[i] is to be overwritten.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0, incr = 0;
|
|
Packit |
b099d7 |
(i + numRemoves) < numModals;
|
|
Packit |
b099d7 |
i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* We remove both the shell that's being pulled off the
|
|
Packit |
b099d7 |
* cascade and any raw mode shells that we've added. These
|
|
Packit |
b099d7 |
* should only be the app shells ?!
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
for (/*EMPTY*/;
|
|
Packit |
b099d7 |
((i + incr) < numModals);
|
|
Packit |
b099d7 |
incr++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget incrWid = modals[i+incr].wid;
|
|
Packit |
b099d7 |
/* if it's not the shell, or it is the shell but some
|
|
Packit |
b099d7 |
other entry for another grab */
|
|
Packit |
b099d7 |
if ( (incrWid != shell) || (modals[i+incr].ve != ve) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if ((ve != NULL) && (modals[i+incr].grabber == ve))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* Avoid re-adding to the grab list widgets
|
|
Packit |
b099d7 |
* that were non-exclusives associated with
|
|
Packit |
b099d7 |
* the shell grab being removed.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
numRemoves++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (incr && ((i+incr) < numModals))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
modals[i] = modals[i+incr];
|
|
Packit |
b099d7 |
if (!(modals[i].wid->core.being_destroyed))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtAddGrab( modals[i].wid, modals[i].exclusive,
|
|
Packit |
b099d7 |
modals[i].springLoaded) ;
|
|
Packit |
b099d7 |
#ifdef DEBUG_GRABS
|
|
Packit |
b099d7 |
printf( "RemoveGrab: XtAddGrab( %s, excl: %d, spring: %d)\n",
|
|
Packit |
b099d7 |
modals[i].wid->core.name,
|
|
Packit |
b099d7 |
modals[i].exclusive, modals[i].springLoaded) ;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
xmDisplay->display.numModals -= numRemoves ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef DEBUG_GRABS
|
|
Packit |
b099d7 |
printf( "\n**** Leaving RemoveGrab on %s (0x%x) ****\n",
|
|
Packit |
b099d7 |
shell->core.name, ve) ;
|
|
Packit |
b099d7 |
PrintXmGrabs( (Widget) shell) ;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
RemoveGrabCallback(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
XtPointer client_data,
|
|
Packit |
b099d7 |
XtPointer call_data )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( XmIsVendorShell( w) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* For VendorShells, defer the removal of the grab until after
|
|
Packit |
b099d7 |
* all destroy callbacks are completed, since the order of
|
|
Packit |
b099d7 |
* these callbacks can result in a situation where an
|
|
Packit |
b099d7 |
* Xt-invoked grab removal can strip "new" grabs which are
|
|
Packit |
b099d7 |
* installed in the RemoveGrab routine.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
AddDLEntry( (XmVendorShellExtObject) client_data, w) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* Nested calls to _XmAddGrab of non-VendorShell widgets
|
|
Packit |
b099d7 |
* are problematic, since the use of the Destroy method
|
|
Packit |
b099d7 |
* to ensure that the XtRemoveGrabs are completed before
|
|
Packit |
b099d7 |
* the Xm RemoveGrabs, cannot be employed for these widgets.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
RemoveGrab( (XmVendorShellExtObject) client_data, TRUE, w) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
AddToGrabList(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
Widget excludedKid,
|
|
Packit |
b099d7 |
Widget origKid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget *currKid;
|
|
Packit |
b099d7 |
Widget *children;
|
|
Packit |
b099d7 |
Cardinal numChildren;
|
|
Packit |
b099d7 |
Cardinal i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!parent)
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
else if (XmIsScreen(parent)) {
|
|
Packit |
b099d7 |
XmScreen xmScreen = (XmScreen)parent;
|
|
Packit |
b099d7 |
children = xmScreen->desktop.children;
|
|
Packit |
b099d7 |
numChildren = xmScreen->desktop.num_children;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (XmIsDisplay(parent)) {
|
|
Packit |
b099d7 |
XmDisplay xmDisplay = (XmDisplay)parent;
|
|
Packit |
b099d7 |
children = (Widget *)xmDisplay->composite.children;
|
|
Packit |
b099d7 |
numChildren = xmDisplay->composite.num_children;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
XmDesktopObject deskObj = (XmDesktopObject)parent;
|
|
Packit |
b099d7 |
children = (Widget *)deskObj->desktop.children;
|
|
Packit |
b099d7 |
numChildren = deskObj->desktop.num_children;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
for (i = 0, currKid = children; i < numChildren; currKid++, i++) {
|
|
Packit |
b099d7 |
if (*currKid != excludedKid) {
|
|
Packit |
b099d7 |
if (!XmIsDisplay(parent)) {
|
|
Packit |
b099d7 |
ShellWidget shell;
|
|
Packit |
b099d7 |
shell = (ShellWidget)
|
|
Packit |
b099d7 |
((XmDesktopObject)(*currKid))->ext.logicalParent;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( shell->shell.popped_up
|
|
Packit |
b099d7 |
|| ( XtIsRealized((Widget)shell)
|
|
Packit |
b099d7 |
&& !IsPopupShell( (Widget) shell)) )
|
|
Packit |
b099d7 |
AddGrab((XmVendorShellExtObject)*currKid, NULL,
|
|
Packit |
b099d7 |
(Boolean)False, (Boolean)False,
|
|
Packit |
b099d7 |
(XmVendorShellExtObject)origKid);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (!XmIsScreen(*currKid))
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Don't traverse down non-Screen children of
|
|
Packit |
b099d7 |
* XmDisplay widgets.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
continue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
AddToGrabList(*currKid, NULL, origKid);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
AddCousinsToGrabList(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
Widget excludedKid,
|
|
Packit |
b099d7 |
Widget origKid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget grandParent;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!parent)
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
else if (XmIsScreen(parent)) {
|
|
Packit |
b099d7 |
XmScreen xmScreen = (XmScreen)parent;
|
|
Packit |
b099d7 |
grandParent = XtParent(xmScreen);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (XmIsDisplay(parent)) {
|
|
Packit |
b099d7 |
grandParent = NULL;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
XmDesktopObject deskObj = (XmDesktopObject)parent;
|
|
Packit |
b099d7 |
grandParent = deskObj->desktop.parent;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
AddToGrabList(parent, excludedKid, origKid);
|
|
Packit |
b099d7 |
AddCousinsToGrabList(grandParent, parent, origKid);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
IsPopupShell(
|
|
Packit |
b099d7 |
Widget shell)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget parent = XtParent( shell) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( parent != NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget *ps_list = parent->core.popup_list ;
|
|
Packit |
b099d7 |
unsigned n_psl = parent->core.num_popups ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
while( n_psl-- )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( ps_list[n_psl] == shell )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return TRUE ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return FALSE ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PopupCallback
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
PopupCallback(
|
|
Packit |
b099d7 |
Widget shellParent,
|
|
Packit |
b099d7 |
XtPointer closure,
|
|
Packit |
b099d7 |
XtPointer callData ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve = (XmVendorShellExtObject)closure;
|
|
Packit |
b099d7 |
XtGrabKind grab_kind = XtGrabNone;
|
|
Packit |
b099d7 |
Boolean grabCousins = False;
|
|
Packit |
b099d7 |
XmScreen xmScreen;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmScreen = (XmScreen) XmGetXmScreen(XtScreen(shellParent));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ve->vendor.xAtMap = shellParent->core.x;
|
|
Packit |
b099d7 |
ve->vendor.yAtMap = shellParent->core.y;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* work around broken Xt spec ordering for realize and popup callback
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (!XtIsRealized(shellParent))
|
|
Packit |
b099d7 |
XtRealizeWidget(shellParent);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* get the request num + 1 Since it's a map raised. This will
|
|
Packit |
b099d7 |
* only work when the hierarchy is already realized, i.e. after
|
|
Packit |
b099d7 |
* first time
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ve->vendor.lastMapRequest = NextRequest(XtDisplay(shellParent)) + 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch (ve->vendor.mwm_hints.input_mode)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case DONT_CARE:
|
|
Packit |
b099d7 |
case MWM_INPUT_MODELESS:
|
|
Packit |
b099d7 |
grab_kind = XtGrabNonexclusive;
|
|
Packit |
b099d7 |
break ;
|
|
Packit |
b099d7 |
case MWM_INPUT_PRIMARY_APPLICATION_MODAL:
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* if we're not running mwm then this becomes full app modal
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (xmScreen->screen.mwmPresent)
|
|
Packit |
b099d7 |
grabCousins = True;
|
|
Packit |
b099d7 |
grab_kind = XtGrabExclusive;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case MWM_INPUT_SYSTEM_MODAL:
|
|
Packit |
b099d7 |
case MWM_INPUT_FULL_APPLICATION_MODAL:
|
|
Packit |
b099d7 |
grab_kind = XtGrabExclusive;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (grab_kind == XtGrabExclusive)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Cardinal numModals;
|
|
Packit |
b099d7 |
XmModalData modals;
|
|
Packit |
b099d7 |
XmDisplay xmDisplay;
|
|
Packit |
b099d7 |
int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmDisplay = (XmDisplay) XmGetXmDisplay(XtDisplay(shellParent));
|
|
Packit |
b099d7 |
modals = xmDisplay->display.modals;
|
|
Packit |
b099d7 |
numModals = xmDisplay->display.numModals;
|
|
Packit |
b099d7 |
for (i=0; i
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (xmMenuShellWidgetClass == XtClass((Widget) modals[i].wid))
|
|
Packit |
b099d7 |
(*(((XmMenuShellClassRec *)xmMenuShellWidgetClass)->
|
|
Packit |
b099d7 |
menu_shell_class.popdownOne))(modals[i].wid, NULL, NULL, NULL);
|
|
Packit |
b099d7 |
else if (xmDragContextClass == XtClass((Widget) modals[i].wid))
|
|
Packit |
b099d7 |
XmDragCancel((Widget) modals[i].wid);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (grab_kind != XtGrabNone)
|
|
Packit |
b099d7 |
AddGrab(ve, NULL,
|
|
Packit |
b099d7 |
(grab_kind == XtGrabExclusive),
|
|
Packit |
b099d7 |
False,
|
|
Packit |
b099d7 |
ve);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ve->vendor.grab_kind = grab_kind;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (grabCousins)
|
|
Packit |
b099d7 |
AddCousinsToGrabList((Widget)ve->desktop.parent,
|
|
Packit |
b099d7 |
(Widget)ve,
|
|
Packit |
b099d7 |
(Widget)ve);
|
|
Packit |
b099d7 |
#ifdef DEBUG_GRABS
|
|
Packit |
b099d7 |
printf( "\n**** After popup: ****\n") ;
|
|
Packit |
b099d7 |
PrintXmGrabs( shellParent) ;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PopdownCallback
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
PopdownCallback(
|
|
Packit |
b099d7 |
Widget shellParent, /* unused */
|
|
Packit |
b099d7 |
XtPointer closure,
|
|
Packit |
b099d7 |
XtPointer callData ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve = (XmVendorShellExtObject)closure;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ve->vendor.grab_kind != XtGrabNone)
|
|
Packit |
b099d7 |
RemoveGrab(ve, False, NULL);
|
|
Packit |
b099d7 |
#ifdef DEBUG_GRABS
|
|
Packit |
b099d7 |
printf( "\n**** After popdown: ****\n" ) ;
|
|
Packit |
b099d7 |
PrintXmGrabs( shellParent) ;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Widget
|
|
Packit |
b099d7 |
GetNextShell(
|
|
Packit |
b099d7 |
Widget vw )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget parent;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
parent = XtParent(vw);
|
|
Packit |
b099d7 |
while (parent && !XmIsVendorShell(parent))
|
|
Packit |
b099d7 |
parent = XtParent(parent);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return parent;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static XmDesktopObject
|
|
Packit |
b099d7 |
GetShellDesktopParent(
|
|
Packit |
b099d7 |
VendorShellWidget vw,
|
|
Packit |
b099d7 |
ArgList args, /* unused */
|
|
Packit |
b099d7 |
Cardinal *num_args ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget transientParent = NULL;
|
|
Packit |
b099d7 |
XmDesktopObject desktopParent = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (vw->wm.transient)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (XtIsSubclass((Widget) vw, transientShellWidgetClass))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
TransientShellWidget tw = (TransientShellWidget)vw;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!(transientParent = tw->transient.transient_for))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
tw->transient.transient_for =
|
|
Packit |
b099d7 |
transientParent = GetNextShell( (Widget) vw);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
transientParent = GetNextShell((Widget) vw);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (transientParent)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmWidgetExtData extData;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XmIsVendorShell(transientParent))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
extData = _XmGetWidgetExtData(transientParent, XmSHELL_EXTENSION);
|
|
Packit |
b099d7 |
if(extData == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
#ifdef DEBUG
|
|
Packit |
b099d7 |
XmeWarning(NULL, "_XmGetWidgetExtData() returned NULL pointer.");
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
return desktopParent;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
desktopParent = (XmDesktopObject)extData->widget;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (!XmIsDisplay((Widget)vw))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
desktopParent =
|
|
Packit |
b099d7 |
(XmDesktopObject) XmGetXmScreen(XtScreen((Widget)vw));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return desktopParent;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* DisplayClosedCallback
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
DisplayClosedCallback(
|
|
Packit |
b099d7 |
Widget shellParent, /* unused */
|
|
Packit |
b099d7 |
XtPointer closure,
|
|
Packit |
b099d7 |
XtPointer callData ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
_XmDisplayHandle = NULL;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SecondaryObjectCreate
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
SecondaryObjectCreate(
|
|
Packit |
b099d7 |
Widget req,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmBaseClassExt *pePtr;
|
|
Packit |
b099d7 |
WidgetClass vec;
|
|
Packit |
b099d7 |
XmDesktopObject desktopParent;
|
|
Packit |
b099d7 |
Cardinal size;
|
|
Packit |
b099d7 |
XtPointer newSec, reqSec;
|
|
Packit |
b099d7 |
XmWidgetExtData extData;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
if (!_XmDisplayHandle)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmDisplay xmDisplay;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((xmDisplay = (XmDisplay)XmGetXmDisplay(XtDisplay(new_w))) != NULL)
|
|
Packit |
b099d7 |
XtAddCallback((Widget)xmDisplay, XmNdestroyCallback,
|
|
Packit |
b099d7 |
DisplayClosedCallback, NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_XmDisplayHandle = XtDisplay(new_w);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
desktopParent = GetShellDesktopParent( (VendorShellWidget) new_w,
|
|
Packit |
b099d7 |
args, num_args) ;
|
|
Packit |
b099d7 |
if (desktopParent) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* if the secondary object is using sub_resources then
|
|
Packit |
b099d7 |
* create it as a child of the shell. Otherwise try to
|
|
Packit |
b099d7 |
* create it as a sibling in order to fake out resource path
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
pePtr = _XmGetBaseClassExtPtr(XtClass(new_w), XmQmotif);
|
|
Packit |
b099d7 |
vec = (*pePtr)->secondaryObjectClass;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
size = vec->core_class.widget_size;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
newSec = XtMalloc(size);
|
|
Packit |
b099d7 |
reqSec = _XmExtObjAlloc(size);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
extData = (XmWidgetExtData) XtCalloc(1, sizeof(XmWidgetExtDataRec));
|
|
Packit |
b099d7 |
extData->widget = (Widget)newSec;
|
|
Packit |
b099d7 |
extData->reqWidget = (Widget)reqSec;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
((XmVendorShellExtObject)newSec)->ext.extensionType =
|
|
Packit |
b099d7 |
XmSHELL_EXTENSION;
|
|
Packit |
b099d7 |
((XmVendorShellExtObject)newSec)->ext.logicalParent = new_w;
|
|
Packit |
b099d7 |
((XmVendorShellExtObject)newSec)->desktop.parent =
|
|
Packit |
b099d7 |
(Widget) desktopParent;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
((XmVendorShellExtObject)newSec)->object.widget_class = vec;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
((XmVendorShellExtObject)newSec)->object.parent = new_w;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmPushWidgetExtData(new_w, extData,
|
|
Packit |
b099d7 |
((XmVendorShellExtObject)newSec)->ext.extensionType);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* fetch the resources in superclass to subclass order
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
XtGetSubresources(new_w,
|
|
Packit |
b099d7 |
newSec,
|
|
Packit |
b099d7 |
NULL, NULL,
|
|
Packit |
b099d7 |
vec->core_class.resources,
|
|
Packit |
b099d7 |
vec->core_class.num_resources,
|
|
Packit |
b099d7 |
args, *num_args );
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
memcpy(reqSec, newSec, size);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmExtImportArgs((Widget)newSec, args, num_args);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtInitProc initialize;
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
initialize = xmDesktopClass->core_class.initialize;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
(*initialize)((Widget)reqSec, (Widget)newSec, args, num_args);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* InitializePrehook
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
InitializePrehook(
|
|
Packit |
b099d7 |
Widget req,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmBaseClassExt *cePtr;
|
|
Packit |
b099d7 |
XtInitProc secondaryCreate;
|
|
Packit |
b099d7 |
XmToolTipConfigTrait ttp; /* ToolTip pointer */
|
|
Packit |
b099d7 |
XmToolTipConfigTraitRec base;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ttp = (XmToolTipConfigTrait) XmeTraitGet (new_w, XmQTtoolTipConfig);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ttp == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ttp = (XmToolTipConfigTrait) XtMalloc (sizeof (XmToolTipConfigTraitRec));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ttp->post_delay = 5000;
|
|
Packit |
b099d7 |
ttp->post_duration = 5000;
|
|
Packit |
b099d7 |
ttp->enable = False;
|
|
Packit |
b099d7 |
ttp->timer = (int) NULL;
|
|
Packit |
b099d7 |
ttp->duration_timer = (int) NULL;
|
|
Packit |
b099d7 |
ttp->leave_time = 0;
|
|
Packit |
b099d7 |
ttp->slider = ttp->label = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtGetSubresources(new_w, &base, NULL, NULL,
|
|
Packit |
b099d7 |
subresources, XtNumber(subresources),
|
|
Packit |
b099d7 |
args, *num_args);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ttp->post_delay = base.post_delay;
|
|
Packit |
b099d7 |
ttp->post_duration = base.post_duration;
|
|
Packit |
b099d7 |
ttp->enable = base.enable;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmeTraitSet ((XtPointer) new_w, XmQTtoolTipConfig, (XtPointer) ttp);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cePtr = _XmGetBaseClassExtPtr(XtClass(new_w), XmQmotif);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((secondaryCreate = (*cePtr)->secondaryObjectCreate) != NULL)
|
|
Packit |
b099d7 |
(*secondaryCreate)(req, new_w, args, num_args);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* VendorExtInitialize
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
VendorExtInitialize(
|
|
Packit |
b099d7 |
Widget req,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args, /* unused */
|
|
Packit |
b099d7 |
Cardinal *num_args ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
enum { XmA_MOTIF_WM_OFFSET, XmA_MOTIF_WM_MESSAGES,
|
|
Packit |
b099d7 |
XmAWM_DELETE_WINDOW, NUM_ATOMS };
|
|
Packit |
b099d7 |
static char *atom_names[] = { _XA_MOTIF_WM_OFFSET, _XA_MOTIF_WM_MESSAGES,
|
|
Packit |
b099d7 |
XmIWM_DELETE_WINDOW };
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmFontList defaultFont;
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve;
|
|
Packit |
b099d7 |
XmVendorShellExtObject req_ve;
|
|
Packit |
b099d7 |
XmVendorShellExtObjectClass vec = (XmVendorShellExtObjectClass) XtClass(new_w);
|
|
Packit |
b099d7 |
Atom atoms[XtNumber(atom_names)];
|
|
Packit |
b099d7 |
XtCallbackProc delete_window_handler;
|
|
Packit |
b099d7 |
Widget extParent;
|
|
Packit |
b099d7 |
XmShellExtObjectClass sec = (XmShellExtObjectClass) XtClass(new_w);
|
|
Packit |
b099d7 |
XtEventHandler handler;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ve = (XmVendorShellExtObject) new_w;
|
|
Packit |
b099d7 |
req_ve = (XmVendorShellExtObject) req;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ve->shell.lastConfigureRequest = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
extParent = ve->ext.logicalParent;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* add the handler for tracking whether the hierarchy has focus */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtInsertEventHandler(extParent,
|
|
Packit |
b099d7 |
(EventMask)FocusChangeMask | EnterWindowMask | LeaveWindowMask,
|
|
Packit |
b099d7 |
FALSE,
|
|
Packit |
b099d7 |
_XmTrackShellFocus,
|
|
Packit |
b099d7 |
(XtPointer)new_w,
|
|
Packit |
b099d7 |
XtListHead);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
handler = sec->shell_class.structureNotifyHandler;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (handler)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtInsertEventHandler(extParent,
|
|
Packit |
b099d7 |
(EventMask) StructureNotifyMask,
|
|
Packit |
b099d7 |
TRUE,
|
|
Packit |
b099d7 |
handler,
|
|
Packit |
b099d7 |
(XtPointer)new_w,
|
|
Packit |
b099d7 |
XtListHead);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
#ifdef DEBUG
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
XtError("No structure notify handler for shell");
|
|
Packit |
b099d7 |
#endif /* DEBUG */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ve->vendor.lastOffsetSerial =
|
|
Packit |
b099d7 |
ve->vendor.lastMapRequest = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ve->vendor.xAtMap =
|
|
Packit |
b099d7 |
ve->vendor.yAtMap =
|
|
Packit |
b099d7 |
ve->vendor.xOffset =
|
|
Packit |
b099d7 |
ve->vendor.yOffset = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAddCallback((InternalCallbackList *) &(ve->vendor.realize_callback),
|
|
Packit |
b099d7 |
VendorExtRealize, NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ve->vendor.externalReposition = False;
|
|
Packit |
b099d7 |
extParent = ve->ext.logicalParent;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ve->vendor.focus_data = (XmFocusData) _XmCreateFocusData();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch (ve->vendor.delete_response){
|
|
Packit |
b099d7 |
case XmUNMAP:
|
|
Packit |
b099d7 |
case XmDESTROY:
|
|
Packit |
b099d7 |
case XmDO_NOTHING:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
XmeWarning(new_w, MSG1);
|
|
Packit |
b099d7 |
ve->vendor.delete_response = XmDESTROY;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAddCallback(extParent, XmNpopupCallback, PopupCallback,(XtPointer)new_w);
|
|
Packit |
b099d7 |
XtAddCallback(extParent, XmNpopdownCallback, PopdownCallback,(XtPointer)new_w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
assert(XtNumber(atom_names) == NUM_ATOMS);
|
|
Packit |
b099d7 |
XInternAtoms(XtDisplay(extParent), atom_names,
|
|
Packit |
b099d7 |
XtNumber(atom_names), FALSE, atoms);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmAddWMProtocols(extParent, &atoms[XmA_MOTIF_WM_MESSAGES], 1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmAddProtocols(extParent,
|
|
Packit |
b099d7 |
atoms[XmA_MOTIF_WM_MESSAGES],
|
|
Packit |
b099d7 |
&atoms[XmA_MOTIF_WM_OFFSET], 1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
XmAddProtocolCallback( extParent,
|
|
Packit |
b099d7 |
atoms[XmA_MOTIF_WM_MESSAGES],
|
|
Packit |
b099d7 |
atoms[XmA_MOTIF_WM_OFFSET],
|
|
Packit |
b099d7 |
vec->vendor_class.offset_handler,
|
|
Packit |
b099d7 |
(XtPointer) ve);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* add deleteWindow stuff
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XmAddWMProtocols(extParent, &atoms[XmAWM_DELETE_WINDOW], 1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* add a post hook for delete response */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
delete_window_handler = vec->vendor_class.delete_window_handler;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmSetWMProtocolHooks( extParent,
|
|
Packit |
b099d7 |
atoms[XmAWM_DELETE_WINDOW], NULL, NULL,
|
|
Packit |
b099d7 |
delete_window_handler, (XtPointer) ve);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* initialize the old_managed field for focus change tracking */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ve->vendor.old_managed = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* initialize the mwm_hints flags */
|
|
Packit |
b099d7 |
ve->vendor.mwm_hints.flags = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetMwmStuff( NULL, (XmVendorShellExtObject) new_w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((ve->vendor.focus_policy != XmEXPLICIT) &&
|
|
Packit |
b099d7 |
(ve->vendor.focus_policy != XmPOINTER))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ve->vendor.focus_policy = XmEXPLICIT;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* initialize input manager resources */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ve->vendor.input_method_string =
|
|
Packit |
b099d7 |
XtNewString(req_ve->vendor.input_method_string);
|
|
Packit |
b099d7 |
ve->vendor.preedit_type_string =
|
|
Packit |
b099d7 |
XtNewString(req_ve->vendor.preedit_type_string);
|
|
Packit |
b099d7 |
defaultFont = ve->vendor.button_font_list;
|
|
Packit |
b099d7 |
if ( !defaultFont )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
defaultFont = ve->vendor.default_font_list; /* backward compatibility */
|
|
Packit |
b099d7 |
if ( !defaultFont )
|
|
Packit |
b099d7 |
defaultFont = XmeGetDefaultRenderTable( (Widget) extParent, XmBUTTON_FONTLIST);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
ve->vendor.button_font_list = XmFontListCopy (defaultFont);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
defaultFont = ve->vendor.label_font_list;
|
|
Packit |
b099d7 |
if ( !defaultFont )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
defaultFont = ve->vendor.default_font_list; /* backward compatibility */
|
|
Packit |
b099d7 |
if ( !defaultFont )
|
|
Packit |
b099d7 |
defaultFont = XmeGetDefaultRenderTable( (Widget) extParent, XmLABEL_FONTLIST);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
ve->vendor.label_font_list = XmFontListCopy (defaultFont);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
defaultFont = ve->vendor.text_font_list;
|
|
Packit |
b099d7 |
if ( !defaultFont )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
defaultFont = ve->vendor.default_font_list; /* backward compatibility */
|
|
Packit |
b099d7 |
if ( !defaultFont )
|
|
Packit |
b099d7 |
defaultFont = XmeGetDefaultRenderTable( (Widget) extParent, XmTEXT_FONTLIST);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
ve->vendor.text_font_list = XmFontListCopy (defaultFont);
|
|
Packit |
b099d7 |
ve->vendor.im_height = 0;
|
|
Packit |
b099d7 |
ve->vendor.im_vs_height_set = False;
|
|
Packit |
b099d7 |
ve->vendor.im_info = NULL;
|
|
Packit |
b099d7 |
ve->vendor.label = NULL;
|
|
Packit |
b099d7 |
ve->vendor.slider = NULL;
|
|
Packit |
b099d7 |
ve->vendor.timer = (XtIntervalId)0;
|
|
Packit |
b099d7 |
ve->vendor.duration_timer = (XtIntervalId)0;
|
|
Packit |
b099d7 |
ve->vendor.leave_time = (Time)0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
* MotifWarningHandler
|
|
Packit |
b099d7 |
* Build up a warning message and print it
|
|
Packit |
b099d7 |
* Code which used to be directly in _XmWarning.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
MotifWarningHandler (String name,
|
|
Packit |
b099d7 |
String type,
|
|
Packit |
b099d7 |
String s_class,
|
|
Packit |
b099d7 |
String message,
|
|
Packit |
b099d7 |
String * params,
|
|
Packit |
b099d7 |
Cardinal* num_params)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char buf[1024], buf2[1024], header[200], *bp, *newline_pos;
|
|
Packit |
b099d7 |
int pos;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!(params && num_params && (*num_params > 0) &&
|
|
Packit |
b099d7 |
(params[*num_params-1] == XME_WARNING)) &&
|
|
Packit |
b099d7 |
previousWarningHandler) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* We assume it is not coming from our XmeWarning function */
|
|
Packit |
b099d7 |
/* call the previous Warning handler */
|
|
Packit |
b099d7 |
(*previousWarningHandler) (name, type, s_class, message,
|
|
Packit |
b099d7 |
params, num_params);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtGetErrorDatabaseText(name, type, s_class, message, buf2, 1024);
|
|
Packit |
b099d7 |
XtGetErrorDatabaseText("motif", "header", "Motif",
|
|
Packit |
b099d7 |
_XmMMsgMotif_0000, header, 200);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
sprintf(buf, header, name, s_class);
|
|
Packit |
b099d7 |
if (num_params && *num_params > 1) {
|
|
Packit |
b099d7 |
int i = *num_params-1;
|
|
Packit |
b099d7 |
char *par[10];
|
|
Packit |
b099d7 |
if (i > 10) i = 10;
|
|
Packit |
b099d7 |
memcpy((char*)par, (char*)params, i * sizeof(String));
|
|
Packit |
b099d7 |
bzero((char *)&par[i], (10-i) * sizeof(String));
|
|
Packit |
b099d7 |
(void) sprintf(&buf[strlen(buf)], buf2, par[0], par[1], par[2], par[3],
|
|
Packit |
b099d7 |
par[4], par[5], par[6], par[7], par[8], par[9]);
|
|
Packit |
b099d7 |
} else
|
|
Packit |
b099d7 |
strcat(buf, buf2);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
pos = 0;
|
|
Packit |
b099d7 |
bp = buf;
|
|
Packit |
b099d7 |
do {
|
|
Packit |
b099d7 |
newline_pos = strchr (bp, '\n');
|
|
Packit |
b099d7 |
if (newline_pos == NULL) {
|
|
Packit |
b099d7 |
strcpy (&buf2[pos], bp);
|
|
Packit |
b099d7 |
pos += strlen (bp);
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
strncpy (&buf2[pos], bp, (int) (newline_pos - bp + 1));
|
|
Packit |
b099d7 |
pos += (int) (newline_pos - bp + 1);
|
|
Packit |
b099d7 |
bp += (int) (newline_pos - bp + 1);
|
|
Packit |
b099d7 |
strcpy (&buf2[pos], " ");
|
|
Packit |
b099d7 |
pos += 4;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
} while (newline_pos != NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
buf2[pos] = '\n'; buf2[++pos] = '\0';
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtWarning(buf2);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Initialize
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Initialize(
|
|
Packit |
b099d7 |
Widget req,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
VendorShellWidget vw = (VendorShellWidget)new_w;
|
|
Packit |
b099d7 |
XmWidgetExtData extData;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((extData = _XmGetWidgetExtData((Widget)vw, XmSHELL_EXTENSION)) != NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
VendorExtInitialize(extData->reqWidget,
|
|
Packit |
b099d7 |
extData->widget,
|
|
Packit |
b099d7 |
args,
|
|
Packit |
b099d7 |
num_args);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* get reasonable defaults for visual, depth and colormap */
|
|
Packit |
b099d7 |
_XmDefaultVisualResources(new_w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Keep count of the number of VendorShells. When it reaches zero
|
|
Packit |
b099d7 |
* we will destroy the XmDisplay object in Destroy()
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (!XmIsDisplay(new_w)) {
|
|
Packit |
b099d7 |
XmDisplay xmDisplay = (XmDisplay) XmGetXmDisplay (XtDisplay(new_w));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmDisplay->display.shellCount += 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef HAVE_LIBXMU
|
|
Packit |
b099d7 |
XtAddEventHandler(new_w, (EventMask)0, True, (XtEventHandler)_XmEditResCheckMessages, NULL);
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* install the Motif warning handler that works with XmeWarning */
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
if (!previousWarningHandler)
|
|
Packit |
b099d7 |
previousWarningHandler =
|
|
Packit |
b099d7 |
XtAppSetWarningMsgHandler(XtWidgetToApplicationContext(new_w),
|
|
Packit |
b099d7 |
MotifWarningHandler);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* InitializePosthook
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
InitializePosthook(
|
|
Packit |
b099d7 |
Widget req,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmWidgetExtData ext;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((ext = _XmGetWidgetExtData(new_w, XmSHELL_EXTENSION)) != NULL) {
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
_XmExtObjFree((XtPointer) ext->reqWidget);
|
|
Packit |
b099d7 |
ext->reqWidget = NULL;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
/* extData gets freed at destroy */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SetValuesPrehook
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
SetValuesPrehook(
|
|
Packit |
b099d7 |
Widget old,
|
|
Packit |
b099d7 |
Widget ref,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmWidgetExtData oldExtData, newExtData;
|
|
Packit |
b099d7 |
XmBaseClassExt *cePtr;
|
|
Packit |
b099d7 |
WidgetClass ec;
|
|
Packit |
b099d7 |
Cardinal extSize;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cePtr = _XmGetBaseClassExtPtr(XtClass(new_w), XmQmotif);
|
|
Packit |
b099d7 |
ec = (*cePtr)->secondaryObjectClass;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
extSize = ec->core_class.widget_size;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
oldExtData = _XmGetWidgetExtData(new_w, XmSHELL_EXTENSION);
|
|
Packit |
b099d7 |
newExtData = (XmWidgetExtData) XtCalloc(1, sizeof(XmWidgetExtDataRec));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (oldExtData && newExtData) {
|
|
Packit |
b099d7 |
_XmPushWidgetExtData(new_w, newExtData, XmSHELL_EXTENSION);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
newExtData->widget = oldExtData->widget;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
newExtData->oldWidget = (Widget) _XmExtObjAlloc(extSize);
|
|
Packit |
b099d7 |
memcpy((char *)newExtData->oldWidget, (char *)oldExtData->widget, extSize);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
XtSetSubvalues(oldExtData->widget,
|
|
Packit |
b099d7 |
ec->core_class.resources,
|
|
Packit |
b099d7 |
ec->core_class.num_resources,
|
|
Packit |
b099d7 |
args, *num_args);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
newExtData->reqWidget = (Widget) _XmExtObjAlloc(extSize);
|
|
Packit |
b099d7 |
memcpy((char *)newExtData->reqWidget, (char *)oldExtData->widget, extSize);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Convert the necessary fields from unit values to pixel values */
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
oldExtData->widget->core.widget_class = ec;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
_XmExtImportArgs(oldExtData->widget, args, num_args);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return FALSE;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SetValues
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
VendorExtSetValues(
|
|
Packit |
b099d7 |
Widget old,
|
|
Packit |
b099d7 |
Widget ref,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmVendorShellExtPartPtr ove, nve;
|
|
Packit |
b099d7 |
XmVendorShellExtObject ov = (XmVendorShellExtObject) old;
|
|
Packit |
b099d7 |
XmVendorShellExtObject nv = (XmVendorShellExtObject) new_w;
|
|
Packit |
b099d7 |
XmFontList defaultFont;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ove = (XmVendorShellExtPartPtr) &(ov->vendor);
|
|
Packit |
b099d7 |
nve = (XmVendorShellExtPartPtr) &(nv->vendor);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch (nve->delete_response)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case XmUNMAP:
|
|
Packit |
b099d7 |
case XmDESTROY:
|
|
Packit |
b099d7 |
case XmDO_NOTHING:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
XmeWarning(new_w, MSG1);
|
|
Packit |
b099d7 |
nve->delete_response = XmDESTROY;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((nve->focus_policy != XmEXPLICIT) &&
|
|
Packit |
b099d7 |
(nve->focus_policy != XmPOINTER))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
nve->focus_policy = ove->focus_policy;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (nve->focus_policy != ove->focus_policy)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmFocusModelChanged( nv->ext.logicalParent, NULL,
|
|
Packit |
b099d7 |
(XtPointer)(unsigned long)nve->focus_policy );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
SetMwmStuff(ov, nv);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (nve->input_method_string != ove->input_method_string)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtFree(ove->input_method_string);
|
|
Packit |
b099d7 |
nve->input_method_string = XtNewString(nve->input_method_string);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (nve->preedit_type_string != ove->preedit_type_string)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtFree(ove->preedit_type_string);
|
|
Packit |
b099d7 |
nve->preedit_type_string = XtNewString(nve->preedit_type_string);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (nve->button_font_list != ove->button_font_list)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontListFree(ove->button_font_list);
|
|
Packit |
b099d7 |
defaultFont = nve->button_font_list;
|
|
Packit |
b099d7 |
if (!defaultFont)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
defaultFont = nve->default_font_list;
|
|
Packit |
b099d7 |
if (!defaultFont )
|
|
Packit |
b099d7 |
defaultFont = XmeGetDefaultRenderTable( (Widget) new_w,
|
|
Packit |
b099d7 |
XmBUTTON_FONTLIST);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
nve->button_font_list = XmFontListCopy (defaultFont);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (nve->label_font_list != ove->label_font_list)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontListFree(ove->label_font_list);
|
|
Packit |
b099d7 |
defaultFont = nve->label_font_list;
|
|
Packit |
b099d7 |
if (!defaultFont)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
defaultFont = nve->default_font_list;
|
|
Packit |
b099d7 |
if (!defaultFont )
|
|
Packit |
b099d7 |
defaultFont = XmeGetDefaultRenderTable( (Widget) new_w,
|
|
Packit |
b099d7 |
XmLABEL_FONTLIST);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
nve->label_font_list = XmFontListCopy (defaultFont);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (nve->text_font_list != ove->text_font_list)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontListFree(ove->text_font_list);
|
|
Packit |
b099d7 |
defaultFont = nve->text_font_list;
|
|
Packit |
b099d7 |
if (!defaultFont)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
defaultFont = nve->default_font_list;
|
|
Packit |
b099d7 |
if (!defaultFont )
|
|
Packit |
b099d7 |
defaultFont = XmeGetDefaultRenderTable( (Widget) new_w,
|
|
Packit |
b099d7 |
XmTEXT_FONTLIST);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
nve->text_font_list = XmFontListCopy (defaultFont);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (nve->input_policy != ove->input_policy)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
switch (nve->input_policy)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case XmPER_SHELL:
|
|
Packit |
b099d7 |
case XmPER_WIDGET:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
XmeWarning(new_w, MSG2);
|
|
Packit |
b099d7 |
nve->input_policy = ove->input_policy;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (nve->layout_direction != ove->layout_direction)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmeWarning(new_w, MSG3);
|
|
Packit |
b099d7 |
nve->layout_direction = ove->layout_direction;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return FALSE;
|
|
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 req,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
VendorShellWidget vw = (VendorShellWidget)new_w;
|
|
Packit |
b099d7 |
XmWidgetExtData extData;
|
|
Packit |
b099d7 |
XmVendorShellExtObject vse;
|
|
Packit |
b099d7 |
int i;
|
|
Packit |
b099d7 |
XmToolTipConfigTrait ttp;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ttp = (XmToolTipConfigTrait) XmeTraitGet (new_w, XmQTtoolTipConfig);
|
|
Packit |
b099d7 |
if (ttp != NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmProcessLock ();
|
|
Packit |
b099d7 |
for (i = 0; i < *num_args; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (strcmp (args[i].name, XmNtoolTipPostDelay) == 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ttp->post_delay = args[i].value;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (strcmp (args[i].name, XmNtoolTipPostDuration) == 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ttp->post_duration = args[i].value;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (strcmp (args[i].name, XmNtoolTipEnable) == 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ttp->enable = (Boolean) args[i].value;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_XmProcessUnlock ();
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((extData = _XmGetWidgetExtData( (Widget) vw, XmSHELL_EXTENSION)) &&
|
|
Packit |
b099d7 |
(vse = (XmVendorShellExtObject) extData->widget))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
VendorExtSetValues(extData->oldWidget,
|
|
Packit |
b099d7 |
extData->reqWidget,
|
|
Packit |
b099d7 |
extData->widget,
|
|
Packit |
b099d7 |
args,
|
|
Packit |
b099d7 |
num_args);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
vse = (XmVendorShellExtObject) extData->widget;
|
|
Packit |
b099d7 |
if (req->core.height != current->core.height)
|
|
Packit |
b099d7 |
vse->vendor.im_vs_height_set = True;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(FALSE);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SetValuesPosthook
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
SetValuesPosthook(
|
|
Packit |
b099d7 |
Widget current, /* unused */
|
|
Packit |
b099d7 |
Widget req, /* unused */
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args, /* unused */
|
|
Packit |
b099d7 |
Cardinal *num_args ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmWidgetExtData ext;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmPopWidgetExtData(new_w, &ext, XmSHELL_EXTENSION);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ext) {
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
_XmExtObjFree( (XtPointer) ext->reqWidget);
|
|
Packit |
b099d7 |
_XmExtObjFree( (XtPointer) ext->oldWidget);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
XtFree((char *) ext);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return(FALSE);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* GetValuesPrehook
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
GetValuesPrehook(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
ArgList args, /* unused */
|
|
Packit |
b099d7 |
Cardinal *num_args ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmWidgetExtData oldExtData, newExtData;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((oldExtData = _XmGetWidgetExtData(w, XmSHELL_EXTENSION)) != NULL) {
|
|
Packit |
b099d7 |
newExtData = (XmWidgetExtData) XtCalloc(1, sizeof(XmWidgetExtDataRec));
|
|
Packit |
b099d7 |
newExtData->widget = oldExtData->widget;
|
|
Packit |
b099d7 |
_XmPushWidgetExtData(w, newExtData, XmSHELL_EXTENSION);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
GetValuesHook(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmWidgetExtData ext;
|
|
Packit |
b099d7 |
XmBaseClassExt *cePtr;
|
|
Packit |
b099d7 |
WidgetClass ec;
|
|
Packit |
b099d7 |
int i;
|
|
Packit |
b099d7 |
int *ip;
|
|
Packit |
b099d7 |
Boolean *bp;
|
|
Packit |
b099d7 |
XmToolTipConfigTrait ttp;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ttp = (XmToolTipConfigTrait) XmeTraitGet (w, XmQTtoolTipConfig);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ttp != NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmProcessLock ();
|
|
Packit |
b099d7 |
for (i = 0; i < *num_args; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (strcmp (args[i].name, XmNtoolTipPostDelay) == 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ip = (int *) args[i].value;
|
|
Packit |
b099d7 |
*ip = ttp->post_delay;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (strcmp (args[i].name, XmNtoolTipPostDuration) == 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ip = (int *) args[i].value;
|
|
Packit |
b099d7 |
*ip = ttp->post_duration;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (strcmp (args[i].name, XmNtoolTipEnable) == 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
bp = (Boolean *) args[i].value;
|
|
Packit |
b099d7 |
*bp = ttp->enable;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_XmProcessUnlock ();
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cePtr = _XmGetBaseClassExtPtr(XtClass(w), XmQmotif);
|
|
Packit |
b099d7 |
ec = (*cePtr)->secondaryObjectClass;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((ext = _XmGetWidgetExtData(w, XmSHELL_EXTENSION)) != NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
XtGetSubvalues(ext->widget,
|
|
Packit |
b099d7 |
ec->core_class.resources,
|
|
Packit |
b099d7 |
ec->core_class.num_resources,
|
|
Packit |
b099d7 |
args, *num_args);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
_XmExtGetValuesHook( ext->widget, args, num_args );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
GetValuesPosthook(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
ArgList args, /* unused */
|
|
Packit |
b099d7 |
Cardinal *num_args ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmWidgetExtData ext = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmPopWidgetExtData(w, &ext, XmSHELL_EXTENSION);
|
|
Packit |
b099d7 |
if (ext)
|
|
Packit |
b099d7 |
XtFree((char *) ext);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* This handles the case where the secondary shells is waiting for the
|
|
Packit |
b099d7 |
* primary to get mapped and is destroyed in the interim.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
PendingTransientDestroyed(
|
|
Packit |
b099d7 |
Widget vw,
|
|
Packit |
b099d7 |
XtPointer cl_data,
|
|
Packit |
b099d7 |
XtPointer ca_data ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmExtObject ancestorExtObj = (XmExtObject) cl_data ;
|
|
Packit |
b099d7 |
Widget ancestor = ancestorExtObj->ext.logicalParent ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( !ancestor->core.being_destroyed )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
XtRemoveCallback( (Widget) ancestorExtObj, XmNrealizeCallback,
|
|
Packit |
b099d7 |
SetTransientFor, (XtPointer) vw) ;
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
_XmRemoveCallback((InternalCallbackList *) &(((XmVendorShellExtObject)ancestorExtObj)->vendor.realize_callback),
|
|
Packit |
b099d7 |
SetTransientFor, (XtPointer) vw) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Handle having the application shell realized after the secondary shells
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
SetTransientFor(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
XtPointer closure,
|
|
Packit |
b099d7 |
XtPointer call_data) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
VendorShellWidget vw = (VendorShellWidget) closure ;
|
|
Packit |
b099d7 |
Widget ancestor = ((XmExtObject) w)->ext.logicalParent ;
|
|
Packit |
b099d7 |
Arg args[2] ;
|
|
Packit |
b099d7 |
Cardinal i = 0 ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( !XtIsRealized( ancestor) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtRealizeWidget( ancestor) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
XtSetArg( args[i], XtNwindowGroup, XtWindow( ancestor)) ; i++ ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( XtIsTransientShell( (Widget) vw) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* because Shell.c is broken force the code */
|
|
Packit |
b099d7 |
((TransientShellWidget) vw)->transient.transient_for = NULL ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetArg( args[i], XtNtransientFor, ancestor) ; i++ ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
XtSetValues( (Widget) vw, args, i) ;
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
XtRemoveCallback( w, XmNrealizeCallback, SetTransientFor, (XtPointer) vw) ;
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmRemoveCallback((InternalCallbackList *) &(((XmVendorShellExtObject)w)->vendor.realize_callback),
|
|
Packit |
b099d7 |
SetTransientFor, (XtPointer) vw) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtRemoveCallback( (Widget) vw, XmNdestroyCallback,
|
|
Packit |
b099d7 |
PendingTransientDestroyed, (XtPointer) w) ;
|
|
Packit |
b099d7 |
return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Resize
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Resize(
|
|
Packit |
b099d7 |
Widget w )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register ShellWidget sw = (ShellWidget)w;
|
|
Packit |
b099d7 |
Widget childwid;
|
|
Packit |
b099d7 |
int i;
|
|
Packit |
b099d7 |
int y;
|
|
Packit |
b099d7 |
XmVendorShellExtObject vendorExt;
|
|
Packit |
b099d7 |
XmWidgetExtData extData;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
extData = _XmGetWidgetExtData((Widget)sw, XmSHELL_EXTENSION);
|
|
Packit |
b099d7 |
if(extData == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
#ifdef DEBUG
|
|
Packit |
b099d7 |
XmeWarning(NULL, "_XmGetWidgetExtData() returned NULL pointer.");
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
vendorExt = (XmVendorShellExtObject) extData->widget;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmImResize((Widget)sw);
|
|
Packit |
b099d7 |
y = sw->core.height - vendorExt->vendor.im_height;
|
|
Packit |
b099d7 |
for(i = 0; i < sw->composite.num_children; i++) {
|
|
Packit |
b099d7 |
if(XtIsManaged(sw->composite.children[i])) {
|
|
Packit |
b099d7 |
childwid = sw->composite.children[i];
|
|
Packit |
b099d7 |
XmeConfigureObject(childwid,
|
|
Packit |
b099d7 |
childwid->core.x, childwid->core.y,
|
|
Packit |
b099d7 |
sw->core.width, y,
|
|
Packit |
b099d7 |
childwid->core.border_width);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ChangeManaged
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ChangeManaged(
|
|
Packit |
b099d7 |
Widget wid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
VendorShellWidget vw = (VendorShellWidget) wid ;
|
|
Packit |
b099d7 |
WMShellWidgetClass super = (WMShellWidgetClass)wmShellWidgetClass;
|
|
Packit |
b099d7 |
Widget firstManaged = NULL;
|
|
Packit |
b099d7 |
Cardinal i;
|
|
Packit |
b099d7 |
XmVendorShellExtObject vendorExt;
|
|
Packit |
b099d7 |
XmWidgetExtData extData;
|
|
Packit |
b099d7 |
XtWidgetProc change_managed;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
extData = _XmGetWidgetExtData((Widget)vw, XmSHELL_EXTENSION);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if(extData == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
#ifdef DEBUG
|
|
Packit |
b099d7 |
XmeWarning(NULL, "_XmGetWidgetExtData() returned NULL pointer.");
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
vendorExt = (XmVendorShellExtObject) extData->widget;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i= 0; i < vw->composite.num_children; i++)
|
|
Packit |
b099d7 |
if (XtIsManaged(vw->composite.children[i]))
|
|
Packit |
b099d7 |
firstManaged = vw->composite.children[i];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Danger! Danger! Ugly Code Warning! Since the shell's
|
|
Packit |
b099d7 |
* change Managed routine in the intrinsics will always
|
|
Packit |
b099d7 |
* configure the child to be the size of the parent, if
|
|
Packit |
b099d7 |
* there is any im_height we must subtract it here and
|
|
Packit |
b099d7 |
* add it back in after this call.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
vw->core.height -= vendorExt->vendor.im_height;
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
change_managed = super->composite_class.change_managed;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
(*change_managed) ((Widget) vw);
|
|
Packit |
b099d7 |
vw->core.height += vendorExt->vendor.im_height;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* make sure that there is a reasonable initial focus path. This
|
|
Packit |
b099d7 |
* is especially important for making sure the event handler is
|
|
Packit |
b099d7 |
* there.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XtSetKeyboardFocus((Widget)vw, (Widget)firstManaged);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmeNavigChangeManaged((Widget)vw);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
UpdateCoreGeometry(
|
|
Packit |
b099d7 |
VendorShellWidget vw,
|
|
Packit |
b099d7 |
XmVendorShellExtObject vendorExt )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* ||| check if geometry was user specified and convert if it was */
|
|
Packit |
b099d7 |
if (vw->shell.geometry && vendorExt)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (vendorExt->vendor.unit_type != XmPIXELS)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (vw->wm.size_hints.flags & USPosition)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
vw->core.x = (Position) XmCvtToHorizontalPixels(
|
|
Packit |
b099d7 |
vw->core.screen, (int) vw->core.x,
|
|
Packit |
b099d7 |
vendorExt->vendor.unit_type);
|
|
Packit |
b099d7 |
vw->core.y = (Position) XmCvtToVerticalPixels(
|
|
Packit |
b099d7 |
vw->core.screen, (int) vw->core.y,
|
|
Packit |
b099d7 |
vendorExt->vendor.unit_type);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (vw->wm.size_hints.flags & USSize)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
vw->core.width = (Dimension) XmCvtToHorizontalPixels(
|
|
Packit |
b099d7 |
vw->core.screen, (int) vw->core.width,
|
|
Packit |
b099d7 |
vendorExt->vendor.unit_type);
|
|
Packit |
b099d7 |
vw->core.height = (Dimension) XmCvtToVerticalPixels(
|
|
Packit |
b099d7 |
vw->core.screen, (int) vw->core.height,
|
|
Packit |
b099d7 |
vendorExt->vendor.unit_type);
|
|
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 wid,
|
|
Packit |
b099d7 |
XtValueMask *vmask,
|
|
Packit |
b099d7 |
XSetWindowAttributes *attr )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
VendorShellWidget vw = (VendorShellWidget) wid ;
|
|
Packit |
b099d7 |
WMShellWidgetClass super = (WMShellWidgetClass)wmShellWidgetClass;
|
|
Packit |
b099d7 |
XmVendorShellExtObject vendorExt;
|
|
Packit |
b099d7 |
XmWidgetExtData extData;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((extData = _XmGetWidgetExtData((Widget)vw, XmSHELL_EXTENSION)) != NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
vendorExt = (XmVendorShellExtObject) extData->widget;
|
|
Packit |
b099d7 |
_XmImChangeManaged((Widget)vw);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
vendorExt = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
UpdateCoreGeometry(vw, vendorExt);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Set nearest shell as transientFor so Mwm will be able to build tree.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (vendorExt && XmIsShellExt(vendorExt->desktop.parent))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget ancestor = ((XmExtObject)(vendorExt->desktop.parent))
|
|
Packit |
b099d7 |
->ext.logicalParent ;
|
|
Packit |
b099d7 |
/* try to have WMShell do the work */
|
|
Packit |
b099d7 |
if (XtIsRealized(ancestor))
|
|
Packit |
b099d7 |
vw->wm.wm_hints.window_group = XtWindow(ancestor);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmWidgetExtData ancestorExtData = _XmGetWidgetExtData( ancestor,
|
|
Packit |
b099d7 |
XmSHELL_EXTENSION) ;
|
|
Packit |
b099d7 |
if( ancestorExtData && ancestorExtData->widget )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmAddCallback((InternalCallbackList *) &(((XmVendorShellExtObject)ancestorExtData->widget)->vendor.realize_callback),
|
|
Packit |
b099d7 |
SetTransientFor,
|
|
Packit |
b099d7 |
(XtPointer) vw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAddCallback( (Widget) vw, XmNdestroyCallback,
|
|
Packit |
b099d7 |
PendingTransientDestroyed,
|
|
Packit |
b099d7 |
(XtPointer) ancestorExtData->widget) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Make sure height and width are not zero, without warning, since
|
|
Packit |
b099d7 |
we change the internal behavior of BB and DA and we don't want
|
|
Packit |
b099d7 |
to change the external one.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (!XtWidth(wid)) XtWidth(wid) = 1 ;
|
|
Packit |
b099d7 |
if (!XtHeight(wid)) XtHeight(wid) = 1 ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Make my superclass do all the dirty work */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtRealizeProc realize;
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
realize = super->core_class.realize;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
(*realize)((Widget) vw, vmask, attr);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (vendorExt)
|
|
Packit |
b099d7 |
_XmImRealize((Widget)vw);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* GeometryManager
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static XtGeometryResult
|
|
Packit |
b099d7 |
GeometryManager(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XtWidgetGeometry *request,
|
|
Packit |
b099d7 |
XtWidgetGeometry *reply ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ShellWidget shell = (ShellWidget)(wid->core.parent);
|
|
Packit |
b099d7 |
XtWidgetGeometry my_request;
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve;
|
|
Packit |
b099d7 |
XmWidgetExtData extData;
|
|
Packit |
b099d7 |
XtGeometryResult res ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (!(extData = _XmGetWidgetExtData((Widget)shell,
|
|
Packit |
b099d7 |
XmSHELL_EXTENSION)))
|
|
Packit |
b099d7 |
return XtGeometryNo;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ve = (XmVendorShellExtObject) extData->widget;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if(!(shell->shell.allow_shell_resize) && XtIsRealized(wid) &&
|
|
Packit |
b099d7 |
(request->request_mode & (CWWidth | CWHeight | CWBorderWidth)))
|
|
Packit |
b099d7 |
return(XtGeometryNo);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
my_request.request_mode = 0;
|
|
Packit |
b099d7 |
/* %%% worry about XtCWQueryOnly */
|
|
Packit |
b099d7 |
if (request->request_mode & XtCWQueryOnly)
|
|
Packit |
b099d7 |
my_request.request_mode |= XtCWQueryOnly;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (request->request_mode & CWWidth) {
|
|
Packit |
b099d7 |
my_request.width = request->width;
|
|
Packit |
b099d7 |
my_request.request_mode |= CWWidth;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (request->request_mode & CWHeight) {
|
|
Packit |
b099d7 |
my_request.height = request->height + ve->vendor.im_height;
|
|
Packit |
b099d7 |
my_request.request_mode |= CWHeight;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (request->request_mode & CWBorderWidth) {
|
|
Packit |
b099d7 |
my_request.border_width = request->border_width;
|
|
Packit |
b099d7 |
my_request.request_mode |= CWBorderWidth;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (request->request_mode & CWX) {
|
|
Packit |
b099d7 |
my_request.x = request->x;
|
|
Packit |
b099d7 |
my_request.request_mode |= CWX;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (request->request_mode & CWY) {
|
|
Packit |
b099d7 |
my_request.y = request->y;
|
|
Packit |
b099d7 |
my_request.request_mode |= CWY;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
res = XtMakeGeometryRequest((Widget)shell, &my_request, NULL) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (res == XtGeometryYes)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmImResize((Widget)shell);
|
|
Packit |
b099d7 |
if (!(request->request_mode & XtCWQueryOnly))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (request->request_mode & CWWidth)
|
|
Packit |
b099d7 |
wid->core.width = shell->core.width;
|
|
Packit |
b099d7 |
if (request->request_mode & CWHeight)
|
|
Packit |
b099d7 |
wid->core.height = shell->core.height -
|
|
Packit |
b099d7 |
ve->vendor.im_height;
|
|
Packit |
b099d7 |
if (request->request_mode & CWX)
|
|
Packit |
b099d7 |
wid->core.x = 0;
|
|
Packit |
b099d7 |
if (request->request_mode & CWY)
|
|
Packit |
b099d7 |
wid->core.y = 0;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return XtGeometryYes;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
return XtGeometryNo;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* RootGeometryManager
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static XtGeometryResult
|
|
Packit |
b099d7 |
RootGeometryManager(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
XtWidgetGeometry *request,
|
|
Packit |
b099d7 |
XtWidgetGeometry *reply )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtGeometryHandler wmGeoHandler;
|
|
Packit |
b099d7 |
ShellWidgetClass swc = (ShellWidgetClass)wmShellWidgetClass;
|
|
Packit |
b099d7 |
ShellClassExtensionRec **scExtPtr;
|
|
Packit |
b099d7 |
XtGeometryResult returnVal = XtGeometryNo;
|
|
Packit |
b099d7 |
WMShellWidget wmShell = (WMShellWidget)w;
|
|
Packit |
b099d7 |
XmShellExtObject se;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmWidgetExtData extData = _XmGetWidgetExtData(w, XmSHELL_EXTENSION);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if(extData == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
#ifdef DEBUG
|
|
Packit |
b099d7 |
XmeWarning(NULL, "_XmGetWidgetExtData() returned NULL pointer.");
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
return XtGeometryNo;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
se = (XmShellExtObject)extData->widget;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (se)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
se->shell.lastConfigureRequest = NextRequest(XtDisplay(w));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
#ifdef DEBUG
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
XtError("no extension object");
|
|
Packit |
b099d7 |
#endif /* DEBUG */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
scExtPtr = (ShellClassExtensionRec **)
|
|
Packit |
b099d7 |
_XmGetClassExtensionPtr(
|
|
Packit |
b099d7 |
(XmGenericClassExt *) &(swc->shell_class.extension),
|
|
Packit |
b099d7 |
NULLQUARK);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (request->request_mode & XtCWQueryOnly)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (!(wmShell->shell.allow_shell_resize) &&
|
|
Packit |
b099d7 |
(request->request_mode &
|
|
Packit |
b099d7 |
(CWWidth | CWHeight | CWBorderWidth)))
|
|
Packit |
b099d7 |
return XtGeometryNo;
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* we should switch on useAsyncGeometry but we won't |||
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
return XtGeometryYes;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (se->shell.useAsyncGeometry)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* make wait_for_wm = FALSE to force desired behaviour */
|
|
Packit |
b099d7 |
wmShell->wm.wait_for_wm = FALSE;
|
|
Packit |
b099d7 |
/* FIX for 1684: remove the timeout = 0 line, not
|
|
Packit |
b099d7 |
needed and introduced a bug if not saved/restore together
|
|
Packit |
b099d7 |
with useAsync change - wait_for_wm will be later reset
|
|
Packit |
b099d7 |
by Shell in Xt */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
wmGeoHandler = (*scExtPtr)->root_geometry_manager;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
if (wmGeoHandler != NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
returnVal = (*wmGeoHandler)(w, request, reply);
|
|
Packit |
b099d7 |
if (se->shell.useAsyncGeometry) {
|
|
Packit |
b099d7 |
/* X configure was sent to the server, while this is happening,
|
|
Packit |
b099d7 |
let's everybody think it's a success (which is true
|
|
Packit |
b099d7 |
most of the time): set the shell size to what it wants
|
|
Packit |
b099d7 |
to be and return Yes */
|
|
Packit |
b099d7 |
if (request->request_mode & CWWidth)
|
|
Packit |
b099d7 |
w->core.width = request->width;
|
|
Packit |
b099d7 |
if (request->request_mode & CWHeight)
|
|
Packit |
b099d7 |
w->core.height = request->height ;
|
|
Packit |
b099d7 |
if (request->request_mode & CWBorderWidth)
|
|
Packit |
b099d7 |
w->core.border_width = request->border_width ;
|
|
Packit |
b099d7 |
if (request->request_mode & CWX)
|
|
Packit |
b099d7 |
w->core.x = request->x;
|
|
Packit |
b099d7 |
if (request->request_mode & CWY)
|
|
Packit |
b099d7 |
w->core.y = request->y;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
returnVal = XtGeometryYes;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return returnVal;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SetMwmHints
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
SetMwmHints(
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
PropMwmHints prop;
|
|
Packit |
b099d7 |
Atom mwm_hints_atom;
|
|
Packit |
b099d7 |
Widget shell = ve->ext.logicalParent;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
mwm_hints_atom = XInternAtom(XtDisplay(shell),
|
|
Packit |
b099d7 |
_XA_MWM_HINTS,
|
|
Packit |
b099d7 |
FALSE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define SET(field) prop.field = ve->vendor.mwm_hints.field
|
|
Packit |
b099d7 |
SET(flags);
|
|
Packit |
b099d7 |
SET(functions);
|
|
Packit |
b099d7 |
SET(decorations);
|
|
Packit |
b099d7 |
prop.inputMode = ve->vendor.mwm_hints.input_mode;
|
|
Packit |
b099d7 |
SET(status);
|
|
Packit |
b099d7 |
#undef SET
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XChangeProperty (XtDisplay(shell),
|
|
Packit |
b099d7 |
XtWindow(shell),
|
|
Packit |
b099d7 |
mwm_hints_atom,mwm_hints_atom,
|
|
Packit |
b099d7 |
32, PropModeReplace,
|
|
Packit |
b099d7 |
(unsigned char *) &prop, PROP_MWM_HINTS_ELEMENTS);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SetMwmMenu
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
SetMwmMenu(
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget shell = ve->ext.logicalParent;
|
|
Packit |
b099d7 |
Atom mwm_menu_atom;
|
|
Packit |
b099d7 |
XTextProperty text_prop;
|
|
Packit |
b099d7 |
int status;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
mwm_menu_atom = XInternAtom(XtDisplay(shell),
|
|
Packit |
b099d7 |
_XA_MWM_MENU,
|
|
Packit |
b099d7 |
FALSE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
text_prop.value = NULL;
|
|
Packit |
b099d7 |
status = XmbTextListToTextProperty(XtDisplay(shell),
|
|
Packit |
b099d7 |
&ve->vendor.mwm_menu, 1,
|
|
Packit |
b099d7 |
XStdICCTextStyle,
|
|
Packit |
b099d7 |
&text_prop);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (status == Success || status > 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XSetTextProperty(XtDisplay(shell), XtWindow(shell),
|
|
Packit |
b099d7 |
&text_prop, mwm_menu_atom);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (text_prop.value != NULL) XFree((char*)text_prop.value);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
VendorExtRealize(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
XtPointer closure, /* unused */
|
|
Packit |
b099d7 |
XtPointer call_data ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve = (XmVendorShellExtObject)w;
|
|
Packit |
b099d7 |
VendorShellWidget vw;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
vw = (VendorShellWidget)ve->ext.logicalParent;
|
|
Packit |
b099d7 |
if (ve->vendor.mwm_hints.flags)
|
|
Packit |
b099d7 |
SetMwmHints(ve);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ve->vendor.mwm_menu)
|
|
Packit |
b099d7 |
SetMwmMenu(ve);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmInstallProtocols(ve->ext.logicalParent);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( !IsPopupShell( (Widget) vw) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* Non-popup shells are allowed input as soon as
|
|
Packit |
b099d7 |
* they are realized, since they don't use XtPopup.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
AddGrab(ve, NULL, FALSE, FALSE, ve);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
AddDLEntry(
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve,
|
|
Packit |
b099d7 |
Widget shell)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
unsigned short i = 0 ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
while( i < destroy_list_cnt )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( destroy_list[i].shell == shell )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* Already on list; once is enough.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
return ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
++i ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if( destroy_list_cnt == destroy_list_size )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
destroy_list_size += 2 ;
|
|
Packit |
b099d7 |
destroy_list = (XmDestroyGrabList) XtRealloc( (char *) destroy_list,
|
|
Packit |
b099d7 |
destroy_list_size * sizeof( XmDestroyGrabRec)) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
destroy_list[i].shell = shell ;
|
|
Packit |
b099d7 |
destroy_list[i].ve = ve ;
|
|
Packit |
b099d7 |
++destroy_list_cnt ;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
RemoveDLEntry(
|
|
Packit |
b099d7 |
unsigned pos)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
while( ++pos < destroy_list_cnt )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
destroy_list[pos-1].shell = destroy_list[pos].shell ;
|
|
Packit |
b099d7 |
destroy_list[pos-1].ve = destroy_list[pos].ve ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
--destroy_list_cnt ;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Destroy(
|
|
Packit |
b099d7 |
Widget wid)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmWidgetExtData ext;
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve;
|
|
Packit |
b099d7 |
unsigned short n = 0 ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
while( n < destroy_list_cnt )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( destroy_list[n].shell == wid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
RemoveGrab( destroy_list[n].ve, TRUE, destroy_list[n].shell) ;
|
|
Packit |
b099d7 |
RemoveDLEntry( n) ;
|
|
Packit |
b099d7 |
break ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
++n ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmPopWidgetExtData(wid, &ext, XmSHELL_EXTENSION);
|
|
Packit |
b099d7 |
if (ext != NULL) {
|
|
Packit |
b099d7 |
if ((ve = (XmVendorShellExtObject) ext->widget) != NULL) {
|
|
Packit |
b099d7 |
if (ve->vendor.mwm_menu)
|
|
Packit |
b099d7 |
XtFree(ve->vendor.mwm_menu);
|
|
Packit |
b099d7 |
if (ve->vendor.input_method_string)
|
|
Packit |
b099d7 |
XtFree(ve->vendor.input_method_string);
|
|
Packit |
b099d7 |
if (ve->vendor.preedit_type_string)
|
|
Packit |
b099d7 |
XtFree(ve->vendor.preedit_type_string);
|
|
Packit |
b099d7 |
if (ve->vendor.button_font_list)
|
|
Packit |
b099d7 |
XmFontListFree(ve->vendor.button_font_list);
|
|
Packit |
b099d7 |
if (ve->vendor.label_font_list)
|
|
Packit |
b099d7 |
XmFontListFree(ve->vendor.label_font_list);
|
|
Packit |
b099d7 |
if (ve->vendor.text_font_list)
|
|
Packit |
b099d7 |
XmFontListFree(ve->vendor.text_font_list);
|
|
Packit |
b099d7 |
if (ve->vendor.im_info)
|
|
Packit |
b099d7 |
_XmImFreeShellData(wid, &ve->vendor.im_info);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmDestroyFocusData(ve->vendor.focus_data);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmRemoveAllCallbacks((InternalCallbackList *)
|
|
Packit |
b099d7 |
&(ve->vendor.realize_callback));
|
|
Packit |
b099d7 |
_XmRemoveAllCallbacks((InternalCallbackList *)
|
|
Packit |
b099d7 |
&(ve->vendor.focus_moved_callback));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtWidgetProc destroy;
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
destroy = xmDesktopClass->core_class.destroy;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
(*destroy) ((Widget) ve);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
XtFree((char *) ve);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
XtFree((char *) ext);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef FIX_1388
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmToolTipConfigTrait ttp; /* ToolTip pointer */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((ttp = XmeTraitGet((XtPointer) wid, XmQTtoolTipConfig)) != NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmeTraitSet((XtPointer) wid, XmQTtoolTipConfig, (XtPointer) NULL);
|
|
Packit |
b099d7 |
XtFree((char *)ttp);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* If all VendorShells have been destroyed, destroy the XmDisplay object
|
|
Packit |
b099d7 |
* in order to reset any per-display and per-screen data. This is
|
|
Packit |
b099d7 |
* necessary, since the application may be about to call XtCloseDisplay.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (!XmIsDisplay (wid)) {
|
|
Packit |
b099d7 |
XmDisplay xmDisplay = (XmDisplay) XmGetXmDisplay (XtDisplay(wid));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmDisplay->display.shellCount -= 1;
|
|
Packit |
b099d7 |
if (xmDisplay->display.shellCount == 0) {
|
|
Packit |
b099d7 |
XmImCloseXIM (wid);
|
|
Packit |
b099d7 |
XtDestroyWidget ((Widget)xmDisplay);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Redisplay(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XEvent *event, /* unused */
|
|
Packit |
b099d7 |
Region region ) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmImRedisplay(wid);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Trait method for specify render table
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
**************************************************************/
|
|
Packit |
b099d7 |
static XmFontList
|
|
Packit |
b099d7 |
GetTable(
|
|
Packit |
b099d7 |
Widget wid,
|
|
Packit |
b099d7 |
XtEnum type)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmWidgetExtData extData;
|
|
Packit |
b099d7 |
XmVendorShellExtObject ve;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((extData = _XmGetWidgetExtData(wid, XmSHELL_EXTENSION)) &&
|
|
Packit |
b099d7 |
(ve = (XmVendorShellExtObject) extData->widget))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
switch(type) {
|
|
Packit |
b099d7 |
case XmLABEL_RENDER_TABLE : return ve->vendor.label_font_list ;
|
|
Packit |
b099d7 |
case XmBUTTON_RENDER_TABLE : return ve->vendor.button_font_list ;
|
|
Packit |
b099d7 |
case XmTEXT_RENDER_TABLE : return ve->vendor.text_font_list ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return NULL ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/****************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Trait method for specify layout direction
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
**************************************************************/
|
|
Packit |
b099d7 |
static XmDirection
|
|
Packit |
b099d7 |
GetDirection(Widget w)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmWidgetExtData extData;
|
|
Packit |
b099d7 |
XmVendorShellExtObject vendorExt;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
extData = _XmGetWidgetExtData(w, XmSHELL_EXTENSION);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if(extData == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
#ifdef DEBUG
|
|
Packit |
b099d7 |
XmeWarning(NULL, "_XmGetWidgetExtData() returned NULL pointer.");
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
return XmRIGHT_TO_LEFT;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
vendorExt = (XmVendorShellExtObject) extData->widget;
|
|
Packit |
b099d7 |
return vendorExt->vendor.layout_direction;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static unsigned char
|
|
Packit |
b099d7 |
GetUnitType(Widget w)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmWidgetExtData extData;
|
|
Packit |
b099d7 |
XmVendorShellExtObject vendorExt;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((extData = _XmGetWidgetExtData(w, XmSHELL_EXTENSION)) &&
|
|
Packit |
b099d7 |
(vendorExt = (XmVendorShellExtObject) extData->widget))
|
|
Packit |
b099d7 |
return vendorExt->vendor.unit_type ;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
/* cannot fetch unit type yet, the VendorShell is
|
|
Packit |
b099d7 |
being created, so force pixel... */
|
|
Packit |
b099d7 |
return XmPIXELS ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
GetColors(Widget w,
|
|
Packit |
b099d7 |
XmAccessColorData color_data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* cannot use XmGetColors to generate the other for
|
|
Packit |
b099d7 |
it ends up in a loop since XmGetColors creates a XmScreen,
|
|
Packit |
b099d7 |
which needs an XmDisplay, which is a VendorS. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
color_data->valueMask = AccessForeground | AccessBackgroundPixel |
|
|
Packit |
b099d7 |
AccessHighlightColor | AccessTopShadowColor |
|
|
Packit |
b099d7 |
AccessBottomShadowColor ;
|
|
Packit |
b099d7 |
color_data->background = w->core.background_pixel;
|
|
Packit |
b099d7 |
color_data->foreground = BlackPixelOfScreen(XtScreen(w)) ;
|
|
Packit |
b099d7 |
color_data->highlight_color =
|
|
Packit |
b099d7 |
color_data->top_shadow_color =
|
|
Packit |
b099d7 |
color_data->bottom_shadow_color = XmUNSPECIFIED_PIXEL ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmGetDefaultDisplay
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
Display *
|
|
Packit |
b099d7 |
_XmGetDefaultDisplay(void)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Display *theDisplay = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
if (_XmDisplayHandle)
|
|
Packit |
b099d7 |
theDisplay = _XmDisplayHandle ;
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
XtWarning(MSG4);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return theDisplay;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmDefaultVisualResources
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmDefaultVisualResources(
|
|
Packit |
b099d7 |
Widget widget )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* Default the Shell visual resources (visual, depth and colormap)
|
|
Packit |
b099d7 |
from the nearest shell. See CR 5459 */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ShellWidget next_shell, this_shell = (ShellWidget)widget;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* go find the next shell ancestor, which might be widget itself
|
|
Packit |
b099d7 |
in the case of a root shell. Looking for the next widget with
|
|
Packit |
b099d7 |
a "visual" resource is too expensive, remember this is going to be done
|
|
Packit |
b099d7 |
99.999999% of the time */
|
|
Packit |
b099d7 |
next_shell = (ShellWidget) this_shell;
|
|
Packit |
b099d7 |
if (XtParent((Widget)next_shell))
|
|
Packit |
b099d7 |
do {
|
|
Packit |
b099d7 |
next_shell = (ShellWidget) XtParent((Widget)next_shell);
|
|
Packit |
b099d7 |
} while (!XtIsShell((Widget)next_shell));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* now default the 3 visual resources */
|
|
Packit |
b099d7 |
if (this_shell->shell.visual == INVALID_VISUAL) {
|
|
Packit |
b099d7 |
/* next_shell might be self, still invalid, but in this case,
|
|
Packit |
b099d7 |
we know it is a root shell: take regular Xt default */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (this_shell == next_shell) {
|
|
Packit |
b099d7 |
this_shell->shell.visual = CopyFromParent ;
|
|
Packit |
b099d7 |
this_shell->core.depth = DefaultDepthOfScreen(XtScreen(widget));
|
|
Packit |
b099d7 |
this_shell->core.colormap = DefaultColormapOfScreen(XtScreen(widget));
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
this_shell->shell.visual = next_shell->shell.visual;
|
|
Packit |
b099d7 |
this_shell->core.depth = next_shell->core.depth;
|
|
Packit |
b099d7 |
this_shell->core.colormap = next_shell->core.colormap;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef DEBUG_GRABS
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
PrintModal(
|
|
Packit |
b099d7 |
XmModalData modal)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf( "log_p: %s, grabber: %s, excl: %d, spring: %d, ve: 0x%x\n",
|
|
Packit |
b099d7 |
modal->wid->core.name,
|
|
Packit |
b099d7 |
(modal->grabber
|
|
Packit |
b099d7 |
? modal->grabber->ext.logicalParent->core.name : "NULL"),
|
|
Packit |
b099d7 |
modal->exclusive,
|
|
Packit |
b099d7 |
modal->springLoaded,
|
|
Packit |
b099d7 |
modal->ve) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
PrintXmGrabs(
|
|
Packit |
b099d7 |
Widget wid)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmDisplay disp = (XmDisplay) XmGetXmDisplay( XtDisplay( wid));
|
|
Packit |
b099d7 |
XmModalData modals = disp->display.modals ;
|
|
Packit |
b099d7 |
Cardinal nmodals = disp->display.numModals ;
|
|
Packit |
b099d7 |
Cardinal cnt = 0 ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
while( cnt < nmodals )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
PrintModal( &(modals[cnt])) ;
|
|
Packit |
b099d7 |
++cnt ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#endif /* DEBUG_GRABS */
|