1 /* Masanao Izumo <mo@goice.co.jp>:
2  *
3  * There is problem if both -lXm and -lXaw are linked.
4  * This source code to re-define XAW vendorShell.
5  * To change motif vendorShell to XAW vendorShell in runtime.
6  *
foo()7  * #define vendorShellClassRec xaw_vendorShellClassRec
8  * #define vendorShellWidgetClass xaw_vendorShellWidgetClass
9  * #include "xaw_redef.c"
10  * #undef vendorShellClassRec
11  * #undef vendorShellWidgetClass
12  * extern WidgetClass vendorShellWidgetClass;
13  * extern VendorShellClassRec vendorShellClassRec;
14  * static void xaw_vendor_setup(void)
15  * {
16  *     memcpy(&vendorShellClassRec, &xaw_vendorShellClassRec,
17  * 	   sizeof(VendorShellClassRec));
18  *     vendorShellWidgetClass = (WidgetClass)&xaw_vendorShellWidgetClass;
19  * }
20  */
21 
22 /* $XConsortium: Vendor.c,v 1.27 94/04/17 20:13:25 kaleb Exp $ */
23 
24 /***********************************************************
25 
26 Copyright (c) 1987, 1988, 1994  X Consortium
27 
28 Permission is hereby granted, free of charge, to any person obtaining a copy
29 of this software and associated documentation files (the "Software"), to deal
30 in the Software without restriction, including without limitation the rights
31 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
32 copies of the Software, and to permit persons to whom the Software is
33 furnished to do so, subject to the following conditions:
34 
35 The above copyright notice and this permission notice shall be included in
36 all copies or substantial portions of the Software.
37 
38 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
39 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
40 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
41 X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
42 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
43 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
44 
45 Except as contained in this notice, the name of the X Consortium shall not be
46 used in advertising or otherwise to promote the sale, use or other dealings
47 in this Software without prior written authorization from the X Consortium.
48 
49 
50 Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts.
51 
52                         All Rights Reserved
53 
54 Permission to use, copy, modify, and distribute this software and its
55 documentation for any purpose and without fee is hereby granted,
56 provided that the above copyright notice appear in all copies and that
57 both that copyright notice and this permission notice appear in
58 supporting documentation, and that the name of Digital not be
59 used in advertising or publicity pertaining to distribution of the
60 software without specific, written prior permission.
61 
62 DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
63 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
64 DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
65 ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
66 WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
67 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
68 SOFTWARE.
69 
70 ******************************************************************/
71 
72 /*
73  * This is a copy of Xt/Vendor.c with an additional ClassInitialize
74  * procedure to register Xmu resource type converters, and all the
75  * monkey business associated with input methods...
76  *
77  */
78 
79 /* Make sure all wm properties can make it out of the resource manager */
80 
81 #include <stdio.h>
82 #include <X11/IntrinsicP.h>
83 #include <X11/StringDefs.h>
84 #include <X11/ShellP.h>
85 #include <X11/VendorP.h>
86 #include <X11/Xmu/Converters.h>
87 #include <X11/Xmu/Atoms.h>
88 #include <X11/Xmu/Editres.h>
89 
90 
91 #ifdef HAVE_XMUREGISTEREXTERNALAGENT
92 #ifdef HAVE_X11_XMU_EXTAGENT_H
93 #include <X11/Xmu/ExtAgent.h>
94 #else
95 /* There is no ExtAgent.h in openwin package, but XmuRegisterExternalAgent
96  * is surely defined in libXmu on Solaris 7.
97  */
98 extern void XmuRegisterExternalAgent(
99 #if NeedFunctionPrototypes
100     Widget /* w */,
101     XtPointer /* data */,
102     XEvent* /* event */,
103     Boolean* /* cont */
104 #endif
105 );
106 #endif /* HAVE_X11_XMU_EXTAGENT_H */
107 #endif /* HAVE_XMUREGISTEREXTERNALAGENT */
108 
109 
110 /* The following two headers are for the input method. */
111 
112 /* $XConsortium: VendorEP.h,v 1.2 94/04/17 20:13:25 kaleb Exp $ */
113 
114 /*
115  * Copyright 1991 by OMRON Corporation
116  *
117  * Permission to use, copy, modify, distribute, and sell this software and its
118  * documentation for any purpose is hereby granted without fee, provided that
119  * the above copyright notice appear in all copies and that both that
120  * copyright notice and this permission notice appear in supporting
121  * documentation, and that the name of OMRON not be used in advertising or
122  * publicity pertaining to distribution of the software without specific,
123  * written prior permission.  OMRON makes no representations about the
124  * suitability of this software for any purpose.  It is provided "as is"
125  * without express or implied warranty.
126  *
127  * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
128  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
129  * OMRON BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
130  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
131  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION,
132  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
133  * SOFTWARE.
134  *
135  *	Author:	Seiji Kuwari	OMRON Corporation
136  *				kuwa@omron.co.jp
137  *				kuwa%omron.co.jp@uunet.uu.net
138  */
139 
140 /*
141 
142 Copyright (c) 1994  X Consortium
143 
144 Permission is hereby granted, free of charge, to any person obtaining a copy
145 of this software and associated documentation files (the "Software"), to deal
146 in the Software without restriction, including without limitation the rights
147 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
148 copies of the Software, and to permit persons to whom the Software is
149 furnished to do so, subject to the following conditions:
150 
151 The above copyright notice and this permission notice shall be included in
152 all copies or substantial portions of the Software.
153 
154 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
155 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
156 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
157 X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
158 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
159 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
160 
161 Except as contained in this notice, the name of the X Consortium shall not be
162 used in advertising or otherwise to promote the sale, use or other dealings
163 in this Software without prior written authorization from the X Consortium.
164 
165 */
166 
167 #ifndef _VendorEP_h
168 #define _VendorEP_h
169 
170 /* $XConsortium: XawImP.h,v 1.4 95/06/06 20:50:30 kaleb Exp $ */
171 
172 /*
173  * Copyright 1991 by OMRON Corporation
174  *
175  * Permission to use, copy, modify, distribute, and sell this software and its
176  * documentation for any purpose is hereby granted without fee, provided that
177  * the above copyright notice appear in all copies and that both that
178  * copyright notice and this permission notice appear in supporting
179  * documentation, and that the name of OMRON not be used in advertising or
180  * publicity pertaining to distribution of the software without specific,
181  * written prior permission.  OMRON makes no representations about the
182  * suitability of this software for any purpose.  It is provided "as is"
183  * without express or implied warranty.
184  *
185  * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
186  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
187  * OMRON BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
188  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
189  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION,
190  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
191  * SOFTWARE.
192  *
193  *	Author:	Seiji Kuwari	OMRON Corporation
194  *				kuwa@omron.co.jp
195  *				kuwa%omron.co.jp@uunet.uu.net
196  */
197 
198 /*
199 
200 Copyright (c) 1994  X Consortium
201 
202 Permission is hereby granted, free of charge, to any person obtaining a copy
203 of this software and associated documentation files (the "Software"), to deal
204 in the Software without restriction, including without limitation the rights
205 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
206 copies of the Software, and to permit persons to whom the Software is
207 furnished to do so, subject to the following conditions:
208 
209 The above copyright notice and this permission notice shall be included in
210 all copies or substantial portions of the Software.
211 
212 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
213 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
214 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
215 X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
216 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
217 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
218 
219 Except as contained in this notice, the name of the X Consortium shall not be
220 used in advertising or otherwise to promote the sale, use or other dealings
221 in this Software without prior written authorization from the X Consortium.
222 
223 */
224 
225 #ifndef _XawImP_h
226 #define _XawImP_h
227 
228 #define XtNinputMethod		"inputMethod"
229 #define XtCInputMethod		"InputMethod"
230 #define XtNpreeditType		"preeditType"
231 #define XtCPreeditType		"PreeditType"
232 #define XtNopenIm		"openIm"
233 #define XtCOpenIm		"OpenIm"
234 #define XtNsharedIc		"sharedIc"
235 #define XtCSharedIc		"SharedIc"
236 
237 #include <X11/Xaw/Text.h>
238 
239 #define	CIICFocus	(1 << 0)
240 #define	CIFontSet	(1 << 1)
241 #define	CIFg		(1 << 2)
242 #define	CIBg		(1 << 3)
243 #define	CIBgPixmap	(1 << 4)
244 #define	CICursorP	(1 << 5)
245 #define	CILineS		(1 << 6)
246 
247 typedef	struct _XawImPart
248 {
249     XIM			xim;
250     XrmResourceList	resources;
251     Cardinal		num_resources;
252     Boolean		open_im;
253     Boolean		initialized;
254     Dimension		area_height;
255     String		input_method;
256     String		preedit_type;
257 } XawImPart;
258 
259 typedef struct _XawIcTablePart
260 {
261     Widget		widget;
262     XIC			xic;
263     XIMStyle		input_style;
264     unsigned long	flg;
265     unsigned long	prev_flg;
266     Boolean		ic_focused;
267     XFontSet		font_set;
268     Pixel		foreground;
269     Pixel		background;
270     Pixmap		bg_pixmap;
271     XawTextPosition	cursor_position;
272     unsigned long	line_spacing;
273     Boolean		openic_error;
274     struct _XawIcTablePart *next;
275 } XawIcTablePart, *XawIcTableList;
276 
277 typedef	struct _XawIcPart
278 {
279     XIMStyle		input_style;
280     Boolean		shared_ic;
281     XawIcTableList	shared_ic_table;
282     XawIcTableList	current_ic_table;
283     XawIcTableList	ic_table;
284 } XawIcPart;
285 
286 typedef	struct _contextDataRec
287 {
288     Widget		parent;
289     Widget		ve;
290 } contextDataRec;
291 
292 typedef	struct _contextErrDataRec
293 {
294     Widget		widget;
295     XIM			xim;
296 } contextErrDataRec;
297 
298 void _XawImResizeVendorShell(
299 #if NeedFunctionPrototypes
300     Widget /* w */
301 #endif
302 );
303 
304 Dimension _XawImGetShellHeight(
305 #if NeedFunctionPrototypes
306     Widget /* w */
307 #endif
308 );
309 
310 void _XawImRealize(
311 #if NeedFunctionPrototypes
312     Widget /* w */
313 #endif
314 );
315 
316 void _XawImInitialize(
317 #if NeedFunctionPrototypes
318     Widget, /* w */
319     Widget  /* ext */
320 #endif
321 );
322 
323 void _XawImReconnect(
324 #if NeedFunctionPrototypes
325     Widget  /* w */
326 #endif
327 );
328 
329 void _XawImRegister(
330 #if NeedFunctionPrototypes
331     Widget  /* w */
332 #endif
333 );
334 
335 void _XawImUnregister(
336 #if NeedFunctionPrototypes
337     Widget  /* w */
338 #endif
339 );
340 
341 void _XawImSetValues(
342 #if NeedFunctionPrototypes
343     Widget,  /* w */
344     ArgList, /* args */
345     Cardinal /* num_args */
346 #endif
347 );
348 
349 /* DON'T USE THIS FUNCTION -- it's going away in the next release */
350 void _XawImVASetValues(
351 #if NeedVarargsPrototypes
352     Widget,  /* w */
353     ...
354 #endif
355 );
356 
357 void _XawImSetFocusValues(
358 #if NeedFunctionPrototypes
359     Widget,  /* w */
360     ArgList, /* args */
361     Cardinal /* num_args */
362 #endif
363 );
364 
365 /* DON'T USE THIS FUNCTION -- it's going away in the next release */
366 void _XawImVASetFocusValues(
367 #if NeedVarargsPrototypes
368     Widget,  /* w */
369     ...
370 #endif
371 );
372 
373 void _XawImUnsetFocus(
374 #if NeedFunctionPrototypes
375     Widget  /* w */
376 #endif
377 );
378 
379 int  _XawImWcLookupString(
380 #if NeedFunctionPrototypes
381     Widget,   /* w */
382     XKeyPressedEvent*, /* event */
383     wchar_t*, /* buffer_return */
384     int,      /* bytes_buffer */
385     KeySym*,  /* keysym_return */
386     Status*   /* status return */
387 #endif
388 );
389 
390 int  _XawImGetImAreaHeight(
391 #if NeedFunctionPrototypes
392     Widget  /* w */
393 #endif
394 );
395 
396 void _XawImCallVendorShellExtResize(
397 #if NeedFunctionPrototypes
398     Widget  /* w */
399 #endif
400 );
401 
402 void _XawImDestroy(
403 #if NeedFunctionPrototypes
404     Widget,  /* w */
405     Widget   /* ext */
406 #endif
407 );
408 
409 #endif	/* _XawImP_h */
410 
411 
412 typedef struct {
413     XtPointer	extension;
414 } XawVendorShellExtClassPart;
415 
416 typedef	struct _VendorShellExtClassRec {
417     ObjectClassPart	object_class;
418     XawVendorShellExtClassPart	vendor_shell_ext_class;
419 } XawVendorShellExtClassRec;
420 
421 typedef struct {
422     Widget	parent;
423     XawImPart	im;
424     XawIcPart	ic;
425 } XawVendorShellExtPart;
426 
427 typedef	struct XawVendorShellExtRec {
428     ObjectPart	object;
429     XawVendorShellExtPart	vendor_ext;
430 } XawVendorShellExtRec, *XawVendorShellExtWidget;
431 
432 #endif	/* _VendorEP_h */
433 
434 
435 
436 static XtResource resources[] = {
437   {XtNinput, XtCInput, XtRBool, sizeof(Bool),
438 		XtOffsetOf(VendorShellRec, wm.wm_hints.input),
439 		XtRImmediate, (XtPointer)True}
440 };
441 
442 /***************************************************************************
443  *
444  * Vendor shell class record
445  *
446  ***************************************************************************/
447 
448 static void XawVendorShellClassInitialize();
449 static void XawVendorShellClassPartInit();
450 static void XawVendorShellInitialize();
451 static Boolean XawVendorShellSetValues();
452 static void Realize(), ChangeManaged();
453 static XtGeometryResult GeometryManager();
454 void XawVendorShellExtResize();
455 
456 static CompositeClassExtensionRec vendorCompositeExt = {
457     /* next_extension     */	NULL,
458     /* record_type        */    NULLQUARK,
459     /* version            */    XtCompositeExtensionVersion,
460     /* record_size        */    sizeof (CompositeClassExtensionRec),
461     /* accepts_objects    */    TRUE,
462     /* allows_change_managed_set */ FALSE
463 };
464 
465 #define SuperClass (&wmShellClassRec)
466 externaldef(vendorshellclassrec) VendorShellClassRec vendorShellClassRec = {
467   {
468     /* superclass	  */	(WidgetClass)SuperClass,
469     /* class_name	  */	"VendorShell",
470     /* size		  */	sizeof(VendorShellRec),
471     /* class_initialize	  */	XawVendorShellClassInitialize,
472     /* class_part_init	  */	XawVendorShellClassPartInit,
473     /* Class init'ed ?	  */	FALSE,
474     /* initialize         */	XawVendorShellInitialize,
475     /* initialize_hook	  */	NULL,
476     /* realize		  */	Realize,
477     /* actions		  */	NULL,
478     /* num_actions	  */	0,
479     /* resources	  */	resources,
480     /* resource_count	  */	XtNumber(resources),
481     /* xrm_class	  */	NULLQUARK,
482     /* compress_motion	  */	FALSE,
483     /* compress_exposure  */	TRUE,
484     /* compress_enterleave*/	FALSE,
485     /* visible_interest	  */	FALSE,
486     /* destroy		  */	NULL,
487     /* resize		  */	XawVendorShellExtResize,
488     /* expose		  */	NULL,
489     /* set_values	  */	XawVendorShellSetValues,
490     /* set_values_hook	  */	NULL,
491     /* set_values_almost  */	XtInheritSetValuesAlmost,
492     /* get_values_hook	  */	NULL,
493     /* accept_focus	  */	NULL,
494     /* intrinsics version */	XtVersion,
495     /* callback offsets	  */	NULL,
496     /* tm_table		  */	NULL,
497     /* query_geometry	  */	NULL,
498     /* display_accelerator*/	NULL,
499     /* extension	  */	NULL
500   },{
501     /* geometry_manager	  */	GeometryManager,
502     /* change_managed	  */	ChangeManaged,
503     /* insert_child	  */	XtInheritInsertChild,
504     /* delete_child	  */	XtInheritDeleteChild,
505     /* extension	  */	(XtPointer) &vendorCompositeExt
506   },{
507     /* extension	  */	NULL
508   },{
509     /* extension	  */	NULL
510   },{
511     /* extension	  */	NULL
512   }
513 };
514 
515 externaldef(vendorshellwidgetclass) WidgetClass vendorShellWidgetClass =
516 	(WidgetClass) (&vendorShellClassRec);
517 
518 
519 /***************************************************************************
520  *
521  * The following section is for the Vendor shell Extension class record
522  *
523  ***************************************************************************/
524 
525 static XtResource ext_resources[] = {
526   {XtNinputMethod, XtCInputMethod, XtRString, sizeof(String),
527 		XtOffsetOf(XawVendorShellExtRec, vendor_ext.im.input_method),
528 		XtRString, (XtPointer)NULL},
529   {XtNpreeditType, XtCPreeditType, XtRString, sizeof(String),
530 		XtOffsetOf(XawVendorShellExtRec, vendor_ext.im.preedit_type),
531 		XtRString, (XtPointer)"OverTheSpot,OffTheSpot,Root"},
532   {XtNopenIm, XtCOpenIm, XtRBoolean, sizeof(Boolean),
533 		XtOffsetOf(XawVendorShellExtRec, vendor_ext.im.open_im),
534 		XtRImmediate, (XtPointer)TRUE},
535   {XtNsharedIc, XtCSharedIc, XtRBoolean, sizeof(Boolean),
536 		XtOffsetOf(XawVendorShellExtRec, vendor_ext.ic.shared_ic),
537 		XtRImmediate, (XtPointer)FALSE}
538 };
539 
540 static void XawVendorShellExtClassInitialize();
541 static void XawVendorShellExtInitialize();
542 static void XawVendorShellExtDestroy();
543 static Boolean XawVendorShellExtSetValues();
544 
545 externaldef(vendorshellextclassrec) XawVendorShellExtClassRec
546        xawvendorShellExtClassRec = {
547   {
548     /* superclass	  */	(WidgetClass)&objectClassRec,
549     /* class_name	  */	"VendorShellExt",
550     /* size		  */	sizeof(XawVendorShellExtRec),
551     /* class_initialize	  */	XawVendorShellExtClassInitialize,
552     /* class_part_initialize*/	NULL,
553     /* Class init'ed ?	  */	FALSE,
554     /* initialize	  */	XawVendorShellExtInitialize,
555     /* initialize_hook	  */	NULL,
556     /* pad		  */	NULL,
557     /* pad		  */	NULL,
558     /* pad		  */	0,
559     /* resources	  */	ext_resources,
560     /* resource_count	  */	XtNumber(ext_resources),
561     /* xrm_class	  */	NULLQUARK,
562     /* pad		  */	FALSE,
563     /* pad		  */	FALSE,
564     /* pad		  */	FALSE,
565     /* pad		  */	FALSE,
566     /* destroy		  */	XawVendorShellExtDestroy,
567     /* pad		  */	NULL,
568     /* pad		  */	NULL,
569     /* set_values	  */	XawVendorShellExtSetValues,
570     /* set_values_hook	  */	NULL,
571     /* pad		  */	NULL,
572     /* get_values_hook	  */	NULL,
573     /* pad		  */	NULL,
574     /* version		  */	XtVersion,
575     /* callback_offsets	  */	NULL,
576     /* pad		  */	NULL,
577     /* pad		  */	NULL,
578     /* pad		  */	NULL,
579     /* extension	  */	NULL
580   },{
581     /* extension	  */	NULL
582   }
583 };
584 
585 externaldef(xawvendorshellwidgetclass) WidgetClass
586      xawvendorShellExtWidgetClass = (WidgetClass) (&xawvendorShellExtClassRec);
587 
588 
589 /*ARGSUSED*/
590 static Boolean
591 XawCvtCompoundTextToString(dpy, args, num_args, fromVal, toVal, cvt_data)
592 Display *dpy;
593 XrmValuePtr args;
594 Cardinal    *num_args;
595 XrmValue *fromVal;
596 XrmValue *toVal;
597 XtPointer *cvt_data;
598 {
599     XTextProperty prop;
600     char **list;
601     int count;
602     static char *mbs = NULL;
603     int len;
604 
605     prop.value = (unsigned char *)fromVal->addr;
606     prop.encoding = XA_COMPOUND_TEXT(dpy);
607     prop.format = 8;
608     prop.nitems = fromVal->size;
609 
610     if(XmbTextPropertyToTextList(dpy, &prop, &list, &count) < Success) {
611 	XtAppWarningMsg(XtDisplayToApplicationContext(dpy),
612 	"converter", "XmbTextPropertyToTextList", "XawError",
613 	"conversion from CT to MB failed.", NULL, 0);
614 	return False;
615     }
616     len = strlen(*list);
617     toVal->size = len;
618     mbs = XtRealloc(mbs, len + 1); /* keep buffer because no one call free :( */
619     strcpy(mbs, *list);
620     XFreeStringList(list);
621     toVal->addr = (XtPointer)mbs;
622     return True;
623 }
624 
625 static void XawVendorShellClassInitialize()
626 {
627     static XtConvertArgRec screenConvertArg[] = {
628         {XtWidgetBaseOffset, (XtPointer) XtOffsetOf(WidgetRec, core.screen),
629 	     sizeof(Screen *)}
630     };
631 
632     XtAddConverter(XtRString, XtRCursor, XmuCvtStringToCursor,
633 		   screenConvertArg, XtNumber(screenConvertArg));
634 
635     XtAddConverter(XtRString, XtRBitmap, XmuCvtStringToBitmap,
636 		   screenConvertArg, XtNumber(screenConvertArg));
637 
638     XtSetTypeConverter("CompoundText", XtRString, XawCvtCompoundTextToString,
639 			NULL, 0, XtCacheNone, NULL);
640 }
641 
642 static void XawVendorShellClassPartInit(class)
643     WidgetClass class;
644 {
645     CompositeClassExtension ext;
646     VendorShellWidgetClass vsclass = (VendorShellWidgetClass) class;
647 
648     if ((ext = (CompositeClassExtension)
649 	    XtGetClassExtension (class,
650 				 XtOffsetOf(CompositeClassRec,
651 					    composite_class.extension),
652 				 NULLQUARK, 1L, (Cardinal) 0)) == NULL) {
653 	ext = (CompositeClassExtension) XtNew (CompositeClassExtensionRec);
654 	if (ext != NULL) {
655 	    ext->next_extension = vsclass->composite_class.extension;
656 	    ext->record_type = NULLQUARK;
657 	    ext->version = XtCompositeExtensionVersion;
658 	    ext->record_size = sizeof (CompositeClassExtensionRec);
659 	    ext->accepts_objects = TRUE;
660 	    ext->allows_change_managed_set = FALSE;
661 	    vsclass->composite_class.extension = (XtPointer) ext;
662 	}
663     }
664 }
665 
666 #ifdef __osf__
667 /* stupid OSF/1 shared libraries have the wrong semantics */
668 /* symbols do not get resolved external to the shared library */
669 void _XawFixupVendorShell()
670 {
671     transientShellWidgetClass->core_class.superclass =
672         (WidgetClass) &vendorShellClassRec;
673     topLevelShellWidgetClass->core_class.superclass =
674         (WidgetClass) &vendorShellClassRec;
675 }
676 #endif
677 
678 /* ARGSUSED */
679 static void XawVendorShellInitialize(req, new, args, num_args)
680 	Widget req, new;
681 	ArgList     args;
682 	Cardinal    *num_args;
683 {
684     XtAddEventHandler(new, (EventMask) 0, TRUE, _XEditResCheckMessages, NULL);
685 #ifdef HAVE_XMUREGISTEREXTERNALAGENT
686     XtAddEventHandler(new, (EventMask) 0, TRUE, XmuRegisterExternalAgent, NULL);
687 #endif /* HAVE_XMUREGISTEREXTERNALAGENT */
688 
689     XtCreateWidget("shellext", xawvendorShellExtWidgetClass,
690 		   new, args, *num_args);
691 }
692 
693 /* ARGSUSED */
694 static Boolean XawVendorShellSetValues(old, ref, new)
695 	Widget old, ref, new;
696 {
697 	return FALSE;
698 }
699 
700 static void Realize(wid, vmask, attr)
701 	Widget wid;
702 	Mask *vmask;
703 	XSetWindowAttributes *attr;
704 {
705 	WidgetClass super = wmShellWidgetClass;
706 
707 	/* Make my superclass do all the dirty work */
708 
709 	(*super->core_class.realize) (wid, vmask, attr);
710 	_XawImRealize(wid);
711 }
712 
713 
714 static void XawVendorShellExtClassInitialize()
715 {
716 }
717 
718 /* ARGSUSED */
719 static void XawVendorShellExtInitialize(req, new)
720         Widget req, new;
721 {
722     _XawImInitialize(new->core.parent, new);
723 }
724 
725 /* ARGSUSED */
726 static void XawVendorShellExtDestroy( w )
727         Widget w;
728 {
729     _XawImDestroy( w->core.parent, w );
730 }
731 
732 /* ARGSUSED */
733 static Boolean XawVendorShellExtSetValues(old, ref, new)
734 	Widget old, ref, new;
735 {
736 	return FALSE;
737 }
738 
739 void XawVendorShellExtResize( w )
740     Widget w;
741 {
742 	ShellWidget sw = (ShellWidget) w;
743 	Widget childwid;
744 	int i;
745 	int core_height;
746 
747 	_XawImResizeVendorShell( w );
748 	core_height = _XawImGetShellHeight( w );
749 	for( i = 0; i < sw->composite.num_children; i++ ) {
750 	    if( XtIsManaged( sw->composite.children[ i ] ) ) {
751 		childwid = sw->composite.children[ i ];
752 		XtResizeWidget( childwid, sw->core.width, core_height,
753 			       childwid->core.border_width );
754 	    }
755 	}
756 }
757 
758 /*ARGSUSED*/
759 static XtGeometryResult GeometryManager( wid, request, reply )
760 	Widget wid;
761 	XtWidgetGeometry *request;
762 	XtWidgetGeometry *reply;
763 {
764 	ShellWidget shell = (ShellWidget)(wid->core.parent);
765 	XtWidgetGeometry my_request;
766 
767 	if(shell->shell.allow_shell_resize == FALSE && XtIsRealized(wid))
768 		return(XtGeometryNo);
769 
770 	if (request->request_mode & (CWX | CWY))
771 	    return(XtGeometryNo);
772 
773 	/* %%% worry about XtCWQueryOnly */
774 	my_request.request_mode = 0;
775 	if (request->request_mode & CWWidth) {
776 	    my_request.width = request->width;
777 	    my_request.request_mode |= CWWidth;
778 	}
779 	if (request->request_mode & CWHeight) {
780 	    my_request.height = request->height
781 			      + _XawImGetImAreaHeight( wid );
782 	    my_request.request_mode |= CWHeight;
783 	}
784 	if (request->request_mode & CWBorderWidth) {
785 	    my_request.border_width = request->border_width;
786 	    my_request.request_mode |= CWBorderWidth;
787 	}
788 	if (XtMakeGeometryRequest((Widget)shell, &my_request, NULL)
789 		== XtGeometryYes) {
790 	    /* assert: if (request->request_mode & CWWidth) then
791 	     * 		  shell->core.width == request->width
792 	     * assert: if (request->request_mode & CWHeight) then
793 	     * 		  shell->core.height == request->height
794 	     *
795 	     * so, whatever the WM sized us to (if the Shell requested
796 	     * only one of the two) is now the correct child size
797 	     */
798 
799 	    wid->core.width = shell->core.width;
800 	    wid->core.height = shell->core.height;
801 	    if (request->request_mode & CWBorderWidth) {
802 		wid->core.x = wid->core.y = -request->border_width;
803 	    }
804 	    _XawImCallVendorShellExtResize(wid);
805 	    return XtGeometryYes;
806 	} else return XtGeometryNo;
807 }
808 
809 static void ChangeManaged(wid)
810 	Widget wid;
811 {
812 	ShellWidget w = (ShellWidget) wid;
813 	Widget* childP;
814 	int i;
815 
816 	(*SuperClass->composite_class.change_managed)(wid);
817 	for (i = w->composite.num_children, childP = w->composite.children;
818 	     i; i--, childP++) {
819 	    if (XtIsManaged(*childP)) {
820 		XtSetKeyboardFocus(wid, *childP);
821 		break;
822 	    }
823 	}
824 }
825