File: | XawIm.c |
Location: | line 889, column 6 |
Description: | Value stored to 'height' is never read |
1 | /* |
2 | * Copyright 1991 by OMRON Corporation |
3 | * |
4 | * Permission to use, copy, modify, distribute, and sell this software and its |
5 | * documentation for any purpose is hereby granted without fee, provided that |
6 | * the above copyright notice appear in all copies and that both that |
7 | * copyright notice and this permission notice appear in supporting |
8 | * documentation, and that the name of OMRON not be used in advertising or |
9 | * publicity pertaining to distribution of the software without specific, |
10 | * written prior permission. OMRON makes no representations about the |
11 | * suitability of this software for any purpose. It is provided "as is" |
12 | * without express or implied warranty. |
13 | * |
14 | * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING |
15 | * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL |
16 | * OMRON BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR |
17 | * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, |
18 | * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, |
19 | * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS |
20 | * SOFTWARE. |
21 | * |
22 | * Author: Seiji Kuwari OMRON Corporation |
23 | * kuwa@omron.co.jp |
24 | * kuwa%omron.co.jp@uunet.uu.net |
25 | */ |
26 | |
27 | |
28 | /* |
29 | |
30 | Copyright (c) 1994 X Consortium |
31 | |
32 | Permission is hereby granted, free of charge, to any person obtaining a copy |
33 | of this software and associated documentation files (the "Software"), to deal |
34 | in the Software without restriction, including without limitation the rights |
35 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
36 | copies of the Software, and to permit persons to whom the Software is |
37 | furnished to do so, subject to the following conditions: |
38 | |
39 | The above copyright notice and this permission notice shall be included in |
40 | all copies or substantial portions of the Software. |
41 | |
42 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
43 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
44 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
45 | X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN |
46 | AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
47 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
48 | |
49 | Except as contained in this notice, the name of the X Consortium shall not be |
50 | used in advertising or otherwise to promote the sale, use or other dealings |
51 | in this Software without prior written authorization from the X Consortium. |
52 | |
53 | */ |
54 | |
55 | #ifdef HAVE_CONFIG_H1 |
56 | #include "config.h" |
57 | #endif |
58 | #include <X11/IntrinsicP.h> |
59 | #include <X11/StringDefs.h> |
60 | #include <X11/Xos.h> |
61 | #include <X11/Xfuncs.h> |
62 | #include <X11/ShellP.h> |
63 | #include <X11/Xaw3d/TextP.h> |
64 | #include <X11/Xaw3d/MultiSrc.h> |
65 | #include <X11/Xaw3d/MultiSinkP.h> |
66 | #include <X11/Xaw3d/XawImP.h> |
67 | #include <X11/Xaw3d/VendorEP.h> |
68 | #include <X11/ResourceI.h> |
69 | #include <X11/VarargsI.h> |
70 | #include "XawI18n.h" |
71 | #include <ctype.h> |
72 | |
73 | # include <stdarg.h> |
74 | # define Va_start(a,b)__builtin_va_start(a, b) va_start(a,b)__builtin_va_start(a, b) |
75 | |
76 | #define maxAscentOfFontSet(fontset)( - (XExtentsOfFontSet((fontset)))->max_logical_extent.y) \ |
77 | ( - (XExtentsOfFontSet((fontset)))->max_logical_extent.y) |
78 | |
79 | #define maxHeightOfFontSet(fontset)((XExtentsOfFontSet((fontset)))->max_logical_extent.height ) \ |
80 | ((XExtentsOfFontSet((fontset)))->max_logical_extent.height) |
81 | |
82 | #define maxDescentOfFontSet(fontset)(((XExtentsOfFontSet((fontset)))->max_logical_extent.height ) - ( - (XExtentsOfFontSet((fontset)))->max_logical_extent .y)) \ |
83 | (maxHeightOfFontSet(fontset)((XExtentsOfFontSet((fontset)))->max_logical_extent.height ) - maxAscentOfFontSet(fontset)( - (XExtentsOfFontSet((fontset)))->max_logical_extent.y)) |
84 | |
85 | #define Offset(field) (XtOffsetOf(XawIcTablePart, field)__builtin_offsetof(XawIcTablePart, field)) |
86 | |
87 | /***************************************************** |
88 | * |
89 | * Forward reference prototypes |
90 | * |
91 | *****************************************************/ |
92 | |
93 | extern void XawVendorShellExtResize(Widget); |
94 | |
95 | static XawIcTableList CurrentSharedIcTable( |
96 | XawVendorShellExtPart* /* ve */ |
97 | ); |
98 | |
99 | static void DestroyIC( |
100 | Widget /* w */, |
101 | XawVendorShellExtPart* /* ve */ |
102 | ); |
103 | |
104 | static XtResource resources[] = |
105 | { |
106 | { |
107 | XtNfontSet((char*)&XtStrings[2018]), XtCFontSet((char*)&XtStrings[2034]), XtRFontSet((char*)&XtStrings[2026]), sizeof(XFontSet), |
108 | Offset (font_set), XtRString((char*)&XtStrings[1797]), XtDefaultFontSet"XtDefaultFontSet" |
109 | }, |
110 | { |
111 | XtNforeground((char*)&XtStrings[214]), XtCForeground((char*)&XtStrings[1022]), XtRPixel((char*)&XtStrings[1754]), sizeof(Pixel), |
112 | Offset (foreground), XtRString((char*)&XtStrings[1797]), (XtPointer)"XtDefaultForeground" |
113 | }, |
114 | { |
115 | XtNbackground((char*)&XtStrings[52]), XtCBackground((char*)&XtStrings[902]), XtRPixel((char*)&XtStrings[1754]), sizeof(Pixel), |
116 | Offset (background), XtRString((char*)&XtStrings[1797]), (XtPointer)"XtDefaultBackground" |
117 | }, |
118 | { |
119 | XtNbackgroundPixmap((char*)&XtStrings[63]), XtCPixmap((char*)&XtStrings[1228]), XtRPixmap((char*)&XtStrings[1760]), sizeof(Pixmap), |
120 | Offset (bg_pixmap), XtRImmediate((char*)&XtStrings[1695]), (XtPointer) XtUnspecifiedPixmap((Pixmap)2) |
121 | }, |
122 | { |
123 | XtNinsertPosition((char*)&XtStrings[326]), XtCTextPosition((char*)&XtStrings[1435]), XtRInt((char*)&XtStrings[1718]), sizeof (XawTextPosition), |
124 | Offset (cursor_position), XtRImmediate((char*)&XtStrings[1695]), (XtPointer) 0 |
125 | } |
126 | }; |
127 | #undef Offset |
128 | |
129 | |
130 | static void |
131 | SetVaArg(XPointer *arg, XPointer value) |
132 | { |
133 | *arg = value; |
134 | } |
135 | |
136 | static VendorShellWidget |
137 | SearchVendorShell(Widget w) |
138 | { |
139 | while(w && !XtIsShell(w)(((Object)(w))->object.widget_class->core_class.class_inited & 0x20)) w = XtParent(w)((w)->core.parent); |
140 | if (w && XtIsVendorShell(w)(_XtIsSubclassOf(w, (WidgetClass)vendorShellWidgetClass, (WidgetClass )wmShellWidgetClass, (XtEnum)0x40))) return((VendorShellWidget)w); |
141 | return(NULL((void*)0)); |
142 | } |
143 | |
144 | static XContext extContext = (XContext)0; |
145 | |
146 | static XawVendorShellExtPart * |
147 | SetExtPart(VendorShellWidget w, XawVendorShellExtWidget vew) |
148 | { |
149 | contextDataRec *contextData; |
150 | |
151 | if (extContext == (XContext)0) extContext = XUniqueContext()((XContext) XrmUniqueQuark()); |
152 | |
153 | contextData = XtNew(contextDataRec)((contextDataRec *) XtMalloc((unsigned) sizeof(contextDataRec ))); |
154 | contextData->parent = (Widget)w; |
155 | contextData->ve = (Widget)vew; |
156 | if (XSaveContext(XtDisplay(w)(((w)->core.screen)->display), (Window)w, extContext, (char *)contextData)) { |
157 | return(NULL((void*)0)); |
158 | } |
159 | return(&(vew->vendor_ext)); |
160 | } |
161 | |
162 | static XawVendorShellExtPart * |
163 | GetExtPart(VendorShellWidget w) |
164 | { |
165 | contextDataRec *contextData; |
166 | XawVendorShellExtWidget vew; |
167 | |
168 | if (XFindContext(XtDisplay(w)(((w)->core.screen)->display), (Window)w, extContext, |
169 | (XPointer*)&contextData)) { |
170 | return(NULL((void*)0)); |
171 | } |
172 | vew = (XawVendorShellExtWidget)contextData->ve; |
173 | return(&(vew->vendor_ext)); |
174 | } |
175 | |
176 | static Boolean |
177 | IsSharedIC(XawVendorShellExtPart *ve) |
178 | { |
179 | return( ve->ic.shared_ic ); |
180 | } |
181 | |
182 | static XawIcTableList |
183 | GetIcTableShared(Widget w, XawVendorShellExtPart *ve) |
184 | { |
185 | XawIcTableList p; |
186 | |
187 | for (p = ve->ic.ic_table; p; p = p->next) { |
188 | if (p->widget == w) { |
189 | if (IsSharedIC(ve)) { |
190 | return(ve->ic.shared_ic_table); |
191 | } else { |
192 | return(p); |
193 | } |
194 | } |
195 | } |
196 | return(NULL((void*)0)); |
197 | } |
198 | |
199 | static XawIcTableList |
200 | GetIcTable(Widget w, XawVendorShellExtPart *ve) |
201 | { |
202 | XawIcTableList p; |
203 | |
204 | for (p = ve->ic.ic_table; p; p = p->next) { |
205 | if (p->widget == w) { |
206 | return(p); |
207 | } |
208 | } |
209 | return(NULL((void*)0)); |
210 | } |
211 | |
212 | static XIMStyle |
213 | GetInputStyleOfIC(XawVendorShellExtPart *ve) |
214 | { |
215 | |
216 | if (!ve) return((XIMStyle)0); |
217 | return(ve->ic.input_style); |
218 | } |
219 | |
220 | static void |
221 | ConfigureCB(Widget w, XtPointer closure, XEvent *event) |
222 | { |
223 | XawIcTableList p; |
224 | XawVendorShellExtPart *ve; |
225 | VendorShellWidget vw; |
226 | XVaNestedList pe_attr; |
227 | XRectangle pe_area; |
228 | XawTextMargin *margin; |
229 | |
230 | if (event->type != ConfigureNotify22) return; |
231 | |
232 | if ((vw = SearchVendorShell(w)) == NULL((void*)0)) return; |
233 | |
234 | if ((ve = GetExtPart(vw))) { |
235 | if (IsSharedIC(ve)) return; |
236 | if ((ve->im.xim == NULL((void*)0)) || |
237 | ((p = GetIcTableShared(w, ve)) == NULL((void*)0)) || |
238 | (p->xic == NULL((void*)0)) || !(p->input_style & XIMPreeditPosition0x0004L)) return; |
239 | pe_area.x = 0; |
240 | pe_area.y = 0; |
241 | pe_area.width = w->core.width; |
242 | pe_area.height = w->core.height; |
243 | margin = &(((TextWidget)w)->text.margin); |
244 | pe_area.x += margin->left; |
245 | pe_area.y += margin->top; |
246 | pe_area.width -= (margin->left + margin->right - 1); |
247 | pe_area.height -= (margin->top + margin->bottom - 1); |
248 | |
249 | pe_attr = XVaCreateNestedList(0, XNArea"area", &pe_area, NULL((void*)0)); |
250 | XSetICValues(p->xic, XNPreeditAttributes"preeditAttributes", pe_attr, NULL((void*)0)); |
251 | XtFree(pe_attr); |
252 | } |
253 | } |
254 | |
255 | static XContext errContext = (XContext)0; |
256 | |
257 | static Widget |
258 | SetErrCnxt(Widget w, XIM xim) |
259 | { |
260 | contextErrDataRec *contextErrData; |
261 | |
262 | if (errContext == (XContext)0) errContext = XUniqueContext()((XContext) XrmUniqueQuark()); |
263 | |
264 | contextErrData = XtNew(contextErrDataRec)((contextErrDataRec *) XtMalloc((unsigned) sizeof(contextErrDataRec ))); |
265 | contextErrData->widget = w; |
266 | contextErrData->xim = xim; |
267 | if (XSaveContext(XtDisplay(w)(((w)->core.screen)->display), (Window)xim, errContext, |
268 | (char *)contextErrData)) { |
269 | return(NULL((void*)0)); |
270 | } |
271 | return(contextErrData->widget); |
272 | } |
273 | |
274 | static void |
275 | CloseIM(XawVendorShellExtPart *ve) |
276 | { |
277 | if (ve->im.xim) |
278 | XCloseIM(ve->im.xim); |
279 | } |
280 | |
281 | static Dimension |
282 | SetVendorShellHeight(XawVendorShellExtPart *ve, Dimension height) |
283 | { |
284 | Arg args[2]; |
285 | Cardinal i = 0; |
286 | |
287 | if (ve->im.area_height < height || height == 0) { |
288 | XtSetArg(args[i], XtNheight,((void)( (args[i]).name = (((char*)&XtStrings[234])), (args [i]).value = (XtArgVal)((ve->parent->core.height + height - ve->im.area_height)) )) |
289 | (ve->parent->core.height + height - ve->im.area_height))((void)( (args[i]).name = (((char*)&XtStrings[234])), (args [i]).value = (XtArgVal)((ve->parent->core.height + height - ve->im.area_height)) )); |
290 | ve->im.area_height = height; |
291 | XtSetValues(ve->parent, args, 1); |
292 | } |
293 | return(ve->im.area_height); |
294 | } |
295 | |
296 | static void |
297 | DestroyAllIM(XawVendorShellExtPart *ve) |
298 | { |
299 | XawIcTableList p; |
300 | contextErrDataRec *contextErrData; |
301 | |
302 | /* |
303 | * Destory all ICs |
304 | */ |
305 | if (IsSharedIC(ve)) { |
306 | if ((p = ve->ic.shared_ic_table) && p->xic) { |
307 | DestroyIC(p->widget, ve); |
308 | p->xic = NULL((void*)0); |
309 | p->ic_focused = FALSE0; |
310 | } |
311 | } else { |
312 | for (p = ve->ic.ic_table; p; p = p->next) { |
313 | if (p->xic == NULL((void*)0)) continue; |
314 | DestroyIC(p->widget, ve); |
315 | p->xic = NULL((void*)0); |
316 | p->ic_focused = FALSE0; |
317 | } |
318 | } |
319 | if (!ve->im.xim) return; |
320 | /* |
321 | * Close Input Method |
322 | */ |
323 | if (!XFindContext(XDisplayOfIM(ve->im.xim), (Window)ve->im.xim, errContext, |
324 | (XPointer*)&contextErrData)) { |
325 | if (contextErrData) XtFree((char *)contextErrData); |
326 | } |
327 | XDeleteContext(XDisplayOfIM(ve->im.xim), (Window)ve->im.xim, errContext); |
328 | CloseIM(ve); |
329 | ve->im.xim = NULL((void*)0); |
330 | |
331 | /* |
332 | * resize vendor shell to core size |
333 | */ |
334 | (void) SetVendorShellHeight(ve, 0); |
335 | /* |
336 | XawVendorShellExtResize(vw); |
337 | */ |
338 | return; |
339 | } |
340 | |
341 | static void |
342 | FreeAllDataOfVendorShell(XawVendorShellExtPart *ve, VendorShellWidget vw) |
343 | { |
344 | XawIcTableList p, next; |
345 | contextErrDataRec *contextErrData; |
346 | |
347 | if (!XFindContext(XtDisplay(vw)(((vw)->core.screen)->display), (Window)vw, extContext, |
348 | (XPointer*)&contextErrData)) { |
349 | if (contextErrData) XtFree((char *)contextErrData); |
350 | } |
351 | XDeleteContext(XtDisplay(vw)(((vw)->core.screen)->display), (Window)vw, extContext); |
352 | if (ve->ic.shared_ic_table) |
353 | XtFree((char *)ve->ic.shared_ic_table); |
354 | if (ve->im.resources) XtFree((char *)ve->im.resources); |
355 | for (p = ve->ic.ic_table; p; p = next) { |
356 | next = p->next; |
357 | XtFree((char *)p); |
358 | } |
359 | } |
360 | |
361 | static void |
362 | VendorShellDestroyed(Widget w, XtPointer cl_data, XtPointer ca_data) |
363 | { |
364 | XawVendorShellExtPart *ve; |
365 | |
366 | if ( ( ve = GetExtPart( (VendorShellWidget) w ) ) == NULL((void*)0) ) return; |
367 | DestroyAllIM( ve ); |
368 | FreeAllDataOfVendorShell( ve, (VendorShellWidget) w ); |
369 | return; |
370 | } |
371 | |
372 | /* |
373 | * Attempt to open an input method |
374 | */ |
375 | |
376 | static void |
377 | OpenIM(XawVendorShellExtPart *ve) |
378 | { |
379 | int i; |
380 | char *p, *s, *ns, *end, *pbuf, buf[32]; |
381 | XIM xim = NULL((void*)0); |
382 | XIMStyles *xim_styles; |
383 | XIMStyle input_style = 0; |
384 | Boolean found; |
385 | |
386 | if (ve->im.open_im == False0) return; |
387 | ve->im.xim = NULL((void*)0); |
388 | if (ve->im.input_method == NULL((void*)0)) { |
389 | if ((p = XSetLocaleModifiers("@im=none")) != NULL((void*)0) && *p) |
390 | xim = XOpenIM(XtDisplay(ve->parent)(((ve->parent)->core.screen)->display), NULL((void*)0), NULL((void*)0), NULL((void*)0)); |
391 | } else { |
392 | /* no fragment can be longer than the whole string */ |
393 | int len = strlen (ve->im.input_method) + 5; |
394 | |
395 | if (len < sizeof buf) pbuf = buf; |
396 | else pbuf = XtMalloc (len); |
397 | |
398 | if (pbuf == NULL((void*)0)) return; |
399 | |
400 | for(ns=s=ve->im.input_method; ns && *s;) { |
401 | /* skip any leading blanks */ |
402 | while (*s && isspace(*s)) s++; |
403 | if (!*s) break; |
404 | if ((ns = end = strchr(s, ',')) == NULL((void*)0)) |
405 | end = s + strlen(s); |
406 | /* strip any trailing blanks */ |
407 | while (isspace(*end)) end--; |
408 | |
409 | strcpy (pbuf, "@im=")__builtin___strcpy_chk (pbuf, "@im=", __builtin_object_size ( pbuf, 2 > 1 ? 1 : 0)); |
410 | strncat (pbuf, s, end - s)__builtin___strncat_chk (pbuf, s, end - s, __builtin_object_size (pbuf, 2 > 1 ? 1 : 0)); |
411 | pbuf[end - s + 4] = '\0'; |
412 | |
413 | if ((p = XSetLocaleModifiers(pbuf)) != NULL((void*)0) && *p |
414 | && (xim = XOpenIM(XtDisplay(ve->parent)(((ve->parent)->core.screen)->display), NULL((void*)0), NULL((void*)0), NULL((void*)0))) != NULL((void*)0)) |
415 | break; |
416 | |
417 | s = ns + 1; |
418 | } |
419 | |
420 | if (pbuf != buf) XtFree (pbuf); |
421 | } |
422 | if (xim == NULL((void*)0)) { |
423 | if ((p = XSetLocaleModifiers("")) != NULL((void*)0)) { |
424 | xim = XOpenIM(XtDisplay(ve->parent)(((ve->parent)->core.screen)->display), NULL((void*)0), NULL((void*)0), NULL((void*)0)); |
425 | } |
426 | } |
427 | if (xim == NULL((void*)0)) { |
428 | XtAppWarning(XtWidgetToApplicationContext(ve->parent), |
429 | "Input Method Open Failed"); |
430 | return; |
431 | } |
432 | if (XGetIMValues(xim, XNQueryInputStyle"queryInputStyle", &xim_styles, NULL((void*)0)) |
433 | || !xim_styles) { |
434 | XtAppWarning(XtWidgetToApplicationContext(ve->parent), |
435 | "input method doesn't support any style"); |
436 | XCloseIM(xim); |
437 | return; |
438 | } |
439 | found = False0; |
440 | for(ns = s = ve->im.preedit_type; s && !found;) { |
441 | while (*s && isspace(*s)) s++; |
442 | if (!*s) break; |
443 | if ((ns = end = strchr(s, ',')) == NULL((void*)0)) |
444 | end = s + strlen(s); |
445 | while (isspace(*end)) end--; |
446 | |
447 | if (!strncmp(s, "OverTheSpot", end - s)) { |
448 | input_style = (XIMPreeditPosition0x0004L | XIMStatusArea0x0100L); |
449 | } else if (!strncmp(s, "OffTheSpot", end - s)) { |
450 | input_style = (XIMPreeditArea0x0001L | XIMStatusArea0x0100L); |
451 | } else if (!strncmp(s, "Root", end - s)) { |
452 | input_style = (XIMPreeditNothing0x0008L | XIMStatusNothing0x0400L); |
453 | } |
454 | for (i = 0; (unsigned short)i < xim_styles->count_styles; i++) |
455 | if (input_style == xim_styles->supported_styles[i]) { |
456 | ve->ic.input_style = input_style; |
457 | SetErrCnxt(ve->parent, xim); |
458 | ve->im.xim = xim; |
459 | found = True1; |
460 | break; |
461 | } |
462 | |
463 | s = ns + 1; |
464 | } |
465 | XFree(xim_styles); |
466 | |
467 | if (!found) { |
468 | XCloseIM(xim); |
469 | XtAppWarning(XtWidgetToApplicationContext(ve->parent), |
470 | "input method doesn't support my input style"); |
471 | } |
472 | } |
473 | |
474 | static Boolean |
475 | ResizeVendorShell_Core(VendorShellWidget vw, XawVendorShellExtPart *ve, XawIcTableList p) |
476 | { |
477 | XVaNestedList pe_attr, st_attr; |
478 | XRectangle pe_area, st_area; |
479 | XRectangle *get_pe_area = NULL((void*)0), *get_st_area = NULL((void*)0); |
480 | |
481 | st_area.width = 0; |
482 | if (p->input_style & XIMStatusArea0x0100L) { |
483 | st_attr = XVaCreateNestedList(0, XNArea"area", &get_st_area, NULL((void*)0)); |
484 | XGetICValues(p->xic, XNStatusAttributes"statusAttributes", st_attr, NULL((void*)0)); |
485 | XFree(st_attr); |
486 | if (p->xic == NULL((void*)0)) { |
487 | return(FALSE0); |
488 | } |
489 | st_area.x = 0; |
490 | st_area.y = vw->core.height - ve->im.area_height; |
491 | st_area.width = get_st_area->width; |
492 | st_area.height = get_st_area->height; |
493 | XFree(get_st_area); |
494 | st_attr = XVaCreateNestedList(0, XNArea"area", &st_area, NULL((void*)0)); |
495 | XSetICValues(p->xic, XNStatusAttributes"statusAttributes", st_attr, NULL((void*)0)); |
496 | XFree(st_attr); |
497 | if (p->xic == NULL((void*)0)) { |
498 | return(FALSE0); |
499 | } |
500 | } |
501 | if (p->input_style & XIMPreeditArea0x0001L) { |
502 | pe_attr = XVaCreateNestedList(0, XNArea"area", &get_pe_area, NULL((void*)0)); |
503 | XGetICValues(p->xic, XNPreeditAttributes"preeditAttributes", pe_attr, NULL((void*)0)); |
504 | XFree(pe_attr); |
505 | if (p->xic == NULL((void*)0)) { |
506 | return(FALSE0); |
507 | } |
508 | pe_area.x = st_area.width; |
509 | pe_area.y = vw->core.height - ve->im.area_height; |
510 | pe_area.width = vw->core.width; |
511 | pe_area.height = get_pe_area->height; |
512 | if (p->input_style & XIMStatusArea0x0100L) { |
513 | pe_area.width -= st_area.width; |
514 | } |
515 | XFree(get_pe_area); |
516 | pe_attr = XVaCreateNestedList(0, XNArea"area", &pe_area, NULL((void*)0)); |
517 | XSetICValues(p->xic, XNPreeditAttributes"preeditAttributes", pe_attr, NULL((void*)0)); |
518 | XFree(pe_attr); |
519 | } |
520 | return(TRUE1); |
521 | } |
522 | |
523 | static void |
524 | ResizeVendorShell(VendorShellWidget vw, XawVendorShellExtPart *ve) |
525 | { |
526 | XawIcTableList p; |
527 | |
528 | if (IsSharedIC(ve)) { |
529 | p = ve->ic.shared_ic_table; |
530 | if (p->xic == NULL((void*)0)) return; |
531 | ResizeVendorShell_Core(vw, ve, p); |
532 | return; |
533 | } |
534 | for (p = ve->ic.ic_table; p; p = p->next) { |
535 | if (p->xic == NULL((void*)0)) continue; |
536 | if (ResizeVendorShell_Core(vw, ve, p) == FALSE0) return; |
537 | } |
538 | } |
539 | |
540 | static XawIcTableList |
541 | CreateIcTable(Widget w, XawVendorShellExtPart *ve) |
542 | { |
543 | XawIcTableList table; |
544 | |
545 | table = (XawIcTableList) XtMalloc(sizeof(XawIcTablePart)); |
546 | if (table == NULL((void*)0)) return(NULL((void*)0)); |
547 | table->widget = w; |
548 | table->xic = NULL((void*)0); |
549 | table->flg = table->prev_flg = 0; |
550 | table->font_set = NULL((void*)0); |
551 | table->foreground = table->background = 0xffffffff; |
552 | table->bg_pixmap = 0; |
553 | table->cursor_position = 0xffff; |
554 | table->line_spacing = 0; |
555 | table->ic_focused = FALSE0; |
556 | table->openic_error = FALSE0; |
557 | return(table); |
558 | } |
559 | |
560 | static Boolean |
561 | RegisterToVendorShell(Widget w, XawVendorShellExtPart *ve) |
562 | { |
563 | XawIcTableList table; |
564 | |
565 | if ((table = CreateIcTable(w, ve)) == NULL((void*)0)) return(FALSE0); |
566 | table->next = ve->ic.ic_table; |
567 | ve->ic.ic_table = table; |
568 | return(TRUE1); |
569 | } |
570 | |
571 | static void |
572 | UnregisterFromVendorShell(Widget w, XawVendorShellExtPart *ve) |
573 | { |
574 | XawIcTableList *prev, p; |
575 | |
576 | for (prev = &ve->ic.ic_table; (p = *prev); prev = &p->next) { |
577 | if (p->widget == w) { |
578 | *prev = p->next; |
579 | XtFree((char *)p); |
580 | break; |
581 | } |
582 | } |
583 | return; |
584 | } |
585 | |
586 | static void |
587 | SetICValuesShared(Widget w, XawVendorShellExtPart *ve, XawIcTableList p, Boolean check) |
588 | { |
589 | XawIcTableList pp; |
590 | |
591 | if ((pp = GetIcTable(w, ve)) == NULL((void*)0)) return; |
592 | if (check == TRUE1 && CurrentSharedIcTable(ve) != pp) return; |
593 | |
594 | if (pp->prev_flg & CICursorP(1 << 5) && p->cursor_position != pp->cursor_position) { |
595 | p->cursor_position = pp->cursor_position; |
596 | p->flg |= CICursorP(1 << 5); |
597 | } |
598 | if (pp->prev_flg & CIFontSet(1 << 1) && p->font_set != pp->font_set) { |
599 | p->font_set = pp->font_set; |
600 | p->flg |= (CIFontSet(1 << 1)|CICursorP(1 << 5)); |
601 | } |
602 | if (pp->prev_flg & CIFg(1 << 2) && p->foreground != pp->foreground) { |
603 | p->foreground = pp->foreground; |
604 | p->flg |= CIFg(1 << 2); |
605 | } |
606 | if (pp->prev_flg & CIBg(1 << 3) && p->background != pp->background) { |
607 | p->background = pp->background; |
608 | p->flg |= CIBg(1 << 3); |
609 | } |
610 | if (pp->prev_flg & CIBgPixmap(1 << 4) && p->bg_pixmap != pp->bg_pixmap) { |
611 | p->bg_pixmap = pp->bg_pixmap; |
612 | p->flg |= CIBgPixmap(1 << 4); |
613 | } |
614 | if (pp->prev_flg & CILineS(1 << 6) && p->line_spacing != pp->line_spacing) { |
615 | p->line_spacing = pp->line_spacing; |
616 | p->flg |= CILineS(1 << 6); |
617 | } |
618 | } |
619 | |
620 | static Boolean |
621 | IsCreatedIC(Widget w, XawVendorShellExtPart *ve) |
622 | { |
623 | XawIcTableList p; |
624 | |
625 | if (ve->im.xim == NULL((void*)0)) return(FALSE0); |
626 | if ((p = GetIcTableShared(w, ve)) == NULL((void*)0)) return(FALSE0); |
627 | if (p->xic == NULL((void*)0)) return(FALSE0); |
628 | return(TRUE1); |
629 | } |
630 | |
631 | static void |
632 | SizeNegotiation(XawIcTableList p, Dimension width, Dimension height) |
633 | { |
634 | XRectangle pe_area, st_area; |
635 | XVaNestedList pe_attr = NULL((void*)0), st_attr = NULL((void*)0); |
636 | int ic_cnt = 0, pe_cnt = 0, st_cnt = 0; |
637 | XRectangle *pe_area_needed = NULL((void*)0), *st_area_needed = NULL((void*)0); |
638 | XPointer ic_a[5]; |
639 | |
640 | if (p->input_style & XIMPreeditArea0x0001L) { |
641 | pe_attr = XVaCreateNestedList(0, XNAreaNeeded"areaNeeded", &pe_area_needed, NULL((void*)0)); |
642 | SetVaArg( &ic_a[ic_cnt], (XPointer) XNPreeditAttributes"preeditAttributes"); ic_cnt++; |
643 | SetVaArg( &ic_a[ic_cnt], (XPointer) pe_attr); ic_cnt++; |
644 | } |
645 | if (p->input_style & XIMStatusArea0x0100L) { |
646 | st_attr = XVaCreateNestedList(0, XNAreaNeeded"areaNeeded", &st_area_needed, NULL((void*)0)); |
647 | SetVaArg( &ic_a[ic_cnt], (XPointer) XNStatusAttributes"statusAttributes"); ic_cnt++; |
648 | SetVaArg( &ic_a[ic_cnt], (XPointer) st_attr); ic_cnt++; |
649 | } |
650 | SetVaArg( &ic_a[ic_cnt], (XPointer) NULL((void*)0)); |
651 | |
652 | if (ic_cnt > 0) { |
653 | XGetICValues(p->xic, ic_a[0], ic_a[1], ic_a[2], ic_a[3], ic_a[4], NULL((void*)0)); |
654 | if (pe_attr) XFree(pe_attr); |
655 | if (st_attr) XFree(st_attr); |
656 | if (p->xic == NULL((void*)0)) { |
657 | p->openic_error = True1; |
658 | return; |
659 | } |
660 | pe_attr = st_attr = NULL((void*)0); |
661 | ic_cnt = pe_cnt = st_cnt = 0; |
662 | if (p->input_style & XIMStatusArea0x0100L) { |
663 | st_area.height = st_area_needed->height; |
664 | st_area.x = 0; |
665 | st_area.y = height - st_area.height; |
666 | if (p->input_style & XIMPreeditArea0x0001L) { |
667 | st_area.width = st_area_needed->width; |
668 | } else { |
669 | st_area.width = width; |
670 | } |
671 | |
672 | XFree(st_area_needed); |
673 | st_attr = XVaCreateNestedList(0, XNArea"area", &st_area, NULL((void*)0)); |
674 | SetVaArg( &ic_a[ic_cnt], (XPointer) XNStatusAttributes"statusAttributes"); ic_cnt++; |
675 | SetVaArg( &ic_a[ic_cnt], (XPointer) st_attr); ic_cnt++; |
676 | } |
677 | if (p->input_style & XIMPreeditArea0x0001L) { |
678 | if (p->input_style & XIMStatusArea0x0100L) { |
679 | pe_area.x = st_area.width; |
680 | pe_area.width = width - st_area.width; |
681 | } else { |
682 | pe_area.x = 0; |
683 | pe_area.width = width; |
684 | } |
685 | pe_area.height = pe_area_needed->height; |
686 | XFree(pe_area_needed); |
687 | pe_area.y = height - pe_area.height; |
688 | pe_attr = XVaCreateNestedList(0, XNArea"area", &pe_area, NULL((void*)0)); |
689 | SetVaArg( &ic_a[ic_cnt], (XPointer) XNPreeditAttributes"preeditAttributes"); ic_cnt++; |
690 | SetVaArg( &ic_a[ic_cnt], (XPointer) pe_attr); ic_cnt++; |
691 | } |
692 | SetVaArg( &ic_a[ic_cnt], (XPointer) NULL((void*)0)); |
693 | XSetICValues(p->xic, ic_a[0], ic_a[1], ic_a[2], ic_a[3], ic_a[4], NULL((void*)0)); |
694 | if (pe_attr) XFree(pe_attr); |
695 | if (st_attr) XFree(st_attr); |
696 | if (p->xic == NULL((void*)0)) { |
697 | p->openic_error = True1; |
698 | return; |
699 | } |
700 | } |
701 | } |
702 | |
703 | static void |
704 | CreateIC(Widget w, XawVendorShellExtPart *ve) |
705 | { |
706 | XawIcTableList p; |
707 | XPoint position; |
708 | XRectangle pe_area, st_area; |
709 | XVaNestedList pe_attr = NULL((void*)0), st_attr = NULL((void*)0); |
710 | XPointer ic_a[20], pe_a[20], st_a[20]; |
711 | Dimension height = 0; |
712 | int ic_cnt = 0, pe_cnt = 0, st_cnt = 0; |
713 | XawTextMargin *margin; |
714 | |
715 | if (!XtIsRealized(w)(XtWindowOfObject(w) != 0L)) return; |
716 | if (((ve->im.xim == NULL((void*)0)) || (p = GetIcTableShared(w, ve)) == NULL((void*)0)) || |
717 | p->xic || (p->openic_error != FALSE0)) return; |
718 | |
719 | p->input_style = GetInputStyleOfIC(ve); |
720 | |
721 | if (IsSharedIC(ve)) SetICValuesShared(w, ve, p, FALSE0); |
722 | XFlush(XtDisplay(w)(((w)->core.screen)->display)); |
723 | |
724 | if (p->input_style & (XIMPreeditArea0x0001L|XIMPreeditPosition0x0004L|XIMStatusArea0x0100L)) { |
725 | if (p->flg & CIFontSet(1 << 1)) { |
726 | SetVaArg( &pe_a[pe_cnt], (XPointer) XNFontSet"fontSet"); pe_cnt++; |
727 | SetVaArg( &pe_a[pe_cnt], (XPointer) p->font_set); pe_cnt++; |
728 | SetVaArg( &st_a[st_cnt], (XPointer) XNFontSet"fontSet"); st_cnt++; |
729 | SetVaArg( &st_a[st_cnt], (XPointer) p->font_set); st_cnt++; |
730 | height = maxAscentOfFontSet(p->font_set)( - (XExtentsOfFontSet((p->font_set)))->max_logical_extent .y) |
731 | + maxDescentOfFontSet(p->font_set)(((XExtentsOfFontSet((p->font_set)))->max_logical_extent .height) - ( - (XExtentsOfFontSet((p->font_set)))->max_logical_extent .y)); |
732 | height = SetVendorShellHeight(ve, height); |
733 | } |
734 | if (p->flg & CIFg(1 << 2)) { |
735 | SetVaArg( &pe_a[pe_cnt], (XPointer) XNForeground"foreground"); pe_cnt++; |
736 | SetVaArg( &pe_a[pe_cnt], (XPointer) p->foreground); pe_cnt++; |
737 | SetVaArg( &st_a[st_cnt], (XPointer) XNForeground"foreground"); st_cnt++; |
738 | SetVaArg( &st_a[st_cnt], (XPointer) p->foreground); st_cnt++; |
739 | } |
740 | if (p->flg & CIBg(1 << 3)) { |
741 | SetVaArg( &pe_a[pe_cnt], (XPointer) XNBackground"background"); pe_cnt++; |
742 | SetVaArg( &pe_a[pe_cnt], (XPointer) p->background); pe_cnt++; |
743 | SetVaArg( &st_a[st_cnt], (XPointer) XNBackground"background"); st_cnt++; |
744 | SetVaArg( &st_a[st_cnt], (XPointer) p->background); st_cnt++; |
745 | } |
746 | if (p->flg & CIBgPixmap(1 << 4)) { |
747 | SetVaArg( &pe_a[pe_cnt], (XPointer) XNBackgroundPixmap"backgroundPixmap"); pe_cnt++; |
748 | SetVaArg( &pe_a[pe_cnt], (XPointer) p->bg_pixmap); pe_cnt++; |
749 | SetVaArg( &st_a[st_cnt], (XPointer) XNBackgroundPixmap"backgroundPixmap"); st_cnt++; |
750 | SetVaArg( &st_a[st_cnt], (XPointer) p->bg_pixmap); st_cnt++; |
751 | } |
752 | if (p->flg & CILineS(1 << 6)) { |
753 | SetVaArg( &pe_a[pe_cnt], (XPointer) XNLineSpace"lineSpace"); pe_cnt++; |
754 | SetVaArg( &pe_a[pe_cnt], (XPointer) p->line_spacing); pe_cnt++; |
755 | SetVaArg( &st_a[st_cnt], (XPointer) XNLineSpace"lineSpace"); st_cnt++; |
756 | SetVaArg( &st_a[st_cnt], (XPointer) p->line_spacing); st_cnt++; |
757 | } |
758 | } |
759 | if (p->input_style & XIMPreeditArea0x0001L) { |
760 | pe_area.x = 0; |
761 | pe_area.y = ve->parent->core.height - height; |
762 | pe_area.width = ve->parent->core.width; |
763 | pe_area.height = height; |
764 | SetVaArg( &pe_a[pe_cnt], (XPointer) XNArea"area"); pe_cnt++; |
765 | SetVaArg( &pe_a[pe_cnt], (XPointer) &pe_area); pe_cnt++; |
766 | } |
767 | if (p->input_style & XIMPreeditPosition0x0004L) { |
768 | pe_area.x = 0; |
769 | pe_area.y = 0; |
770 | pe_area.width = w->core.width; |
771 | pe_area.height = w->core.height; |
772 | margin = &(((TextWidget)w)->text.margin); |
773 | pe_area.x += margin->left; |
774 | pe_area.y += margin->top; |
775 | pe_area.width -= (margin->left + margin->right - 1); |
776 | pe_area.height -= (margin->top + margin->bottom - 1); |
777 | SetVaArg( &pe_a[pe_cnt], (XPointer) XNArea"area"); pe_cnt++; |
778 | SetVaArg( &pe_a[pe_cnt], (XPointer) &pe_area); pe_cnt++; |
779 | if (p->flg & CICursorP(1 << 5)) { |
780 | _XawMultiSinkPosToXY(w, p->cursor_position, &position.x, &position.y); |
781 | } else { |
782 | position.x = position.y = 0; |
783 | } |
784 | SetVaArg( &pe_a[pe_cnt], (XPointer) XNSpotLocation"spotLocation"); pe_cnt++; |
785 | SetVaArg( &pe_a[pe_cnt], (XPointer) &position); pe_cnt++; |
786 | } |
787 | if (p->input_style & XIMStatusArea0x0100L) { |
788 | st_area.x = 0; |
789 | st_area.y = ve->parent->core.height - height; |
790 | st_area.width = ve->parent->core.width; |
791 | st_area.height = height; |
792 | SetVaArg( &st_a[st_cnt], (XPointer) XNArea"area"); st_cnt++; |
793 | SetVaArg( &st_a[st_cnt], (XPointer) &st_area); st_cnt++; |
794 | } |
795 | |
796 | SetVaArg( &ic_a[ic_cnt], (XPointer) XNInputStyle"inputStyle"); ic_cnt++; |
797 | SetVaArg( &ic_a[ic_cnt], (XPointer) p->input_style); ic_cnt++; |
798 | SetVaArg( &ic_a[ic_cnt], (XPointer) XNClientWindow"clientWindow"); ic_cnt++; |
799 | SetVaArg( &ic_a[ic_cnt], (XPointer) XtWindow(ve->parent)((ve->parent)->core.window)); ic_cnt++; |
800 | SetVaArg( &ic_a[ic_cnt], (XPointer) XNFocusWindow"focusWindow"); ic_cnt++; |
801 | SetVaArg( &ic_a[ic_cnt], (XPointer) XtWindow(w)((w)->core.window)); ic_cnt++; |
802 | |
803 | if (pe_cnt > 0) { |
804 | SetVaArg( &pe_a[pe_cnt], (XPointer) NULL((void*)0)); |
805 | pe_attr = XVaCreateNestedList(0, pe_a[0], pe_a[1], pe_a[2], pe_a[3], |
806 | pe_a[4], pe_a[5], pe_a[6], pe_a[7], pe_a[8], |
807 | pe_a[9], pe_a[10], pe_a[11], pe_a[12], |
808 | pe_a[13], pe_a[14], pe_a[15], pe_a[16], |
809 | pe_a[17], pe_a[18], pe_a[19], NULL((void*)0)); |
810 | SetVaArg( &ic_a[ic_cnt], (XPointer) XNPreeditAttributes"preeditAttributes"); ic_cnt++; |
811 | SetVaArg( &ic_a[ic_cnt], (XPointer) pe_attr); ic_cnt++; |
812 | } |
813 | |
814 | if (st_cnt > 0) { |
815 | SetVaArg( &st_a[st_cnt], (XPointer) NULL((void*)0)); |
816 | st_attr = XVaCreateNestedList(0, st_a[0], st_a[1], st_a[2], st_a[3], |
817 | st_a[4], st_a[5], st_a[6], st_a[7], st_a[8], |
818 | st_a[9], st_a[10], st_a[11], st_a[12], |
819 | st_a[13], st_a[14], st_a[15], st_a[16], |
820 | st_a[17], st_a[18], st_a[19], NULL((void*)0)); |
821 | SetVaArg( &ic_a[ic_cnt], (XPointer) XNStatusAttributes"statusAttributes"); ic_cnt++; |
822 | SetVaArg( &ic_a[ic_cnt], (XPointer) st_attr); ic_cnt++; |
823 | } |
824 | SetVaArg( &ic_a[ic_cnt], (XPointer) NULL((void*)0)); |
825 | |
826 | p->xic = XCreateIC(ve->im.xim, ic_a[0], ic_a[1], ic_a[2], ic_a[3], |
827 | ic_a[4], ic_a[5], ic_a[6], ic_a[7], ic_a[8], ic_a[9], |
828 | ic_a[10], ic_a[11], ic_a[12], ic_a[13], ic_a[14], |
829 | ic_a[15], ic_a[16], ic_a[17], ic_a[18], ic_a[19], NULL((void*)0)); |
830 | if (pe_attr) XtFree(pe_attr); |
831 | if (st_attr) XtFree(st_attr); |
832 | |
833 | if (p->xic == NULL((void*)0)) { |
834 | p->openic_error = True1; |
835 | return; |
836 | } |
837 | |
838 | SizeNegotiation(p, ve->parent->core.width, ve->parent->core.height); |
839 | |
840 | p->flg &= ~(CIFontSet(1 << 1) | CIFg(1 << 2) | CIBg(1 << 3) | CIBgPixmap(1 << 4) | CICursorP(1 << 5) | CILineS(1 << 6)); |
841 | |
842 | if (!IsSharedIC(ve)) { |
843 | if (p->input_style & XIMPreeditPosition0x0004L) { |
844 | XtAddEventHandler(w, (EventMask)StructureNotifyMask(1L<<17), FALSE0, |
845 | (XtEventHandler)ConfigureCB, (Opaque)NULL((void*)0)); |
846 | } |
847 | } |
848 | } |
849 | |
850 | static void |
851 | SetICValues(Widget w, XawVendorShellExtPart *ve, Boolean focus) |
852 | { |
853 | XawIcTableList p; |
854 | XPoint position; |
855 | XRectangle pe_area; |
856 | XVaNestedList pe_attr = NULL((void*)0), st_attr = NULL((void*)0); |
857 | XPointer ic_a[20], pe_a[20], st_a[20]; |
858 | int ic_cnt = 0, pe_cnt = 0, st_cnt = 0; |
859 | XawTextMargin *margin; |
860 | int height; |
861 | |
862 | if ((ve->im.xim == NULL((void*)0)) || ((p = GetIcTableShared(w, ve)) == NULL((void*)0)) || |
863 | (p->xic == NULL((void*)0))) return; |
864 | |
865 | if (IsSharedIC(ve)) SetICValuesShared(w, ve, p, TRUE1); |
866 | XFlush(XtDisplay(w)(((w)->core.screen)->display)); |
867 | if (focus == FALSE0 && |
868 | !(p->flg & (CIFontSet(1 << 1) | CIFg(1 << 2) | CIBg(1 << 3) | |
869 | CIBgPixmap(1 << 4) | CICursorP(1 << 5) | CILineS(1 << 6)))) return; |
870 | #ifdef SPOT |
871 | if ((p->input_style & XIMPreeditPosition0x0004L) |
872 | && ((!IsSharedIC(ve) && ((p->flg & ~CIICFocus(1 << 0)) == CICursorP(1 << 5))) |
873 | || (IsSharedIC(ve) && p->flg == CICursorP(1 << 5)))) { |
874 | _XawMultiSinkPosToXY(w, p->cursor_position, &position.x, &position.y); |
875 | _XipChangeSpot(p->xic, position.x, position.y); |
876 | p->flg &= ~CICursorP(1 << 5); |
877 | return; |
878 | } |
879 | #endif |
880 | |
881 | if (p->input_style & (XIMPreeditArea0x0001L|XIMPreeditPosition0x0004L|XIMStatusArea0x0100L)) { |
882 | if (p->flg & CIFontSet(1 << 1)) { |
883 | SetVaArg( &pe_a[pe_cnt], (XPointer) XNFontSet"fontSet"); pe_cnt++; |
884 | SetVaArg( &pe_a[pe_cnt], (XPointer) p->font_set); pe_cnt++; |
885 | SetVaArg( &st_a[st_cnt], (XPointer) XNFontSet"fontSet"); st_cnt++; |
886 | SetVaArg( &st_a[st_cnt], (XPointer) p->font_set); st_cnt++; |
887 | height = maxAscentOfFontSet(p->font_set)( - (XExtentsOfFontSet((p->font_set)))->max_logical_extent .y) |
888 | + maxDescentOfFontSet(p->font_set)(((XExtentsOfFontSet((p->font_set)))->max_logical_extent .height) - ( - (XExtentsOfFontSet((p->font_set)))->max_logical_extent .y)); |
889 | height = SetVendorShellHeight(ve, height); |
Value stored to 'height' is never read | |
890 | } |
891 | if (p->flg & CIFg(1 << 2)) { |
892 | SetVaArg( &pe_a[pe_cnt], (XPointer) XNForeground"foreground"); pe_cnt++; |
893 | SetVaArg( &pe_a[pe_cnt], (XPointer) p->foreground); pe_cnt++; |
894 | SetVaArg( &st_a[st_cnt], (XPointer) XNForeground"foreground"); st_cnt++; |
895 | SetVaArg( &st_a[st_cnt], (XPointer) p->foreground); st_cnt++; |
896 | } |
897 | if (p->flg & CIBg(1 << 3)) { |
898 | SetVaArg( &pe_a[pe_cnt], (XPointer) XNBackground"background"); pe_cnt++; |
899 | SetVaArg( &pe_a[pe_cnt], (XPointer) p->background); pe_cnt++; |
900 | SetVaArg( &st_a[st_cnt], (XPointer) XNBackground"background"); st_cnt++; |
901 | SetVaArg( &st_a[st_cnt], (XPointer) p->background); st_cnt++; |
902 | } |
903 | if (p->flg & CIBgPixmap(1 << 4)) { |
904 | SetVaArg( &pe_a[pe_cnt], (XPointer) XNBackgroundPixmap"backgroundPixmap"); pe_cnt++; |
905 | SetVaArg( &pe_a[pe_cnt], (XPointer) p->bg_pixmap); pe_cnt++; |
906 | SetVaArg( &st_a[st_cnt], (XPointer) XNBackgroundPixmap"backgroundPixmap"); st_cnt++; |
907 | SetVaArg( &st_a[st_cnt], (XPointer) p->bg_pixmap); st_cnt++; |
908 | } |
909 | if (p->flg & CILineS(1 << 6)) { |
910 | SetVaArg( &pe_a[pe_cnt], (XPointer) XNLineSpace"lineSpace"); pe_cnt++; |
911 | SetVaArg( &pe_a[pe_cnt], (XPointer) p->line_spacing); pe_cnt++; |
912 | SetVaArg( &st_a[st_cnt], (XPointer) XNLineSpace"lineSpace"); st_cnt++; |
913 | SetVaArg( &st_a[st_cnt], (XPointer) p->line_spacing); st_cnt++; |
914 | } |
915 | } |
916 | if (p->input_style & XIMPreeditPosition0x0004L) { |
917 | if (p->flg & CICursorP(1 << 5)) { |
918 | _XawMultiSinkPosToXY(w, p->cursor_position, &position.x, &position.y); |
919 | SetVaArg( &pe_a[pe_cnt], (XPointer) XNSpotLocation"spotLocation"); pe_cnt++; |
920 | SetVaArg( &pe_a[pe_cnt], (XPointer) &position); pe_cnt++; |
921 | } |
922 | } |
923 | if (IsSharedIC(ve)) { |
924 | if (p->input_style & XIMPreeditPosition0x0004L) { |
925 | pe_area.x = 0; |
926 | pe_area.y = 0; |
927 | pe_area.width = w->core.width; |
928 | pe_area.height = w->core.height; |
929 | margin = &(((TextWidget)w)->text.margin); |
930 | pe_area.x += margin->left; |
931 | pe_area.y += margin->top; |
932 | pe_area.width -= (margin->left + margin->right - 1); |
933 | pe_area.height -= (margin->top + margin->bottom - 1); |
934 | SetVaArg( &pe_a[pe_cnt], (XPointer) XNArea"area"); pe_cnt++; |
935 | SetVaArg( &pe_a[pe_cnt], (XPointer) &pe_area); pe_cnt++; |
936 | } |
937 | } |
938 | |
939 | if (pe_cnt > 0) { |
940 | SetVaArg( &pe_a[pe_cnt], (XPointer) NULL((void*)0)); |
941 | pe_attr = XVaCreateNestedList(0, pe_a[0], pe_a[1], pe_a[2], pe_a[3], |
942 | pe_a[4], pe_a[5], pe_a[6], pe_a[7], |
943 | pe_a[8], pe_a[9], pe_a[10], pe_a[11], |
944 | pe_a[12], pe_a[13], pe_a[14], pe_a[15], |
945 | pe_a[16], pe_a[17], pe_a[18], pe_a[19], NULL((void*)0)); |
946 | SetVaArg( &ic_a[ic_cnt], (XPointer) XNPreeditAttributes"preeditAttributes"); ic_cnt++; |
947 | SetVaArg( &ic_a[ic_cnt], (XPointer) pe_attr); ic_cnt++; |
948 | } |
949 | if (st_cnt > 0) { |
950 | SetVaArg( &st_a[st_cnt], (XPointer) NULL((void*)0)); |
951 | st_attr = XVaCreateNestedList(0, st_a[0], st_a[1], st_a[2], st_a[3], |
952 | st_a[4], st_a[5], st_a[6], st_a[7], |
953 | st_a[8], st_a[9], st_a[10], st_a[11], |
954 | st_a[12], st_a[13], st_a[14], st_a[15], |
955 | st_a[16], st_a[17], st_a[18], st_a[19], NULL((void*)0)); |
956 | SetVaArg( &ic_a[ic_cnt], (XPointer) XNStatusAttributes"statusAttributes"); ic_cnt++; |
957 | SetVaArg( &ic_a[ic_cnt], (XPointer) st_attr); ic_cnt++; |
958 | } |
959 | if (focus == TRUE1) { |
960 | SetVaArg( &ic_a[ic_cnt], (XPointer) XNFocusWindow"focusWindow"); ic_cnt++; |
961 | SetVaArg( &ic_a[ic_cnt], (XPointer) XtWindow(w)((w)->core.window)); ic_cnt++; |
962 | } |
963 | if (ic_cnt > 0) { |
964 | SetVaArg( &ic_a[ic_cnt], (XPointer) NULL((void*)0)); |
965 | XSetICValues(p->xic, ic_a[0], ic_a[1], ic_a[2], ic_a[3], ic_a[4], |
966 | ic_a[5], ic_a[6], ic_a[7], ic_a[8], ic_a[9], ic_a[10], |
967 | ic_a[11], ic_a[12], ic_a[13], ic_a[14], ic_a[15], |
968 | ic_a[16], ic_a[17], ic_a[18], ic_a[19], NULL((void*)0)); |
969 | if (pe_attr) XtFree(pe_attr); |
970 | if (st_attr) XtFree(st_attr); |
971 | } |
972 | |
973 | if (IsSharedIC(ve) && p->flg & CIFontSet(1 << 1)) |
974 | SizeNegotiation(p, ve->parent->core.width, ve->parent->core.height); |
975 | |
976 | p->flg &= ~(CIFontSet(1 << 1) | CIFg(1 << 2) | CIBg(1 << 3) | CIBgPixmap(1 << 4) | CICursorP(1 << 5) | CILineS(1 << 6)); |
977 | } |
978 | |
979 | static void |
980 | SharedICChangeFocusWindow(Widget w, XawVendorShellExtPart *ve, XawIcTableList p) |
981 | { |
982 | XawIcTableList pp; |
983 | |
984 | if (w == NULL((void*)0)) { |
985 | ve->ic.current_ic_table = NULL((void*)0); |
986 | return; |
987 | } |
988 | if ((pp = GetIcTable(w, ve)) == NULL((void*)0)) return; |
989 | ve->ic.current_ic_table = pp; |
990 | SetICValues(w, ve, TRUE1); |
991 | } |
992 | |
993 | static XawIcTableList |
994 | CurrentSharedIcTable(XawVendorShellExtPart *ve) |
995 | { |
996 | return(ve->ic.current_ic_table); |
997 | } |
998 | |
999 | static void |
1000 | SetICFocus(Widget w, XawVendorShellExtPart *ve) |
1001 | { |
1002 | XawIcTableList p, pp; |
1003 | |
1004 | if ((ve->im.xim == NULL((void*)0)) || ((p = GetIcTableShared(w, ve)) == NULL((void*)0)) || |
1005 | (p->xic == NULL((void*)0))) return; |
1006 | |
1007 | if (IsSharedIC(ve)) { |
1008 | pp = CurrentSharedIcTable(ve); |
1009 | if (pp == NULL((void*)0) || pp->widget != w) { |
1010 | SharedICChangeFocusWindow(w, ve, p); |
1011 | } |
1012 | } |
1013 | if (p->flg & CIICFocus(1 << 0) && p->ic_focused == FALSE0) { |
1014 | p->ic_focused = TRUE1; |
1015 | XSetICFocus(p->xic); |
1016 | } |
1017 | p->flg &= ~CIICFocus(1 << 0); |
1018 | } |
1019 | |
1020 | static void |
1021 | UnsetICFocus(Widget w, XawVendorShellExtPart *ve) |
1022 | { |
1023 | XawIcTableList p, pp; |
1024 | |
1025 | if ((ve->im.xim == NULL((void*)0)) || ((p = GetIcTableShared(w, ve)) == NULL((void*)0)) || |
1026 | (p->xic == NULL((void*)0))) return; |
1027 | |
1028 | if (IsSharedIC(ve) && (pp = CurrentSharedIcTable(ve))) { |
1029 | if (pp->widget != w) { |
1030 | return; |
1031 | } |
1032 | SharedICChangeFocusWindow(NULL((void*)0), ve, p); |
1033 | } |
1034 | if (p->ic_focused == TRUE1) { |
1035 | XUnsetICFocus(p->xic); |
1036 | p->ic_focused = FALSE0; |
1037 | } |
1038 | } |
1039 | |
1040 | static void |
1041 | SetValues(Widget w, XawVendorShellExtPart *ve, ArgList args, Cardinal num_args) |
1042 | { |
1043 | ArgList arg; |
1044 | |
1045 | XrmName argName; |
1046 | XrmResourceList xrmres; |
1047 | int i; |
1048 | XawIcTablePart *p, save_tbl; |
1049 | |
1050 | if ((p = GetIcTable(w, ve)) == NULL((void*)0)) return; |
1051 | |
1052 | memcpy(&save_tbl, p, sizeof(XawIcTablePart))__builtin___memcpy_chk (&save_tbl, p, sizeof(XawIcTablePart ), __builtin_object_size (&save_tbl, 0)); |
1053 | |
1054 | for (arg = args ; num_args != 0; num_args--, arg++) { |
1055 | argName = XrmStringToName(arg->name)XrmStringToQuark(arg->name); |
1056 | for (xrmres = (XrmResourceList)ve->im.resources, i = 0; |
1057 | i < ve->im.num_resources; i++, xrmres++) { |
1058 | if (argName == xrmres->xrm_name) { |
1059 | _XtCopyFromArg(arg->value, |
1060 | (char *)p - xrmres->xrm_offset - 1, |
1061 | xrmres->xrm_size); |
1062 | break; |
1063 | } |
1064 | } |
1065 | } |
1066 | if (p->font_set != save_tbl.font_set) { |
1067 | p->flg |= CIFontSet(1 << 1); |
1068 | } |
1069 | if (p->foreground != save_tbl.foreground) { |
1070 | p->flg |= CIFg(1 << 2); |
1071 | } |
1072 | if (p->background !=save_tbl.background) { |
1073 | p->flg |= CIBg(1 << 3); |
1074 | } |
1075 | if (p->bg_pixmap != save_tbl.bg_pixmap) { |
1076 | p->flg |= CIBgPixmap(1 << 4); |
1077 | } |
1078 | if (p->cursor_position != save_tbl.cursor_position) { |
1079 | p->flg |= CICursorP(1 << 5); |
1080 | } |
1081 | if (p->line_spacing != save_tbl.line_spacing) { |
1082 | p->flg |= CILineS(1 << 6); |
1083 | } |
1084 | p->prev_flg |= p->flg; |
1085 | } |
1086 | |
1087 | static void |
1088 | SetFocus(Widget w, XawVendorShellExtPart *ve) |
1089 | { |
1090 | XawIcTableList p; |
1091 | if ((p = GetIcTableShared(w, ve)) == NULL((void*)0)) return; |
1092 | |
1093 | if ( p->ic_focused == FALSE0 || IsSharedIC(ve)) { |
1094 | p->flg |= CIICFocus(1 << 0); |
1095 | } |
1096 | p->prev_flg |= p->flg; |
1097 | } |
1098 | |
1099 | static void |
1100 | DestroyIC(Widget w, XawVendorShellExtPart *ve) |
1101 | { |
1102 | XawIcTableList p; |
1103 | |
1104 | if ((ve->im.xim == NULL((void*)0)) || ((p = GetIcTableShared(w, ve)) == NULL((void*)0)) || |
1105 | (p->xic == NULL((void*)0))) return; |
1106 | if (IsSharedIC(ve)) { |
1107 | if (GetIcTable(w, ve) == ve->ic.current_ic_table) { |
1108 | UnsetICFocus(w, ve); |
1109 | } |
1110 | return; |
1111 | } |
1112 | XDestroyIC(p->xic); |
1113 | if (!IsSharedIC(ve)) { |
1114 | if (p->input_style & XIMPreeditPosition0x0004L) { |
1115 | XtRemoveEventHandler(w, (EventMask)StructureNotifyMask(1L<<17), FALSE0, |
1116 | (XtEventHandler)ConfigureCB, (Opaque)NULL((void*)0)); |
1117 | } |
1118 | } |
1119 | } |
1120 | |
1121 | static void |
1122 | SetFocusValues(Widget inwidg, ArgList args, Cardinal num_args, Boolean focus) |
1123 | { |
1124 | XawVendorShellExtPart *ve; |
1125 | VendorShellWidget vw; |
1126 | |
1127 | if ((vw = SearchVendorShell(inwidg)) == NULL((void*)0)) return; |
1128 | if ((ve = GetExtPart(vw))) { |
1129 | if (num_args > 0) SetValues(inwidg, ve, args, num_args); |
1130 | if (focus) SetFocus(inwidg, ve); |
1131 | if (XtIsRealized((Widget)vw)(XtWindowOfObject((Widget)vw) != 0L) && ve->im.xim) { |
1132 | if (IsCreatedIC(inwidg, ve)) { |
1133 | SetICValues(inwidg, ve, FALSE0); |
1134 | if (focus) SetICFocus(inwidg, ve); |
1135 | } else { |
1136 | CreateIC(inwidg, ve); |
1137 | SetICFocus(inwidg, ve); |
1138 | } |
1139 | } |
1140 | } |
1141 | } |
1142 | |
1143 | static void |
1144 | UnsetFocus(Widget inwidg) |
1145 | { |
1146 | XawVendorShellExtPart *ve; |
1147 | VendorShellWidget vw; |
1148 | XawIcTableList p; |
1149 | |
1150 | if ((vw = SearchVendorShell(inwidg)) == NULL((void*)0)) return; |
1151 | if ((ve = GetExtPart(vw))) { |
1152 | if ((p = GetIcTableShared(inwidg, ve)) == NULL((void*)0)) return; |
1153 | if (p->flg & CIICFocus(1 << 0)) { |
1154 | p->flg &= ~CIICFocus(1 << 0); |
1155 | } |
1156 | p->prev_flg &= ~CIICFocus(1 << 0); |
1157 | if (ve->im.xim && XtIsRealized((Widget)vw)(XtWindowOfObject((Widget)vw) != 0L) && p->xic) { |
1158 | UnsetICFocus(inwidg, ve); |
1159 | } |
1160 | } |
1161 | } |
1162 | |
1163 | static Boolean |
1164 | IsRegistered(Widget w, XawVendorShellExtPart *ve) |
1165 | { |
1166 | XawIcTableList p; |
1167 | |
1168 | for (p = ve->ic.ic_table; p; p = p->next) |
1169 | { |
1170 | if (p->widget == w) return(TRUE1); |
1171 | } |
1172 | return(FALSE0); |
1173 | } |
1174 | |
1175 | static void |
1176 | Register(Widget inwidg, XawVendorShellExtPart *ve) |
1177 | { |
1178 | if (ve->im.xim == NULL((void*)0)) |
1179 | { |
1180 | OpenIM(ve); |
1181 | } |
1182 | |
1183 | if (IsRegistered(inwidg, ve)) return; |
1184 | |
1185 | if (RegisterToVendorShell(inwidg, ve) == FALSE0) return; |
1186 | |
1187 | if (ve->im.xim == NULL((void*)0)) return; |
1188 | |
1189 | if (XtIsRealized(ve->parent)(XtWindowOfObject(ve->parent) != 0L)) |
1190 | { |
1191 | CreateIC(inwidg, ve); |
1192 | SetICFocus(inwidg, ve); |
1193 | } |
1194 | } |
1195 | |
1196 | static Boolean |
1197 | NoRegistered(XawVendorShellExtPart *ve) |
1198 | { |
1199 | if (ve->ic.ic_table == NULL((void*)0)) return(TRUE1); |
1200 | return(FALSE0); |
1201 | } |
1202 | |
1203 | static void |
1204 | Unregister(Widget inwidg, XawVendorShellExtPart *ve) |
1205 | { |
1206 | if (!IsRegistered(inwidg, ve)) return; |
1207 | |
1208 | DestroyIC(inwidg, ve); |
1209 | |
1210 | UnregisterFromVendorShell(inwidg, ve); |
1211 | |
1212 | if (NoRegistered(ve)) |
1213 | { |
1214 | CloseIM(ve); |
1215 | ve->im.xim = NULL((void*)0); |
1216 | /* |
1217 | * resize vendor shell to core size |
1218 | */ |
1219 | (void) SetVendorShellHeight(ve, 0); |
1220 | } |
1221 | } |
1222 | |
1223 | static void |
1224 | AllCreateIC(XawVendorShellExtPart *ve) |
1225 | { |
1226 | XawIcTableList p; |
1227 | |
1228 | if (ve->im.xim == NULL((void*)0)) return; |
1229 | if (IsSharedIC(ve) && ve->ic.ic_table[0].widget) { |
1230 | p = ve->ic.shared_ic_table; |
1231 | if (p->xic == NULL((void*)0)) |
1232 | CreateIC(ve->ic.ic_table[0].widget, ve); |
1233 | SetICFocus(ve->ic.ic_table[0].widget, ve); |
1234 | return; |
1235 | } |
1236 | for (p = ve->ic.ic_table; p; p = p->next) { |
1237 | if (p->xic == NULL((void*)0)) |
1238 | CreateIC(p->widget, ve); |
1239 | } |
1240 | for (p = ve->ic.ic_table; p; p = p->next) { |
1241 | SetICFocus(p->widget, ve); |
1242 | } |
1243 | } |
1244 | |
1245 | |
1246 | static void |
1247 | Reconnect(XawVendorShellExtPart *ve) |
1248 | { |
1249 | XawIcTableList p; |
1250 | |
1251 | ve->im.open_im = True1; |
1252 | if (ve->im.xim == NULL((void*)0)) { |
1253 | OpenIM(ve); |
1254 | } |
1255 | if (ve->im.xim == NULL((void*)0)) return; |
1256 | |
1257 | if (IsSharedIC(ve)) { |
1258 | p = ve->ic.shared_ic_table; |
1259 | p->flg = p->prev_flg; |
1260 | p->openic_error = FALSE0; |
1261 | } else { |
1262 | for (p = ve->ic.ic_table; p; p = p->next) { |
1263 | p->flg = p->prev_flg; |
1264 | p->openic_error = FALSE0; |
1265 | } |
1266 | } |
1267 | AllCreateIC(ve); |
1268 | } |
1269 | |
1270 | |
1271 | static void |
1272 | CompileResourceList(XtResourceList res, unsigned int num_res) |
1273 | { |
1274 | unsigned int count; |
1275 | |
1276 | #define xrmres ((XrmResourceList) res) |
1277 | for (count = 0; count < num_res; res++, count++) { |
1278 | xrmres->xrm_name = XrmPermStringToQuark(res->resource_name); |
1279 | xrmres->xrm_class = XrmPermStringToQuark(res->resource_class); |
1280 | xrmres->xrm_type = XrmPermStringToQuark(res->resource_type); |
1281 | xrmres->xrm_offset = -res->resource_offset - 1; |
1282 | xrmres->xrm_default_type = XrmPermStringToQuark(res->default_type); |
1283 | } |
1284 | #undef xrmres |
1285 | } |
1286 | |
1287 | static Boolean |
1288 | Initialize(VendorShellWidget vw, XawVendorShellExtPart *ve) |
1289 | { |
1290 | if (!XtIsVendorShell((Widget)vw)(_XtIsSubclassOf((Widget)vw, (WidgetClass)vendorShellWidgetClass , (WidgetClass)wmShellWidgetClass, (XtEnum)0x40))) return(FALSE0); |
1291 | ve->parent = (Widget)vw; |
1292 | ve->im.xim = NULL((void*)0); |
1293 | ve->im.area_height = 0; |
1294 | ve->im.resources = (XrmResourceList)XtMalloc(sizeof(resources)); |
1295 | if (ve->im.resources == NULL((void*)0)) return(FALSE0); |
1296 | memcpy((char *)ve->im.resources, (char *)resources, sizeof(resources))__builtin___memcpy_chk ((char *)ve->im.resources, (char *) resources, sizeof(resources), __builtin_object_size ((char *) ve->im.resources, 0)); |
1297 | ve->im.num_resources = XtNumber(resources)((Cardinal) (sizeof(resources) / sizeof(resources[0]))); |
1298 | CompileResourceList( (XtResourceList) ve->im.resources, |
1299 | ve->im.num_resources ); |
1300 | if ((ve->ic.shared_ic_table = CreateIcTable( (Widget)vw, ve)) == NULL((void*)0)) |
1301 | return(FALSE0); |
1302 | ve->ic.current_ic_table = NULL((void*)0); |
1303 | ve->ic.ic_table = NULL((void*)0); |
1304 | return(TRUE1); |
1305 | } |
1306 | |
1307 | |
1308 | /* Destroy() |
1309 | * |
1310 | * This frees all (most?) of the resources malloced by XawIm. |
1311 | * It is called by _XawImDestroy, which is called by Vendor.c's |
1312 | * VendorExt's Destroy method. Sheeran, Omron KK, 93/08/05 */ |
1313 | |
1314 | static void |
1315 | Destroy(Widget w, XawVendorShellExtPart *ve) |
1316 | { |
1317 | contextDataRec *contextData; |
1318 | contextErrDataRec *contextErrData; |
1319 | |
1320 | if (!XtIsVendorShell( w )(_XtIsSubclassOf(w, (WidgetClass)vendorShellWidgetClass, (WidgetClass )wmShellWidgetClass, (XtEnum)0x40)) ) |
1321 | return; |
1322 | XtFree( (char*) ve->im.resources ); |
1323 | |
1324 | if (extContext != (XContext)0 && |
1325 | !XFindContext (XtDisplay (w)(((w)->core.screen)->display), (Window)w, |
1326 | extContext, (XPointer*)&contextData)) |
1327 | XtFree( (char*) contextData ); |
1328 | |
1329 | if (errContext != (XContext)0 && |
1330 | !XFindContext (XDisplayOfIM( ve->im.xim ), (Window) ve->im.xim, |
1331 | errContext, (XPointer*) &contextErrData)) |
1332 | XtFree( (char*) contextErrData ); |
1333 | } |
1334 | |
1335 | /********************************************* |
1336 | * |
1337 | * SEMI-PRIVATE FUNCTIONS |
1338 | * For use by other Xaw modules |
1339 | * |
1340 | ********************************************/ |
1341 | |
1342 | void |
1343 | _XawImResizeVendorShell( |
1344 | Widget w ) |
1345 | { |
1346 | XawVendorShellExtPart *ve; |
1347 | |
1348 | if ( ( ve = GetExtPart( (VendorShellWidget) w ) ) && ve->im.xim ) { |
1349 | ResizeVendorShell( (VendorShellWidget) w, ve ); |
1350 | } |
1351 | } |
1352 | |
1353 | |
1354 | Dimension |
1355 | _XawImGetShellHeight( |
1356 | Widget w ) |
1357 | { |
1358 | XawVendorShellExtPart *ve; |
1359 | |
1360 | if (!XtIsVendorShell( w )(_XtIsSubclassOf(w, (WidgetClass)vendorShellWidgetClass, (WidgetClass )wmShellWidgetClass, (XtEnum)0x40)) ) return( w->core.height ); |
1361 | if ((ve = GetExtPart( (VendorShellWidget) w ))) { |
1362 | return( w->core.height - ve->im.area_height ); |
1363 | } |
1364 | return( w->core.height ); |
1365 | } |
1366 | |
1367 | void |
1368 | _XawImRealize( |
1369 | Widget w ) |
1370 | { |
1371 | XawVendorShellExtPart *ve; |
1372 | |
1373 | if ( !XtIsRealized( w )(XtWindowOfObject(w) != 0L) || !XtIsVendorShell( w )(_XtIsSubclassOf(w, (WidgetClass)vendorShellWidgetClass, (WidgetClass )wmShellWidgetClass, (XtEnum)0x40)) ) return; |
1374 | if ((ve = GetExtPart( (VendorShellWidget) w ))) { |
1375 | XtAddEventHandler( w, (EventMask)StructureNotifyMask(1L<<17), FALSE0, |
1376 | XawVendorShellExtResize, (XtPointer)NULL((void*)0) ); |
1377 | AllCreateIC(ve); |
1378 | } |
1379 | } |
1380 | |
1381 | void |
1382 | _XawImInitialize( |
1383 | Widget w, |
1384 | Widget ext ) |
1385 | { |
1386 | XawVendorShellExtPart *ve; |
1387 | |
1388 | if ( !XtIsVendorShell( w )(_XtIsSubclassOf(w, (WidgetClass)vendorShellWidgetClass, (WidgetClass )wmShellWidgetClass, (XtEnum)0x40)) ) return; |
1389 | if ((ve = SetExtPart( (VendorShellWidget) w, (XawVendorShellExtWidget)ext)) ) { |
1390 | if ( Initialize( (VendorShellWidget) w, ve ) == FALSE0 ) return; |
1391 | XtAddCallback( w, XtNdestroyCallback((char*)&XtStrings[169]), VendorShellDestroyed, |
1392 | (XtPointer) NULL((void*)0) ); |
1393 | } |
1394 | } |
1395 | |
1396 | void |
1397 | _XawImReconnect( |
1398 | Widget inwidg ) |
1399 | { |
1400 | XawVendorShellExtPart *ve; |
1401 | VendorShellWidget vw; |
1402 | |
1403 | if ((vw = SearchVendorShell(inwidg)) == NULL((void*)0)) return; |
1404 | if ((ve = GetExtPart(vw))) { |
1405 | Reconnect(ve); |
1406 | } |
1407 | } |
1408 | |
1409 | void |
1410 | _XawImRegister( |
1411 | Widget inwidg) |
1412 | { |
1413 | XawVendorShellExtPart *ve; |
1414 | VendorShellWidget vw; |
1415 | |
1416 | if ((vw = SearchVendorShell(inwidg)) == NULL((void*)0)) return; |
1417 | if ((ve = GetExtPart(vw))) { |
1418 | Register(inwidg, ve); |
1419 | } |
1420 | } |
1421 | |
1422 | void |
1423 | _XawImUnregister( |
1424 | Widget inwidg) |
1425 | { |
1426 | XawVendorShellExtPart *ve; |
1427 | VendorShellWidget vw; |
1428 | |
1429 | if ((vw = SearchVendorShell(inwidg)) == NULL((void*)0)) return; |
1430 | if ((ve = GetExtPart(vw))) { |
1431 | Unregister(inwidg, ve); |
1432 | } |
1433 | } |
1434 | |
1435 | void |
1436 | _XawImSetValues( |
1437 | Widget inwidg, |
1438 | ArgList args, |
1439 | Cardinal num_args ) |
1440 | { |
1441 | SetFocusValues( inwidg, args, num_args, FALSE0 ); |
1442 | } |
1443 | |
1444 | void |
1445 | _XawImVASetValues( Widget inwidg, ... ) |
1446 | { |
1447 | va_list var; |
1448 | ArgList args = NULL((void*)0); |
1449 | Cardinal num_args; |
1450 | int total_count, typed_count; |
1451 | |
1452 | Va_start( var, inwidg )__builtin_va_start(var, inwidg); |
1453 | _XtCountVaList( var, &total_count, &typed_count ); |
1454 | va_end( var )__builtin_va_end(var); |
1455 | |
1456 | Va_start( var, inwidg )__builtin_va_start(var, inwidg); |
1457 | |
1458 | _XtVaToArgList( inwidg, var, total_count, &args, &num_args ); |
1459 | _XawImSetValues( inwidg, args, num_args ); |
1460 | if ( args != NULL((void*)0) ) { |
1461 | XtFree( (XtPointer) args ); |
1462 | } |
1463 | va_end( var )__builtin_va_end(var); |
1464 | } |
1465 | |
1466 | void |
1467 | _XawImSetFocusValues( |
1468 | Widget inwidg, |
1469 | ArgList args, |
1470 | Cardinal num_args) |
1471 | { |
1472 | SetFocusValues(inwidg, args, num_args, TRUE1); |
1473 | } |
1474 | |
1475 | void |
1476 | _XawImVASetFocusValues(Widget inwidg, ...) |
1477 | { |
1478 | va_list var; |
1479 | ArgList args = NULL((void*)0); |
1480 | Cardinal num_args; |
1481 | int total_count, typed_count; |
1482 | |
1483 | Va_start(var, inwidg)__builtin_va_start(var, inwidg); |
1484 | _XtCountVaList(var, &total_count, &typed_count); |
1485 | va_end(var)__builtin_va_end(var); |
1486 | |
1487 | Va_start(var,inwidg)__builtin_va_start(var, inwidg); |
1488 | |
1489 | _XtVaToArgList(inwidg, var, total_count, &args, &num_args); |
1490 | _XawImSetFocusValues(inwidg, args, num_args); |
1491 | if (args != NULL((void*)0)) { |
1492 | XtFree((XtPointer)args); |
1493 | } |
1494 | va_end(var)__builtin_va_end(var); |
1495 | } |
1496 | |
1497 | void |
1498 | _XawImUnsetFocus( |
1499 | Widget inwidg) |
1500 | { |
1501 | UnsetFocus(inwidg); |
1502 | } |
1503 | |
1504 | int |
1505 | _XawImWcLookupString( |
1506 | Widget inwidg, |
1507 | XKeyPressedEvent *event, |
1508 | wchar_t* buffer_return, |
1509 | int bytes_buffer, |
1510 | KeySym *keysym_return, |
1511 | Statusint *status_return) |
1512 | { |
1513 | XawVendorShellExtPart* ve; |
1514 | VendorShellWidget vw; |
1515 | XawIcTableList p; |
1516 | int i, ret; |
1517 | char tmp_buf[64], *tmp_p; |
1518 | wchar_t* buf_p; |
1519 | |
1520 | if ((vw = SearchVendorShell(inwidg)) && (ve = GetExtPart(vw)) && |
1521 | ve->im.xim && (p = GetIcTableShared(inwidg, ve)) && p->xic) { |
1522 | return(XwcLookupString(p->xic, event, buffer_return, bytes_buffer, |
1523 | keysym_return, status_return)); |
1524 | } |
1525 | ret = XLookupString( event, tmp_buf, 64, keysym_return, |
1526 | (XComposeStatus*) status_return ); |
1527 | for ( i = 0, tmp_p = tmp_buf, buf_p = buffer_return; i < ret; i++ ) { |
1528 | *buf_p++ = _Xaw_atowc(*tmp_p++); |
1529 | } |
1530 | return( ret ); |
1531 | } |
1532 | |
1533 | int |
1534 | _XawImGetImAreaHeight( |
1535 | Widget w) |
1536 | { |
1537 | XawVendorShellExtPart *ve; |
1538 | VendorShellWidget vw; |
1539 | |
1540 | if ((vw = SearchVendorShell(w)) && (ve = GetExtPart(vw))) { |
1541 | return(ve->im.area_height); |
1542 | } |
1543 | return(0); |
1544 | } |
1545 | |
1546 | void |
1547 | _XawImCallVendorShellExtResize( |
1548 | Widget w) |
1549 | { |
1550 | VendorShellWidget vw; |
1551 | |
1552 | if ((vw = SearchVendorShell(w)) && GetExtPart(vw)) { |
1553 | XawVendorShellExtResize((Widget)vw); |
1554 | } |
1555 | } |
1556 | |
1557 | |
1558 | /* _XawImDestroy() |
1559 | * |
1560 | * This should be called by the VendorExt from its |
1561 | * core Destroy method. Sheeran, Omron KK 93/08/05 */ |
1562 | |
1563 | void |
1564 | _XawImDestroy( |
1565 | Widget w, |
1566 | Widget ext ) |
1567 | { |
1568 | XawVendorShellExtPart *ve; |
1569 | |
1570 | if ( !XtIsVendorShell( w )(_XtIsSubclassOf(w, (WidgetClass)vendorShellWidgetClass, (WidgetClass )wmShellWidgetClass, (XtEnum)0x40)) ) return; |
1571 | if ((ve = GetExtPart( (VendorShellWidget) w ))) |
1572 | Destroy( w, ve ); |
1573 | } |