|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are free software; you can
|
|
Packit |
b099d7 |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
b099d7 |
* Lesser General Public License as published by the Free Software
|
|
Packit |
b099d7 |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
b099d7 |
* any later version.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are distributed in the hope that
|
|
Packit |
b099d7 |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
b099d7 |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
b099d7 |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
b099d7 |
* details.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b099d7 |
* License along with these librararies and programs; if not, write
|
|
Packit |
b099d7 |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
b099d7 |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
#ifdef REV_INFO
|
|
Packit |
b099d7 |
#ifndef lint
|
|
Packit |
b099d7 |
static char rcsid[] = "$TOG: Screen.c /main/16 1997/06/18 17:41:50 samborn $"
|
|
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 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
b099d7 |
#include <config.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <stdio.h>
|
|
Packit |
b099d7 |
#include <X11/Xatom.h>
|
|
Packit |
b099d7 |
#include <Xm/Xm.h> /* To make cpp on Sun happy. CR 5943 */
|
|
Packit |
b099d7 |
#include <Xm/AtomMgr.h>
|
|
Packit |
b099d7 |
#include <Xm/DisplayP.h>
|
|
Packit |
b099d7 |
#include "DragIconI.h"
|
|
Packit |
b099d7 |
#include "HashI.h"
|
|
Packit |
b099d7 |
#include "ImageCachI.h"
|
|
Packit |
b099d7 |
#include "MessagesI.h"
|
|
Packit |
b099d7 |
#include "RepTypeI.h"
|
|
Packit |
b099d7 |
#include "ScreenI.h"
|
|
Packit |
b099d7 |
#include "PixConvI.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define DEFAULT_QUAD_WIDTH 10
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define RESOURCE_DEFAULT (-1)
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define MESSAGE1 _XmMMsgScreen_0000
|
|
Packit |
b099d7 |
#define MESSAGE2 _XmMMsgScreen_0001
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/******** Static Function Declarations ********/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void ClassPartInitialize(
|
|
Packit |
b099d7 |
WidgetClass wc) ;
|
|
Packit |
b099d7 |
static void ClassInitialize( void ) ;
|
|
Packit |
b099d7 |
static void GetUnitFromFont(
|
|
Packit |
b099d7 |
Display *display,
|
|
Packit |
b099d7 |
XFontStruct *fst,
|
|
Packit |
b099d7 |
int *ph_unit,
|
|
Packit |
b099d7 |
int *pv_unit) ;
|
|
Packit |
b099d7 |
static void Initialize(
|
|
Packit |
b099d7 |
Widget requested_widget,
|
|
Packit |
b099d7 |
Widget new_widget,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static Boolean SetValues(
|
|
Packit |
b099d7 |
Widget current,
|
|
Packit |
b099d7 |
Widget requested,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args) ;
|
|
Packit |
b099d7 |
static void Destroy(
|
|
Packit |
b099d7 |
Widget widget) ;
|
|
Packit |
b099d7 |
static void InsertChild(
|
|
Packit |
b099d7 |
Widget wid) ;
|
|
Packit |
b099d7 |
static void DeleteChild(
|
|
Packit |
b099d7 |
Widget wid) ;
|
|
Packit |
b099d7 |
static Boolean MatchPixmap(XmHashKey, XmHashKey) ;
|
|
Packit |
b099d7 |
static XmHashValue HashPixmap(XmHashKey) ;
|
|
Packit |
b099d7 |
static Boolean FreePixmap(XmHashKey k, XtPointer p, XtPointer client_data) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/******** End Static Function Declarations ********/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define Offset(x) (XtOffsetOf(XmScreenRec, x))
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XtResource resources[] = {
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdarkThreshold, XmCDarkThreshold, XmRInt,
|
|
Packit |
b099d7 |
sizeof(int), Offset(screen.darkThreshold),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer)NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNlightThreshold, XmCLightThreshold, XmRInt,
|
|
Packit |
b099d7 |
sizeof(int), Offset(screen.lightThreshold),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer)NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNforegroundThreshold, XmCForegroundThreshold, XmRInt,
|
|
Packit |
b099d7 |
sizeof(int), Offset(screen.foregroundThreshold),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer)NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdefaultNoneCursorIcon, XmCDefaultNoneCursorIcon, XmRWidget,
|
|
Packit |
b099d7 |
sizeof(Widget), Offset(screen.defaultNoneCursorIcon),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer)NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdefaultValidCursorIcon, XmCDefaultValidCursorIcon,
|
|
Packit |
b099d7 |
XmRWidget, sizeof(Widget), Offset(screen.defaultValidCursorIcon),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer)NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdefaultInvalidCursorIcon, XmCDefaultInvalidCursorIcon, XmRWidget,
|
|
Packit |
b099d7 |
sizeof(Widget), Offset(screen.defaultInvalidCursorIcon),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer)NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdefaultMoveCursorIcon, XmCDefaultMoveCursorIcon, XmRWidget,
|
|
Packit |
b099d7 |
sizeof(Widget), Offset(screen.defaultMoveCursorIcon),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer)NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdefaultLinkCursorIcon, XmCDefaultLinkCursorIcon,
|
|
Packit |
b099d7 |
XmRWidget, sizeof(Widget), Offset(screen.defaultLinkCursorIcon),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer)NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdefaultCopyCursorIcon, XmCDefaultCopyCursorIcon, XmRWidget,
|
|
Packit |
b099d7 |
sizeof(Widget), Offset(screen.defaultCopyCursorIcon),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer)NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdefaultSourceCursorIcon, XmCDefaultSourceCursorIcon, XmRWidget,
|
|
Packit |
b099d7 |
sizeof(Widget), Offset(screen.defaultSourceCursorIcon),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer)NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNmenuCursor, XmCCursor, XmRCursor,
|
|
Packit |
b099d7 |
sizeof(Cursor), Offset(screen.menuCursor),
|
|
Packit |
b099d7 |
XmRString, "arrow",
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNunpostBehavior, XmCUnpostBehavior, XmRUnpostBehavior,
|
|
Packit |
b099d7 |
sizeof(unsigned char), Offset(screen.unpostBehavior),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer)XmUNPOST_AND_REPLAY,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNfont, XmCFont, XmRFontStruct,
|
|
Packit |
b099d7 |
sizeof(XFontStruct *), Offset(screen.font_struct),
|
|
Packit |
b099d7 |
XmRString, XmDEFAULT_FONT,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNhorizontalFontUnit, XmCHorizontalFontUnit, XmRInt,
|
|
Packit |
b099d7 |
sizeof(int), Offset(screen.h_unit),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) RESOURCE_DEFAULT,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNverticalFontUnit, XmCVerticalFontUnit, XmRInt,
|
|
Packit |
b099d7 |
sizeof(int), Offset(screen.v_unit),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) RESOURCE_DEFAULT,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNmoveOpaque, XmCMoveOpaque, XmRBoolean,
|
|
Packit |
b099d7 |
sizeof(unsigned char), Offset(screen.moveOpaque),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) False,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNcolorCalculationProc, XmCColorCalculationProc, XmRProc,
|
|
Packit |
b099d7 |
sizeof(XtProc), Offset(screen.color_calc_proc),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNcolorAllocationProc, XmCColorAllocationProc, XmRProc,
|
|
Packit |
b099d7 |
sizeof(XtProc), Offset(screen.color_alloc_proc),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNbitmapConversionModel, XmCBitmapConversionModel,
|
|
Packit |
b099d7 |
XmRBitmapConversionModel,
|
|
Packit |
b099d7 |
sizeof(XtEnum), Offset(screen.bitmap_conversion_model),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) XmMATCH_DEPTH,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNuserData, XmCUserData, XmRPointer,
|
|
Packit |
b099d7 |
sizeof(XtPointer), Offset(screen.user_data),
|
|
Packit |
b099d7 |
XmRPointer, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNinsensitiveStippleBitmap, XmCInsensitiveStippleBitmap,
|
|
Packit |
b099d7 |
XmRNoScalingBitmap,
|
|
Packit |
b099d7 |
sizeof(Pixmap), Offset(screen.insensitive_stipple_bitmap),
|
|
Packit |
b099d7 |
XmRString, XmS50_foreground
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
#ifdef DEFAULT_GLYPH_PIXMAP
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdefaultGlyphPixmap, XmCDefaultGlyphPixmap,
|
|
Packit |
b099d7 |
/* if you move this one as a real pixmap,
|
|
Packit |
b099d7 |
change the code in the buttons as well,
|
|
Packit |
b099d7 |
move the copyplane into a copyarea */
|
|
Packit |
b099d7 |
XmRBitmap,
|
|
Packit |
b099d7 |
sizeof (Pixmap), Offset(screen.default_glyph_pixmap),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) XmUNSPECIFIED_PIXMAP
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#undef Offset
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Class Record
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
***************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/***************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Class Record
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
***************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmBaseClassExtRec baseClassExtRec = {
|
|
Packit |
b099d7 |
NULL,
|
|
Packit |
b099d7 |
NULLQUARK,
|
|
Packit |
b099d7 |
XmBaseClassExtVersion,
|
|
Packit |
b099d7 |
sizeof(XmBaseClassExtRec),
|
|
Packit |
b099d7 |
NULL, /* InitializePrehook */
|
|
Packit |
b099d7 |
NULL, /* SetValuesPrehook */
|
|
Packit |
b099d7 |
NULL, /* InitializePosthook */
|
|
Packit |
b099d7 |
NULL, /* SetValuesPosthook */
|
|
Packit |
b099d7 |
NULL, /* secondaryObjectClass */
|
|
Packit |
b099d7 |
NULL, /* secondaryCreate */
|
|
Packit |
b099d7 |
NULL, /* getSecRes data */
|
|
Packit |
b099d7 |
{ 0 }, /* fastSubclass flags */
|
|
Packit |
b099d7 |
NULL, /* getValuesPrehook */
|
|
Packit |
b099d7 |
NULL, /* getValuesPosthook */
|
|
Packit |
b099d7 |
NULL, /* classPartInitPrehook */
|
|
Packit |
b099d7 |
NULL, /* classPartInitPosthook*/
|
|
Packit |
b099d7 |
NULL, /* ext_resources */
|
|
Packit |
b099d7 |
NULL, /* compiled_ext_resources*/
|
|
Packit |
b099d7 |
0, /* num_ext_resources */
|
|
Packit |
b099d7 |
FALSE, /* use_sub_resources */
|
|
Packit |
b099d7 |
NULL, /* widgetNavigable */
|
|
Packit |
b099d7 |
NULL /* focusChange */
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
externaldef(xmscreenclassrec)
|
|
Packit |
b099d7 |
XmScreenClassRec xmScreenClassRec = {
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(WidgetClass) &coreClassRec, /* superclass */
|
|
Packit |
b099d7 |
"XmScreen", /* class_name */
|
|
Packit |
b099d7 |
sizeof(XmScreenRec), /* 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_notify */
|
|
Packit |
b099d7 |
NULL, /* 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 |
FALSE, /* compress_exposure */
|
|
Packit |
b099d7 |
FALSE, /* compress_enterleave */
|
|
Packit |
b099d7 |
FALSE, /* visible_interest */
|
|
Packit |
b099d7 |
Destroy, /* destroy */
|
|
Packit |
b099d7 |
NULL, /* resize */
|
|
Packit |
b099d7 |
NULL, /* expose */
|
|
Packit |
b099d7 |
SetValues, /* set_values */
|
|
Packit |
b099d7 |
NULL, /* set_values_hook */
|
|
Packit |
b099d7 |
NULL, /* set_values_almost */
|
|
Packit |
b099d7 |
NULL, /* get_values_hook */
|
|
Packit |
b099d7 |
NULL, /* accept_focus */
|
|
Packit |
b099d7 |
XtVersion, /* intrinsics version */
|
|
Packit |
b099d7 |
NULL, /* callback offsets */
|
|
Packit |
b099d7 |
NULL, /* tm_table */
|
|
Packit |
b099d7 |
NULL, /* query_geometry */
|
|
Packit |
b099d7 |
NULL, /* screen_accelerator */
|
|
Packit |
b099d7 |
(XtPointer)&baseClassExtRec, /* extension */
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ /* desktop */
|
|
Packit |
b099d7 |
NULL, /* child_class */
|
|
Packit |
b099d7 |
InsertChild, /* insert_child */
|
|
Packit |
b099d7 |
DeleteChild, /* delete_child */
|
|
Packit |
b099d7 |
NULL, /* extension */
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
externaldef(xmscreenclass) WidgetClass
|
|
Packit |
b099d7 |
xmScreenClass = (WidgetClass) (&xmScreenClassRec);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
externaldef(xmscreenquark) XrmQuark _XmInvalidCursorIconQuark = NULLQUARK;
|
|
Packit |
b099d7 |
externaldef(xmscreenquark) XrmQuark _XmValidCursorIconQuark = NULLQUARK;
|
|
Packit |
b099d7 |
externaldef(xmscreenquark) XrmQuark _XmNoneCursorIconQuark = NULLQUARK;
|
|
Packit |
b099d7 |
externaldef(xmscreenquark) XrmQuark _XmDefaultDragIconQuark = NULLQUARK;
|
|
Packit |
b099d7 |
externaldef(xmscreenquark) XrmQuark _XmMoveCursorIconQuark = NULLQUARK;
|
|
Packit |
b099d7 |
externaldef(xmscreenquark) XrmQuark _XmCopyCursorIconQuark = NULLQUARK;
|
|
Packit |
b099d7 |
externaldef(xmscreenquark) XrmQuark _XmLinkCursorIconQuark = NULLQUARK;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ClassInitialize( void )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
baseClassExtRec.record_type = XmQmotif;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmInvalidCursorIconQuark = XrmPermStringToQuark("defaultInvalidCursorIcon");
|
|
Packit |
b099d7 |
_XmValidCursorIconQuark = XrmPermStringToQuark("defaultValidCursorIcon");
|
|
Packit |
b099d7 |
_XmNoneCursorIconQuark = XrmPermStringToQuark("defaultNoneCursorIcon");
|
|
Packit |
b099d7 |
_XmDefaultDragIconQuark = XrmPermStringToQuark("defaultSourceCursorIcon");
|
|
Packit |
b099d7 |
_XmMoveCursorIconQuark = XrmPermStringToQuark("defaultMoveCursorIcon");
|
|
Packit |
b099d7 |
_XmCopyCursorIconQuark = XrmPermStringToQuark("defaultCopyCursorIcon");
|
|
Packit |
b099d7 |
_XmLinkCursorIconQuark = XrmPermStringToQuark("defaultLinkCursorIcon");
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ClassPartInitialize(
|
|
Packit |
b099d7 |
WidgetClass wc )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmFastSubclassInit(wc, XmSCREEN_BIT);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* GetUnitFromFont
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
GetUnitFromFont(
|
|
Packit |
b099d7 |
Display * display,
|
|
Packit |
b099d7 |
XFontStruct * fst,
|
|
Packit |
b099d7 |
int * ph_unit,
|
|
Packit |
b099d7 |
int * pv_unit)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
enum { XmAAVERAGE_WIDTH, XmAPIXEL_SIZE, XmARESOLUTION_Y, NUM_ATOMS };
|
|
Packit |
b099d7 |
static char *atom_names[] = {
|
|
Packit |
b099d7 |
XmIAVERAGE_WIDTH, XmIPIXEL_SIZE, XmIRESOLUTION_Y };
|
|
Packit |
b099d7 |
Atom atoms[XtNumber(atom_names)];
|
|
Packit |
b099d7 |
unsigned long pixel_s, avg_w, point_s, resolution_y;
|
|
Packit |
b099d7 |
unsigned long font_unit_return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (fst) {
|
|
Packit |
b099d7 |
assert(XtNumber(atom_names) == NUM_ATOMS);
|
|
Packit |
b099d7 |
XInternAtoms(display, atom_names, XtNumber(atom_names), TRUE, atoms);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Horizontal units */
|
|
Packit |
b099d7 |
if (ph_unit) {
|
|
Packit |
b099d7 |
if (atoms[XmAAVERAGE_WIDTH] &&
|
|
Packit |
b099d7 |
XGetFontProperty(fst, atoms[XmAAVERAGE_WIDTH], &avg_w)) {
|
|
Packit |
b099d7 |
*ph_unit = (int) ((float) (avg_w / 10) + 0.5) ;
|
|
Packit |
b099d7 |
} else if (XGetFontProperty (fst, XA_QUAD_WIDTH, &font_unit_return)){
|
|
Packit |
b099d7 |
*ph_unit = font_unit_return ;
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
*ph_unit = (int) ((fst->min_bounds.width +
|
|
Packit |
b099d7 |
fst-> max_bounds.width) / 2.3) + 0.5;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Vertical units */
|
|
Packit |
b099d7 |
if (pv_unit) {
|
|
Packit |
b099d7 |
if (XGetFontProperty(fst, atoms[XmAPIXEL_SIZE], &pixel_s)) {
|
|
Packit |
b099d7 |
*pv_unit = (int) (((float) pixel_s) / 1.8) + 0.5;
|
|
Packit |
b099d7 |
} else if ((XGetFontProperty(fst, XA_POINT_SIZE, &point_s)) &&
|
|
Packit |
b099d7 |
(XGetFontProperty(fst, atoms[XmARESOLUTION_Y],
|
|
Packit |
b099d7 |
&resolution_y))) {
|
|
Packit |
b099d7 |
float ps, ry, tmp;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ps = point_s;
|
|
Packit |
b099d7 |
ry = resolution_y;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
tmp = (ps * ry) / 1400.0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*pv_unit = (int) (tmp + 0.5) ;
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
*pv_unit = (int) ((float) (fst->max_bounds.ascent +
|
|
Packit |
b099d7 |
fst->max_bounds.descent) / 2.2) + 0.5;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
} else { /* no X fontstruct */
|
|
Packit |
b099d7 |
if (ph_unit) *ph_unit = DEFAULT_QUAD_WIDTH ;
|
|
Packit |
b099d7 |
if (pv_unit) *pv_unit = DEFAULT_QUAD_WIDTH ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ScreenInitialize
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Initialize(
|
|
Packit |
b099d7 |
Widget requested_widget,
|
|
Packit |
b099d7 |
Widget new_widget,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen = (XmScreen)new_widget;
|
|
Packit |
b099d7 |
Display *display = XtDisplay(new_widget);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmScreen->screen.screenInfo = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XQueryBestCursor(display,
|
|
Packit |
b099d7 |
RootWindowOfScreen(XtScreen(xmScreen)),
|
|
Packit |
b099d7 |
1024, 1024,
|
|
Packit |
b099d7 |
&xmScreen->screen.maxCursorWidth,
|
|
Packit |
b099d7 |
&xmScreen->screen.maxCursorHeight);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmScreen->screen.nullCursor = None;
|
|
Packit |
b099d7 |
xmScreen->screen.cursorCache = NULL;
|
|
Packit |
b099d7 |
xmScreen->screen.scratchPixmaps = (XtPointer)
|
|
Packit |
b099d7 |
_XmAllocHashTable(20, MatchPixmap, HashPixmap);
|
|
Packit |
b099d7 |
xmScreen->screen.inUsePixmaps = (XtPointer)
|
|
Packit |
b099d7 |
_XmAllocHashTable(20, NULL, NULL);
|
|
Packit |
b099d7 |
xmScreen->screen.xmStateCursorIcon = NULL;
|
|
Packit |
b099d7 |
xmScreen->screen.xmMoveCursorIcon = NULL;
|
|
Packit |
b099d7 |
xmScreen->screen.xmCopyCursorIcon = NULL;
|
|
Packit |
b099d7 |
xmScreen->screen.xmLinkCursorIcon = NULL;
|
|
Packit |
b099d7 |
xmScreen->screen.xmSourceCursorIcon = NULL;
|
|
Packit |
b099d7 |
xmScreen->screen.mwmPresent = XmIsMotifWMRunning( new_widget) ;
|
|
Packit |
b099d7 |
xmScreen->screen.numReparented = 0;
|
|
Packit |
b099d7 |
xmScreen->desktop.num_children = 0;
|
|
Packit |
b099d7 |
xmScreen->desktop.children = NULL;
|
|
Packit |
b099d7 |
xmScreen->desktop.num_slots = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if(!XmRepTypeValidValue(XmRID_UNPOST_BEHAVIOR,
|
|
Packit |
b099d7 |
xmScreen->screen.unpostBehavior,
|
|
Packit |
b099d7 |
new_widget)) {
|
|
Packit |
b099d7 |
xmScreen->screen.unpostBehavior = XmUNPOST_AND_REPLAY;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* font unit stuff, priority to actual unit values, if they haven't
|
|
Packit |
b099d7 |
been set yet, compute from the font, otherwise, stay unchanged */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (xmScreen->screen.h_unit == RESOURCE_DEFAULT)
|
|
Packit |
b099d7 |
GetUnitFromFont(display, xmScreen->screen.font_struct,
|
|
Packit |
b099d7 |
&xmScreen->screen.h_unit, NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (xmScreen->screen.v_unit == RESOURCE_DEFAULT)
|
|
Packit |
b099d7 |
GetUnitFromFont(display, xmScreen->screen.font_struct,
|
|
Packit |
b099d7 |
NULL, &xmScreen->screen.v_unit);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmScreen->screen.screenInfo = (XtPointer) XtNew(XmScreenInfo);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
((XmScreenInfo *)(xmScreen->screen.screenInfo))->menu_state =
|
|
Packit |
b099d7 |
(XtPointer)NULL;
|
|
Packit |
b099d7 |
((XmScreenInfo *)(xmScreen->screen.screenInfo))->destroyCallbackAdded =
|
|
Packit |
b099d7 |
False;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef DEFAULT_GLYPH_PIXMAP
|
|
Packit |
b099d7 |
if (xmScreen->screen.default_glyph_pixmap != XmUNSPECIFIED_PIXMAP) {
|
|
Packit |
b099d7 |
(void) XmeGetPixmapData(XtScreen(new_widget),
|
|
Packit |
b099d7 |
xmScreen->screen.default_glyph_pixmap,
|
|
Packit |
b099d7 |
NULL, NULL, NULL, NULL, NULL, NULL,
|
|
Packit |
b099d7 |
&(xmScreen->screen.default_glyph_pixmap_width),
|
|
Packit |
b099d7 |
&(xmScreen->screen.default_glyph_pixmap_height));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SetValues
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
SetValues(
|
|
Packit |
b099d7 |
Widget current,
|
|
Packit |
b099d7 |
Widget requested,
|
|
Packit |
b099d7 |
Widget new_w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal *num_args )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen newScr = (XmScreen)new_w;
|
|
Packit |
b099d7 |
XmScreen oldScr = (XmScreen)current;
|
|
Packit |
b099d7 |
Display * display = XtDisplay( new_w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if(!XmRepTypeValidValue(XmRID_UNPOST_BEHAVIOR,
|
|
Packit |
b099d7 |
newScr->screen.unpostBehavior, new_w)) {
|
|
Packit |
b099d7 |
newScr->screen.unpostBehavior = XmUNPOST_AND_REPLAY;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* If we are setting a default cursor icon, verify that
|
|
Packit |
b099d7 |
* it has the same screen as the new XmScreen.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* defaultNoneCursorIcon */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (newScr->screen.defaultNoneCursorIcon !=
|
|
Packit |
b099d7 |
oldScr->screen.defaultNoneCursorIcon &&
|
|
Packit |
b099d7 |
newScr->screen.defaultNoneCursorIcon != NULL &&
|
|
Packit |
b099d7 |
XtScreenOfObject (XtParent (newScr->screen.defaultNoneCursorIcon)) !=
|
|
Packit |
b099d7 |
XtScreen (newScr)) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmeWarning( (Widget) new_w, MESSAGE1);
|
|
Packit |
b099d7 |
newScr->screen.defaultNoneCursorIcon =
|
|
Packit |
b099d7 |
oldScr->screen.defaultNoneCursorIcon;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* defaultValidCursorIcon */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (newScr->screen.defaultValidCursorIcon !=
|
|
Packit |
b099d7 |
oldScr->screen.defaultValidCursorIcon &&
|
|
Packit |
b099d7 |
newScr->screen.defaultValidCursorIcon != NULL &&
|
|
Packit |
b099d7 |
XtScreenOfObject (XtParent (newScr->screen.defaultValidCursorIcon)) !=
|
|
Packit |
b099d7 |
XtScreen (newScr)) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmeWarning( (Widget) new_w, MESSAGE1);
|
|
Packit |
b099d7 |
newScr->screen.defaultValidCursorIcon =
|
|
Packit |
b099d7 |
oldScr->screen.defaultValidCursorIcon;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* defaultInvalidCursorIcon */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (newScr->screen.defaultInvalidCursorIcon !=
|
|
Packit |
b099d7 |
oldScr->screen.defaultInvalidCursorIcon &&
|
|
Packit |
b099d7 |
newScr->screen.defaultInvalidCursorIcon != NULL &&
|
|
Packit |
b099d7 |
XtScreenOfObject (XtParent (newScr->screen.defaultInvalidCursorIcon)) !=
|
|
Packit |
b099d7 |
XtScreen (newScr)) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmeWarning( (Widget) new_w, MESSAGE1);
|
|
Packit |
b099d7 |
newScr->screen.defaultInvalidCursorIcon =
|
|
Packit |
b099d7 |
oldScr->screen.defaultInvalidCursorIcon;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* defaultMoveCursorIcon */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (newScr->screen.defaultMoveCursorIcon !=
|
|
Packit |
b099d7 |
oldScr->screen.defaultMoveCursorIcon &&
|
|
Packit |
b099d7 |
newScr->screen.defaultMoveCursorIcon != NULL &&
|
|
Packit |
b099d7 |
XtScreenOfObject (XtParent (newScr->screen.defaultMoveCursorIcon)) !=
|
|
Packit |
b099d7 |
XtScreen (newScr)) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmeWarning( (Widget) new_w, MESSAGE1);
|
|
Packit |
b099d7 |
newScr->screen.defaultMoveCursorIcon =
|
|
Packit |
b099d7 |
oldScr->screen.defaultMoveCursorIcon;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* defaultCopyCursorIcon */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (newScr->screen.defaultCopyCursorIcon !=
|
|
Packit |
b099d7 |
oldScr->screen.defaultCopyCursorIcon &&
|
|
Packit |
b099d7 |
newScr->screen.defaultCopyCursorIcon != NULL &&
|
|
Packit |
b099d7 |
XtScreenOfObject (XtParent (newScr->screen.defaultCopyCursorIcon)) !=
|
|
Packit |
b099d7 |
XtScreen (newScr)) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmeWarning( (Widget) new_w, MESSAGE1);
|
|
Packit |
b099d7 |
newScr->screen.defaultCopyCursorIcon =
|
|
Packit |
b099d7 |
oldScr->screen.defaultCopyCursorIcon;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* defaultLinkCursorIcon */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (newScr->screen.defaultLinkCursorIcon !=
|
|
Packit |
b099d7 |
oldScr->screen.defaultLinkCursorIcon &&
|
|
Packit |
b099d7 |
newScr->screen.defaultLinkCursorIcon != NULL &&
|
|
Packit |
b099d7 |
XtScreenOfObject (XtParent (newScr->screen.defaultLinkCursorIcon)) !=
|
|
Packit |
b099d7 |
XtScreen (newScr)) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmeWarning( (Widget) new_w, MESSAGE1);
|
|
Packit |
b099d7 |
newScr->screen.defaultLinkCursorIcon =
|
|
Packit |
b099d7 |
oldScr->screen.defaultLinkCursorIcon;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* defaultSourceCursorIcon */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (newScr->screen.defaultSourceCursorIcon !=
|
|
Packit |
b099d7 |
oldScr->screen.defaultSourceCursorIcon &&
|
|
Packit |
b099d7 |
newScr->screen.defaultSourceCursorIcon != NULL &&
|
|
Packit |
b099d7 |
XtScreenOfObject (XtParent (newScr->screen.defaultSourceCursorIcon)) !=
|
|
Packit |
b099d7 |
XtScreen (newScr)) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmeWarning( (Widget) new_w, MESSAGE1);
|
|
Packit |
b099d7 |
newScr->screen.defaultSourceCursorIcon =
|
|
Packit |
b099d7 |
oldScr->screen.defaultSourceCursorIcon;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* font unit stuff, priority to actual unit values, if the
|
|
Packit |
b099d7 |
font has changed but not the unit values, report the change,
|
|
Packit |
b099d7 |
otherwise, use the unit value - i.e do nothing */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (newScr->screen.font_struct->fid !=
|
|
Packit |
b099d7 |
oldScr->screen.font_struct->fid) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (newScr->screen.h_unit == oldScr->screen.h_unit) {
|
|
Packit |
b099d7 |
GetUnitFromFont(display, newScr->screen.font_struct,
|
|
Packit |
b099d7 |
&newScr->screen.h_unit, NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (newScr->screen.v_unit == oldScr->screen.v_unit) {
|
|
Packit |
b099d7 |
GetUnitFromFont(display, newScr->screen.font_struct,
|
|
Packit |
b099d7 |
NULL, &newScr->screen.v_unit);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return FALSE ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Destroy
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Destroy(
|
|
Packit |
b099d7 |
Widget widget )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen = (XmScreen)widget;
|
|
Packit |
b099d7 |
XmDragCursorCache prevCache, cache;
|
|
Packit |
b099d7 |
XmHashTable tab;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* destroy any default icons created by Xm */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (xmScreen->screen.xmStateCursorIcon != NULL) {
|
|
Packit |
b099d7 |
_XmDestroyDefaultDragIcon (xmScreen->screen.xmStateCursorIcon);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (xmScreen->screen.xmMoveCursorIcon != NULL) {
|
|
Packit |
b099d7 |
_XmDestroyDefaultDragIcon (xmScreen->screen.xmMoveCursorIcon);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (xmScreen->screen.xmCopyCursorIcon != NULL) {
|
|
Packit |
b099d7 |
_XmDestroyDefaultDragIcon (xmScreen->screen.xmCopyCursorIcon);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (xmScreen->screen.xmLinkCursorIcon != NULL) {
|
|
Packit |
b099d7 |
_XmDestroyDefaultDragIcon (xmScreen->screen.xmLinkCursorIcon);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (xmScreen->screen.xmSourceCursorIcon != NULL) {
|
|
Packit |
b099d7 |
_XmDestroyDefaultDragIcon (xmScreen->screen.xmSourceCursorIcon);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((char *) xmScreen->desktop.children);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* free the cursorCache and the pixmapCache */
|
|
Packit |
b099d7 |
cache = xmScreen->screen.cursorCache;
|
|
Packit |
b099d7 |
while(cache) {
|
|
Packit |
b099d7 |
prevCache = cache;
|
|
Packit |
b099d7 |
if (cache->cursor)
|
|
Packit |
b099d7 |
XFreeCursor(XtDisplay(xmScreen), cache->cursor);
|
|
Packit |
b099d7 |
cache = cache->next;
|
|
Packit |
b099d7 |
XtFree((char *)prevCache);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
tab = (XmHashTable) xmScreen->screen.scratchPixmaps;
|
|
Packit |
b099d7 |
_XmMapHashTable(tab, FreePixmap, xmScreen);
|
|
Packit |
b099d7 |
_XmFreeHashTable(tab);
|
|
Packit |
b099d7 |
_XmFreeHashTable((XmHashTable) xmScreen->screen.inUsePixmaps);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((char *) xmScreen->screen.screenInfo);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* need to remove pixmap and GC related to this screen */
|
|
Packit |
b099d7 |
_XmCleanPixmapCache (XtScreen(widget), NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
InsertChild(
|
|
Packit |
b099d7 |
Widget wid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmDesktopObject w = (XmDesktopObject) wid ;
|
|
Packit |
b099d7 |
register Cardinal position;
|
|
Packit |
b099d7 |
register Cardinal i;
|
|
Packit |
b099d7 |
register XmScreen cw;
|
|
Packit |
b099d7 |
register WidgetList children;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cw = (XmScreen) w->desktop.parent;
|
|
Packit |
b099d7 |
children = cw->desktop.children;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
position = cw->desktop.num_children;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (cw->desktop.num_children == cw->desktop.num_slots) {
|
|
Packit |
b099d7 |
/* Allocate more space */
|
|
Packit |
b099d7 |
cw->desktop.num_slots += (cw->desktop.num_slots / 2) + 2;
|
|
Packit |
b099d7 |
cw->desktop.children = children =
|
|
Packit |
b099d7 |
(WidgetList) XtRealloc((char *) children,
|
|
Packit |
b099d7 |
(unsigned) (cw->desktop.num_slots) * sizeof(Widget));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/* Ripple children up one space from "position" */
|
|
Packit |
b099d7 |
for (i = cw->desktop.num_children; i > position; i--) {
|
|
Packit |
b099d7 |
children[i] = children[i-1];
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
children[position] = (Widget)w;
|
|
Packit |
b099d7 |
cw->desktop.num_children++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
DeleteChild(
|
|
Packit |
b099d7 |
Widget wid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmDesktopObject w = (XmDesktopObject) wid ;
|
|
Packit |
b099d7 |
register Cardinal position;
|
|
Packit |
b099d7 |
register Cardinal i;
|
|
Packit |
b099d7 |
register XmScreen cw;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cw = (XmScreen) w->desktop.parent;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (position = 0; position < cw->desktop.num_children; position++) {
|
|
Packit |
b099d7 |
if (cw->desktop.children[position] == (Widget)w) {
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (position == cw->desktop.num_children) return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Ripple children down one space from "position" */
|
|
Packit |
b099d7 |
cw->desktop.num_children--;
|
|
Packit |
b099d7 |
for (i = position; i < cw->desktop.num_children; i++) {
|
|
Packit |
b099d7 |
cw->desktop.children[i] = cw->desktop.children[i+1];
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmScreenRemoveFromCursorCache
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Mark any cursor cache reference to the specified icon as deallocated.
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmScreenRemoveFromCursorCache(
|
|
Packit |
b099d7 |
XmDragIconObject icon )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen = (XmScreen) XmGetXmScreen(XtScreen(icon));
|
|
Packit |
b099d7 |
XmDragCursorCache ptr = xmScreen->screen.cursorCache;
|
|
Packit |
b099d7 |
XmDragCursorCache previous = xmScreen->screen.cursorCache;
|
|
Packit |
b099d7 |
XmDragCursorCache next;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
while (ptr) {
|
|
Packit |
b099d7 |
next = ptr->next;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((ptr->sourceIcon == icon) ||
|
|
Packit |
b099d7 |
(ptr->stateIcon == icon) ||
|
|
Packit |
b099d7 |
(ptr->opIcon == icon))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (ptr->cursor)
|
|
Packit |
b099d7 |
XFreeCursor (XtDisplay(icon), ptr->cursor);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( xmScreen->screen.cursorCache == ptr )
|
|
Packit |
b099d7 |
xmScreen->screen.cursorCache = ptr->next;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
previous->next = ptr->next;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree ((char*)ptr);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
previous = ptr;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ptr = next;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
FreePixmap(XmHashKey k, XtPointer p, XtPointer client_data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen = (XmScreen) client_data;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtFree((char*) k);
|
|
Packit |
b099d7 |
XFreePixmap(XtDisplay(xmScreen), (Pixmap) p);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return False;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmScreenGetOperationIcon ()
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Returns one of the three XmScreen operation cursor types. These aren't
|
|
Packit |
b099d7 |
* created ahead of time in order to let the client specify its own.
|
|
Packit |
b099d7 |
* If they haven't by now (a drag is in process) then we create our
|
|
Packit |
b099d7 |
* own. The name of the OperatonIcon can cause the built-in cursor data
|
|
Packit |
b099d7 |
* to get loaded in (if not specified in the resource file).
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmDragIconObject
|
|
Packit |
b099d7 |
_XmScreenGetOperationIcon(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
unsigned int operation )
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
unsigned char operation )
|
|
Packit |
b099d7 |
#endif /* NeedWidePrototypes */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen = (XmScreen) XmGetXmScreen(XtScreenOfObject(w));
|
|
Packit |
b099d7 |
XrmQuark nameQuark = NULLQUARK;
|
|
Packit |
b099d7 |
XmDragIconObject *ptr = NULL;
|
|
Packit |
b099d7 |
XmDragIconObject *pt2 = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch ((int) operation) {
|
|
Packit |
b099d7 |
case XmDROP_MOVE:
|
|
Packit |
b099d7 |
ptr = &xmScreen->screen.defaultMoveCursorIcon;
|
|
Packit |
b099d7 |
pt2 = &xmScreen->screen.xmMoveCursorIcon;
|
|
Packit |
b099d7 |
nameQuark = _XmMoveCursorIconQuark;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case XmDROP_COPY:
|
|
Packit |
b099d7 |
ptr = &xmScreen->screen.defaultCopyCursorIcon;
|
|
Packit |
b099d7 |
pt2 = &xmScreen->screen.xmCopyCursorIcon;
|
|
Packit |
b099d7 |
nameQuark = _XmCopyCursorIconQuark;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case XmDROP_LINK:
|
|
Packit |
b099d7 |
ptr = &xmScreen->screen.defaultLinkCursorIcon;
|
|
Packit |
b099d7 |
pt2 = &xmScreen->screen.xmLinkCursorIcon;
|
|
Packit |
b099d7 |
nameQuark = _XmLinkCursorIconQuark;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
return (NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (*ptr == NULL) {
|
|
Packit |
b099d7 |
if (*pt2 == NULL) {
|
|
Packit |
b099d7 |
*pt2 = (XmDragIconObject)
|
|
Packit |
b099d7 |
XmCreateDragIcon ((Widget) xmScreen,
|
|
Packit |
b099d7 |
XrmQuarkToString(nameQuark), NULL, 0);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
*ptr = *pt2;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return *ptr;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmScreenGetStateIcon ()
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Returns one of the three XmScreen state cursor types. These aren't
|
|
Packit |
b099d7 |
* created ahead of time in order to let the client specify its own.
|
|
Packit |
b099d7 |
* If they haven't by now (a drag is in process) then we create our
|
|
Packit |
b099d7 |
* own. The name of the StateIcon can cause the built-in cursor data
|
|
Packit |
b099d7 |
* to get loaded in (if not specified in the resource file).
|
|
Packit |
b099d7 |
* The default state cursors are the same XmDragIcon object.
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmDragIconObject
|
|
Packit |
b099d7 |
_XmScreenGetStateIcon(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
unsigned int state )
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
unsigned char state )
|
|
Packit |
b099d7 |
#endif /* NeedWidePrototypes */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen = (XmScreen) XmGetXmScreen(XtScreenOfObject(w));
|
|
Packit |
b099d7 |
XrmQuark nameQuark = NULLQUARK;
|
|
Packit |
b099d7 |
XmDragIconObject icon = NULL;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch(state) {
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
case XmNO_DROP_SITE:
|
|
Packit |
b099d7 |
icon = xmScreen->screen.defaultNoneCursorIcon;
|
|
Packit |
b099d7 |
nameQuark = _XmNoneCursorIconQuark;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case XmVALID_DROP_SITE:
|
|
Packit |
b099d7 |
icon = xmScreen->screen.defaultValidCursorIcon;
|
|
Packit |
b099d7 |
nameQuark = _XmValidCursorIconQuark;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case XmINVALID_DROP_SITE:
|
|
Packit |
b099d7 |
icon = xmScreen->screen.defaultInvalidCursorIcon;
|
|
Packit |
b099d7 |
nameQuark = _XmInvalidCursorIconQuark;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (icon == NULL) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* We need to create the default state icons.
|
|
Packit |
b099d7 |
* Set all uncreated state icons to the same XmDragIcon object.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (xmScreen->screen.xmStateCursorIcon == NULL) {
|
|
Packit |
b099d7 |
xmScreen->screen.xmStateCursorIcon = (XmDragIconObject)
|
|
Packit |
b099d7 |
XmCreateDragIcon ((Widget) xmScreen,
|
|
Packit |
b099d7 |
XrmQuarkToString(nameQuark),
|
|
Packit |
b099d7 |
NULL, 0);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
icon = xmScreen->screen.xmStateCursorIcon;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (xmScreen->screen.defaultNoneCursorIcon == NULL) {
|
|
Packit |
b099d7 |
xmScreen->screen.defaultNoneCursorIcon = icon;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (xmScreen->screen.defaultValidCursorIcon == NULL) {
|
|
Packit |
b099d7 |
xmScreen->screen.defaultValidCursorIcon = icon;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (xmScreen->screen.defaultInvalidCursorIcon == NULL) {
|
|
Packit |
b099d7 |
xmScreen->screen.defaultInvalidCursorIcon = icon;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return (icon);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmScreenGetSourceIcon ()
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Returns the XmScreen source cursor types. This isn't created ahead of
|
|
Packit |
b099d7 |
* time in order to let the client specify its own. If it hasn't by now
|
|
Packit |
b099d7 |
* (a drag is in process) then we create our own.
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmDragIconObject
|
|
Packit |
b099d7 |
_XmScreenGetSourceIcon(
|
|
Packit |
b099d7 |
Widget w )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen = (XmScreen) XmGetXmScreen(XtScreenOfObject(w));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (xmScreen->screen.defaultSourceCursorIcon == NULL) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (xmScreen->screen.xmSourceCursorIcon == NULL) {
|
|
Packit |
b099d7 |
xmScreen->screen.xmSourceCursorIcon = (XmDragIconObject)
|
|
Packit |
b099d7 |
XmCreateDragIcon ((Widget) xmScreen,
|
|
Packit |
b099d7 |
XrmQuarkToString(_XmDefaultDragIconQuark),
|
|
Packit |
b099d7 |
NULL, 0);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
xmScreen->screen.defaultSourceCursorIcon =
|
|
Packit |
b099d7 |
xmScreen->screen.xmSourceCursorIcon;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return xmScreen->screen.defaultSourceCursorIcon;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmAllocScratchPixmap
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
MatchPixmap(XmHashKey k1, XmHashKey k2)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScratchPixmapKey key1 = (XmScratchPixmapKey) k1;
|
|
Packit |
b099d7 |
XmScratchPixmapKey key2 = (XmScratchPixmapKey) k2;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(key1 -> height == key2 -> height &&
|
|
Packit |
b099d7 |
key1 -> width == key2 -> width &&
|
|
Packit |
b099d7 |
key1 -> depth == key2 -> depth);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmHashValue
|
|
Packit |
b099d7 |
HashPixmap(XmHashKey k)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScratchPixmapKey key = (XmScratchPixmapKey) k;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(key -> height + key -> width + key -> depth);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Pixmap
|
|
Packit |
b099d7 |
_XmAllocScratchPixmap(
|
|
Packit |
b099d7 |
XmScreen xmScreen,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
unsigned int depth,
|
|
Packit |
b099d7 |
int width,
|
|
Packit |
b099d7 |
int height )
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
Cardinal depth,
|
|
Packit |
b099d7 |
Dimension width,
|
|
Packit |
b099d7 |
Dimension height )
|
|
Packit |
b099d7 |
#endif /* NeedWidePrototypes */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmHashTable scratchTable =
|
|
Packit |
b099d7 |
(XmHashTable) xmScreen->screen.scratchPixmaps;
|
|
Packit |
b099d7 |
XmHashTable inUseTable =
|
|
Packit |
b099d7 |
(XmHashTable) xmScreen->screen.inUsePixmaps;
|
|
Packit |
b099d7 |
Pixmap scratchPixmap = None;
|
|
Packit |
b099d7 |
XmScratchPixmapKeyRec key;
|
|
Packit |
b099d7 |
XmScratchPixmapKey returned_key;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
key.height = height;
|
|
Packit |
b099d7 |
key.width = width;
|
|
Packit |
b099d7 |
key.depth = depth;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
scratchPixmap = (Pixmap) _XmGetHashEntry(scratchTable, &key);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (scratchPixmap != None) {
|
|
Packit |
b099d7 |
/* remove from free table */
|
|
Packit |
b099d7 |
returned_key = (XmScratchPixmapKey)
|
|
Packit |
b099d7 |
_XmRemoveHashEntry(scratchTable, &key);
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
returned_key = XtNew(XmScratchPixmapKeyRec);
|
|
Packit |
b099d7 |
returned_key->width = width;
|
|
Packit |
b099d7 |
returned_key->height = height;
|
|
Packit |
b099d7 |
returned_key->depth = depth;
|
|
Packit |
b099d7 |
scratchPixmap = XCreatePixmap (XtDisplay(xmScreen),
|
|
Packit |
b099d7 |
RootWindowOfScreen(XtScreen(xmScreen)),
|
|
Packit |
b099d7 |
width, height,
|
|
Packit |
b099d7 |
depth);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Place key in inUse table */
|
|
Packit |
b099d7 |
_XmAddHashEntry(inUseTable, (XmHashKey) scratchPixmap, returned_key);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
return(scratchPixmap);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmFreeScratchPixmap
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
_XmFreeScratchPixmap(
|
|
Packit |
b099d7 |
XmScreen xmScreen,
|
|
Packit |
b099d7 |
Pixmap pixmap )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmHashTable scratchTable = (XmHashTable) xmScreen->screen.scratchPixmaps;
|
|
Packit |
b099d7 |
XmHashTable inUseTable = (XmHashTable) xmScreen->screen.inUsePixmaps;
|
|
Packit |
b099d7 |
XmScratchPixmapKey returned_key;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
returned_key = (XmScratchPixmapKey)
|
|
Packit |
b099d7 |
_XmGetHashEntry(inUseTable, (XmHashKey) pixmap);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (returned_key == NULL) {
|
|
Packit |
b099d7 |
/* Bad, this pixmap wasn't in the cache, return */
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmRemoveHashEntry(inUseTable, (XmHashKey) pixmap);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAddHashEntry(scratchTable, returned_key, (XtPointer) pixmap);
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmGetDragCursorCachePtr ()
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmDragCursorCache *
|
|
Packit |
b099d7 |
_XmGetDragCursorCachePtr(
|
|
Packit |
b099d7 |
XmScreen xmScreen )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return &xmScreen->screen.cursorCache;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* XmeQueryBestCursorSize()
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
XmeQueryBestCursorSize(
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
Dimension *width,
|
|
Packit |
b099d7 |
Dimension *height )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen;
|
|
Packit |
b099d7 |
_XmWidgetToAppContext(w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
xmScreen = (XmScreen) XmGetXmScreen(XtScreenOfObject(w));
|
|
Packit |
b099d7 |
*width = (Dimension)xmScreen->screen.maxCursorWidth;
|
|
Packit |
b099d7 |
*height = (Dimension)xmScreen->screen.maxCursorHeight;
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmConst char nullBits[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
0x00, 0x00, 0x00, 0x00,
|
|
Packit |
b099d7 |
0x00, 0x00, 0x00, 0x00,
|
|
Packit |
b099d7 |
0x00, 0x00, 0x00, 0x00,
|
|
Packit |
b099d7 |
0x00, 0x00, 0x00, 0x00,
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* XmeGetNullCursor ()
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cursor
|
|
Packit |
b099d7 |
XmeGetNullCursor(
|
|
Packit |
b099d7 |
Widget w )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen;
|
|
Packit |
b099d7 |
Pixmap pixmap;
|
|
Packit |
b099d7 |
Cursor cursor;
|
|
Packit |
b099d7 |
XColor foreground;
|
|
Packit |
b099d7 |
XColor background;
|
|
Packit |
b099d7 |
_XmWidgetToAppContext(w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
xmScreen = (XmScreen) XmGetXmScreen(XtScreenOfObject(w));
|
|
Packit |
b099d7 |
if (xmScreen->screen.nullCursor == None) {
|
|
Packit |
b099d7 |
foreground.pixel =
|
|
Packit |
b099d7 |
background.pixel = 0;
|
|
Packit |
b099d7 |
pixmap =
|
|
Packit |
b099d7 |
XCreatePixmapFromBitmapData(XtDisplayOfObject(w),
|
|
Packit |
b099d7 |
RootWindowOfScreen(XtScreenOfObject(w)),
|
|
Packit |
b099d7 |
(char*)nullBits,
|
|
Packit |
b099d7 |
4, 4,
|
|
Packit |
b099d7 |
0, 0,
|
|
Packit |
b099d7 |
1);
|
|
Packit |
b099d7 |
cursor =
|
|
Packit |
b099d7 |
XCreatePixmapCursor(XtDisplayOfObject(w),
|
|
Packit |
b099d7 |
pixmap,
|
|
Packit |
b099d7 |
pixmap,
|
|
Packit |
b099d7 |
&foreground, &background,
|
|
Packit |
b099d7 |
0, 0);
|
|
Packit |
b099d7 |
XFreePixmap(XtDisplayOfObject(w), pixmap);
|
|
Packit |
b099d7 |
xmScreen->screen.nullCursor = cursor;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
cursor = xmScreen->screen.nullCursor;
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return cursor;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* The following set of functions support the menu cursor functionality.
|
|
Packit |
b099d7 |
* They have moved from MenuUtil to here.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Obsolete global per-display menu cursor manipulation functions */
|
|
Packit |
b099d7 |
/* Programs have to use XtSet/GetValues on the XmScreen object instead */
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
XmSetMenuCursor(
|
|
Packit |
b099d7 |
Display *display,
|
|
Packit |
b099d7 |
Cursor cursorId )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen;
|
|
Packit |
b099d7 |
Screen *scr;
|
|
Packit |
b099d7 |
int i ;
|
|
Packit |
b099d7 |
_XmDisplayToAppContext(display);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* This function has no screen parameter, so we have to set the
|
|
Packit |
b099d7 |
menucursor for _all_ the xmscreen available on this display. why?
|
|
Packit |
b099d7 |
because when RowColumn will be getting a menucursor for a particular
|
|
Packit |
b099d7 |
screen, it will have to get what the application has set using
|
|
Packit |
b099d7 |
this function, not the default for that particular screen (which is
|
|
Packit |
b099d7 |
what will happen if we were only setting the default display here) */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
for (i=0, scr = ScreenOfDisplay(display, i); i < ScreenCount(display);
|
|
Packit |
b099d7 |
i++, scr = ScreenOfDisplay(display, i)) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmScreen = (XmScreen) XmGetXmScreen(scr);
|
|
Packit |
b099d7 |
xmScreen->screen.menuCursor = cursorId ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cursor
|
|
Packit |
b099d7 |
XmGetMenuCursor(
|
|
Packit |
b099d7 |
Display *display )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen;
|
|
Packit |
b099d7 |
Cursor cursor;
|
|
Packit |
b099d7 |
_XmDisplayToAppContext(display);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* get the default screen menuCursor since there is no
|
|
Packit |
b099d7 |
other information available to this function */
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
xmScreen = (XmScreen) XmGetXmScreen(DefaultScreenOfDisplay(display));
|
|
Packit |
b099d7 |
cursor = xmScreen->screen.menuCursor;
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return cursor;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* a convenience for RowColumn */
|
|
Packit |
b099d7 |
Cursor
|
|
Packit |
b099d7 |
_XmGetMenuCursorByScreen(
|
|
Packit |
b099d7 |
Screen * screen )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmScreen = (XmScreen) XmGetXmScreen(screen);
|
|
Packit |
b099d7 |
return(xmScreen->screen.menuCursor);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Boolean
|
|
Packit |
b099d7 |
_XmGetMoveOpaqueByScreen(
|
|
Packit |
b099d7 |
Screen * screen )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmScreen = (XmScreen) XmGetXmScreen(screen);
|
|
Packit |
b099d7 |
return(xmScreen->screen.moveOpaque);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* a convenience for RowColumn */
|
|
Packit |
b099d7 |
unsigned char
|
|
Packit |
b099d7 |
_XmGetUnpostBehavior(
|
|
Packit |
b099d7 |
Widget wid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen = (XmScreen) XmGetXmScreen(XtScreenOfObject(wid));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(xmScreen->screen.unpostBehavior);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/**********************************************************************
|
|
Packit |
b099d7 |
**********************************************************************
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Font unit handling functions
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
**********************************************************************
|
|
Packit |
b099d7 |
**********************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/**********************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* XmSetFontUnits
|
|
Packit |
b099d7 |
* Set the font_unit value for all screens. These values can
|
|
Packit |
b099d7 |
* then be used later to process the font unit conversions.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
**********************************************************************/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
XmSetFontUnits(
|
|
Packit |
b099d7 |
Display *display,
|
|
Packit |
b099d7 |
int h_value,
|
|
Packit |
b099d7 |
int v_value )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen;
|
|
Packit |
b099d7 |
Screen *scr;
|
|
Packit |
b099d7 |
int i ;
|
|
Packit |
b099d7 |
_XmDisplayToAppContext(display);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* This function has no screen parameter, so we have to set the
|
|
Packit |
b099d7 |
fontunit for _all_ the xmscreen available on this display. why?
|
|
Packit |
b099d7 |
because when someone will be getting fontunits for a particular
|
|
Packit |
b099d7 |
screen, it will have to get what the application has set using
|
|
Packit |
b099d7 |
this function, not the default for that particular screen (which is
|
|
Packit |
b099d7 |
what will happen if we were only setting the default display here) */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
for (i=0, scr = ScreenOfDisplay(display, i); i < ScreenCount(display);
|
|
Packit |
b099d7 |
i++, scr = ScreenOfDisplay(display, i)) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmScreen = (XmScreen) XmGetXmScreen(scr);
|
|
Packit |
b099d7 |
xmScreen->screen.h_unit = h_value ;
|
|
Packit |
b099d7 |
xmScreen->screen.v_unit = v_value ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* DEPRECATED */
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
XmSetFontUnit(
|
|
Packit |
b099d7 |
Display *display,
|
|
Packit |
b099d7 |
int value )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmSetFontUnits(display, value, value);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/**********************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmGetFontUnit
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
**********************************************************************/
|
|
Packit |
b099d7 |
int
|
|
Packit |
b099d7 |
_XmGetFontUnit(
|
|
Packit |
b099d7 |
Screen *screen,
|
|
Packit |
b099d7 |
int dimension )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmScreen = (XmScreen) XmGetXmScreen(screen);
|
|
Packit |
b099d7 |
if (dimension == XmHORIZONTAL)
|
|
Packit |
b099d7 |
return(xmScreen->screen.h_unit);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
return(xmScreen->screen.v_unit);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/**********************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmGetColorCalculationProc
|
|
Packit |
b099d7 |
* Here there is no point of supporting the old function as
|
|
Packit |
b099d7 |
* place holder for the new color proc since the signature are
|
|
Packit |
b099d7 |
* different. The old color proc will still be managed by Visual.c
|
|
Packit |
b099d7 |
* in its own way.
|
|
Packit |
b099d7 |
**********************************************************************/
|
|
Packit |
b099d7 |
XmScreenColorProc
|
|
Packit |
b099d7 |
_XmGetColorCalculationProc(
|
|
Packit |
b099d7 |
Screen *screen)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmScreen = (XmScreen) XmGetXmScreen(screen);
|
|
Packit |
b099d7 |
return(xmScreen->screen.color_calc_proc);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/**********************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmGetColorAllocationProc
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
**********************************************************************/
|
|
Packit |
b099d7 |
XmAllocColorProc
|
|
Packit |
b099d7 |
_XmGetColorAllocationProc(
|
|
Packit |
b099d7 |
Screen *screen)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmScreen = (XmScreen) XmGetXmScreen(screen);
|
|
Packit |
b099d7 |
return(xmScreen->screen.color_alloc_proc);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/**********************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmGetBitmapConversionModel
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
**********************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtEnum
|
|
Packit |
b099d7 |
_XmGetBitmapConversionModel(
|
|
Packit |
b099d7 |
Screen *screen)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmScreen = (XmScreen) XmGetXmScreen(screen);
|
|
Packit |
b099d7 |
return(xmScreen->screen.bitmap_conversion_model);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmGetInsensitiveStippleBitmap
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Returns the insensitive_stipple_bitmap field of the XmScreenPart
|
|
Packit |
b099d7 |
************************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Pixmap
|
|
Packit |
b099d7 |
_XmGetInsensitiveStippleBitmap (Widget w)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen = (XmScreen) XmGetXmScreen(XtScreen(w));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(xmScreen->screen.insensitive_stipple_bitmap);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef DEFAULT_GLYPH_PIXMAP
|
|
Packit |
b099d7 |
/**********************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* _XmGetDefaultGlyphPixmap
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
**********************************************************************/
|
|
Packit |
b099d7 |
Pixmap
|
|
Packit |
b099d7 |
_XmGetDefaultGlyphPixmap(
|
|
Packit |
b099d7 |
Screen *screen,
|
|
Packit |
b099d7 |
unsigned int * width,
|
|
Packit |
b099d7 |
unsigned int *height)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmScreen xmScreen;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
xmScreen = (XmScreen) XmGetXmScreen(screen);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (width) *width = xmScreen->screen.default_glyph_pixmap_width ;
|
|
Packit |
b099d7 |
if (height) *height = xmScreen->screen.default_glyph_pixmap_height ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(xmScreen->screen.default_glyph_pixmap);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*********************************************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* XmGetXmScreen
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*********************************************************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmGetXmScreen(
|
|
Packit |
b099d7 |
Screen *screen )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmDisplay xmDisplay;
|
|
Packit |
b099d7 |
WidgetList children;
|
|
Packit |
b099d7 |
Widget widget;
|
|
Packit |
b099d7 |
int num_children;
|
|
Packit |
b099d7 |
Arg args[5];
|
|
Packit |
b099d7 |
int i;
|
|
Packit |
b099d7 |
Screen *scr;
|
|
Packit |
b099d7 |
char name[25];
|
|
Packit |
b099d7 |
_XmDisplayToAppContext(DisplayOfScreen(screen));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmAppLock(app);
|
|
Packit |
b099d7 |
if ((xmDisplay = (XmDisplay)
|
|
Packit |
b099d7 |
XmGetXmDisplay(DisplayOfScreen(screen))) == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmeWarning(NULL, MESSAGE2);
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return(NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
children = xmDisplay->composite.children;
|
|
Packit |
b099d7 |
num_children = xmDisplay->composite.num_children;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i=0; i < num_children; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget child = children[i];
|
|
Packit |
b099d7 |
if ((XmIsScreen(child)) &&
|
|
Packit |
b099d7 |
(screen == XtScreen(child))) {
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return(child);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Not found; have to do an implied creation */
|
|
Packit |
b099d7 |
for (scr = ScreenOfDisplay(XtDisplay(xmDisplay), i);
|
|
Packit |
b099d7 |
i < ScreenCount(XtDisplay(xmDisplay));
|
|
Packit |
b099d7 |
i++, scr = ScreenOfDisplay(XtDisplay(xmDisplay), i))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (scr == screen)
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
sprintf(name, "screen%d", i);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
i = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[i], XmNscreen, screen); i++;
|
|
Packit |
b099d7 |
widget = XtCreateWidget(name, xmScreenClass, (Widget)xmDisplay,
|
|
Packit |
b099d7 |
args, i);
|
|
Packit |
b099d7 |
_XmAppUnlock(app);
|
|
Packit |
b099d7 |
return widget;
|
|
Packit |
b099d7 |
}
|