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