Vendor.c revision 7a84e134
17a84e134Smrg/* $Xorg: Vendor.c,v 1.4 2001/02/09 02:03:47 xorgcvs Exp $ */
27a84e134Smrg
37a84e134Smrg/***********************************************************
47a84e134Smrg
57a84e134SmrgCopyright 1987, 1988, 1994, 1998  The Open Group
67a84e134Smrg
77a84e134SmrgPermission to use, copy, modify, distribute, and sell this software and its
87a84e134Smrgdocumentation for any purpose is hereby granted without fee, provided that
97a84e134Smrgthe above copyright notice appear in all copies and that both that
107a84e134Smrgcopyright notice and this permission notice appear in supporting
117a84e134Smrgdocumentation.
127a84e134Smrg
137a84e134SmrgThe above copyright notice and this permission notice shall be included in
147a84e134Smrgall copies or substantial portions of the Software.
157a84e134Smrg
167a84e134SmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
177a84e134SmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
187a84e134SmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
197a84e134SmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
207a84e134SmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
217a84e134SmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
227a84e134Smrg
237a84e134SmrgExcept as contained in this notice, the name of The Open Group shall not be
247a84e134Smrgused in advertising or otherwise to promote the sale, use or other dealings
257a84e134Smrgin this Software without prior written authorization from The Open Group.
267a84e134Smrg
277a84e134Smrg
287a84e134SmrgCopyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts.
297a84e134Smrg
307a84e134Smrg                        All Rights Reserved
317a84e134Smrg
327a84e134SmrgPermission to use, copy, modify, and distribute this software and its
337a84e134Smrgdocumentation for any purpose and without fee is hereby granted,
347a84e134Smrgprovided that the above copyright notice appear in all copies and that
357a84e134Smrgboth that copyright notice and this permission notice appear in
367a84e134Smrgsupporting documentation, and that the name of Digital not be
377a84e134Smrgused in advertising or publicity pertaining to distribution of the
387a84e134Smrgsoftware without specific, written prior permission.
397a84e134Smrg
407a84e134SmrgDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
417a84e134SmrgALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
427a84e134SmrgDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
437a84e134SmrgANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
447a84e134SmrgWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
457a84e134SmrgARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
467a84e134SmrgSOFTWARE.
477a84e134Smrg
487a84e134Smrg******************************************************************/
497a84e134Smrg/* $XFree86: xc/lib/Xaw/Vendor.c,v 1.8 2001/12/14 19:54:45 dawes Exp $ */
507a84e134Smrg
517a84e134Smrg/*
527a84e134Smrg * This is a copy of Xt/Vendor.c with an additional ClassInitialize
537a84e134Smrg * procedure to register Xmu resource type converters, and all the
547a84e134Smrg * monkey business associated with input methods...
557a84e134Smrg *
567a84e134Smrg */
577a84e134Smrg
587a84e134Smrg/* Make sure all wm properties can make it out of the resource manager */
597a84e134Smrg
607a84e134Smrg#ifdef HAVE_CONFIG_H
617a84e134Smrg#include <config.h>
627a84e134Smrg#endif
637a84e134Smrg#include <stdio.h>
647a84e134Smrg#include <X11/IntrinsicP.h>
657a84e134Smrg#include <X11/StringDefs.h>
667a84e134Smrg#include <X11/ShellP.h>
677a84e134Smrg#include <X11/VendorP.h>
687a84e134Smrg#include <X11/Xmu/Converters.h>
697a84e134Smrg#include <X11/Xmu/Atoms.h>
707a84e134Smrg#include <X11/Xmu/Editres.h>
717a84e134Smrg#include <X11/Xmu/ExtAgent.h>
727a84e134Smrg
737a84e134Smrg/* The following two headers are for the input method. */
747a84e134Smrg
757a84e134Smrg#include <X11/Xaw/VendorEP.h>
767a84e134Smrg#include <X11/Xaw/XawImP.h>
777a84e134Smrg
787a84e134Smrg/*
797a84e134Smrg * Class Methods
807a84e134Smrg */
817a84e134Smrgstatic void XawVendorShellChangeManaged(Widget);
827a84e134Smrgstatic Boolean XawCvtCompoundTextToString(Display*, XrmValuePtr, Cardinal*,
837a84e134Smrg					  XrmValue*, XrmValue*, XtPointer*);
847a84e134Smrgstatic void XawVendorShellClassInitialize(void);
857a84e134Smrgstatic XtGeometryResult XawVendorShellGeometryManager(Widget,
867a84e134Smrg						      XtWidgetGeometry*,
877a84e134Smrg						      XtWidgetGeometry*);
887a84e134Smrgstatic void XawVendorShellExtClassInitialize(void);
897a84e134Smrgstatic void XawVendorShellExtDestroy(Widget);
907a84e134Smrgstatic void XawVendorShellExtInitialize(Widget, Widget, ArgList, Cardinal*);
917a84e134Smrgvoid XawVendorShellExtResize(Widget);
927a84e134Smrgstatic Boolean XawVendorShellExtSetValues(Widget, Widget, Widget,
937a84e134Smrg					  ArgList, Cardinal*);
947a84e134Smrgstatic void XawVendorShellClassPartInit(WidgetClass);
957a84e134Smrgstatic void XawVendorShellInitialize(Widget, Widget, ArgList, Cardinal*);
967a84e134Smrgstatic void XawVendorShellRealize(Widget, Mask*, XSetWindowAttributes*);
977a84e134Smrgstatic Boolean XawVendorShellSetValues(Widget, Widget, Widget,
987a84e134Smrg				       ArgList, Cardinal*);
997a84e134Smrg
1007a84e134Smrg/*
1017a84e134Smrg * External
1027a84e134Smrg */
1037a84e134Smrgvoid XawVendorStructureNotifyHandler(Widget, XtPointer, XEvent*, Boolean*);
1047a84e134Smrg
1057a84e134Smrgstatic XtResource resources[] = {
1067a84e134Smrg  {XtNinput, XtCInput, XtRBool, sizeof(Bool),
1077a84e134Smrg		XtOffsetOf(VendorShellRec, wm.wm_hints.input),
1087a84e134Smrg		XtRImmediate, (XtPointer)True}
1097a84e134Smrg};
1107a84e134Smrg
1117a84e134Smrg/***************************************************************************
1127a84e134Smrg *
1137a84e134Smrg * Vendor shell class record
1147a84e134Smrg *
1157a84e134Smrg ***************************************************************************/
1167a84e134Smrg
1177a84e134Smrg#if defined(__UNIXOS2__) || defined(__CYGWIN__)
1187a84e134Smrg/* to fix the EditRes problem because of wrong linker semantics */
1197a84e134Smrgextern WidgetClass vendorShellWidgetClass; /* from Xt/Vendor.c */
1207a84e134Smrgextern VendorShellClassRec _XawVendorShellClassRec;
1217a84e134Smrgextern void _XawFixupVendorShell();
1227a84e134Smrg
1237a84e134Smrg#if defined(__UNIXOS2__)
1247a84e134Smrgunsigned long _DLL_InitTerm(unsigned long mod,unsigned long flag)
1257a84e134Smrg{
1267a84e134Smrg	switch (flag) {
1277a84e134Smrg	case 0: /*called on init*/
1287a84e134Smrg		_CRT_init();
1297a84e134Smrg		vendorShellWidgetClass = (WidgetClass)(&_XawVendorShellClassRec);
1307a84e134Smrg		_XawFixupVendorShell();
1317a84e134Smrg		return 1;
1327a84e134Smrg	case 1: /*called on exit*/
1337a84e134Smrg		return 1;
1347a84e134Smrg	default:
1357a84e134Smrg		return 0;
1367a84e134Smrg	}
1377a84e134Smrg}
1387a84e134Smrg#endif
1397a84e134Smrg
1407a84e134Smrg#if defined(__CYGWIN__)
1417a84e134Smrgint __stdcall
1427a84e134SmrgDllMain(unsigned long mod_handle, unsigned long flag, void *routine)
1437a84e134Smrg{
1447a84e134Smrg  switch (flag)
1457a84e134Smrg    {
1467a84e134Smrg    case 1: /* DLL_PROCESS_ATTACH - process attach */
1477a84e134Smrg      vendorShellWidgetClass = (WidgetClass)(&_XawVendorShellClassRec);
1487a84e134Smrg      _XawFixupVendorShell();
1497a84e134Smrg      break;
1507a84e134Smrg    case 0: /* DLL_PROCESS_DETACH - process detach */
1517a84e134Smrg      break;
1527a84e134Smrg    }
1537a84e134Smrg  return 1;
1547a84e134Smrg}
1557a84e134Smrg#endif
1567a84e134Smrg
1577a84e134Smrg#define vendorShellClassRec _XawVendorShellClassRec
1587a84e134Smrg
1597a84e134Smrg#endif
1607a84e134Smrg
1617a84e134Smrgstatic CompositeClassExtensionRec vendorCompositeExt = {
1627a84e134Smrg    /* next_extension     */	NULL,
1637a84e134Smrg    /* record_type        */    NULLQUARK,
1647a84e134Smrg    /* version            */    XtCompositeExtensionVersion,
1657a84e134Smrg    /* record_size        */    sizeof (CompositeClassExtensionRec),
1667a84e134Smrg    /* accepts_objects    */    TRUE,
1677a84e134Smrg    /* allows_change_managed_set */ FALSE
1687a84e134Smrg};
1697a84e134Smrg
1707a84e134Smrg#define SuperClass (&wmShellClassRec)
1717a84e134Smrgexternaldef(vendorshellclassrec) VendorShellClassRec vendorShellClassRec = {
1727a84e134Smrg  {
1737a84e134Smrg    /* superclass	  */	(WidgetClass)SuperClass,
1747a84e134Smrg    /* class_name	  */	"VendorShell",
1757a84e134Smrg    /* size		  */	sizeof(VendorShellRec),
1767a84e134Smrg    /* class_initialize	  */	XawVendorShellClassInitialize,
1777a84e134Smrg    /* class_part_init	  */	XawVendorShellClassPartInit,
1787a84e134Smrg    /* Class init'ed ?	  */	FALSE,
1797a84e134Smrg    /* initialize         */	XawVendorShellInitialize,
1807a84e134Smrg    /* initialize_hook	  */	NULL,
1817a84e134Smrg    /* realize		  */	XawVendorShellRealize,
1827a84e134Smrg    /* actions		  */	NULL,
1837a84e134Smrg    /* num_actions	  */	0,
1847a84e134Smrg    /* resources	  */	resources,
1857a84e134Smrg    /* resource_count	  */	XtNumber(resources),
1867a84e134Smrg    /* xrm_class	  */	NULLQUARK,
1877a84e134Smrg    /* compress_motion	  */	FALSE,
1887a84e134Smrg    /* compress_exposure  */	TRUE,
1897a84e134Smrg    /* compress_enterleave*/	FALSE,
1907a84e134Smrg    /* visible_interest	  */	FALSE,
1917a84e134Smrg    /* destroy		  */	NULL,
1927a84e134Smrg    /* resize		  */	XawVendorShellExtResize,
1937a84e134Smrg    /* expose		  */	NULL,
1947a84e134Smrg    /* set_values	  */	XawVendorShellSetValues,
1957a84e134Smrg    /* set_values_hook	  */	NULL,
1967a84e134Smrg    /* set_values_almost  */	XtInheritSetValuesAlmost,
1977a84e134Smrg    /* get_values_hook	  */	NULL,
1987a84e134Smrg    /* accept_focus	  */	NULL,
1997a84e134Smrg    /* intrinsics version */	XtVersion,
2007a84e134Smrg    /* callback offsets	  */	NULL,
2017a84e134Smrg    /* tm_table		  */	NULL,
2027a84e134Smrg    /* query_geometry	  */	NULL,
2037a84e134Smrg    /* display_accelerator*/	NULL,
2047a84e134Smrg    /* extension	  */	NULL
2057a84e134Smrg  },{
2067a84e134Smrg    /* geometry_manager	  */	XawVendorShellGeometryManager,
2077a84e134Smrg    /* change_managed	  */	XawVendorShellChangeManaged,
2087a84e134Smrg    /* insert_child	  */	XtInheritInsertChild,
2097a84e134Smrg    /* delete_child	  */	XtInheritDeleteChild,
2107a84e134Smrg    /* extension	  */	(XtPointer) &vendorCompositeExt
2117a84e134Smrg  },{
2127a84e134Smrg    /* extension	  */	NULL
2137a84e134Smrg  },{
2147a84e134Smrg    /* extension	  */	NULL
2157a84e134Smrg  },{
2167a84e134Smrg    /* extension	  */	NULL
2177a84e134Smrg  }
2187a84e134Smrg};
2197a84e134Smrg
2207a84e134Smrg#ifndef __UNIXOS2__
2217a84e134Smrgexternaldef(vendorshellwidgetclass) WidgetClass vendorShellWidgetClass =
2227a84e134Smrg	(WidgetClass) (&vendorShellClassRec);
2237a84e134Smrg#endif
2247a84e134Smrg
2257a84e134Smrg/***************************************************************************
2267a84e134Smrg *
2277a84e134Smrg * The following section is for the Vendor shell Extension class record
2287a84e134Smrg *
2297a84e134Smrg ***************************************************************************/
2307a84e134Smrg
2317a84e134Smrgstatic XtResource ext_resources[] = {
2327a84e134Smrg  {XtNinputMethod, XtCInputMethod, XtRString, sizeof(String),
2337a84e134Smrg		XtOffsetOf(XawVendorShellExtRec, vendor_ext.im.input_method),
2347a84e134Smrg		XtRString, (XtPointer)NULL},
2357a84e134Smrg  {XtNpreeditType, XtCPreeditType, XtRString, sizeof(String),
2367a84e134Smrg		XtOffsetOf(XawVendorShellExtRec, vendor_ext.im.preedit_type),
2377a84e134Smrg		XtRString, (XtPointer)"OverTheSpot,OffTheSpot,Root"},
2387a84e134Smrg  {XtNopenIm, XtCOpenIm, XtRBoolean, sizeof(Boolean),
2397a84e134Smrg		XtOffsetOf(XawVendorShellExtRec, vendor_ext.im.open_im),
2407a84e134Smrg		XtRImmediate, (XtPointer)TRUE},
2417a84e134Smrg  {XtNsharedIc, XtCSharedIc, XtRBoolean, sizeof(Boolean),
2427a84e134Smrg		XtOffsetOf(XawVendorShellExtRec, vendor_ext.ic.shared_ic),
2437a84e134Smrg		XtRImmediate, (XtPointer)FALSE}
2447a84e134Smrg};
2457a84e134Smrg
2467a84e134Smrgexternaldef(vendorshellextclassrec) XawVendorShellExtClassRec
2477a84e134Smrg       xawvendorShellExtClassRec = {
2487a84e134Smrg  {
2497a84e134Smrg    /* superclass	  */	(WidgetClass)&objectClassRec,
2507a84e134Smrg    /* class_name	  */	"VendorShellExt",
2517a84e134Smrg    /* size		  */	sizeof(XawVendorShellExtRec),
2527a84e134Smrg    /* class_initialize	  */	XawVendorShellExtClassInitialize,
2537a84e134Smrg    /* class_part_initialize*/	NULL,
2547a84e134Smrg    /* Class init'ed ?	  */	FALSE,
2557a84e134Smrg    /* initialize	  */	XawVendorShellExtInitialize,
2567a84e134Smrg    /* initialize_hook	  */	NULL,
2577a84e134Smrg    /* pad		  */	NULL,
2587a84e134Smrg    /* pad		  */	NULL,
2597a84e134Smrg    /* pad		  */	0,
2607a84e134Smrg    /* resources	  */	ext_resources,
2617a84e134Smrg    /* resource_count	  */	XtNumber(ext_resources),
2627a84e134Smrg    /* xrm_class	  */	NULLQUARK,
2637a84e134Smrg    /* pad		  */	FALSE,
2647a84e134Smrg    /* pad		  */	FALSE,
2657a84e134Smrg    /* pad		  */	FALSE,
2667a84e134Smrg    /* pad		  */	FALSE,
2677a84e134Smrg    /* destroy		  */	XawVendorShellExtDestroy,
2687a84e134Smrg    /* pad		  */	NULL,
2697a84e134Smrg    /* pad		  */	NULL,
2707a84e134Smrg    /* set_values	  */	XawVendorShellExtSetValues,
2717a84e134Smrg    /* set_values_hook	  */	NULL,
2727a84e134Smrg    /* pad		  */	NULL,
2737a84e134Smrg    /* get_values_hook	  */	NULL,
2747a84e134Smrg    /* pad		  */	NULL,
2757a84e134Smrg    /* version		  */	XtVersion,
2767a84e134Smrg    /* callback_offsets	  */	NULL,
2777a84e134Smrg    /* pad		  */	NULL,
2787a84e134Smrg    /* pad		  */	NULL,
2797a84e134Smrg    /* pad		  */	NULL,
2807a84e134Smrg    /* extension	  */	NULL
2817a84e134Smrg  },{
2827a84e134Smrg    /* extension	  */	NULL
2837a84e134Smrg  }
2847a84e134Smrg};
2857a84e134Smrg
2867a84e134Smrgexternaldef(xawvendorshellwidgetclass) WidgetClass
2877a84e134Smrg     xawvendorShellExtWidgetClass = (WidgetClass) (&xawvendorShellExtClassRec);
2887a84e134Smrg
2897a84e134Smrg
2907a84e134Smrg/*ARGSUSED*/
2917a84e134Smrgstatic Boolean
2927a84e134SmrgXawCvtCompoundTextToString(Display *dpy, XrmValuePtr args, Cardinal *num_args,
2937a84e134Smrg			   XrmValue *fromVal, XrmValue *toVal,
2947a84e134Smrg			   XtPointer *cvt_data)
2957a84e134Smrg{
2967a84e134Smrg    XTextProperty prop;
2977a84e134Smrg    char **list;
2987a84e134Smrg    int count;
2997a84e134Smrg    static char *mbs = NULL;
3007a84e134Smrg    int len;
3017a84e134Smrg
3027a84e134Smrg    prop.value = (unsigned char *)fromVal->addr;
3037a84e134Smrg    prop.encoding = XA_COMPOUND_TEXT(dpy);
3047a84e134Smrg    prop.format = 8;
3057a84e134Smrg    prop.nitems = fromVal->size;
3067a84e134Smrg
3077a84e134Smrg    if(XmbTextPropertyToTextList(dpy, &prop, &list, &count) < Success) {
3087a84e134Smrg	XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
3097a84e134Smrg	"converter", "XmbTextPropertyToTextList", "XawError",
3107a84e134Smrg	"conversion from CT to MB failed.", NULL, 0);
3117a84e134Smrg	return False;
3127a84e134Smrg    }
3137a84e134Smrg    len = strlen(*list);
3147a84e134Smrg    toVal->size = len;
3157a84e134Smrg    mbs = XtRealloc(mbs, len + 1); /* keep buffer because no one call free :( */
3167a84e134Smrg    strcpy(mbs, *list);
3177a84e134Smrg    XFreeStringList(list);
3187a84e134Smrg    toVal->addr = (XtPointer)mbs;
3197a84e134Smrg    return True;
3207a84e134Smrg}
3217a84e134Smrg
3227a84e134Smrgstatic void
3237a84e134SmrgXawVendorShellClassInitialize(void)
3247a84e134Smrg{
3257a84e134Smrg    static XtConvertArgRec screenConvertArg[] = {
3267a84e134Smrg        {XtWidgetBaseOffset, (XtPointer) XtOffsetOf(WidgetRec, core.screen),
3277a84e134Smrg	     sizeof(Screen *)}
3287a84e134Smrg    };
3297a84e134Smrg
3307a84e134Smrg    XtAddConverter(XtRString, XtRCursor, XmuCvtStringToCursor,
3317a84e134Smrg		   screenConvertArg, XtNumber(screenConvertArg));
3327a84e134Smrg
3337a84e134Smrg    XtAddConverter(XtRString, XtRBitmap, XmuCvtStringToBitmap,
3347a84e134Smrg		   screenConvertArg, XtNumber(screenConvertArg));
3357a84e134Smrg
3367a84e134Smrg    XtSetTypeConverter("CompoundText", XtRString, XawCvtCompoundTextToString,
3377a84e134Smrg			NULL, 0, XtCacheNone, NULL);
3387a84e134Smrg}
3397a84e134Smrg
3407a84e134Smrgstatic void
3417a84e134SmrgXawVendorShellClassPartInit(WidgetClass cclass)
3427a84e134Smrg{
3437a84e134Smrg    CompositeClassExtension ext;
3447a84e134Smrg    VendorShellWidgetClass vsclass = (VendorShellWidgetClass)cclass;
3457a84e134Smrg
3467a84e134Smrg    if ((ext = (CompositeClassExtension)
3477a84e134Smrg	    XtGetClassExtension (cclass,
3487a84e134Smrg				 XtOffsetOf(CompositeClassRec,
3497a84e134Smrg					    composite_class.extension),
3507a84e134Smrg				 NULLQUARK, 1L, (Cardinal) 0)) == NULL) {
3517a84e134Smrg	ext = (CompositeClassExtension) XtNew (CompositeClassExtensionRec);
3527a84e134Smrg	if (ext != NULL) {
3537a84e134Smrg	    ext->next_extension = vsclass->composite_class.extension;
3547a84e134Smrg	    ext->record_type = NULLQUARK;
3557a84e134Smrg	    ext->version = XtCompositeExtensionVersion;
3567a84e134Smrg	    ext->record_size = sizeof (CompositeClassExtensionRec);
3577a84e134Smrg	    ext->accepts_objects = TRUE;
3587a84e134Smrg	    ext->allows_change_managed_set = FALSE;
3597a84e134Smrg	    vsclass->composite_class.extension = (XtPointer) ext;
3607a84e134Smrg	}
3617a84e134Smrg    }
3627a84e134Smrg}
3637a84e134Smrg
3647a84e134Smrg#if defined(__osf__) || defined(__UNIXOS2__) || defined(__CYGWIN__)
3657a84e134Smrg/* stupid OSF/1 shared libraries have the wrong semantics */
3667a84e134Smrg/* symbols do not get resolved external to the shared library */
3677a84e134Smrgvoid _XawFixupVendorShell()
3687a84e134Smrg{
3697a84e134Smrg    transientShellWidgetClass->core_class.superclass =
3707a84e134Smrg        (WidgetClass) &vendorShellClassRec;
3717a84e134Smrg    topLevelShellWidgetClass->core_class.superclass =
3727a84e134Smrg        (WidgetClass) &vendorShellClassRec;
3737a84e134Smrg}
3747a84e134Smrg#endif
3757a84e134Smrg
3767a84e134Smrg/* ARGSUSED */
3777a84e134Smrgstatic void
3787a84e134SmrgXawVendorShellInitialize(Widget req, Widget cnew,
3797a84e134Smrg			 ArgList args, Cardinal *num_args)
3807a84e134Smrg{
3817a84e134Smrg    XtAddEventHandler(cnew, (EventMask) 0, TRUE, _XEditResCheckMessages, NULL);
3827a84e134Smrg    XtAddEventHandler(cnew, (EventMask) 0, TRUE, XmuRegisterExternalAgent, NULL);
3837a84e134Smrg    XtCreateWidget("shellext", xawvendorShellExtWidgetClass,
3847a84e134Smrg		   cnew, args, *num_args);
3857a84e134Smrg}
3867a84e134Smrg
3877a84e134Smrg/* ARGSUSED */
3887a84e134Smrgstatic Boolean
3897a84e134SmrgXawVendorShellSetValues(Widget old, Widget ref, Widget cnew,
3907a84e134Smrg			ArgList args, Cardinal *num_args)
3917a84e134Smrg{
3927a84e134Smrg	return FALSE;
3937a84e134Smrg}
3947a84e134Smrg
3957a84e134Smrgstatic void
3967a84e134SmrgXawVendorShellRealize(Widget wid, Mask *vmask, XSetWindowAttributes *attr)
3977a84e134Smrg{
3987a84e134Smrg	WidgetClass super = wmShellWidgetClass;
3997a84e134Smrg
4007a84e134Smrg	/* Make my superclass do all the dirty work */
4017a84e134Smrg
4027a84e134Smrg	(*super->core_class.realize) (wid, vmask, attr);
4037a84e134Smrg	_XawImRealize(wid);
4047a84e134Smrg}
4057a84e134Smrg
4067a84e134Smrg
4077a84e134Smrgstatic void
4087a84e134SmrgXawVendorShellExtClassInitialize(void)
4097a84e134Smrg{
4107a84e134Smrg}
4117a84e134Smrg
4127a84e134Smrg/* ARGSUSED */
4137a84e134Smrgstatic void
4147a84e134SmrgXawVendorShellExtInitialize(Widget req, Widget cnew,
4157a84e134Smrg			    ArgList args, Cardinal *num_args)
4167a84e134Smrg{
4177a84e134Smrg    _XawImInitialize(cnew->core.parent, cnew);
4187a84e134Smrg}
4197a84e134Smrg
4207a84e134Smrg/* ARGSUSED */
4217a84e134Smrgstatic void
4227a84e134SmrgXawVendorShellExtDestroy(Widget w)
4237a84e134Smrg{
4247a84e134Smrg    _XawImDestroy( w->core.parent, w );
4257a84e134Smrg}
4267a84e134Smrg
4277a84e134Smrg/* ARGSUSED */
4287a84e134Smrgstatic Boolean
4297a84e134SmrgXawVendorShellExtSetValues(Widget old, Widget ref, Widget cnew,
4307a84e134Smrg			   ArgList args, Cardinal *num_args)
4317a84e134Smrg{
4327a84e134Smrg	return FALSE;
4337a84e134Smrg}
4347a84e134Smrg
4357a84e134Smrgvoid
4367a84e134SmrgXawVendorShellExtResize(Widget w)
4377a84e134Smrg{
4387a84e134Smrg	ShellWidget sw = (ShellWidget) w;
4397a84e134Smrg	Widget childwid;
4407a84e134Smrg	Cardinal i;
4417a84e134Smrg	int core_height;
4427a84e134Smrg
4437a84e134Smrg	_XawImResizeVendorShell( w );
4447a84e134Smrg	core_height = _XawImGetShellHeight( w );
4457a84e134Smrg	for( i = 0; i < sw->composite.num_children; i++ ) {
4467a84e134Smrg	    if( XtIsManaged( sw->composite.children[ i ] ) ) {
4477a84e134Smrg		childwid = sw->composite.children[ i ];
4487a84e134Smrg		XtResizeWidget( childwid, sw->core.width, core_height,
4497a84e134Smrg			       childwid->core.border_width );
4507a84e134Smrg	    }
4517a84e134Smrg	}
4527a84e134Smrg}
4537a84e134Smrg
4547a84e134Smrg/*ARGSUSED*/
4557a84e134Smrgvoid
4567a84e134SmrgXawVendorStructureNotifyHandler(Widget w, XtPointer closure, XEvent *event,
4577a84e134Smrg				Boolean *continue_to_dispatch)
4587a84e134Smrg{
4597a84e134Smrg  XawVendorShellExtResize(w);
4607a84e134Smrg}
4617a84e134Smrg
4627a84e134Smrg/*ARGSUSED*/
4637a84e134Smrgstatic XtGeometryResult
4647a84e134SmrgXawVendorShellGeometryManager(Widget wid, XtWidgetGeometry *request,
4657a84e134Smrg			      XtWidgetGeometry *reply)
4667a84e134Smrg{
4677a84e134Smrg	ShellWidget shell = (ShellWidget)(wid->core.parent);
4687a84e134Smrg	XtWidgetGeometry my_request;
4697a84e134Smrg
4707a84e134Smrg	if(shell->shell.allow_shell_resize == FALSE && XtIsRealized(wid))
4717a84e134Smrg		return(XtGeometryNo);
4727a84e134Smrg
4737a84e134Smrg	if (request->request_mode & (CWX | CWY))
4747a84e134Smrg	    return(XtGeometryNo);
4757a84e134Smrg
4767a84e134Smrg	/* %%% worry about XtCWQueryOnly */
4777a84e134Smrg	my_request.request_mode = 0;
4787a84e134Smrg	if (request->request_mode & CWWidth) {
4797a84e134Smrg	    my_request.width = request->width;
4807a84e134Smrg	    my_request.request_mode |= CWWidth;
4817a84e134Smrg	}
4827a84e134Smrg	if (request->request_mode & CWHeight) {
4837a84e134Smrg	    my_request.height = request->height
4847a84e134Smrg			      + _XawImGetImAreaHeight( wid );
4857a84e134Smrg	    my_request.request_mode |= CWHeight;
4867a84e134Smrg	}
4877a84e134Smrg	if (request->request_mode & CWBorderWidth) {
4887a84e134Smrg	    my_request.border_width = request->border_width;
4897a84e134Smrg	    my_request.request_mode |= CWBorderWidth;
4907a84e134Smrg	}
4917a84e134Smrg	if (XtMakeGeometryRequest((Widget)shell, &my_request, NULL)
4927a84e134Smrg		== XtGeometryYes) {
4937a84e134Smrg	    /* assert: if (request->request_mode & CWWidth) then
4947a84e134Smrg	     * 		  shell->core.width == request->width
4957a84e134Smrg	     * assert: if (request->request_mode & CWHeight) then
4967a84e134Smrg	     * 		  shell->core.height == request->height
4977a84e134Smrg	     *
4987a84e134Smrg	     * so, whatever the WM sized us to (if the Shell requested
4997a84e134Smrg	     * only one of the two) is now the correct child size
5007a84e134Smrg	     */
5017a84e134Smrg
5027a84e134Smrg	    wid->core.width = shell->core.width;
5037a84e134Smrg	    wid->core.height = shell->core.height;
5047a84e134Smrg	    if (request->request_mode & CWBorderWidth) {
5057a84e134Smrg		wid->core.x = wid->core.y = -request->border_width;
5067a84e134Smrg	    }
5077a84e134Smrg	    _XawImCallVendorShellExtResize(wid);
5087a84e134Smrg	    return XtGeometryYes;
5097a84e134Smrg	} else return XtGeometryNo;
5107a84e134Smrg}
5117a84e134Smrg
5127a84e134Smrgstatic void
5137a84e134SmrgXawVendorShellChangeManaged(Widget wid)
5147a84e134Smrg{
5157a84e134Smrg	ShellWidget w = (ShellWidget) wid;
5167a84e134Smrg	Widget* childP;
5177a84e134Smrg	int i;
5187a84e134Smrg
5197a84e134Smrg	(*SuperClass->composite_class.change_managed)(wid);
5207a84e134Smrg	for (i = w->composite.num_children, childP = w->composite.children;
5217a84e134Smrg	     i; i--, childP++) {
5227a84e134Smrg	    if (XtIsManaged(*childP)) {
5237a84e134Smrg		XtSetKeyboardFocus(wid, *childP);
5247a84e134Smrg		break;
5257a84e134Smrg	    }
5267a84e134Smrg	}
5277a84e134Smrg}
528