1 /******************************************************************
3 Copyright 1990, 1991, 1992,1993, 1994 by FUJITSU LIMITED
4 Copyright 1994 by Sony Corporation
6 Permission to use, copy, modify, distribute, and sell this software
7 and its documentation for any purpose is hereby granted without fee,
8 provided that the above copyright notice appear in all copies and
9 that both that copyright notice and this permission notice appear
10 in supporting documentation, and that the name of FUJITSU LIMITED
11 and Sony Corporation not be used in advertising or publicity
12 pertaining to distribution of the software without specific,
13 written prior permission. FUJITSU LIMITED and Sony Corporation make
14 no representations about the suitability of this software for any
15 purpose. It is provided "as is" without express or implied warranty.
17 FUJITSU LIMITED AND SONY CORPORATION DISCLAIM ALL WARRANTIES WITH
18 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
19 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED AND
20 SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
21 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
22 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
23 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
24 PERFORMANCE OF THIS SOFTWARE.
26 Author: Takashi Fujiwara FUJITSU LIMITED
27 fujiwara@a80.tech.yk.fujitsu.co.jp
28 Modifier: Makoto Wakamatsu Sony Corporation
31 ******************************************************************/
41 #include "Xresource.h"
43 #define GET_NAME(x) name_table + x.name_offset
45 typedef struct _XimValueOffsetInfo {
46 unsigned short name_offset;
50 struct _XimValueOffsetInfo *, XPointer, XPointer, unsigned long
53 struct _XimValueOffsetInfo *, XPointer, XPointer
56 struct _XimValueOffsetInfo *, XPointer, XPointer
58 } XimValueOffsetInfoRec, *XimValueOffsetInfo;
60 #ifdef XIM_CONNECTABLE
65 if(!strcmp(str, "True") || !strcmp(str, "true") ||
66 !strcmp(str, "Yes") || !strcmp(str, "yes") ||
67 !strcmp(str, "ON") || !strcmp(str, "on"))
73 _XimSetProtoResource(im)
76 char res_name_buf[256];
78 char res_class_buf[256];
82 XIMStyle preedit_style = 0;
83 XIMStyle status_style = 0;
85 char* dotximdot = ".xim.";
86 char* ximdot = "xim.";
87 char* dotXimdot = ".Xim.";
88 char* Ximdot = "Xim.";
93 if (strlen (im->core.res_name) < 200) res_name = res_name_buf;
94 else res_name = Xmalloc (strlen (im->core.res_name) + 50);
95 if (strlen (im->core.res_class) < 200) res_class = res_class_buf;
96 else res_class = Xmalloc (strlen (im->core.res_class) + 50);
97 /* pretend malloc always works */
99 (void) sprintf (res_name, "%s%s%s",
100 im->core.res_name != NULL ? im->core.res_name : "*",
101 im->core.res_name != NULL ? dotximdot : ximdot,
103 (void) sprintf (res_class, "%s%s%s",
104 im->core.res_class != NULL ? im->core.res_class : "*",
105 im->core.res_class != NULL ? dotXimdot : Ximdot,
107 bzero(&value, sizeof(XrmValue));
108 if(XrmGetResource(im->core.rdb, res_name, res_class, &str_type, &value)) {
109 if(_XimCheckBool(value.addr)) {
110 MARK_USE_AUTHORIZATION_FUNC(im);
114 (void) sprintf (res_name, "%s%s%s",
115 im->core.res_name != NULL ? im->core.res_name : "*",
116 im->core.res_name != NULL ? dotximdot : ximdot,
118 (void) sprintf (res_class, "%s%s%s",
119 im->core.res_class != NULL ? im->core.res_class : "*",
120 im->core.res_class != NULL ? dotXimdot : Ximdot,
122 bzero(&value, sizeof(XrmValue));
123 if(XrmGetResource(im->core.rdb, res_name, res_class, &str_type, &value)) {
124 if(_XimCheckBool(value.addr)) {
125 MARK_DELAYBINDABLE(im);
129 (void) sprintf (res_name, "%s%s%s",
130 im->core.res_name != NULL ? im->core.res_name : "*",
131 im->core.res_name != NULL ? dotximdot : ximdot,
133 (void) sprintf (res_class, "%s%s%s",
134 im->core.res_class != NULL ? im->core.res_class : "*",
135 im->core.res_class != NULL ? dotXimdot : Ximdot,
137 bzero(&value, sizeof(XrmValue));
138 if(XrmGetResource(im->core.rdb, res_name, res_class, &str_type, &value)) {
139 if(_XimCheckBool(value.addr)) {
140 MARK_RECONNECTABLE(im);
144 if(!IS_CONNECTABLE(im)) {
145 if (res_name != res_name_buf) Xfree (res_name);
146 if (res_class != res_class_buf) Xfree (res_class);
150 (void) sprintf (res_name, "%s%s%s",
151 im->core.res_name != NULL ? im->core.res_name : "*",
152 im->core.res_name != NULL ? dotximdot : ximdot,
153 "preeditDefaultStyle");
154 (void) sprintf (res_class, "%s%s%s",
155 im->core.res_class != NULL ? im->core.res_class : "*",
156 im->core.res_class != NULL ? dotXimdot : Ximdot,
157 "PreeditDefaultStyle");
158 if(XrmGetResource(im->core.rdb, res_name, res_class, &str_type, &value)) {
159 if(!strcmp(value.addr, "XIMPreeditArea"))
160 preedit_style = XIMPreeditArea;
161 else if(!strcmp(value.addr, "XIMPreeditCallbacks"))
162 preedit_style = XIMPreeditCallbacks;
163 else if(!strcmp(value.addr, "XIMPreeditPosition"))
164 preedit_style = XIMPreeditPosition;
165 else if(!strcmp(value.addr, "XIMPreeditNothing"))
166 preedit_style = XIMPreeditNothing;
167 else if(!strcmp(value.addr, "XIMPreeditNone"))
168 preedit_style = XIMPreeditNone;
171 preedit_style = XIMPreeditNothing;
173 (void) sprintf (res_name, "%s%s%s",
174 im->core.res_name != NULL ? im->core.res_name : "*",
175 im->core.res_name != NULL ? dotximdot : ximdot,
176 "statusDefaultStyle");
177 (void) sprintf (res_class, "%s%s%s",
178 im->core.res_class != NULL ? im->core.res_class : "*",
179 im->core.res_class != NULL ? dotXimdot : Ximdot,
180 "StatusDefaultStyle");
181 if(XrmGetResource(im->core.rdb, res_name, res_class, &str_type, &value)) {
182 if(!strcmp(value.addr, "XIMStatusArea"))
183 status_style = XIMStatusArea;
184 else if(!strcmp(value.addr, "XIMStatusCallbacks"))
185 status_style = XIMStatusCallbacks;
186 else if(!strcmp(value.addr, "XIMStatusNothing"))
187 status_style = XIMStatusNothing;
188 else if(!strcmp(value.addr, "XIMStatusNone"))
189 status_style = XIMStatusNone;
192 status_style = XIMStatusNothing;
194 if(!(imstyles = (XIMStyles *)Xmalloc(sizeof(XIMStyles) + sizeof(XIMStyle)))){
195 if (res_name != res_name_buf) Xfree (res_name);
196 if (res_class != res_class_buf) Xfree (res_class);
199 imstyles->count_styles = 1;
200 imstyles->supported_styles =
201 (XIMStyle *)((char *)imstyles + sizeof(XIMStyles));
202 imstyles->supported_styles[0] = preedit_style | status_style;
203 im->private.proto.default_styles = imstyles;
204 if (res_name != res_name_buf) Xfree (res_name);
205 if (res_class != res_class_buf) Xfree (res_class);
207 #endif /* XIM_CONNECTABLE */
209 static const char name_table[] =
210 /* 0 */ XNQueryInputStyle"\0"
211 /* 16 */ XNClientWindow"\0"
212 /* 29 */ XNInputStyle"\0"
213 /* 40 */ XNFocusWindow"\0"
214 /* 52 */ XNResourceName"\0"
215 /* 65 */ XNResourceClass"\0"
216 /* 79 */ XNGeometryCallback"\0"
217 /* 96 */ XNDestroyCallback"\0"
218 /* 112 */ XNFilterEvents"\0"
219 /* 125 */ XNPreeditStartCallback"\0"
220 /* 146 */ XNPreeditDoneCallback"\0"
221 /* 166 */ XNPreeditDrawCallback"\0"
222 /* 186 */ XNPreeditCaretCallback"\0"
223 /* 207 */ XNPreeditStateNotifyCallback"\0"
224 /* 234 */ XNPreeditAttributes"\0"
225 /* 252 */ XNStatusStartCallback"\0"
226 /* 272 */ XNStatusDoneCallback"\0"
227 /* 291 */ XNStatusDrawCallback"\0"
228 /* 310 */ XNStatusAttributes"\0"
230 /* 332 */ XNAreaNeeded"\0"
231 /* 343 */ XNSpotLocation"\0"
232 /* 356 */ XNColormap"\0"
233 /* 365 */ XNStdColormap"\0"
234 /* 377 */ XNForeground"\0"
235 /* 388 */ XNBackground"\0"
236 /* 399 */ XNBackgroundPixmap"\0"
237 /* 416 */ XNFontSet"\0"
238 /* 424 */ XNLineSpace"\0"
239 /* 434 */ XNCursor"\0"
240 /* 441 */ XNQueryIMValuesList"\0"
241 /* 459 */ XNQueryICValuesList"\0"
242 /* 477 */ XNVisiblePosition"\0"
243 /* 493 */ XNStringConversionCallback"\0"
244 /* 518 */ XNStringConversion"\0"
245 /* 535 */ XNResetState"\0"
246 /* 546 */ XNHotKey"\0"
247 /* 553 */ XNHotKeyState"\0"
248 /* 565 */ XNPreeditState
251 #define OFFSET_XNQUERYINPUTSTYLE 0
252 #define OFFSET_XNCLIENTWINDOW 16
253 #define OFFSET_XNINPUTSTYLE 29
254 #define OFFSET_XNFOCUSWINDOW 40
255 #define OFFSET_XNRESOURCENAME 52
256 #define OFFSET_XNRESOURCECLASS 65
257 #define OFFSET_XNGEOMETRYCALLBACK 79
258 #define OFFSET_XNDESTROYCALLBACK 96
259 #define OFFSET_XNFILTEREVENTS 112
260 #define OFFSET_XNPREEDITSTARTCALLBACK 125
261 #define OFFSET_XNPREEDITDONECALLBACK 146
262 #define OFFSET_XNPREEDITDRAWCALLBACK 166
263 #define OFFSET_XNPREEDITCARETCALLBACK 186
264 #define OFFSET_XNPREEDITSTATENOTIFYCALLBACK 207
265 #define OFFSET_XNPREEDITATTRIBUTES 234
266 #define OFFSET_XNSTATUSSTARTCALLBACK 252
267 #define OFFSET_XNSTATUSDONECALLBACK 272
268 #define OFFSET_XNSTATUSDRAWCALLBACK 291
269 #define OFFSET_XNSTATUSATTRIBUTES 310
270 #define OFFSET_XNAREA 327
271 #define OFFSET_XNAREANEEDED 332
272 #define OFFSET_XNSPOTLOCATION 343
273 #define OFFSET_XNCOLORMAP 356
274 #define OFFSET_XNSTDCOLORMAP 365
275 #define OFFSET_XNFOREGROUND 377
276 #define OFFSET_XNBACKGROUND 388
277 #define OFFSET_XNBACKGROUNDPIXMAP 399
278 #define OFFSET_XNFONTSET 416
279 #define OFFSET_XNLINESPACE 424
280 #define OFFSET_XNCURSOR 434
281 #define OFFSET_XNQUERYIMVALUESLIST 441
282 #define OFFSET_XNQUERYICVALUESLIST 459
283 #define OFFSET_XNVISIBLEPOSITION 477
284 #define OFFSET_XNSTRINGCONVERSIONCALLBACK 493
285 #define OFFSET_XNSTRINGCONVERSION 518
286 #define OFFSET_XNRESETSTATE 535
287 #define OFFSET_XNHOTKEY 546
288 #define OFFSET_XNHOTKEYSTATE 553
289 #define OFFSET_XNPREEDITSTATE 565
291 /* offsets into name_table */
292 static const unsigned short supported_local_im_values_list[] = {
293 OFFSET_XNQUERYINPUTSTYLE,
294 OFFSET_XNRESOURCENAME,
295 OFFSET_XNRESOURCECLASS,
296 OFFSET_XNDESTROYCALLBACK,
297 OFFSET_XNQUERYIMVALUESLIST,
298 OFFSET_XNQUERYICVALUESLIST,
299 OFFSET_XNVISIBLEPOSITION
302 /* offsets into name_table */
303 static const unsigned short supported_local_ic_values_list[] = {
305 OFFSET_XNCLIENTWINDOW,
306 OFFSET_XNFOCUSWINDOW,
307 OFFSET_XNRESOURCENAME,
308 OFFSET_XNRESOURCECLASS,
309 OFFSET_XNGEOMETRYCALLBACK,
310 OFFSET_XNFILTEREVENTS,
311 OFFSET_XNDESTROYCALLBACK,
312 OFFSET_XNSTRINGCONVERSIONCALLBACK,
313 OFFSET_XNSTRINGCONVERSIONCALLBACK,
316 OFFSET_XNHOTKEYSTATE,
317 OFFSET_XNPREEDITATTRIBUTES,
318 OFFSET_XNSTATUSATTRIBUTES,
321 OFFSET_XNSPOTLOCATION,
323 OFFSET_XNSTDCOLORMAP,
326 OFFSET_XNBACKGROUNDPIXMAP,
330 OFFSET_XNPREEDITSTARTCALLBACK,
331 OFFSET_XNPREEDITDONECALLBACK,
332 OFFSET_XNPREEDITDRAWCALLBACK,
333 OFFSET_XNPREEDITCARETCALLBACK,
334 OFFSET_XNSTATUSSTARTCALLBACK,
335 OFFSET_XNSTATUSDONECALLBACK,
336 OFFSET_XNSTATUSDRAWCALLBACK,
337 OFFSET_XNPREEDITSTATE,
338 OFFSET_XNPREEDITSTATENOTIFYCALLBACK
341 static XIMStyle const supported_local_styles[] = {
342 XIMPreeditNone | XIMStatusNone,
343 XIMPreeditNothing | XIMStatusNothing,
349 XimValueOffsetInfo info,
351 XPointer parm, /* unused */
352 unsigned long mode) /* unused */
361 n = XIMNumber(supported_local_styles) - 1;
362 len = sizeof(XIMStyles) + sizeof(XIMStyle) * n;
363 if(!(tmp = Xcalloc(1, len))) {
367 styles = (XIMStyles *)tmp;
369 styles->count_styles = (unsigned short)n;
370 styles->supported_styles =
371 (XIMStyle *)((char *)tmp + sizeof(XIMStyles));
372 for(i = 0; i < n; i++) {
373 styles->supported_styles[i] = supported_local_styles[i];
377 out = (XIMStyles **)((char *)top + info->offset);
384 XimValueOffsetInfo info,
386 XPointer parm, /* unused */
387 unsigned long mode) /* unused */
389 XIMValuesList *values_list;
396 n = XIMNumber(supported_local_im_values_list);
397 len = sizeof(XIMValuesList) + sizeof(char **) * n;
398 if(!(tmp = Xcalloc(1, len))) {
402 values_list = (XIMValuesList *)tmp;
404 values_list->count_values = (unsigned short)n;
405 values_list->supported_values
406 = (char **)((char *)tmp + sizeof(XIMValuesList));
407 for(i = 0; i < n; i++) {
408 values_list->supported_values[i] =
409 (char *)name_table + supported_local_im_values_list[i];
413 out = (XIMValuesList **)((char *)top + info->offset);
420 XimValueOffsetInfo info,
422 XPointer parm, /* unused */
423 unsigned long mode) /* unused */
425 XIMValuesList *values_list;
432 n = XIMNumber(supported_local_ic_values_list);
433 len = sizeof(XIMValuesList) + sizeof(char **) * n;
434 if(!(tmp = Xcalloc(1, len))) {
438 values_list = (XIMValuesList *)tmp;
440 values_list->count_values = (unsigned short)n;
441 values_list->supported_values
442 = (char **)((char *)tmp + sizeof(XIMValuesList));
443 for(i = 0; i < n; i++) {
444 values_list->supported_values[i] =
445 (char *)name_table + supported_local_ic_values_list[i];
449 out = (XIMValuesList **)((char *)top + info->offset);
455 _XimDefaultVisiblePos(
456 XimValueOffsetInfo info,
458 XPointer parm, /* unused */
459 unsigned long mode) /* unused */
463 out = (Bool *)((char *)top + info->offset);
469 _XimDefaultFocusWindow(
470 XimValueOffsetInfo info,
478 if(ic->core.client_window == (Window)NULL) {
482 out = (Window *)((char *)top + info->offset);
483 *out = ic->core.client_window;
489 XimValueOffsetInfo info,
495 Xim im = (Xim)ic->core.im;
498 if(im->core.res_name == (char *)NULL) {
502 out = (char **)((char *)top + info->offset);
503 *out = im->core.res_name;
509 XimValueOffsetInfo info,
515 Xim im = (Xim)ic->core.im;
518 if(im->core.res_class == (char *)NULL) {
522 out = (char **)((char *)top + info->offset);
523 *out = im->core.res_class;
528 _XimDefaultDestroyCB(
529 XimValueOffsetInfo info,
535 Xim im = (Xim)ic->core.im;
538 out = (XIMCallback *)((char *)top + info->offset);
539 *out = im->core.destroy_callback;
544 _XimDefaultResetState(
545 XimValueOffsetInfo info,
552 out = (XIMResetState *)((char *)top + info->offset);
553 *out = XIMInitialState;
558 _XimDefaultHotKeyState(
559 XimValueOffsetInfo info,
566 out = (XIMHotKeyState *)((char *)top + info->offset);
567 *out = XIMHotKeyStateOFF;
573 XimValueOffsetInfo info,
579 Xim im = (Xim)ic->core.im;
581 int x_return, y_return;
582 unsigned int width_return, height_return;
583 unsigned int border_width_return;
584 unsigned int depth_return;
588 if(ic->core.focus_window == (Window)NULL) {
591 if(XGetGeometry(im->core.display, (Drawable)ic->core.focus_window,
592 &root_return, &x_return, &y_return, &width_return,
593 &height_return, &border_width_return, &depth_return)
594 == (Status)Success) {
599 area.width = width_return;
600 area.height = height_return;
602 out = (XRectangle *)((char *)top + info->offset);
609 XimValueOffsetInfo info,
615 Xim im = (Xim)ic->core.im;
616 XWindowAttributes win_attr;
619 if(ic->core.client_window == (Window)NULL) {
622 if(XGetWindowAttributes(im->core.display, ic->core.client_window,
623 &win_attr) == (Status)Success) {
627 out = (Colormap *)((char *)top + info->offset);
628 *out = win_attr.colormap;
633 _XimDefaultStdColormap(
634 XimValueOffsetInfo info,
641 out = (Atom *)((char *)top + info->offset);
648 XimValueOffsetInfo info,
654 Xim im = (Xim)ic->core.im;
658 fg = WhitePixel(im->core.display, DefaultScreen(im->core.display));
659 out = (unsigned long *)((char *)top + info->offset);
666 XimValueOffsetInfo info,
672 Xim im = (Xim)ic->core.im;
676 bg = BlackPixel(im->core.display, DefaultScreen(im->core.display));
677 out = (unsigned long *)((char *)top + info->offset);
684 XimValueOffsetInfo info,
691 out = (Pixmap *)((char *)top + info->offset);
698 XimValueOffsetInfo info,
705 out = (XFontSet *)((char *)top + info->offset);
711 _XimDefaultLineSpace(
712 XimValueOffsetInfo info,
719 XFontSetExtents *fset_extents;
723 if(mode & XIM_PREEDIT_ATTR) {
724 fontset = ic->core.preedit_attr.fontset;
725 } else if(mode & XIM_STATUS_ATTR) {
726 fontset = ic->core.status_attr.fontset;
731 fset_extents = XExtentsOfFontSet(fontset);
732 line_space = fset_extents->max_logical_extent.height;
734 out = (int *)((char *)top + info->offset);
741 XimValueOffsetInfo info,
748 out = (Cursor *)((char *)top + info->offset);
754 _XimDefaultPreeditState(
755 XimValueOffsetInfo info,
760 XIMPreeditState *out;
762 out = (XIMPreeditState *)((char *)top + info->offset);
763 *out = XIMPreeditDisable;
769 XimValueOffsetInfo info,
779 XimValueOffsetInfo info,
785 out = (XIMCallback *)((char *)top + info->offset);
786 *out = *((XIMCallback *)val);
792 XimValueOffsetInfo info,
799 if(val == (XPointer)NULL) {
802 if (!(string = strdup((char *)val))) {
806 out = (char **)((char *)top + info->offset);
816 XimValueOffsetInfo info,
822 out = (XIMStyle *)((char *)top + info->offset);
823 *out = (XIMStyle)val;
829 XimValueOffsetInfo info,
835 out = (Window *)((char *)top + info->offset);
841 _XimEncodeStringConv(
842 XimValueOffsetInfo info,
853 _XimEncodeResetState(
854 XimValueOffsetInfo info,
860 out = (XIMResetState *)((char *)top + info->offset);
861 *out = (XIMResetState)val;
867 XimValueOffsetInfo info,
871 XIMHotKeyTriggers *hotkey = (XIMHotKeyTriggers *)val;
872 XIMHotKeyTriggers **out;
873 XIMHotKeyTriggers *key_list;
874 XIMHotKeyTrigger *key;
880 if(hotkey == (XIMHotKeyTriggers *)NULL) {
884 if((num = hotkey->num_hot_key) == 0) {
888 len = sizeof(XIMHotKeyTriggers) + sizeof(XIMHotKeyTrigger) * num;
889 if(!(tmp = (XPointer)Xmalloc(len))) {
893 key_list = (XIMHotKeyTriggers *)tmp;
894 key = (XIMHotKeyTrigger *)((char *)tmp + sizeof(XIMHotKeyTriggers));
896 for(i = 0; i < num; i++) {
897 key[i] = hotkey->key[i];
900 key_list->num_hot_key = num;
903 out = (XIMHotKeyTriggers **)((char *)top + info->offset);
909 _XimEncodeHotKetState(
910 XimValueOffsetInfo info,
916 out = (XIMHotKeyState *)((char *)top + info->offset);
917 *out = (XIMHotKeyState)val;
923 XimValueOffsetInfo info,
929 out = (XRectangle *)((char *)top + info->offset);
930 *out = *((XRectangle *)val);
936 XimValueOffsetInfo info,
942 out = (XPoint *)((char *)top + info->offset);
943 *out = *((XPoint *)val);
949 XimValueOffsetInfo info,
955 out = (Colormap *)((char *)top + info->offset);
956 *out = (Colormap)val;
961 _XimEncodeStdColormap(
962 XimValueOffsetInfo info,
968 out = (Atom *)((char *)top + info->offset);
975 XimValueOffsetInfo info,
981 out = (unsigned long *)((char *)top + info->offset);
982 *out = (unsigned long)val;
988 XimValueOffsetInfo info,
994 out = (Pixmap *)((char *)top + info->offset);
1001 XimValueOffsetInfo info,
1007 out = (XFontSet *)((char *)top + info->offset);
1008 *out = (XFontSet)val;
1013 _XimEncodeLineSpace(
1014 XimValueOffsetInfo info,
1020 out = (int *)((char *)top + info->offset);
1027 XimValueOffsetInfo info,
1033 out = (Cursor *)((char *)top + info->offset);
1039 _XimEncodePreeditState(
1040 XimValueOffsetInfo info,
1044 XIMPreeditState *out;
1046 out = (XIMPreeditState *)((char *)top + info->offset);
1047 *out = (XIMPreeditState)val;
1053 XimValueOffsetInfo info,
1062 XimValueOffsetInfo info,
1073 if(val == (XPointer)NULL) {
1077 styles = *((XIMStyles **)((char *)top + info->offset));
1078 num = styles->count_styles;
1080 len = sizeof(XIMStyles) + sizeof(XIMStyle) * num;
1081 if(!(tmp = Xcalloc(1, len))) {
1085 out = (XIMStyles *)tmp;
1087 out->count_styles = (unsigned short)num;
1088 out->supported_styles = (XIMStyle *)((char *)tmp + sizeof(XIMStyles));
1090 for(i = 0; i < num; i++) {
1091 out->supported_styles[i] = styles->supported_styles[i];
1094 *((XIMStyles **)val) = out;
1100 XimValueOffsetInfo info,
1104 XIMValuesList *values_list;
1111 if(val == (XPointer)NULL) {
1115 values_list = *((XIMValuesList **)((char *)top + info->offset));
1116 num = values_list->count_values;
1118 len = sizeof(XIMValuesList) + sizeof(char **) * num;
1119 if(!(tmp = Xcalloc(1, len))) {
1123 out = (XIMValuesList *)tmp;
1125 out->count_values = (unsigned short)num;
1126 out->supported_values = (char **)((char *)tmp + sizeof(XIMValuesList));
1128 for(i = 0; i < num; i++) {
1129 out->supported_values[i] = values_list->supported_values[i];
1132 *((XIMValuesList **)val) = out;
1138 XimValueOffsetInfo info,
1143 XIMCallback *callback;
1145 in = (XIMCallback *)((char *)top + info->offset);
1146 if(!(callback = (XIMCallback *)Xmalloc(sizeof(XIMCallback)))) {
1149 callback->client_data = in->client_data;
1150 callback->callback = in->callback;
1152 *((XIMCallback **)val) = callback;
1158 XimValueOffsetInfo info,
1165 in = *((char **)((char *)top + info->offset));
1167 string = strdup(in);
1169 string = Xcalloc(1, 1); /* strdup("") */
1171 if (string == NULL) {
1174 *((char **)val) = string;
1180 XimValueOffsetInfo info,
1186 in = (Bool *)((char *)top + info->offset);
1187 *((Bool *)val) = *in;
1193 XimValueOffsetInfo info,
1199 in = (XIMStyle *)((char *)top + info->offset);
1200 *((XIMStyle *)val) = *in;
1206 XimValueOffsetInfo info,
1212 in = (Window *)((char *)top + info->offset);
1213 *((Window *)val) = *in;
1218 _XimDecodeStringConv(
1219 XimValueOffsetInfo info,
1230 _XimDecodeResetState(
1231 XimValueOffsetInfo info,
1237 in = (XIMResetState *)((char *)top + info->offset);
1238 *((XIMResetState *)val) = *in;
1244 XimValueOffsetInfo info,
1248 XIMHotKeyTriggers *in;
1249 XIMHotKeyTriggers *hotkey;
1250 XIMHotKeyTrigger *key;
1256 in = *((XIMHotKeyTriggers **)((char *)top + info->offset));
1257 num = in->num_hot_key;
1258 len = sizeof(XIMHotKeyTriggers) + sizeof(XIMHotKeyTrigger) * num;
1259 if(!(tmp = (XPointer)Xmalloc(len))) {
1263 hotkey = (XIMHotKeyTriggers *)tmp;
1264 key = (XIMHotKeyTrigger *)((char *)tmp + sizeof(XIMHotKeyTriggers));
1266 for(i = 0; i < num; i++) {
1267 key[i] = in->key[i];
1269 hotkey->num_hot_key = num;
1272 *((XIMHotKeyTriggers **)val) = hotkey;
1277 _XimDecodeHotKetState(
1278 XimValueOffsetInfo info,
1284 in = (XIMHotKeyState *)((char *)top + info->offset);
1285 *((XIMHotKeyState *)val) = *in;
1290 _XimDecodeRectangle(
1291 XimValueOffsetInfo info,
1298 in = (XRectangle *)((char *)top + info->offset);
1299 if(!(rect = (XRectangle *)Xmalloc(sizeof(XRectangle)))) {
1303 *((XRectangle **)val) = rect;
1309 XimValueOffsetInfo info,
1316 in = (XPoint *)((char *)top + info->offset);
1317 if(!(spot = (XPoint *)Xmalloc(sizeof(XPoint)))) {
1321 *((XPoint **)val) = spot;
1327 XimValueOffsetInfo info,
1333 in = (Colormap *)((char *)top + info->offset);
1334 *((Colormap *)val) = *in;
1339 _XimDecodeStdColormap(
1340 XimValueOffsetInfo info,
1346 in = (Atom *)((char *)top + info->offset);
1347 *((Atom *)val) = *in;
1353 XimValueOffsetInfo info,
1359 in = (unsigned long *)((char *)top + info->offset);
1360 *((unsigned long *)val) = *in;
1366 XimValueOffsetInfo info,
1372 in = (Pixmap *)((char *)top + info->offset);
1373 *((Pixmap *)val) = *in;
1379 XimValueOffsetInfo info,
1385 in = (XFontSet *)((char *)top + info->offset);
1386 *((XFontSet *)val) = *in;
1391 _XimDecodeLineSpace(
1392 XimValueOffsetInfo info,
1398 in = (int *)((char *)top + info->offset);
1399 *((int *)val) = *in;
1405 XimValueOffsetInfo info,
1411 in = (Cursor *)((char *)top + info->offset);
1412 *((Cursor *)val) = *in;
1417 _XimDecodePreeditState(
1418 XimValueOffsetInfo info,
1422 XIMPreeditState *in;
1424 in = (XIMPreeditState *)((char *)top + info->offset);
1425 *((XIMPreeditState *)val) = *in;
1431 XimValueOffsetInfo info,
1438 static XIMResource im_resources[] = {
1439 {XNQueryInputStyle, 0, XimType_XIMStyles, 0, 0, 0},
1440 {XNDestroyCallback, 0, 0, 0, 0, 0},
1441 {XNResourceName, 0, XimType_STRING8, 0, 0, 0},
1442 {XNResourceClass, 0, XimType_STRING8, 0, 0, 0},
1443 {XNQueryIMValuesList, 0, 0, 0, 0, 0},
1444 {XNQueryICValuesList, 0, 0, 0, 0, 0},
1445 {XNVisiblePosition, 0, 0, 0, 0, 0}
1448 static XIMResource im_inner_resources[] = {
1449 {XNDestroyCallback, 0, 0, 0, 0, 0},
1450 {XNResourceName, 0, XimType_STRING8, 0, 0, 0},
1451 {XNResourceClass, 0, XimType_STRING8, 0, 0, 0},
1452 {XNQueryIMValuesList, 0, 0, 0, 0, 0},
1453 {XNQueryICValuesList, 0, 0, 0, 0, 0},
1454 {XNVisiblePosition, 0, 0, 0, 0, 0}
1457 static XIMResource ic_resources[] = {
1458 {XNInputStyle, 0, XimType_CARD32, 0, 0, 0},
1459 {XNClientWindow, 0, XimType_Window, 0, 0, 0},
1460 {XNFocusWindow, 0, XimType_Window, 0, 0, 0},
1461 {XNResourceName, 0, XimType_STRING8, 0, 0, 0},
1462 {XNResourceClass, 0, XimType_STRING8, 0, 0, 0},
1463 {XNGeometryCallback, 0, 0, 0, 0, 0},
1464 {XNFilterEvents, 0, XimType_CARD32, 0, 0, 0},
1465 {XNDestroyCallback, 0, 0, 0, 0, 0},
1466 {XNStringConversionCallback, 0, 0, 0, 0, 0},
1467 {XNStringConversion, 0, XimType_XIMStringConversion,0, 0, 0},
1468 {XNResetState, 0, 0, 0, 0, 0},
1469 {XNHotKey, 0, XimType_XIMHotKeyTriggers,0, 0, 0},
1470 {XNHotKeyState, 0, XimType_XIMHotKeyState, 0, 0, 0},
1471 {XNPreeditAttributes, 0, XimType_NEST, 0, 0, 0},
1472 {XNStatusAttributes, 0, XimType_NEST, 0, 0, 0},
1473 {XNArea, 0, XimType_XRectangle, 0, 0, 0},
1474 {XNAreaNeeded, 0, XimType_XRectangle, 0, 0, 0},
1475 {XNSpotLocation, 0, XimType_XPoint, 0, 0, 0},
1476 {XNColormap, 0, XimType_CARD32, 0, 0, 0},
1477 {XNStdColormap, 0, XimType_CARD32, 0, 0, 0},
1478 {XNForeground, 0, XimType_CARD32, 0, 0, 0},
1479 {XNBackground, 0, XimType_CARD32, 0, 0, 0},
1480 {XNBackgroundPixmap, 0, XimType_CARD32, 0, 0, 0},
1481 {XNFontSet, 0, XimType_XFontSet, 0, 0, 0},
1482 {XNLineSpace, 0, XimType_CARD32, 0, 0, 0},
1483 {XNCursor, 0, XimType_CARD32, 0, 0, 0},
1484 {XNPreeditStartCallback, 0, 0, 0, 0, 0},
1485 {XNPreeditDoneCallback, 0, 0, 0, 0, 0},
1486 {XNPreeditDrawCallback, 0, 0, 0, 0, 0},
1487 {XNPreeditCaretCallback, 0, 0, 0, 0, 0},
1488 {XNStatusStartCallback, 0, 0, 0, 0, 0},
1489 {XNStatusDoneCallback, 0, 0, 0, 0, 0},
1490 {XNStatusDrawCallback, 0, 0, 0, 0, 0},
1491 {XNPreeditState, 0, 0, 0, 0, 0},
1492 {XNPreeditStateNotifyCallback, 0, 0, 0, 0, 0},
1495 static XIMResource ic_inner_resources[] = {
1496 {XNResourceName, 0, XimType_STRING8, 0, 0, 0},
1497 {XNResourceClass, 0, XimType_STRING8, 0, 0, 0},
1498 {XNGeometryCallback, 0, 0, 0, 0, 0},
1499 {XNDestroyCallback, 0, 0, 0, 0, 0},
1500 {XNStringConversionCallback, 0, 0, 0, 0, 0},
1501 {XNPreeditStartCallback, 0, 0, 0, 0, 0},
1502 {XNPreeditDoneCallback, 0, 0, 0, 0, 0},
1503 {XNPreeditDrawCallback, 0, 0, 0, 0, 0},
1504 {XNPreeditCaretCallback, 0, 0, 0, 0, 0},
1505 {XNStatusStartCallback, 0, 0, 0, 0, 0},
1506 {XNStatusDoneCallback, 0, 0, 0, 0, 0},
1507 {XNStatusDrawCallback, 0, 0, 0, 0, 0},
1508 {XNPreeditStateNotifyCallback, 0, 0, 0, 0, 0},
1511 static XimValueOffsetInfoRec im_attr_info[] = {
1512 {OFFSET_XNQUERYINPUTSTYLE, 0,
1513 XOffsetOf(XimDefIMValues, styles),
1514 _XimDefaultStyles, NULL, _XimDecodeStyles},
1516 {OFFSET_XNDESTROYCALLBACK, 0,
1517 XOffsetOf(XimDefIMValues, destroy_callback),
1518 NULL, _XimEncodeCallback, _XimDecodeCallback},
1520 {OFFSET_XNRESOURCENAME, 0,
1521 XOffsetOf(XimDefIMValues, res_name),
1522 NULL, _XimEncodeString, _XimDecodeString},
1524 {OFFSET_XNRESOURCECLASS, 0,
1525 XOffsetOf(XimDefIMValues, res_class),
1526 NULL, _XimEncodeString, _XimDecodeString},
1528 {OFFSET_XNQUERYIMVALUESLIST, 0,
1529 XOffsetOf(XimDefIMValues, im_values_list),
1530 _XimDefaultIMValues, NULL, _XimDecodeValues},
1532 {OFFSET_XNQUERYICVALUESLIST, 0,
1533 XOffsetOf(XimDefIMValues, ic_values_list),
1534 _XimDefaultICValues, NULL, _XimDecodeValues},
1536 {OFFSET_XNVISIBLEPOSITION, 0,
1537 XOffsetOf(XimDefIMValues, visible_position),
1538 _XimDefaultVisiblePos, NULL, _XimDecodeBool}
1541 static XimValueOffsetInfoRec ic_attr_info[] = {
1542 {OFFSET_XNINPUTSTYLE, 0,
1543 XOffsetOf(XimDefICValues, input_style),
1544 NULL, _XimEncodeStyle, _XimDecodeStyle},
1546 {OFFSET_XNCLIENTWINDOW, 0,
1547 XOffsetOf(XimDefICValues, client_window),
1548 NULL, _XimEncodeWindow, _XimDecodeWindow},
1550 {OFFSET_XNFOCUSWINDOW, 0,
1551 XOffsetOf(XimDefICValues, focus_window),
1552 _XimDefaultFocusWindow, _XimEncodeWindow, _XimDecodeWindow},
1554 {OFFSET_XNRESOURCENAME, 0,
1555 XOffsetOf(XimDefICValues, res_name),
1556 _XimDefaultResName, _XimEncodeString, _XimDecodeString},
1558 {OFFSET_XNRESOURCECLASS, 0,
1559 XOffsetOf(XimDefICValues, res_class),
1560 _XimDefaultResClass, _XimEncodeString, _XimDecodeString},
1562 {OFFSET_XNGEOMETRYCALLBACK, 0,
1563 XOffsetOf(XimDefICValues, geometry_callback),
1564 NULL, _XimEncodeCallback, _XimDecodeCallback},
1566 {OFFSET_XNFILTEREVENTS, 0,
1567 XOffsetOf(XimDefICValues, filter_events),
1568 NULL, NULL, _XimDecodeLong},
1570 {OFFSET_XNDESTROYCALLBACK, 0,
1571 XOffsetOf(XimDefICValues, destroy_callback),
1572 _XimDefaultDestroyCB, _XimEncodeCallback, _XimDecodeCallback},
1574 {OFFSET_XNSTRINGCONVERSIONCALLBACK, 0,
1575 XOffsetOf(XimDefICValues, string_conversion_callback),
1576 NULL, _XimEncodeCallback, _XimDecodeCallback},
1578 {OFFSET_XNSTRINGCONVERSION, 0,
1579 XOffsetOf(XimDefICValues, string_conversion),
1580 NULL, _XimEncodeStringConv, _XimDecodeStringConv},
1582 {OFFSET_XNRESETSTATE, 0,
1583 XOffsetOf(XimDefICValues, reset_state),
1584 _XimDefaultResetState, _XimEncodeResetState, _XimDecodeResetState},
1586 {OFFSET_XNHOTKEY, 0,
1587 XOffsetOf(XimDefICValues, hotkey),
1588 NULL, _XimEncodeHotKey, _XimDecodeHotKey},
1590 {OFFSET_XNHOTKEYSTATE, 0,
1591 XOffsetOf(XimDefICValues, hotkey_state),
1592 _XimDefaultHotKeyState, _XimEncodeHotKetState, _XimDecodeHotKetState},
1594 {OFFSET_XNPREEDITATTRIBUTES, 0,
1595 XOffsetOf(XimDefICValues, preedit_attr),
1596 _XimDefaultNest, _XimEncodeNest, _XimDecodeNest},
1598 {OFFSET_XNSTATUSATTRIBUTES, 0,
1599 XOffsetOf(XimDefICValues, status_attr),
1600 _XimDefaultNest, _XimEncodeNest, _XimDecodeNest},
1603 static XimValueOffsetInfoRec ic_pre_attr_info[] = {
1605 XOffsetOf(ICPreeditAttributes, area),
1606 _XimDefaultArea, _XimEncodeRectangle, _XimDecodeRectangle},
1608 {OFFSET_XNAREANEEDED, 0,
1609 XOffsetOf(ICPreeditAttributes, area_needed),
1610 NULL, _XimEncodeRectangle, _XimDecodeRectangle},
1612 {OFFSET_XNSPOTLOCATION, 0,
1613 XOffsetOf(ICPreeditAttributes, spot_location),
1614 NULL, _XimEncodeSpot, _XimDecodeSpot},
1616 {OFFSET_XNCOLORMAP, 0,
1617 XOffsetOf(ICPreeditAttributes, colormap),
1618 _XimDefaultColormap, _XimEncodeColormap, _XimDecodeColormap},
1620 {OFFSET_XNSTDCOLORMAP, 0,
1621 XOffsetOf(ICPreeditAttributes, std_colormap),
1622 _XimDefaultStdColormap, _XimEncodeStdColormap, _XimDecodeStdColormap},
1624 {OFFSET_XNFOREGROUND, 0,
1625 XOffsetOf(ICPreeditAttributes, foreground),
1626 _XimDefaultFg, _XimEncodeLong, _XimDecodeLong},
1628 {OFFSET_XNBACKGROUND, 0,
1629 XOffsetOf(ICPreeditAttributes, background),
1630 _XimDefaultBg, _XimEncodeLong, _XimDecodeLong},
1632 {OFFSET_XNBACKGROUNDPIXMAP, 0,
1633 XOffsetOf(ICPreeditAttributes, background_pixmap),
1634 _XimDefaultBgPixmap, _XimEncodeBgPixmap, _XimDecodeBgPixmap},
1636 {OFFSET_XNFONTSET, 0,
1637 XOffsetOf(ICPreeditAttributes, fontset),
1638 _XimDefaultFontSet, _XimEncodeFontSet, _XimDecodeFontSet},
1640 {OFFSET_XNLINESPACE, 0,
1641 XOffsetOf(ICPreeditAttributes, line_spacing),
1642 _XimDefaultLineSpace, _XimEncodeLineSpace, _XimDecodeLineSpace},
1644 {OFFSET_XNCURSOR, 0,
1645 XOffsetOf(ICPreeditAttributes, cursor),
1646 _XimDefaultCursor, _XimEncodeCursor, _XimDecodeCursor},
1648 {OFFSET_XNPREEDITSTARTCALLBACK, 0,
1649 XOffsetOf(ICPreeditAttributes, start_callback),
1650 NULL, _XimEncodeCallback, _XimDecodeCallback},
1652 {OFFSET_XNPREEDITDONECALLBACK, 0,
1653 XOffsetOf(ICPreeditAttributes, done_callback),
1654 NULL, _XimEncodeCallback, _XimDecodeCallback},
1656 {OFFSET_XNPREEDITDRAWCALLBACK, 0,
1657 XOffsetOf(ICPreeditAttributes, draw_callback),
1658 NULL, _XimEncodeCallback, _XimDecodeCallback},
1660 {OFFSET_XNPREEDITCARETCALLBACK, 0,
1661 XOffsetOf(ICPreeditAttributes, caret_callback),
1662 NULL, _XimEncodeCallback, _XimDecodeCallback},
1664 {OFFSET_XNPREEDITSTATE, 0,
1665 XOffsetOf(ICPreeditAttributes, preedit_state),
1666 _XimDefaultPreeditState, _XimEncodePreeditState,_XimDecodePreeditState},
1668 {OFFSET_XNPREEDITSTATENOTIFYCALLBACK, 0,
1669 XOffsetOf(ICPreeditAttributes, state_notify_callback),
1670 NULL, _XimEncodeCallback, _XimDecodeCallback},
1673 static XimValueOffsetInfoRec ic_sts_attr_info[] = {
1675 XOffsetOf(ICStatusAttributes, area),
1676 _XimDefaultArea, _XimEncodeRectangle, _XimDecodeRectangle},
1678 {OFFSET_XNAREANEEDED, 0,
1679 XOffsetOf(ICStatusAttributes, area_needed),
1680 NULL, _XimEncodeRectangle, _XimDecodeRectangle},
1682 {OFFSET_XNCOLORMAP, 0,
1683 XOffsetOf(ICStatusAttributes, colormap),
1684 _XimDefaultColormap, _XimEncodeColormap, _XimDecodeColormap},
1686 {OFFSET_XNSTDCOLORMAP, 0,
1687 XOffsetOf(ICStatusAttributes, std_colormap),
1688 _XimDefaultStdColormap, _XimEncodeStdColormap, _XimDecodeStdColormap},
1690 {OFFSET_XNFOREGROUND, 0,
1691 XOffsetOf(ICStatusAttributes, foreground),
1692 _XimDefaultFg, _XimEncodeLong, _XimDecodeLong},
1694 {OFFSET_XNBACKGROUND, 0,
1695 XOffsetOf(ICStatusAttributes, background),
1696 _XimDefaultBg, _XimEncodeLong, _XimDecodeLong},
1698 {OFFSET_XNBACKGROUNDPIXMAP, 0,
1699 XOffsetOf(ICStatusAttributes, background_pixmap),
1700 _XimDefaultBgPixmap, _XimEncodeBgPixmap, _XimDecodeBgPixmap},
1702 {OFFSET_XNFONTSET, 0,
1703 XOffsetOf(ICStatusAttributes, fontset),
1704 _XimDefaultFontSet, _XimEncodeFontSet, _XimDecodeFontSet},
1706 {OFFSET_XNLINESPACE, 0,
1707 XOffsetOf(ICStatusAttributes, line_spacing),
1708 _XimDefaultLineSpace, _XimEncodeLineSpace, _XimDecodeLineSpace},
1710 {OFFSET_XNCURSOR, 0,
1711 XOffsetOf(ICStatusAttributes, cursor),
1712 _XimDefaultCursor, _XimEncodeCursor, _XimDecodeCursor},
1714 {OFFSET_XNSTATUSSTARTCALLBACK, 0,
1715 XOffsetOf(ICStatusAttributes, start_callback),
1716 NULL, _XimEncodeCallback, _XimDecodeCallback},
1718 {OFFSET_XNSTATUSDONECALLBACK, 0,
1719 XOffsetOf(ICStatusAttributes, done_callback),
1720 NULL, _XimEncodeCallback, _XimDecodeCallback},
1722 {OFFSET_XNSTATUSDRAWCALLBACK, 0,
1723 XOffsetOf(ICStatusAttributes, draw_callback),
1724 NULL, _XimEncodeCallback, _XimDecodeCallback}
1727 typedef struct _XimIMMode {
1728 unsigned short name_offset;
1729 unsigned short mode;
1732 static const XimIMMode im_mode[] = {
1733 {OFFSET_XNQUERYINPUTSTYLE,
1734 (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_GET)},
1735 {OFFSET_XNDESTROYCALLBACK,
1736 (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_SET | XIM_MODE_IM_GET)},
1737 {OFFSET_XNRESOURCENAME,
1738 (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_SET | XIM_MODE_IM_GET)},
1739 {OFFSET_XNRESOURCECLASS,
1740 (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_SET | XIM_MODE_IM_GET)},
1741 {OFFSET_XNQUERYIMVALUESLIST,
1742 (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_GET)},
1743 {OFFSET_XNQUERYICVALUESLIST,
1744 (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_GET)},
1745 {OFFSET_XNVISIBLEPOSITION,
1746 (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_GET)}
1749 typedef struct _XimICMode {
1750 unsigned short name_offset;
1751 unsigned short preedit_callback_mode;
1752 unsigned short preedit_position_mode;
1753 unsigned short preedit_area_mode;
1754 unsigned short preedit_nothing_mode;
1755 unsigned short preedit_none_mode;
1756 unsigned short status_callback_mode;
1757 unsigned short status_area_mode;
1758 unsigned short status_nothing_mode;
1759 unsigned short status_none_mode;
1762 static const XimICMode ic_mode[] = {
1763 {OFFSET_XNINPUTSTYLE,
1764 (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_GET),
1765 (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_GET),
1766 (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_GET),
1767 (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_GET),
1768 (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_GET),
1769 (XIM_MODE_STS_CREATE | XIM_MODE_STS_GET),
1770 (XIM_MODE_STS_CREATE | XIM_MODE_STS_GET),
1771 (XIM_MODE_STS_CREATE | XIM_MODE_STS_GET),
1772 (XIM_MODE_STS_CREATE | XIM_MODE_STS_GET)},
1773 {OFFSET_XNCLIENTWINDOW,
1774 (XIM_MODE_PRE_ONCE | XIM_MODE_PRE_GET),
1775 (XIM_MODE_PRE_ONCE | XIM_MODE_PRE_GET),
1776 (XIM_MODE_PRE_ONCE | XIM_MODE_PRE_GET),
1777 (XIM_MODE_PRE_ONCE | XIM_MODE_PRE_GET),
1779 (XIM_MODE_STS_ONCE | XIM_MODE_STS_GET),
1780 (XIM_MODE_STS_ONCE | XIM_MODE_STS_GET),
1781 (XIM_MODE_STS_ONCE | XIM_MODE_STS_GET),
1783 {OFFSET_XNFOCUSWINDOW,
1784 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1785 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1786 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1787 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1789 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1790 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1791 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1793 {OFFSET_XNRESOURCENAME,
1795 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1796 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1797 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1800 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1801 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1803 {OFFSET_XNRESOURCECLASS,
1805 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1806 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1807 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1810 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1811 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1813 {OFFSET_XNGEOMETRYCALLBACK,
1816 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1820 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1823 {OFFSET_XNFILTEREVENTS,
1833 {OFFSET_XNDESTROYCALLBACK,
1834 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1835 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1836 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1837 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1838 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1843 {OFFSET_XNSTRINGCONVERSIONCALLBACK,
1844 (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1845 (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1846 (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1847 (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1848 (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1853 {OFFSET_XNSTRINGCONVERSION,
1863 {OFFSET_XNRESETSTATE,
1864 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1865 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1866 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1867 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1874 (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1875 (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1876 (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1877 (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1883 {OFFSET_XNHOTKEYSTATE,
1884 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1885 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1886 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1887 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1893 {OFFSET_XNPREEDITATTRIBUTES,
1894 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1895 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1896 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1897 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1903 {OFFSET_XNSTATUSATTRIBUTES,
1909 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1910 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1911 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1915 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1916 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1920 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1923 {OFFSET_XNAREANEEDED,
1926 (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1930 (XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1933 {OFFSET_XNSPOTLOCATION,
1934 0, /*(XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),*/
1935 (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1937 (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1938 (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1945 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1946 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1947 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1950 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1951 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1953 {OFFSET_XNSTDCOLORMAP,
1955 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1956 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1957 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1960 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1961 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1963 {OFFSET_XNFOREGROUND,
1965 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1966 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1967 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1970 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1971 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1973 {OFFSET_XNBACKGROUND,
1975 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1976 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1977 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1980 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1981 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1983 {OFFSET_XNBACKGROUNDPIXMAP,
1985 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1986 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1987 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1990 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1991 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
1995 (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1996 (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
1997 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2000 (XIM_MODE_STS_CREATE | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
2001 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
2003 {OFFSET_XNLINESPACE,
2005 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2006 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2007 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2010 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
2011 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
2015 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2016 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2017 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2020 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
2021 (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
2023 {OFFSET_XNPREEDITSTARTCALLBACK,
2024 (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2033 {OFFSET_XNPREEDITDONECALLBACK,
2034 (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2043 {OFFSET_XNPREEDITDRAWCALLBACK,
2044 (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2053 {OFFSET_XNPREEDITCARETCALLBACK,
2054 (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2063 {OFFSET_XNPREEDITSTATE,
2064 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2065 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2066 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2067 (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2073 {OFFSET_XNPREEDITSTATENOTIFYCALLBACK,
2074 (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2075 (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2076 (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2077 (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),
2083 {OFFSET_XNSTATUSSTARTCALLBACK,
2089 (XIM_MODE_STS_CREATE | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
2093 {OFFSET_XNSTATUSDONECALLBACK,
2099 (XIM_MODE_STS_CREATE | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
2103 {OFFSET_XNSTATUSDRAWCALLBACK,
2109 (XIM_MODE_STS_CREATE | XIM_MODE_STS_SET | XIM_MODE_STS_GET),
2115 /* the quarks are separated from im_mode/ic_mode so those arrays
2118 static XrmQuark im_mode_quark[sizeof(im_mode) / sizeof(im_mode[0])];
2119 static XrmQuark ic_mode_quark[sizeof(ic_mode) / sizeof(ic_mode[0])];
2122 _XimSetResourceList(
2123 XIMResourceList *res_list,
2124 unsigned int *list_num,
2125 XIMResourceList resource,
2126 unsigned int num_resource,
2131 XIMResourceList res;
2133 len = sizeof(XIMResource) * num_resource;
2134 if(!(res = Xcalloc(1, len))) {
2138 for(i = 0; i < num_resource; i++, id++) {
2139 res[i] = resource[i];
2143 _XIMCompileResourceList(res, num_resource);
2145 *list_num = num_resource;
2150 _XimSetIMResourceList(
2151 XIMResourceList *res_list,
2152 unsigned int *list_num)
2154 return _XimSetResourceList(res_list, list_num,
2155 im_resources, XIMNumber(im_resources), 100);
2159 _XimSetICResourceList(
2160 XIMResourceList *res_list,
2161 unsigned int *list_num)
2163 return _XimSetResourceList(res_list, list_num,
2164 ic_resources, XIMNumber(ic_resources), 200);
2168 _XimSetInnerIMResourceList(
2169 XIMResourceList *res_list,
2170 unsigned int *list_num)
2172 return _XimSetResourceList(res_list, list_num,
2173 im_inner_resources, XIMNumber(im_inner_resources), 100);
2177 _XimSetInnerICResourceList(
2178 XIMResourceList *res_list,
2179 unsigned int *list_num)
2181 return _XimSetResourceList(res_list, list_num,
2182 ic_inner_resources, XIMNumber(ic_inner_resources), 200);
2185 Private XIMResourceList
2186 _XimGetResourceListRecByMode(
2187 XIMResourceList res_list,
2188 unsigned int list_num,
2189 unsigned short mode)
2193 for(i = 0; i < list_num; i++) {
2194 if (res_list[i].mode & mode) {
2195 return (XIMResourceList)&res_list[i];
2198 return (XIMResourceList)NULL;
2202 _XimCheckCreateICValues(
2203 XIMResourceList res_list,
2204 unsigned int list_num)
2206 if (!_XimGetResourceListRecByMode(res_list, list_num, XIM_MODE_IC_CREATE)) {
2212 Public XIMResourceList
2213 _XimGetResourceListRecByQuark(
2214 XIMResourceList res_list,
2215 unsigned int list_num,
2220 for(i = 0; i < list_num; i++) {
2221 if (res_list[i].xrm_name == quark) {
2222 return (XIMResourceList)&res_list[i];
2225 return (XIMResourceList)NULL;
2228 Public XIMResourceList
2229 _XimGetResourceListRec(
2230 XIMResourceList res_list,
2231 unsigned int list_num,
2234 XrmQuark quark = XrmStringToQuark(name);
2236 return _XimGetResourceListRecByQuark(res_list, list_num, quark);
2244 XIMResourceList res_list,
2245 unsigned int list_num)
2248 XIMResourceList res;
2251 for(p = values; p->name != NULL; p++) {
2252 if(!(res = _XimGetResourceListRec(res_list, list_num, p->name))) {
2255 check = _XimCheckIMMode(res, XIM_SETIMVALUES);
2256 if(check == XIM_CHECK_INVALID) {
2258 } else if (check == XIM_CHECK_ERROR) {
2262 if(!_XimEncodeLocalIMAttr(res, top, p->value)) {
2274 XIMResourceList res_list,
2275 unsigned int list_num)
2278 XIMResourceList res;
2281 for(p = values; p->name != NULL; p++) {
2282 if(!(res = _XimGetResourceListRec(res_list, list_num, p->name))) {
2285 check = _XimCheckIMMode(res, XIM_GETIMVALUES);
2286 if(check == XIM_CHECK_INVALID) {
2288 } else if (check == XIM_CHECK_ERROR) {
2292 if(!_XimDecodeLocalIMAttr(res, top, p->value)) {
2301 XIMResourceList res_list,
2302 unsigned int list_num)
2304 XIMResourceList res;
2305 unsigned int n = XIMNumber(im_mode);
2308 for(i = 0; i < n; i++) {
2309 if(!(res = _XimGetResourceListRecByQuark(res_list,
2310 list_num, im_mode_quark[i]))) {
2313 res->mode = im_mode[i].mode;
2319 _XimCheckSetIMDefaultsMode(
2320 XIMResourceList res)
2322 if(res->mode & XIM_MODE_IM_DEFAULT) {
2323 return XIM_CHECK_VALID;
2325 return XIM_CHECK_INVALID;
2329 _XimCheckSetIMValuesMode(
2330 XIMResourceList res)
2332 if(res->mode & XIM_MODE_IM_SET) {
2333 return XIM_CHECK_VALID;
2335 return XIM_CHECK_INVALID;
2339 _XimCheckGetIMValuesMode(
2340 XIMResourceList res)
2342 if(res->mode & XIM_MODE_IM_GET) {
2343 return XIM_CHECK_VALID;
2345 return XIM_CHECK_INVALID;
2350 XIMResourceList res,
2353 if(res->mode == 0) {
2354 return XIM_CHECK_INVALID;
2356 if(mode & XIM_SETIMDEFAULTS) {
2357 return _XimCheckSetIMDefaultsMode(res);
2358 } else if (mode & XIM_SETIMVALUES) {
2359 return _XimCheckSetIMValuesMode(res);
2360 } else if (mode & XIM_GETIMVALUES) {
2361 return _XimCheckGetIMValuesMode(res);
2363 return XIM_CHECK_ERROR;
2368 _XimSetICMode(XIMResourceList res_list, unsigned int list_num, XIMStyle style)
2370 XIMResourceList res;
2371 unsigned int n = XIMNumber(ic_mode);
2373 unsigned int pre_offset;
2374 unsigned int sts_offset;
2376 if(style & XIMPreeditArea) {
2377 pre_offset = XOffsetOf(XimICMode, preedit_area_mode);
2378 } else if(style & XIMPreeditCallbacks) {
2379 pre_offset = XOffsetOf(XimICMode, preedit_callback_mode);
2380 } else if(style & XIMPreeditPosition) {
2381 pre_offset = XOffsetOf(XimICMode, preedit_position_mode);
2382 } else if(style & XIMPreeditNothing) {
2383 pre_offset = XOffsetOf(XimICMode, preedit_nothing_mode);
2385 pre_offset = XOffsetOf(XimICMode, preedit_none_mode);
2388 if(style & XIMStatusArea) {
2389 sts_offset = XOffsetOf(XimICMode, status_area_mode);
2390 } else if(style & XIMStatusCallbacks) {
2391 sts_offset = XOffsetOf(XimICMode, status_callback_mode);
2392 } else if(style & XIMStatusNothing) {
2393 sts_offset = XOffsetOf(XimICMode, status_nothing_mode);
2395 sts_offset = XOffsetOf(XimICMode, status_none_mode);
2398 for(i = 0; i < n; i++) {
2399 if(!(res = _XimGetResourceListRecByQuark(res_list,
2400 list_num, ic_mode_quark[i]))) {
2403 res->mode = ( (*(unsigned short *)((char *)&ic_mode[i] + pre_offset))
2404 | (*(unsigned short *)((char *)&ic_mode[i] + sts_offset)));
2410 _XimCheckSetICDefaultsMode(
2411 XIMResourceList res,
2414 if(mode & XIM_PREEDIT_ATTR) {
2415 if(!(res->mode & XIM_MODE_PRE_MASK)) {
2416 return XIM_CHECK_INVALID;
2419 if(res->mode & XIM_MODE_PRE_CREATE) {
2420 return XIM_CHECK_ERROR;
2421 } else if (!(res->mode & XIM_MODE_PRE_DEFAULT)) {
2422 return XIM_CHECK_INVALID;
2425 } else if(mode & XIM_STATUS_ATTR) {
2426 if(!(res->mode & XIM_MODE_STS_MASK)) {
2427 return XIM_CHECK_INVALID;
2430 if(res->mode & XIM_MODE_STS_CREATE) {
2431 return XIM_CHECK_ERROR;
2433 if(!(res->mode & XIM_MODE_STS_DEFAULT)) {
2434 return XIM_CHECK_INVALID;
2439 return XIM_CHECK_INVALID;
2442 if(res->mode & XIM_MODE_IC_CREATE) {
2443 return XIM_CHECK_ERROR;
2445 if(!(res->mode & XIM_MODE_IC_DEFAULT)) {
2446 return XIM_CHECK_INVALID;
2449 return XIM_CHECK_VALID;
2453 _XimCheckCreateICMode(
2454 XIMResourceList res,
2457 if(mode & XIM_PREEDIT_ATTR) {
2458 if(!(res->mode & XIM_MODE_PRE_MASK)) {
2459 return XIM_CHECK_INVALID;
2462 if(res->mode & XIM_MODE_PRE_CREATE) {
2463 res->mode &= ~XIM_MODE_PRE_CREATE;
2464 } else if(res->mode & XIM_MODE_PRE_ONCE) {
2465 res->mode &= ~XIM_MODE_PRE_ONCE;
2466 } else if(res->mode & XIM_MODE_PRE_DEFAULT) {
2467 res->mode &= ~XIM_MODE_PRE_DEFAULT;
2468 } else if (!(res->mode & XIM_MODE_PRE_SET)) {
2469 return XIM_CHECK_ERROR;
2472 } else if(mode & XIM_STATUS_ATTR) {
2473 if(!(res->mode & XIM_MODE_STS_MASK)) {
2474 return XIM_CHECK_INVALID;
2477 if(res->mode & XIM_MODE_STS_CREATE) {
2478 res->mode &= ~XIM_MODE_STS_CREATE;
2479 } else if(res->mode & XIM_MODE_STS_ONCE) {
2480 res->mode &= ~XIM_MODE_STS_ONCE;
2481 } else if(res->mode & XIM_MODE_STS_DEFAULT) {
2482 res->mode &= ~XIM_MODE_STS_DEFAULT;
2483 } else if (!(res->mode & XIM_MODE_STS_SET)) {
2484 return XIM_CHECK_ERROR;
2489 return XIM_CHECK_INVALID;
2492 if(res->mode & XIM_MODE_IC_CREATE) {
2493 res->mode &= ~XIM_MODE_IC_CREATE;
2494 } else if(res->mode & XIM_MODE_IC_ONCE) {
2495 res->mode &= ~XIM_MODE_IC_ONCE;
2496 } else if(res->mode & XIM_MODE_IC_DEFAULT) {
2497 res->mode &= ~XIM_MODE_IC_DEFAULT;
2498 } else if (!(res->mode & XIM_MODE_IC_SET)) {
2499 return XIM_CHECK_ERROR;
2502 return XIM_CHECK_VALID;
2506 _XimCheckSetICValuesMode(
2507 XIMResourceList res,
2510 if(mode & XIM_PREEDIT_ATTR) {
2511 if(!(res->mode & XIM_MODE_PRE_MASK)) {
2512 return XIM_CHECK_INVALID;
2515 if(res->mode & XIM_MODE_PRE_ONCE) {
2516 res->mode &= ~XIM_MODE_PRE_ONCE;
2517 } else if(!(res->mode & XIM_MODE_PRE_SET)) {
2518 return XIM_CHECK_ERROR;
2521 } else if(mode & XIM_STATUS_ATTR) {
2522 if(!(res->mode & XIM_MODE_STS_MASK)) {
2523 return XIM_CHECK_INVALID;
2526 if(res->mode & XIM_MODE_STS_ONCE) {
2527 res->mode &= ~XIM_MODE_STS_ONCE;
2528 } else if(!(res->mode & XIM_MODE_STS_SET)) {
2529 return XIM_CHECK_ERROR;
2534 return XIM_CHECK_INVALID;
2537 if(res->mode & XIM_MODE_IC_ONCE) {
2538 res->mode &= ~XIM_MODE_IC_ONCE;
2539 } else if(!(res->mode & XIM_MODE_IC_SET)) {
2540 return XIM_CHECK_ERROR;
2543 return XIM_CHECK_VALID;
2547 _XimCheckGetICValuesMode(
2548 XIMResourceList res,
2551 if(mode & XIM_PREEDIT_ATTR) {
2552 if(!(res->mode & XIM_MODE_PRE_MASK)) {
2553 return XIM_CHECK_INVALID;
2556 if(!(res->mode & XIM_MODE_PRE_GET)) {
2557 return XIM_CHECK_ERROR;
2560 } else if(mode & XIM_STATUS_ATTR) {
2561 if(!(res->mode & XIM_MODE_STS_MASK)) {
2562 return XIM_CHECK_INVALID;
2565 if(!(res->mode & XIM_MODE_STS_GET)) {
2566 return XIM_CHECK_ERROR;
2571 return XIM_CHECK_INVALID;
2574 if(!(res->mode & XIM_MODE_IC_GET)) {
2575 return XIM_CHECK_ERROR;
2578 return XIM_CHECK_VALID;
2583 XIMResourceList res,
2586 if(mode &XIM_SETICDEFAULTS) {
2587 return _XimCheckSetICDefaultsMode(res, mode);
2588 } else if (mode & XIM_CREATEIC) {
2589 return _XimCheckCreateICMode(res, mode);
2590 } else if (mode & XIM_SETICVALUES) {
2591 return _XimCheckSetICValuesMode(res, mode);
2592 } else if (mode & XIM_GETICVALUES) {
2593 return _XimCheckGetICValuesMode(res, mode);
2595 return XIM_CHECK_ERROR;
2600 _XimSetLocalIMDefaults(
2603 XIMResourceList res_list,
2604 unsigned int list_num)
2606 XimValueOffsetInfo info;
2609 XIMResourceList res;
2612 info = im_attr_info;
2613 num = XIMNumber(im_attr_info);
2615 for(i = 0; i < num; i++) {
2616 if((res = _XimGetResourceListRecByQuark( res_list, list_num,
2617 info[i].quark)) == (XIMResourceList)NULL) {
2621 check = _XimCheckIMMode(res, XIM_SETIMDEFAULTS);
2622 if(check == XIM_CHECK_INVALID) {
2624 } else if (check == XIM_CHECK_ERROR) {
2628 if(!info[i].defaults) {
2631 if(!(info[i].defaults(&info[i], top, (XPointer)NULL, 0))) {
2643 XIMResourceList res_list,
2644 unsigned int list_num)
2647 XimValueOffsetInfo info;
2649 XIMResourceList res;
2654 pre_quark = XrmStringToQuark(XNPreeditAttributes);
2655 sts_quark = XrmStringToQuark(XNStatusAttributes);
2657 if(mode & XIM_PREEDIT_ATTR) {
2658 info = ic_pre_attr_info;
2659 num = XIMNumber(ic_pre_attr_info);
2660 } else if(mode & XIM_STATUS_ATTR) {
2661 info = ic_sts_attr_info;
2662 num = XIMNumber(ic_sts_attr_info);
2664 info = ic_attr_info;
2665 num = XIMNumber(ic_attr_info);
2668 for(i = 0; i < num; i++) {
2669 if(info[i].quark == pre_quark) {
2670 if(!_XimSetICDefaults(ic, (XPointer)((char *)top + info[i].offset),
2671 (mode | XIM_PREEDIT_ATTR), res_list, list_num)) {
2674 } else if (info[i].quark == sts_quark) {
2675 if(!_XimSetICDefaults(ic, (XPointer)((char *)top + info[i].offset),
2676 (mode | XIM_STATUS_ATTR), res_list, list_num)) {
2680 if(!(res = _XimGetResourceListRecByQuark(res_list, list_num,
2685 check = _XimCheckICMode(res, mode);
2686 if (check == XIM_CHECK_INVALID) {
2688 } else if (check == XIM_CHECK_ERROR) {
2692 if (!info[i].defaults) {
2695 if (!(info[i].defaults(&info[i], top, (XPointer)ic, mode))) {
2705 XimValueOffsetInfo info,
2707 XIMResourceList res,
2713 for(i = 0; i < num; i++ ) {
2714 if(info[i].quark == res->xrm_name) {
2715 if(!info[i].encode) {
2718 return (*info[i].encode)(&info[i], top, val);
2725 _XimEncodeLocalIMAttr(
2726 XIMResourceList res,
2730 return _XimEncodeAttr(im_attr_info, XIMNumber(im_attr_info),
2735 _XimEncodeLocalICAttr(
2737 XIMResourceList res,
2743 XimValueOffsetInfo info;
2745 if(mode & XIM_PREEDIT_ATTR) {
2746 info = ic_pre_attr_info;
2747 num = XIMNumber(ic_pre_attr_info);
2748 } else if(mode & XIM_STATUS_ATTR) {
2749 info = ic_sts_attr_info;
2750 num = XIMNumber(ic_sts_attr_info);
2752 info = ic_attr_info;
2753 num = XIMNumber(ic_attr_info);
2756 return _XimEncodeAttr(info, num, res, top, arg->value);
2760 _XimEncodeLocalTopValue(
2762 XIMResourceList res,
2766 XIMArg *p = (XIMArg *)val;
2768 if (res->xrm_name == XrmStringToQuark(XNClientWindow)) {
2769 ic->core.client_window = (Window)p->value;
2770 if (ic->core.focus_window == (Window)0)
2771 ic->core.focus_window = ic->core.client_window;
2773 _XRegisterFilterByType(ic->core.im->core.display,
2774 ic->core.focus_window,
2775 KeyPress, KeyRelease, _XimLocalFilter, (XPointer)ic);
2777 } else if (res->xrm_name == XrmStringToQuark(XNFocusWindow)) {
2778 if (ic->core.client_window) {
2780 _XUnregisterFilter(ic->core.im->core.display,
2781 ic->core.focus_window, _XimLocalFilter, (XPointer)ic);
2783 ic->core.focus_window = (Window)p->value;
2785 _XRegisterFilterByType(ic->core.im->core.display,
2786 ic->core.focus_window, KeyPress, KeyRelease,
2787 _XimLocalFilter, (XPointer)ic);
2790 ic->core.focus_window = (Window)p->value;
2796 _XimEncodeLocalPreeditValue(
2798 XIMResourceList res,
2801 XIMArg *p = (XIMArg *)val;
2803 if (res->xrm_name == XrmStringToQuark(XNStdColormap)) {
2804 XStandardColormap *colormap_ret;
2807 if (!(XGetRGBColormaps(ic->core.im->core.display,
2808 ic->core.focus_window, &colormap_ret,
2809 &count, (Atom)p->value)))
2812 Xfree(colormap_ret);
2818 _XimEncodeLocalStatusValue(
2820 XIMResourceList res,
2823 XIMArg *p = (XIMArg *)val;
2825 if (res->xrm_name == XrmStringToQuark(XNStdColormap)) {
2826 XStandardColormap *colormap_ret;
2829 if (!(XGetRGBColormaps(ic->core.im->core.display,
2830 ic->core.focus_window, &colormap_ret,
2831 &count, (Atom)p->value)))
2834 Xfree(colormap_ret);
2843 XIMResourceList res_list,
2844 unsigned int list_num,
2850 XIMResourceList res;
2856 pre_quark = XrmStringToQuark(XNPreeditAttributes);
2857 sts_quark = XrmStringToQuark(XNStatusAttributes);
2859 for(p = values; p->name != NULL; p++) {
2860 if((res = _XimGetResourceListRec(res_list, list_num,
2861 p->name)) == (XIMResourceList)NULL) {
2864 if(res->xrm_name == pre_quark) {
2865 if(((name = _XimSetICValueData(ic,
2866 (XPointer)(&((XimDefICValues *)top)->preedit_attr),
2867 res_list, list_num, (XIMArg *)p->value,
2868 (mode | XIM_PREEDIT_ATTR), flag)))) {
2871 } else if(res->xrm_name == sts_quark) {
2872 if(((name = _XimSetICValueData(ic,
2873 (XPointer)(&((XimDefICValues *)top)->status_attr),
2874 res_list, list_num, (XIMArg *)p->value,
2875 (mode | XIM_STATUS_ATTR), flag)))) {
2879 check = _XimCheckICMode(res, mode);
2880 if(check == XIM_CHECK_INVALID) {
2882 } else if(check == XIM_CHECK_ERROR) {
2886 if(mode & XIM_PREEDIT_ATTR) {
2887 if (!_XimEncodeLocalPreeditValue(ic, res, (XPointer)p))
2889 } else if(mode & XIM_STATUS_ATTR) {
2890 if (!_XimEncodeLocalStatusValue(ic, res, (XPointer)p))
2893 if (!_XimEncodeLocalTopValue(ic, res, (XPointer)p, flag))
2896 if(_XimEncodeLocalICAttr(ic, res, top, p, mode) == False) {
2905 _XimCheckInputStyle(
2909 int num = styles->count_styles;
2912 for(i = 0; i < num; i++) {
2913 if(styles->supported_styles[i] == style) {
2921 _XimCheckLocalInputStyle(
2926 XIMResourceList res_list,
2927 unsigned int list_num)
2929 XrmQuark quark = XrmStringToQuark(XNInputStyle);
2931 XIMResourceList res;
2933 for(p = values; p && p->name != NULL; p++) {
2934 if(quark == XrmStringToQuark(p->name)) {
2935 if(!(res = _XimGetResourceListRec(res_list, list_num, p->name))) {
2938 if(!_XimEncodeLocalICAttr(ic, res, top, p, 0)) {
2941 if (_XimCheckInputStyle(styles,
2942 ((XimDefICValues *)top)->input_style)) {
2953 XimValueOffsetInfo info,
2955 XIMResourceList res,
2961 for(i = 0; i < num; i++ ) {
2962 if(info[i].quark == res->xrm_name) {
2963 if(!info[i].decode) {
2966 return (*info[i].decode)(&info[i], top, val);
2973 _XimDecodeLocalIMAttr(
2974 XIMResourceList res,
2978 return _XimDecodeAttr(im_attr_info, XIMNumber(im_attr_info),
2983 _XimDecodeLocalICAttr(
2984 XIMResourceList res,
2990 XimValueOffsetInfo info;
2992 if(mode & XIM_PREEDIT_ATTR) {
2993 info = ic_pre_attr_info;
2994 num = XIMNumber(ic_pre_attr_info);
2995 } else if(mode & XIM_STATUS_ATTR) {
2996 info = ic_sts_attr_info;
2997 num = XIMNumber(ic_sts_attr_info);
2999 info = ic_attr_info;
3000 num = XIMNumber(ic_attr_info);
3003 return _XimDecodeAttr(info, num, res, top, val);
3007 _XimGetICValueData(Xic ic, XPointer top, XIMResourceList res_list,
3008 unsigned int list_num, XIMArg *values, unsigned long mode)
3011 XIMResourceList res;
3017 pre_quark = XrmStringToQuark(XNPreeditAttributes);
3018 sts_quark = XrmStringToQuark(XNStatusAttributes);
3020 for(p = values; p->name != NULL; p++) {
3021 if((res = _XimGetResourceListRec(res_list, list_num,
3022 p->name)) == (XIMResourceList)NULL) {
3025 if(res->xrm_name == pre_quark) {
3026 if((name = _XimGetICValueData(ic,
3027 (XPointer)(&((XimDefICValues *)top)->preedit_attr),
3028 res_list, list_num, (XIMArg *)p->value,
3029 (mode | XIM_PREEDIT_ATTR)))) {
3032 } else if(res->xrm_name == sts_quark) {
3033 if((name = _XimGetICValueData(ic,
3034 (XPointer)(&((XimDefICValues *)top)->status_attr),
3035 res_list, list_num, (XIMArg *)p->value,
3036 (mode | XIM_STATUS_ATTR)))) {
3040 check = _XimCheckICMode(res, mode);
3041 if(check == XIM_CHECK_INVALID) {
3043 } else if(check == XIM_CHECK_ERROR) {
3047 if(_XimDecodeLocalICAttr(res, top, p->value, mode) == False) {
3056 _XimGetCurrentIMValues(Xim im, XimDefIMValues *im_values)
3058 bzero((char *)im_values, sizeof(XimDefIMValues));
3060 im_values->styles = im->core.styles;
3061 im_values->im_values_list = im->core.im_values_list;
3062 im_values->ic_values_list = im->core.ic_values_list;
3063 im_values->destroy_callback = im->core.destroy_callback;
3064 im_values->res_name = im->core.res_name;
3065 im_values->res_class = im->core.res_class;
3066 im_values->visible_position = im->core.visible_position;
3070 _XimSetCurrentIMValues(Xim im, XimDefIMValues *im_values)
3072 im->core.styles = im_values->styles;
3073 im->core.im_values_list = im_values->im_values_list;
3074 im->core.ic_values_list = im_values->ic_values_list;
3075 im->core.destroy_callback = im_values->destroy_callback;
3076 im->core.res_name = im_values->res_name;
3077 im->core.res_class = im_values->res_class;
3078 im->core.visible_position = im_values->visible_position;
3082 _XimGetCurrentICValues(Xic ic, XimDefICValues *ic_values)
3084 bzero((char *)ic_values, sizeof(XimDefICValues));
3086 ic_values->input_style = ic->core.input_style;
3087 ic_values->client_window = ic->core.client_window;
3088 ic_values->focus_window = ic->core.focus_window;
3089 ic_values->filter_events = ic->core.filter_events;
3090 ic_values->geometry_callback = ic->core.geometry_callback;
3091 ic_values->res_name = ic->core.res_name;
3092 ic_values->res_class = ic->core.res_class;
3093 ic_values->destroy_callback = ic->core.destroy_callback;
3094 ic_values->string_conversion_callback
3095 = ic->core.string_conversion_callback;
3096 ic_values->string_conversion = ic->core.string_conversion;
3097 ic_values->reset_state = ic->core.reset_state;
3098 ic_values->hotkey = ic->core.hotkey;
3099 ic_values->hotkey_state = ic->core.hotkey_state;
3100 ic_values->preedit_attr = ic->core.preedit_attr;
3101 ic_values->status_attr = ic->core.status_attr;
3105 _XimSetCurrentICValues(
3107 XimDefICValues *ic_values)
3109 ic->core.input_style = ic_values->input_style;
3110 ic->core.client_window = ic_values->client_window;
3111 if (ic_values->focus_window)
3112 ic->core.focus_window = ic_values->focus_window;
3113 ic->core.filter_events = ic_values->filter_events;
3114 ic->core.geometry_callback = ic_values->geometry_callback;
3115 ic->core.res_name = ic_values->res_name;
3116 ic->core.res_class = ic_values->res_class;
3117 ic->core.destroy_callback = ic_values->destroy_callback;
3118 ic->core.string_conversion_callback
3119 = ic_values->string_conversion_callback;
3120 ic->core.string_conversion = ic_values->string_conversion;
3121 ic->core.reset_state = ic_values->reset_state;
3122 ic->core.hotkey = ic_values->hotkey;
3123 ic->core.hotkey_state = ic_values->hotkey_state;
3124 ic->core.preedit_attr = ic_values->preedit_attr;
3125 ic->core.status_attr = ic_values->status_attr;
3129 _XimInitialIMOffsetInfo(void)
3131 unsigned int n = XIMNumber(im_attr_info);
3134 for(i = 0; i < n; i++) {
3135 im_attr_info[i].quark = XrmStringToQuark(GET_NAME(im_attr_info[i]));
3140 _XimInitialICOffsetInfo(void)
3145 n = XIMNumber(ic_attr_info);
3146 for(i = 0; i < n; i++) {
3147 ic_attr_info[i].quark = XrmStringToQuark(GET_NAME(ic_attr_info[i]));
3150 n = XIMNumber(ic_pre_attr_info);
3151 for(i = 0; i < n; i++) {
3152 ic_pre_attr_info[i].quark = XrmStringToQuark(GET_NAME(ic_pre_attr_info[i]));
3155 n = XIMNumber(ic_sts_attr_info);
3156 for(i = 0; i < n; i++) {
3157 ic_sts_attr_info[i].quark = XrmStringToQuark(GET_NAME(ic_sts_attr_info[i]));
3162 _XimInitialIMMode(void)
3164 unsigned int n = XIMNumber(im_mode);
3167 for(i = 0; i < n; i++) {
3168 im_mode_quark[i] = XrmStringToQuark(GET_NAME(im_mode[i]));
3173 _XimInitialICMode(void)
3175 unsigned int n = XIMNumber(ic_mode);
3178 for(i = 0; i < n; i++) {
3179 ic_mode_quark[i] = XrmStringToQuark(GET_NAME(ic_mode[i]));
3184 _XimInitialResourceInfo(void)
3186 static Bool init_flag = False;
3188 if(init_flag == True) {
3191 _XimInitialIMOffsetInfo();
3192 _XimInitialICOffsetInfo();
3193 _XimInitialIMMode();
3194 _XimInitialICMode();