comparison lib/imlib/im.h @ 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 /* $Id: im.h,v 1.13 2002/01/27 11:33:06 ishisone Exp $ */
2 /*
3 * Copyright (c) 1994 Software Research Associates, Inc.
4 *
5 * Permission to use, copy, modify, and distribute this software and its
6 * documentation for any purpose and without fee is hereby granted, provided
7 * that the above copyright notice appear in all copies and that both that
8 * copyright notice and this permission notice appear in supporting
9 * documentation, and that the name of Software Research Associates not be
10 * used in advertising or publicity pertaining to distribution of the
11 * software without specific, written prior permission. Software Research
12 * Associates makes no representations about the suitability of this software
13 * for any purpose. It is provided "as is" without express or implied
14 * warranty.
15 *
16 * Author: Makoto Ishisone, Software Research Associates, Inc., Japan
17 */
18
19 #ifndef _im_h
20 #define _im_h
21
22 #include <stdio.h>
23 #include <X11/IntrinsicP.h>
24 #include <X11/StringDefs.h>
25 #include <X11/Xos.h>
26 #include <X11/Xfuncs.h>
27
28 /* macros defined in the system header file cause problem... */
29 #undef major
30 #undef minor
31
32 #define EXT_DEBUG_VAR debug_IMProtocol
33 #include "DebugPrint.h"
34 #include "AsyncErr.h"
35 #include "FontBank.h"
36 #include "ConvCtrl.h"
37
38 #include "imprtype.h"
39 #include "imbuf.h"
40 #include "imxport.h"
41 #include "imconst.h"
42
43 /*
44 * Restrictions of attributes
45 */
46
47 #define MIN_LINE_SPACING 2
48 #define MIN_AREA_WIDTH 16
49 #define MIN_AREA_HEIGHT 10
50
51 /*
52 * IMDispatcher -- request dispatcher
53 */
54
55 typedef int (*IMDispatcher)();
56
57
58 /*
59 * IMConnection
60 */
61
62 typedef struct _im_connection_ {
63 /* protocol information */
64 int major_protocol_version;
65 int minor_protocol_version;
66 #ifdef XIM_BC
67 int has_length_bug;
68 #endif
69 int serial; /* connection serial # (for debug) */
70 Widget proto_widget; /* protocol handler widget */
71
72 /* transport information */
73 IMTransport transport;
74
75 int byte_order; /* byte order of the client */
76 #define ORDER_UNKNOWN 0 /* order is yet unknown */
77 #define ORDER_BIG 1 /* big endian */
78 #define ORDER_LITTLE 2 /* little endian */
79
80 /* communication buffer */
81 IMBuffer in_buf; /* input buffer */
82 IMBuffer out_buf; /* output buffer */
83 #define IM_INBUF(conn) (&(conn)->in_buf)
84 #define IM_OUTBUF(conn) (&(conn)->out_buf)
85
86 IMDispatcher dispatcher; /* request dispatch procedure */
87
88 struct _im_im_ *im_list; /* list of IMs on this connection */
89
90 #ifdef notyet
91 /* authentication information */
92 IMAuth *server_auth; /* server authentication data */
93 IMAuth *client_auth; /* client authentication data */
94 #endif /* notyet */
95
96 /* scheduler */
97 int schedule; /* type of operation to be performed */
98 #define SCHED_WRITE 1 /* flush output buffer */
99 #define SCHED_CLOSE 2 /* close down connection gently */
100 #define SCHED_SHUTDOWN 4 /* force shut down */
101 struct _im_connection_ *queue_next; /* output/close/shutdown queue */
102
103 struct _im_connection_ *next;
104 } IMConnection;
105
106
107 /*
108 * IMConverter -- information on the conversion engine
109 */
110 typedef struct {
111 char **supported_locales; /* list of supported locales */
112 int num_locales;
113 WidgetClass input_object_class;
114 WidgetClass display_object_class;
115 } IMConverter;
116
117
118 /*
119 * IMTriggerKey -- conversion trigger key specification
120 */
121 typedef struct {
122 KeySym keysym;
123 long modifiers;
124 long check_modifiers;
125 } IMTriggerKey;
126
127
128 /*
129 * IMExtensionMask -- bit mask of enabled extensions
130 */
131 typedef unsigned long IMExtensionMask; /* holds up to 32 extensions */
132
133
134 /*
135 * IMIM -- per-IM structure
136 */
137
138 typedef struct _im_im_ {
139 unsigned int id; /* input-method ID */
140 IMConnection *connection; /* connection this IM is on */
141 struct _im_im_ *next;
142 struct _im_im_ *hash_next; /* for hash table */
143 IMConverter *converter; /* conversion engine */
144 IMExtensionMask mask; /* enabled extensions */
145 struct _im_ic_ *ic_list; /* list of all ICs belonging to this IM */
146 } IMIM;
147
148
149 /*
150 * IMAttributes and IMPSAttributes -- IC attributes structure
151 */
152
153 typedef struct {
154 unsigned long set_mask; /* shows attrs that have been set */
155 unsigned long change_mask; /* shows attrs that have changed */
156 #define ATTR_MASK_INPUT_STYLE (1<<0)
157 #define ATTR_MASK_CLIENT (1<<1)
158 #define ATTR_MASK_FOCUS (1<<2)
159 #define ATTR_MASK_PREEDIT_STATE (1<<3)
160 #define ATTR_MASK_RESET_STATE (1<<4)
161 XIMStyle input_style;
162 Window client; /* client window */
163 Window focus; /* focus window */
164 unsigned long preedit_state;
165 unsigned long reset_state;
166 } IMCommonAttributes;
167
168 typedef struct {
169 unsigned long set_mask; /* shows attrs that have been set */
170 unsigned long change_mask; /* shows attrs that have changed */
171 #define ATTR_MASK_AREA (1<<0)
172 #define ATTR_MASK_FOREGROUND (1<<1)
173 #define ATTR_MASK_BACKGROUND (1<<2)
174 #define ATTR_MASK_COLORMAP (1<<3)
175 #define ATTR_MASK_STD_COLORMAP (1<<4)
176 #define ATTR_MASK_BG_PIXMAP (1<<5)
177 #define ATTR_MASK_LINESPACE (1<<6)
178 #define ATTR_MASK_CURSOR (1<<7)
179 #define ATTR_MASK_AREA_NEEDED (1<<8)
180 #define ATTR_MASK_FONT_SET (1<<9)
181 #define ATTR_MASK_SPOT_LOCATION (1<<10)
182 XRectangle area;
183 Pixel foreground, background;
184 Colormap colormap;
185 Atom std_colormap;
186 Pixmap bg_pixmap;
187 Position line_space;
188 Cursor cursor;
189 XRectangle area_needed; /* width/height member are unused */
190 String font_set;
191 XPoint spot_location; /* not used by status attr. */
192 } IMPSAttributes;
193
194
195 /*
196 * IMPendingEvent -- record of delayed processing event
197 */
198
199 typedef struct _im_pending_event_ {
200 struct _im_ic_ *ic;
201 int synchronous;
202 XEvent event;
203 struct _im_pending_event_ *next;
204 } IMPendingEvent;
205
206
207 /*
208 * IMWindowProfile -- information about window
209 */
210
211 typedef struct {
212 Dimension width;
213 Dimension height;
214 Window root;
215 } IMWindowProfile;
216
217
218 /*
219 * IMIC -- per-IC structure
220 */
221
222 typedef struct _im_ic_ {
223 unsigned int id; /* input-context ID */
224 IMIM *im; /* IM this IC belongs to */
225 Widget conversion; /* conversion widget attached
226 * to this IC */
227 struct _im_ic_ *next;
228 struct _im_ic_ *hash_next; /* for hash list */
229 int state; /* current IC state */
230 #define IC_SYNCING 0x01 /* waiting for SYNC_REPLY message */
231 #define IC_CONVERTING 0x02 /* in conversion mode */
232 #define IC_RESETTING 0x04 /* in resetting */
233 #define IC_FORWARDING 0x08 /* in forward event */
234 #define IC_IN_PREEDIT 0x10 /* in preedit (on-the-spot only) */
235 #define IC_IN_STATUS 0x20 /* in status (on-the-spot only) */
236 #define IC_DESTROYING 0x40 /* in process of IC destruction */
237 IMPendingEvent *pending_events; /* pending events */
238 int style; /* input style */
239 #define IMSTYLE_SEPARATE 0 /* root window style */
240 #define IMSTYLE_OVER_THE_SPOT 1 /* over-the-spot style */
241 #define IMSTYLE_OFF_THE_SPOT 2 /* off-the-spot style */
242 #define IMSTYLE_ON_THE_SPOT 3 /* on-the-spot style */
243 IMCommonAttributes common_attr; /* general attributes */
244 IMPSAttributes preedit_attr; /* preedit specific attributes */
245 IMPSAttributes status_attr; /* status specific attributes */
246 IMWindowProfile client_profile; /* client widow profile */
247 IMWindowProfile focus_profile; /* focus window profile */
248 XFontStruct **fonts;
249 int num_fonts;
250 XFontStruct **status_fonts;
251 int num_status_fonts;
252 } IMIC;
253
254
255 /*
256 * IM and IC hash table size
257 */
258
259 #define IM_HASH_SIZE 32
260 #define IC_HASH_SIZE 128
261
262
263 /*
264 * Public function declarations
265 */
266
267 #include "imfuncs.h"
268
269 #endif /* _im_h */