Mercurial > kinput2.yaz
comparison lib/imlib/improto.c @ 0:92745d501b9a
initial import from kinput2-v3.1
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Mon, 08 Mar 2010 04:44:30 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:92745d501b9a |
---|---|
1 #ifndef lint | |
2 static char *rcsid = "$Id: improto.c,v 1.5 1994/05/31 07:54:04 ishisone Exp $"; | |
3 #endif | |
4 /* | |
5 * Copyright (c) 1994 Software Research Associates, Inc. | |
6 * | |
7 * Permission to use, copy, modify, and distribute this software and its | |
8 * documentation for any purpose and without fee is hereby granted, provided | |
9 * that the above copyright notice appear in all copies and that both that | |
10 * copyright notice and this permission notice appear in supporting | |
11 * documentation, and that the name of Software Research Associates not be | |
12 * used in advertising or publicity pertaining to distribution of the | |
13 * software without specific, written prior permission. Software Research | |
14 * Associates makes no representations about the suitability of this software | |
15 * for any purpose. It is provided "as is" without express or implied | |
16 * warranty. | |
17 * | |
18 * Author: Makoto Ishisone, Software Research Associates, Inc., Japan | |
19 */ | |
20 | |
21 #include "im.h" | |
22 #include "IMProtoP.h" | |
23 | |
24 /* | |
25 * This library contains interface functions between imlib and | |
26 * IMProtocol widget. | |
27 */ | |
28 | |
29 /*- IMRegisterConnection: register connection to the protocol widget -*/ | |
30 void | |
31 IMRegisterConnection(conn) | |
32 IMConnection *conn; | |
33 { | |
34 IMProtocolWidget ipw = (IMProtocolWidget)conn->proto_widget; | |
35 | |
36 conn->next = ipw->imp.connection_list; | |
37 ipw->imp.connection_list = conn; | |
38 } | |
39 | |
40 /*- IMUnregisterConnection: unregister connection from the protocol widget -*/ | |
41 void | |
42 IMUnregisterConnection(conn) | |
43 IMConnection *conn; | |
44 { | |
45 IMProtocolWidget ipw = (IMProtocolWidget)conn->proto_widget; | |
46 IMConnection *p, *q; | |
47 | |
48 p = ipw->imp.connection_list; | |
49 q = NULL; | |
50 while (p != NULL) { | |
51 if (p == conn) { | |
52 if (q == NULL) { | |
53 ipw->imp.connection_list = p->next; | |
54 } else { | |
55 q->next = p->next; | |
56 } | |
57 /* | |
58 * If there are no connections, and the no-more-connections | |
59 * flag is set to true, destroy the protocol widget. | |
60 */ | |
61 if (ipw->imp.connection_list == NULL && | |
62 ipw->imp.no_more_connections == True) { | |
63 DPRINT(("IMProtocolWidget no longer necessary. killing..\n")); | |
64 XtDestroyWidget((Widget)ipw); | |
65 } | |
66 return; | |
67 } | |
68 q = p; | |
69 p = p->next; | |
70 } | |
71 } | |
72 | |
73 /*- IMConnectionList: get connection list -*/ | |
74 IMConnection * | |
75 IMConnectionList(w) | |
76 Widget w; | |
77 { | |
78 IMProtocolWidget ipw = (IMProtocolWidget)w; | |
79 | |
80 return ipw->imp.connection_list; | |
81 } | |
82 | |
83 /*- IMPushQueue: push connection to the scheduler queue -*/ | |
84 void | |
85 IMPushQueue(conn) | |
86 IMConnection *conn; | |
87 { | |
88 Widget w = conn->proto_widget; | |
89 | |
90 conn->queue_next = IM_QUEUE(w); | |
91 IM_QUEUE(w) = conn; | |
92 } | |
93 | |
94 /*- IMPopQueue: pop connection from the scheduler queue */ | |
95 IMConnection * | |
96 IMPopQueue(w) | |
97 Widget w; | |
98 { | |
99 IMConnection *conn; | |
100 | |
101 conn = IM_QUEUE(w); | |
102 if (conn != NULL) { | |
103 IM_QUEUE(w) = conn->queue_next; | |
104 conn->queue_next = NULL; | |
105 } | |
106 return conn; | |
107 } | |
108 | |
109 /*- IMQueueEmpty: returns true if the scheduler queue is empty -*/ | |
110 int | |
111 IMQueueEmpty(w) | |
112 Widget w; | |
113 { | |
114 return(IM_QUEUE(w) == NULL); | |
115 } | |
116 | |
117 /*- IMDefaultForeground: get default foreground color -*/ | |
118 Pixel | |
119 IMDefaultForeground(w) | |
120 Widget w; | |
121 { | |
122 IMProtocolWidget ipw = (IMProtocolWidget)w; | |
123 | |
124 return ipw->imp.foreground; | |
125 } | |
126 | |
127 /*- IMDefaultBackground: get default background color -*/ | |
128 Pixel | |
129 IMDefaultBackground(w) | |
130 Widget w; | |
131 { | |
132 IMProtocolWidget ipw = (IMProtocolWidget)w; | |
133 | |
134 return ipw->core.background_pixel; | |
135 } | |
136 | |
137 /*- IMDefaultFontSet: get default font set -*/ | |
138 char * | |
139 IMDefaultFontSet(imp) | |
140 IMIM *imp; | |
141 { | |
142 IMProtocolWidget ipw = (IMProtocolWidget)imp->connection->proto_widget; | |
143 | |
144 return ipw->imp.default_fontlist; | |
145 } | |
146 | |
147 /*- IMFontBank: get font bank for the specified IM -*/ | |
148 FontBank | |
149 IMFontBank(imp) | |
150 IMIM *imp; | |
151 { | |
152 IMProtocolWidget ipw = (IMProtocolWidget)imp->connection->proto_widget; | |
153 | |
154 return ipw->imp.font_bank; | |
155 } | |
156 | |
157 /*- IMStatusWidth: get default status width -*/ | |
158 int | |
159 IMStatusWidth(w) | |
160 Widget w; | |
161 { | |
162 IMProtocolWidget ipw = (IMProtocolWidget)w; | |
163 | |
164 return ipw->imp.status_width; | |
165 } | |
166 | |
167 /*- IMInitHash: initialize IM/IC hash table -*/ | |
168 void | |
169 IMInitHash(w) | |
170 Widget w; | |
171 { | |
172 IMIM **impp; | |
173 IMIC **icpp; | |
174 int i; | |
175 | |
176 impp = IM_IMHASH(w); | |
177 icpp = IM_ICHASH(w); | |
178 for (i = 0; i < IM_HASH_SIZE; i++) impp[i] = NULL; | |
179 for (i = 0; i < IC_HASH_SIZE; i++) icpp[i] = NULL; | |
180 IM_LASTIMID(w) = IM_LASTICID(w) = 0; | |
181 } | |
182 | |
183 /*- IMIMHash: get IM hash table -*/ | |
184 IMIM ** | |
185 IMIMHash(w) | |
186 Widget w; | |
187 { | |
188 return IM_IMHASH(w); | |
189 } | |
190 | |
191 /*- IMICHash: get IC hash table -*/ | |
192 IMIC ** | |
193 IMICHash(w) | |
194 Widget w; | |
195 { | |
196 return IM_ICHASH(w); | |
197 } | |
198 | |
199 /*- IMNextIMID: return next IMID (it might be used, though) -*/ | |
200 unsigned int | |
201 IMNextIMID(w) | |
202 Widget w; | |
203 { | |
204 long id = IM_LASTIMID(w) + 1; /* use long int to avoid overflow */ | |
205 | |
206 if (id > 65535L) id = 1; | |
207 IM_LASTIMID(w) = (unsigned int)id; | |
208 return (unsigned int)id; | |
209 } | |
210 | |
211 /*- IMNextICID: return next ICID (it might be used, though) -*/ | |
212 unsigned int | |
213 IMNextICID(w) | |
214 Widget w; | |
215 { | |
216 long id = IM_LASTICID(w) + 1; /* use long int to avoid overflow */ | |
217 | |
218 if (id > 65535L) id = 1; | |
219 IM_LASTICID(w) = (unsigned int)id; | |
220 return (unsigned int)id; | |
221 } | |
222 | |
223 /*- IMCtextAtom: get COMPOUND_TEXT atom -*/ | |
224 Atom | |
225 IMCtextAtom(w) | |
226 Widget w; | |
227 { | |
228 return ATOM_CTEXT(w); | |
229 } | |
230 | |
231 /*- IMKi2CommAtom: get _KINPUT2_COMM atom -*/ | |
232 Atom | |
233 IMKi2CommAtom(w) | |
234 Widget w; | |
235 { | |
236 return ATOM_KI2COMM(w); | |
237 } | |
238 | |
239 /*- IMXConnectAtom: get _XIM_XCONNECT atom -*/ | |
240 Atom | |
241 IMXConnectAtom(w) | |
242 Widget w; | |
243 { | |
244 return ATOM_XCONNECT(w); | |
245 } | |
246 | |
247 /*- IMProtocolAtom: get _XIM_PROTOCOL atom -*/ | |
248 Atom | |
249 IMProtocolAtom(w) | |
250 Widget w; | |
251 { | |
252 return ATOM_PROTOCOL(w); | |
253 } | |
254 | |
255 /*- IMMoreDataAtom: get _XIM_MOREDATA atom -*/ | |
256 Atom | |
257 IMMoreDataAtom(w) | |
258 Widget w; | |
259 { | |
260 return ATOM_MOREDATA(w); | |
261 } | |
262 | |
263 /*- IMTriggerKeys: get trigger key list -*/ | |
264 IMTriggerKey * | |
265 IMTriggerKeys(imp, num_triggersp) | |
266 IMIM *imp; | |
267 int *num_triggersp; | |
268 { | |
269 IMProtocolWidget ipw = (IMProtocolWidget)imp->connection->proto_widget; | |
270 | |
271 *num_triggersp = ipw->imp.num_trigger_keys; | |
272 return ipw->imp.trigger_keys; | |
273 } | |
274 | |
275 /*- getConverter: look up converter for the specified locale -*/ | |
276 IMConverter * | |
277 IMGetConverter(w, locale) | |
278 Widget w; | |
279 char *locale; | |
280 { | |
281 IMProtocolWidget ipw = (IMProtocolWidget)w; | |
282 IMConverter *conv = &ipw->imp.converter; | |
283 int i; | |
284 | |
285 for (i = 0; i < conv->num_locales; i++) { | |
286 if (!strcmp(conv->supported_locales[i], locale)) return conv; | |
287 } | |
288 return NULL; | |
289 } |