diff options
Diffstat (limited to 'libX11/specs/XIM/xim.ms')
-rw-r--r-- | libX11/specs/XIM/xim.ms | 4279 |
1 files changed, 4279 insertions, 0 deletions
diff --git a/libX11/specs/XIM/xim.ms b/libX11/specs/XIM/xim.ms new file mode 100644 index 000000000..e41e9bcab --- /dev/null +++ b/libX11/specs/XIM/xim.ms @@ -0,0 +1,4279 @@ +.\" $Xorg: xim.ms,v 1.3 2000/08/17 19:42:21 cpqbld Exp $ +.\" To print this out, type tbl macros.t ThisFile | troff -ms +.\" $XFree86: xc/doc/specs/XIM/xim.ms,v 1.2 2000/12/14 17:48:58 dawes Exp $ +.EH '''' +.OH '''' +.EF '''' +.OF '''' +.ps 11 +.nr PS 11 +\& +.sp 8 +.TL +\s+3\fBThe Input Method Protocol\fP\s-3 +.sp +\fBVersion 1.0\fP +.sp +\fBX Consortium Standard\fP +.sp +\fBX Version 11, Release 7\fP +.sp +\fB\*(xV\fP +.sp 3 +.AU +Masahiko Narita +.AI +FUJITSU Limited. +.AU +Hideki Hiura +.AI +SunSoft, Inc. +.sp 3 +.AB +.LP +This specifies a protocol between IM library and IM (Input Method) +Server for internationalized text input, which is independent from +any specific language, any specific input method and the transport layer +used in communication between the IM library and the IM Server, and uses +a client-server model. +This protocol allows user to use his/her favorite input method for all +applications within the stand-alone distributed environment. +.AE +.ce 0 +.br +\& +.LP +.ps 11 +.nr PS 11 +.bp +\& +.ps 9 +.nr PS 9 +.sp 8 +.LP +.DS C +X Window System is a trademark of X Consortium, Inc. +.sp +Copyright \(co 1993, 1994 by X Consortium, Inc. +.DE +.sp 2 +.LP +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: +.LP +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. +.LP +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +.LP +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the X Consortium. +.sp 3 +.DS C +Copyright \(co 1993, 1994 by FUJITSU LIMITED +.sp +Copyright \(co 1993, 1994 by Sun Microsystems, Inc. +.DE +.sp 2 +.LP +Permission to use, copy, modify, and distribute this documentation +for any purpose and without fee is hereby granted, provided +that the above copyright notice and this permission +notice appear in all copies. +Fujitsu and Sun Microsystems make no representations +about the suitability for any purpose of the information in this document. +This documentation is provided as is without express or implied warranty. +.ps 11 +.nr PS 11 +.bp 1 +.EH '\fBX Input Method Protocol\fP''\fB\*(xV\fP' +.OH '\fBX Input Method Protocol\fP''\fB\*(xV\fP' +.EF ''\fB % \fP'' +.OF ''\fB % \fP'' +.NH 1 +Introduction +.XS +\*(SN Introduction +.XE +.NH 2 +Scope +.XS +\*(SN Scope +.XE +.LP +The internationalization in the +X Window System +Version 11, Release 5 (X11R5) provides a common API which application +developers can use to create portable internationalized programs and to +adapt them to the requirements of different native languages, local customs, +and character string encodings (this is called ``localization''). +As one of its internationalization mechanisms X11R5 has defined a functional +interface for internationalized text input, called XIM (X Input Method). +.LP +When a client-server model is used with an IM (Input Method) implementation, +a protocol must be established between the client and the server. +However, the protocol used to interface Input Method Servers (IM Servers) +with the Input Method libraries (IM libraries) to which applications are +linked was not addressed in X11R5. +This led application developers to depend on vendor-specific input methods, +decreased the user's choice of available input methods, and made it more +difficult for developers to create portable applications. This paper describes +the Input Method Protocol developed for X11R6 to resolve the above problems +and to address the requirements of existing and future input methods. +.LP +The Input Method Protocol is independent from the transport layer used in +communication between the IM library and the IM Server. +Thus, the input method protocol can be built on any inter-process +communication mechanism, such as TCP/IP or the X protocol. +.LP +In addition, the protocol provides for future extensions such as differing +input model types. +.LP +.NH 2 +Background +.XS +\*(SN Background +.XE +.LP +Text input is much more simple for some languages than +others. English, for instance, uses an alphabet of a manageable size, +and input consists of pressing the corresponding key on a keyboard, +perhaps in combination with a shift key for capital letters or special +characters. +.LP +Some languages have larger alphabets, or modifiers such as accents, +which require the addition of special key combinations in order to enter +text. These input methods may require ``dead-keys'' or ``compose-keys'' +which, when followed by different combinations of key strokes, +generate different characters. +.LP +Text input for ideographic languages is much less simple. In these +languages, characters represent actual objects rather than phonetic +sounds used in pronouncing a word, and the number of characters +in these languages may continue to grow. In Japanese, for instance, most +text input methods involve entering characters in a phonetic alphabet, +after which the input method searches a dictionary for possible +ideographic equivalents (of which there may be many). The input method then +presents the candidate characters for the user to choose from. +.LP +In Japanese, either Kana (phonetic symbols) or Roman letters are +typed and then a region is selected for conversion to Kanji. Several +Kanji characters may have the same phonetic representation. If that +is the case with the string entered, a menu of characters is presented +and the user must choose the appropriate one. If no choice is necessary +or a preference has been established, the input method does the +substitution directly. +.LP +These complicated input methods must present state information (Status Area), +text entry and edit space (Preedit Area), and menu/choice presentations +(Auxiliary Area). Much of the protocol between the IM library and the IM +Server involves managing these IM areas. +Because of the size and complexity of these input methods, and because +of how widely they vary from one language or locale to another, they are +usually implemented as separate processes which can serve many client +processes on the same computer or network. +.LP +.NH 2 +Input Method Styles +.XS +\*(SN Input Method Styles +.XE +.LP +X11 internationalization support includes the following four types of +input method: +.RS +.IP "- on-the-spot:" 20 +The client application is directed by the IM Server to display all +pre-edit data at the site of text insertion. The client registers +callbacks invoked by the input method during pre-editing. +.IP "- off-the-spot:" 20 +The client application provides display windows for the pre-edit data +to the input method which displays into them directly. +.IP "- over-the-spot:" 20 +The input method displays pre-edit data in a window which it brings up +directly over the text insertion position. +.IP "- root-window:" 20 +The input method displays all pre-edit data in a separate area of the +screen in a window specific to the input method. +.RE +.LP +Client applications must choose from the available input methods +supported by the IM Server and provide the display areas and callbacks +required by the input method. +.LP +.NH 1 +Architecture +.XS +\*(SN Architecture +.XE +.NH 2 +Implementation Model +.XS +\*(SN Implementation Model +.XE +.LP +Within the X Window System environment, the following two typical +architectural models can be used as an input method's implementation +model. +.RS +.IP "- Client/Server model:" 20 +A separate process, the IM Server, processes input and handles preediting, +converting, and committing. The IM library within the application, acting +as client to the IM Server, simply receives the committed string from the +IM Server. +.IP "- Library model:" 20 +All input is handled by the IM library within the application. The +event process is closed within the IM library and a separate IM Server +process may not be required. +.RE +.LP +Most languages which need complex preediting, such as Asian languages, +are implemented using the Client/Server IM model. Other languages +which need only dead key or compose key processing, such as European +languages, are implemented using the Library model. +.LP +In this paper, we discuss mainly the Client/Server IM model and the +protocol used in communication between the IM library (client) and the IM +Server. +.LP +.NH 2 +Structure of IM +.XS +\*(SN Structure of IM +.XE +.LP +When the client connects or disconnects to the IM Server, an open or close +operation occurs between the client and the IM Server. +.LP +The IM can be specified at the time of XOpenIM() by setting the locale +of the client and a locale modifier. Since the IM remembers +the locale at the time of creation XOpenIM() can be called +multiple times (with the +setting for the locale and the locale modifier changed) to support +multiple languages. +.LP +In addition, the supported IM type can be obtained using XGetIMValues(). +.LP +The client usually holds multiple input (text) fields. Xlib provides a +value type called the ``Input Context'' (IC) to manage each individual +input field. An IC can be created by specifying XIM using XCreateIC(), +and it can be destroyed using XDestroyIC(). +.LP +The IC can specify the type of IM which is supported by XIM for each +input field, so each input field can handle a different type of IM. +.LP +Most importantly information such as the committed string sent from +the IM Server to the client, is exchanged based on each IC. +.LP +Since each IC corresponds to an input field, the focused input field +should be announced to the IM Server using XSetICFocus(). (XUnsetICFocus() +can also be used to change the focus.) +.LP +.NH 2 +Event Handling Model +.XS +\*(SN Event Handling Model +.XE +.LP +Existing input methods support either the FrontEnd method, the BackEnd method, +or both. This protocol specifically supports the BackEnd method as +the default method, but also supports the FrontEnd method as an optional +IM Server extension. +.LP +The difference between the FrontEnd and BackEnd methods is in how +events are delivered to the IM Server. (Fig. 1) +.LP +.NH 3 +BackEnd Method +.XS +\*(SN BackEnd Method +.XE +.LP +In the BackEnd method, client window input events are always delivered +to the IM library, which then passes them to the IM Server. Events are +handled serially in the order delivered, and therefore there is no +synchronization problem between the IM library and the IM Server. +.LP +Using this method, the IM library forwards all KeyPress and KeyRelease +events to the IM Server (as required by the Event Flow Control model +described in section 2.4. ``Event Flow Control''), and synchronizes +with the IM Server (as described in section 4.16. ``Filtering Events''). +.LP +.NH 3 +FrontEnd Method +.XS +\*(SN FrontEnd Method +.XE +.LP +In the FrontEnd method, client window input events are delivered by the +X server directly to both the IM Server and the IM library. Therefore this +method provides much better interactive performance while preediting +(particularly in cases such as when the IM Server is running locally on +the user's workstation and the client application is running on another +workstation over a relatively slow network). +.LP +However, the FrontEnd model may have synchronization problems between +the key events handled in the IM Server and other events handled in the +client, and these problems could possibly cause the loss or duplication +of key events. For this reason, the BackEnd method is the core method +supported, and the FrontEnd method is made available as an extension for +performance purposes. (Refer to Appendix A for more information.) +.LP +.LP +.bp +\^... 0.05 6.513 4.737 10.45 +\^... 0.000i 3.937i 4.687i 0.000i +.nr 00 \n(.u +.nf +.PS 3.937i 4.687i +.br +.ps +.ps 10 +\h'3.687i'\v'3.437i'\v'-.13m'\L'-0.500i\(br'\v'.13m' +.sp -1 +\h'3.712i'\v'3.037i'\D'l-0.025i -0.100i' +.sp -1 +\h'3.687i'\v'2.937i'\D'l-0.025i 0.100i' +.sp -1 +\h'2.187i'\v'1.938i'\v'-.13m'\L'-0.750i\(br'\v'.13m' +.sp -1 +\h'2.187i'\v'1.188i'\l'0.750i' +.sp -1 +\h'2.937i'\v'1.188i'\v'-.13m'\L'1.250i\(br'\v'.13m' +.sp -1 +\h'2.912i'\v'2.338i'\D'l0.025i 0.100i' +.sp -1 +\h'2.937i'\v'2.438i'\D'l0.025i -0.100i' +.sp -1 +\h'2.187i'\v'3.437i'\v'-.13m'\L'-1.499i\(br'\v'.13m' +.sp -1 +\h'2.212i'\v'2.038i'\D'l-0.025i -0.100i' +.sp -1 +\h'2.187i'\v'1.938i'\D'l-0.025i 0.100i' +.sp -1 +\h'1.938i'\v'3.437i'\l'1.999i' +.sp -1 +\h'3.937i'\v'3.437i'\v'-.13m'\L'0.500i\(br'\v'.13m' +.sp -1 +\h'3.937i'\v'3.937i'\l'-1.999i' +.sp -1 +\h'1.938i'\v'3.937i'\v'-.13m'\L'-0.500i\(br'\v'.13m' +.sp -1 +\h'2.562i'\v'2.438i'\l'2.125i' +.sp -1 +\h'4.687i'\v'2.438i'\v'-.13m'\L'0.499i\(br'\v'.13m' +.sp -1 +\h'4.687i'\v'2.937i'\l'-2.125i' +.sp -1 +\h'2.562i'\v'2.937i'\v'-.13m'\L'-0.499i\(br'\v'.13m' +.sp -1 +\h'2.562i'\v'1.438i'\l'1.313i' +.sp -1 +\h'3.875i'\v'1.438i'\v'-.13m'\L'0.437i\(br'\v'.13m' +.sp -1 +\h'3.875i'\v'1.875i'\l'-1.313i' +.sp -1 +\h'2.562i'\v'1.875i'\v'-.13m'\L'-0.437i\(br'\v'.13m' +.sp -1 +\h'1.938i'\v'0.438i'\l'1.999i' +.sp -1 +\h'3.937i'\v'0.438i'\v'-.13m'\L'1.500i\(br'\v'.13m' +.sp -1 +\h'3.937i'\v'1.938i'\l'-1.999i' +.sp -1 +\h'1.938i'\v'1.938i'\v'-.13m'\L'-1.500i\(br'\v'.13m' +.sp -1 +\D'l0.000i 0.000i' +.sp -1 +.ps +.ps 12 +\h'3.812i'\v'3.217i'\h'-0.0m'\v'0.2m'FrontEnd Method (Extension) +.sp -1 +\h'0.813i'\v'3.217i'\h'-0.0m'\v'0.2m'BackEnd Method (Core) +.sp -1 +\h'2.562i'\v'3.779i'\h'-0.0m'\v'0.2m'X Server +.sp -1 +\h'3.062i'\v'2.779i'\h'-0.0m'\v'0.2m'IM Server +.sp -1 +\h'3.062i'\v'1.717i'\h'-0.0m'\v'0.2m'Library +.sp -1 +\h'2.187i'\v'0.904i'\h'-0.0m'\v'0.2m'Application +.sp -1 +.ps +.ft +.sp 1+3.937i +.PE +.if \n(00 .fi +.ce +.sp +Fig.1 The Flow of Events +.LP +.NH 2 +Event Flow Control +.XS +\*(SN Event Flow Control +.XE +.LP +This protocol supports two event flow models for communication between the +IM library and the IM Server (Static and Dynamic). +.LP +Static Event Flow requires that input events always be sent to the IM +Server from the client. +.LP +Dynamic Event Flow, however, requires only that those input events which +need to be processed (converted) be sent to the IM Server from the client. +.LP +For instance, in the case of inputing a combination of ASCII characters +and Chinese characters, ASCII characters do not need to be processed in +the IM Server, so their key events do not have to be sent to the IM +Server. On the other hand, key events necessary for composing Chinese +characters must be sent to the IM Server. +.LP +Thus, by adopting the Dynamic Event Flow, the number of requests among the +X Server, the client, and the IM Server is significantly reduced, and the +number of context switches is also reduced, resulting in improved performance. +The IM Server can send +.PN XIM_REGISTER_TRIGGERKEYS +message in order to switch the event flow in the Dynamic Event Flow. +.LP +The protocol for this process is described in section 4.5. ``Event Flow +Control''. +.LP +.NH 1 +Default Preconnection Convention +.XS +\*(SN Default Preconnection Convention +.XE +.LP +IM Servers are strongly encouraged to register their symbolic +names as the ATOM names into the IM Server directory property, +.PN XIM_SERVERS, +on the root window of the screen_number 0. +This property can contain a list of ATOMs, and the each ATOM represents +each possible IM Server. +IM Server names are restricted to POSIX Portable Filename Character Set. +To discover if the IM Server is active, see if there is an owner for +the selection with that atom name. To learn the address of that IM Server, +convert the selection target +.PN TRANSPORT, +which will return a string form of the transport address(es). +To learn the supported locales of that IM Server, convert the selection target +.PN LOCALES, +which will return a set of names of the supported locales in the syntax +X/Open defines. +.LP +The basic semantics to determine the IM Server if there are +multiple ATOMs are found in +.PN XIM_SERVERS +property, is first fit if the IM Server name is not given as +a X modifier's category +.PN im. +.LP +The address information retrievable from the +.PN TRANSPORT +target is a transport-specific name. +The preregistered formats for transport-specific names are listed in Appendix B. +Additional transport-specific names may be registered with X Consortium. +.LP +For environments that lack X connections, or for IM Servers which +do not use the X Window System, the preconnection convention with IM Server +may be given outside the X Window system (e.g. using a Name Service). +.LP +.NH 1 +Protocol +.XS +\*(SN Protocol +.XE +.LP +The protocol described below uses the bi-directional +synchronous/asynchronous request/reply/error model and is specified +using the same conventions outlined in Section 2 of the core X Window +System protocol [1]: +.LP +.NH 2 +Basic Requests Packet Format +.XS +\*(SN Basic Requests Packet Format +.XE +.LP +This section describes the requests that may be exchanged between the client +and the IM Server. +.LP +The basic request packet header format is as follows. +.RS +.DS + major-opcode: CARD8 + minor-opcode: CARD8 + length: CARD16 +.DE +.RE +The MAJOR-OPCODE specifies which core request or extension package this +packet represents. If the MAJOR-OPCODE corresponds to a core request, +the MINOR-OPCODE contains 8 bits of request-specific data. +(If the MINOR-OPCODE is not used, it is 0.) +Otherwise, the MAJOR-OPCODE and the MINOR-OPCODE are specified by +.PN XIM_QUERY_EXTENSION +message. (Refer to 4.7. Query the supported extension protocol list.) +The LENGTH field specifies the number of 4 bytes elements following the +header. If no additional data is followed by the header, the LENGTH field +will be 0. +.LP +.NH 2 +Data Types +.XS +\*(SN Data Types +.XE +.LP +The following data types are used in the core X IM Server protocol: +.LP +.nf +.ta .2i .5i 2.0i +BITMASK16 + CARD16 +.sp +BITMASK32 + CARD32 +.sp +PADDING FORMAT + Where N is some expression, and Pad(N) is the number of bytes needed to round N up to a + multiple of four. + Pad(N) = (4 - (N mod 4)) mod 4 +.sp +LPCE + 1 A character from the4 X Portable Character Set in Latin Portable + Character Encoding +.bp +STRING + 2 n length of string in bytes + n LISTofLPCE string + p unused, p=Pad(2+n) +.sp +STR + 1 n length of name in bytes + n STRING8 name +.sp +XIMATTR + 2 CARD16 attribute ID (*1) + 2 CARD16 type of the value (*2) + 2 n length of im-attribute + n STRING8 im-attribute + p unused, p = Pad(2+n) +.sp +The im-attribute argument specifies XIM values such as XNQueryInputStyle. +.sp +XICATTR + 2 CARD16 attribute ID (*1) + 2 CARD16 type of the value (*2) + 2 n length of ic-attribute + n STRING8 ic-attribute + p unused, p = Pad(2+n) +.LP +.IP (*1) +XIMATTR and XICATTR are used during the setup stage and XIMATTRIBUTE and +XICATTRIBUTE are used after each attribute ID has been recognized by +the IM Server and the IM library. +.sp +.IP (*2) +The value types are defined as follows: +.TS H +tab(:); +l l l s s +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l l l +l l l s s +l l l s s +l l l s s +l l l s s +l l l s s +l l l l l. +_ +.sp 6p +.B +values:data:format +.sp 6p +_ +.sp 6p +.TH +.R +#0:Separator of NestedList:----- (*3) +#1:byte data:CARD8 +#2:word data:CARD16 +#3:long data:CARD32 +#4:char data:STRING8 +#5:Window:CARD32 +#10:XIMStyles:2:n:number of XIMStyle list +::2::unused +::n:CARD32:XIMStyle list +#11:XRectangle:2:INT16:X +::2:INT16:Y +::2:CARD16:width +::2:CARD16:height +#12:XPoint:2:INT16:X +::2:INT16:Y +#13:XFontSet:2:n:length of Base font name +::n:STRING8:Base font name list +::p::unused, p = Pad(2+n) +#15:XIMHotKeyTriggers:4:n:T{ +number of XIMTRIGGERKEY list (*4) +T} +::n:XIMTRIGGERKEY:XIMHotkeyTrigger list +#16:XIMHotKeyState::XIMHOTKEYSTATE:T{ +HotKey processing state +T} +#17:XIMStringConversion:XIMSTRCONVTEXT +#18:XIMPreeditState:XIMPREEDITSTATE +#19:XIMResetState:XIMRESETSTATE +#x7fff:NestedList:----- +.sp 6p +_ +.TE +.LP +.IP (*3) +The IC value for the separator of NestedList is defined as follows, +.br + #define XNSeparatorofNestedList ``separatorofNestedList'' +.br +, which is registered in X Consortium and cannot be used for any +other purpose. +.sp +.IP (*4) +LISTofFOO +.RS +A Type name of the form LISTof FOO means a counted list of elements of +type FOO. +The size of the length field may vary (it is not necessarily the same +size as a FOO), and in some cases, it may be implicit. +.RE +.sp +.LP +.nf +.ta .2i .5i 2.0i +XIMTRIGGERKEY + 4 CARD32 keysym + 4 CARD32 modifier + 4 CARD32 modifier mask +.sp +ENCODINGINFO + 2 n length of encoding info + n STRING8 encoding info + p unused, p=Pad(2+n) +.sp +EXT + 1 CARD8 extension major-opcode + 1 CARD8 extension minor-opcode + 2 n length of extension name + n STRING8 extension name + p unused, p = Pad(n) +.sp +XIMATTRIBUTE + 2 CARD16 attribute ID + 2 n value length + n value + p unused, p = Pad(n) +.sp +XICATTRIBUTE + 2 CARD16 attribute ID + 2 n value length + n value + p unused, p = Pad(n) +.sp +.bp +.ta .2i .5i 3.0i +XIMSTRCONVTEXT + 2 CARD16 XIMStringConversionFeedback + #x0000001 XIMStringConversionLeftEdge + #x0000002 XIMStringConversionRightEdge + #x0000004 XIMStringConversionTopEdge + #x0000008 XIMStringConversionBottomEdge + #x0000010 XIMStringConversionConvealed + #x0000020 XIMStringConversionWrapped + 2 n byte length of the retrieved string + n STRING8 retrieved string + p unused, p = Pad(n) + 2 m byte length of feedback array + 2 unused + m LISTofXIMSTRCONVFEEDBACK feedback array(*1) +.IP (*1) +This field is reserved for future use. +.sp +.LP +.nf +.ta .2i .5i 2.0i +XIMFEEDBACK + 4 CARD32 XIMFeedback + #x000001 XIMReverse + #x000002 XIMUnderline + #x000004 XIMHighlight + #x000008 XIMPrimary + #x000010 XIMSecondary + #x000020 XIMTertiary + #x000040 XIMVisibleToForward + #x000080 XIMVisibleToBackward + #x000100 XIMVisibleCenter +.sp +XIMHOTKEYSTATE + 4 CARD32 XIMHotKeyState + #x0000001 XIMHotKeyStateON + #x0000002 XIMHotKeyStateOFF +.sp +XIMPREEDITSTATE + 4 CARD32 XIMPreeditState + #x0000001 XIMPreeditEnable + #x0000002 XIMPreeditDisable +.sp +XIMRESETSTATE + 4 CARD32 XIMResetState + #x0000001 XIMInitialState + #x0000002 XIMPreserveState +.LP +.NH 2 +Error Notification +.XS +\*(SN Error Notification +.XE +.LP +Both the IM Server and the IM library return +.PN XIM_ERROR +messages instead of the corresponding reply messages if any errors occur +during data processing. +.LP +At most one error is generated per request. If more than one error condition +is encountered in processing a request, the choice of which error is returned +is implementation-dependent. +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_ERROR (IM Server \(<-\(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:2:BITMASK16:flag (*1) +::#0000:Both Input-Method-ID and Input-Context-ID are invalid +::#0001:Input-Method-ID is valid +::#0002:Input-Context-ID is valid +:2:CARD16:Error Code +::#1:BadAlloc +::#2:BadStyle +::#3:BadClientWindow +::#4:BadFocusWindow +::#5:BadArea +::#6:BadSpotLocation +::#7:BadColormap +::#8:BadAtom +::#9:BadPixel +::#10:BadPixmap +::#11:BadName +::#12:BadCursor +::#13:BadProtocol +::#14:BadForeground +::#15:BadBackground +::#16:LocaleNotSupported +::#999:BadSomething (*2) +:2:n:byte length of error detail. +:2:CARD16:type of error detail (*3) +:n:STRING8:error detail (*4) +:p::unused, p = Pad(n) +.TE +.LP +.IP (*1) +Before an IM is created, both Input-Method-ID and +Input-Context-ID are invalid. +Before an IC is created, only Input-Method-ID is valid. +After that, both of Input-Method-ID and Input-Context-ID are valid. +.IP (*2) +Unspecific error, for example ``language engine died'' +.IP (*3) +This field is reserved for future use. +.IP (*4) +Vendor defined detail error message +.RE +.LP +.NH 2 +Connection Establishment +.XS +\*(SN Connection Establishment +.XE +.LP +.PN XIM_CONNECT +message requests to establish a connection over a mutually-understood virtual +stream. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_CONNECT (IM library \(-> IM Server) +.sp 6p +:1::byte order +::#x42 MSB first +::#x6c LSB first +:1::unused +:2:CARD16:client-major-protocol-version (*1) +:2:CARD16:client-minor-protocol-version (*1) +:2:CARD16:number of client-auth-protocol-names +:n:LISTofSTRING:client-auth-protocol-names +.TE +.LP +.IP (*1) +Specify the version of IM Protocol that the client supports. +.RE +.sp +.LP +A client must send +.PN XIM_CONNECT +message as the first message on the connection. +The list specifies the names of authentication protocols the sending +IM Server is willing to perform. +(If the client need not authenticate, the list may be omited.) +.LP +.PN XIM_AUTH_REQUIRED +message is used to send the authentication protocol name and protocol-specific +data. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_AUTH_REQUIRED (IM library \(<-\(-> IM Server) +.sp 6p +:1:CARD8:auth-protocol-index +:3::unused +:2:n:length of authentication data +:2::unused +:n:<varies>:data +:p::unused, p = Pad(n) +.TE +.RE +.LP +The auth-protocol is specified by an index into the list of names +given in the +.PN XIM_CONNECT +or +.PN XIM_AUTH_SETUP +message. Any protocol-specific data that might be required is also sent. +.LP +The IM library sends +.PN XIM_AUTH_REPLY +message as the reply to +.PN XIM_AUTH_REQUIRED +message, if the IM Server is authenticated. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_AUTH_REPLY (IM library \(-> IM Server) +.sp 6p +:2:n:length of authentication data +:2::unused +:2:n:length of authentication data +:2::unused +:n:<varies>:data +:p::unused, p = Pad(n) +.TE +.RE +.LP +The auth data is specific to the authentication protocol in use. +.LP +.PN XIM_AUTH_NEXT +message requests to send more auth data. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_AUTH_NEXT (IM library \(<-\(-> IM Server) +.sp 6p +:2:n:length of authentication data +:2::unused +:n:<varies>:data +:p::unused, p = Pad(n) +.TE +.RE +.LP +The auth data is specific to the authentication protocol in use. +.LP +The IM Server sends +.PN XIM_AUTH_SETUP +message to authenticate the client. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_AUTH_SETUP (IM Server \(-> IM library) +.sp 6p +:2:CARD16:number of client-auth-protocol-names +:2::unused +:n:LISTofSTRING:server-auth-protocol-names +.TE +.RE +.LP +The list specifies the names of authentication protocols the +client is willing to perform. +.LP +.PN XIM_AUTH_NG +message requests to give up the connection. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_AUTH_NG (IM library \(<-\(-> IM Server) +.TE +.RE +.LP +The IM Server sends +.PN XIM_CONNECT_REPLY +message as the reply to +.PN XIM_CONNECT +or +.PN XIM_AUTH_REQUIRED +message. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_CONNECT_REPLY (IM Server \(-> IM library) +.sp 6p +:2:CARD16:server-major-protocol-version (*1) +:2:CARD16:server-minor-protocol-version (*1) +.TE +.LP +.IP (*1) +Specify the version of IM Protocol that the IM Server supports. +This document specifies major version one, minor version zero. +.RE +.sp +.LP +Here are the state diagrams for the client and the IM Server. +.sp +.B +State transitions for the client +.R +.RS +.LP +\fIinit_status\fP: +.RS +Use authorization function \(-> \fIclient_ask\fP +.br +Not use authorization function \(-> \fIclient_no_check\fP +.RE +.sp +.LP +\fIstart\fP: +.RS +Send +.PN XIM_CONNECT +.RS +If \fIclient_ask\fP \(-> \fIclient_wait1\fP +.br +If \fIclient_no_check\fP, client-auth-protocol-names may be omited \(-> \fIclient_wait2\fP +.RE +.RE +.sp +.LP +\fIclient_wait1\fP: +.RS +Receive +.PN XIM_AUTH_REQUIRED +\(-> \fIclient_check\fP +.br +Receive <other> \(-> \fIclient_NG\fP +.RE +.sp +.LP +\fIclient_check\fP: +.RS +If no more auth needed, send +.PN XIM_AUTH_REPLY +\(-> \fIclient_wait2\fP +.br +If good auth data, send +.PN XIM_AUTH_NEXT +\(-> \fIclient_wait1\fP +.br +If bad auth data, send +.PN XIM_AUTH_NG +\(-> give up on this protocol +.RE +.sp +.LP +\fIclient_wait2\fP: +.RS +Receive +.PN XIM_CONNECT_REPLY +\(-> connect +.br +Receive +.PN XIM_AUTH_SETUP +\(-> \fIclient_more\fP +.br +Receive +.PN XIM_AUTH_NEXT +\(-> \fIclient_more\fP +.br +Receive +.PN XIM_AUTH_NG +\(-> give up on this protocol +.br +Receive <other> \(-> \fIclient_NG\fP +.RE +.sp +.LP +\fIclient_more\fP: +.RS +Send +.PN XIM_AUTH_REQUIRED +\(-> \fIclient_wait2\fP +.RE +.sp +.LP +\fIclient_NG\fP: +.RS +Send +.PN XIM_AUTH_NG +\(-> give up on this protocol +.RE +.RE +.sp +.LP +.B +State transitions for the IM Server +.R +.RS +.LP +\fIinit-status\fP: +.RS +Use authorization function \(-> \fIserver_ask\fP +.br +Not use authorization function \(-> \fIserver_no_check\fP +.RE +.sp +.LP +\fIstart\fP: +.RS +Receive +.PN XIM_CONNECT +\(-> \fIstart2\fP +.br +Receive <other> \(-> \fIserver_NG\fP +.RE +.sp +.LP +\fIstart2\fP: +.RS +If \fIclient_ask\fP, send +.PN XIM_AUTH_REQUIRED +\(-> \fIserver_wait1\fP +.br +If \fIclient_no_check\fP and \fIserver_ask\fP, send +.PN XIM_AUTH_SETUP +\(-> \fIserver_wait2\fP +.br +If \fIclient_no_check\fP and \fIserver_no_check\fP, send +.PN XIM_CONNECT_REPLY +\(-> connect +.RE +.sp +.LP +\fIserver_wait1\fP: +.RS +Receive +.PN XIM_AUTH_REPLY +\(-> \fIserver2\fP +.br +Receive +.PN XIM_AUTH_NEXT +\(-> \fIserver_more\fP +.br +Receive <other> \(-> \fIserver_NG\fP +.RE +.sp +.LP +\fIserver_more\fP +.RS +Send +.PN XIM_AUTH_REQUIRED +\(-> \fIserver_wait1\fP +.RE +.sp +.LP +\fIserver2\fP +.RS +If \fIserver_ask\fP, send +.PN XIM_AUTH_SETUP +\(-> \fIserver_wait2\fP +.br +If \fIserver_no_check\fP, send +.PN XIM_CONNECT_REPLY +\(-> connect +.RE +.sp +.LP +\fIserver_wait2\fP +.RS +Receive +.PN XIM_AUTH_REQUIRED +\(-> \fIserver_check\fP +.br +Receive <other> \(-> \fIserver_NG\fP +.RE +.sp +.LP +\fIserver_check\fP +.RS +If no more auth data, send +.PN XIM_CONNECT_REPLY +\(-> connect +.br +If bad auth data, send +.PN XIM_AUTH_NG +\(-> give up on this protocol +.br +If good auth data, send +.PN XIM_AUTH_NEXT +\(-> \fIserver_wait2\fP +.RE +.sp +.LP +\fIserver_NG\fP +.RS +Send +.PN XIM_AUTH_NG +\(-> give up on this protocol +.RE +.RE +.sp +.LP +.PN XIM_DISCONNECT +message requests to shutdown the connection over a mutually-understood +virtual stream. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_DISCONNECT (IM library \(-> IM Server) +.TE +.RE +.LP +.PN XIM_DISCONNECT +is a synchronous request. The IM library should wait until it receives +either an +.PN XIM_DISCONNECT_REPLY +packet or an +.PN XIM_ERROR +packet. +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_DISCONNECT_REPLY (IM Server \(-> IM library) +.TE +.RE +.LP +.PN XIM_OPEN +requests to establish a logical connection between the IM library and the IM +Server. +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_OPEN (IM library \(-> IM Server) +.sp 6p +:n:STR:locale name +:p::unused, p = Pad(n) +.TE +.RE +.LP +.PN XIM_OPEN +is a synchronous request. The IM library should wait until receiving +either an +.PN XIM_OPEN_REPLY +packet or an +.PN XIM_ERROR +packet. +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_OPEN_REPLY (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:n:byte length of IM attributes supported +:n:LISTofXIMATTR:IM attributes supported +:2:m:byte length of IC attributes supported +:2:CARD16:unused +:m:LISTofXICATTR: IC attributes supported +.TE +.RE +.LP +.PN XIM_OPEN_REPLY +message returns all supported IM and IC attributes in LISTofXIMATTR and +LISTofXICATTR. These IM and IC attribute IDs are used to reduce the amount +of data which must be transferred via the network. In addition, this +indicates to the IM library what kinds of IM/IC attributes can be used +in this session, and what types of data will be exchanged. This allows +the IM Server provider and application writer to support IM system +enhancements with new IM/IC attributes, without modifying Xlib. +The IC value for the separator of NestedList must be included in the +LISTofXICATTR. +.LP +.PN XIM_CLOSE +message requests to shutdown the logical connection between the IM library +and the IM Server. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_CLOSE (IM library \(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2::unused +.TE +.RE +.LP +.PN XIM_CLOSE +is a synchronous request. The IM library should wait until receiving +either an +.PN XIM_CLOSE_REPLY +packet or an +.PN XIM_ERROR +packet. +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_CLOSE_REPLY (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2::unused +.TE +.RE +.LP +.NH 2 +Event Flow Control +.XS +\*(SN Event Flow Control +.XE +.LP +An IM Server must send +.PN XIM_SET_EVENT_MASK +message to the IM library in order for events to be forwarded to the IM +Server, since the IM library initially doesn't forward any events to the +IM Server. In the protocol, the IM Server will specify masks of X events +to be forwarded and which need to be synchronized by the IM library. +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_SET_EVENT_MASK (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:4:EVENTMASK:forward-event-mask (*1) +:4:EVENTMASK:synchronous-event-mask (*2) +.TE +.LP +.IP (*1) +Specify all the events to be forwarded to the IM Server by the IM library. +.IP (*2) +Specify the events to be forwarded with synchronous flag on by the IM library. +.RE +.sp +.LP +.PN XIM_SET_EVENT_MASK +is an asynchronous request. The event masks are valid immediately after +they are set until changed by another +.PN XIM_SET_EVENT_MASK +message. If input-context-ID is set to zero, the default value of the +input-method-ID will be changed to the event masks specified in the request. +That value will be used for the IC's which have no individual values. +.LP +Using the Dynamic Event Flow model, an IM Server sends +.PN XIM_REGISTER_TRIGGERKEYS +message to the IM library before sending +.PN XIM_OPEN_REPLY +message. +Or the IM library may suppose that the IM Server uses the Static Event Flow +model. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_REGISTER_TRIGGERKEYS (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2::unused +:4:n:byte length of on-keys +:n:LISTofXIMTRIGGERKEY:on-keys list +:4:m:byte length of off-keys +:m:LISTofXIMTRIGGERKEY:off-keys list +.TE +.RE +.LP +.PN XIM_REGISTER_TRIGGERKEYS +is an asynchronous request. +The IM Server notifys the IM library of on-keys and off-keys lists with +this message. +.LP +The IM library notifys the IM Server with +.PN XIM_TRIGGER_NOTIFY +message that a key event matching either on-keys or off-keys has been occurred. +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_TRIGGER_NOTIFY (IM library \(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:4:CARD32:flag +::#0:on-keys list +::#1:off-keys list +:4:CARD32:index of keys list +:4:EVENTMASK:client-select-event-mask (*1) +.TE +.LP +.IP (*1) +Specify the events currently selected by the IM library with XSelectInput. +.RE +.sp +.LP +.PN XIM_TRIGGER_NOTIFY +is a synchronous request. The IM library should wait until receiving +either an +.PN XIM_TRIGGER_NOTIFY_REPLY +packet or an +.PN XIM_ERROR +packet. +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_TRIGGER_NOTIFY_REPLY (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +.TE +.RE +.LP +.NH 2 +Encoding Negotiation +.XS +\*(SN Encoding Negotiation +.XE +.LP +.PN XIM_ENCODING_NEGOTIATION +message requests to decide which encoding to be sent across the wire. +When the negotiation fails, the fallback default encoding is Portable +Character Encoding. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_ENCODING_NEGOTIATION (IM library \(-> IM Server).sp 6p +:2:CARD16:input-method-ID +:2:n:byte length of encodings listed by name +:n:LISTofSTR:list of encodings supported in the IM library. +:p::unused, p = Pad(n) +:2:m:byte length of encodings listed by detailed data +:2::unused +:m:LISTofENCODINGINFO:list of encordings supported in the IM library +.TE +.RE +.LP +The IM Server must choose one encoding from the list sent by the IM library. +If index of the encording determined is -1 to indicate that the negotiation +is failed, the fallback default encoding is used. +The message must be issued after sending +.PN XIM_OPEN +message via XOpenIM(). +The name of encoding may be registered with X Consortium. +.LP +.PN XIM_ENCODING_NEGOTIATION +is a synchronous request. The IM library should wait until receiving +either an +.PN XIM_ENCODING_NEGOTIATION_REPLY +packet or an +.PN XIM_ERROR +packet. +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_ENCODING_NEGOTIATION_REPLY (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:category of the encoding determined. +::#0:name +::#1:detailed data +:2:INT16:index of the encoding determinated. +:2::unused +.TE +.RE +.LP +.NH 2 +Query the supported extension protocol list +.XS +\*(SN Query the supported extension protocol list +.XE +.LP +.PN XIM_QUERY_EXTENSION +message requests to query the IM extensions supported by the IM Server to +which the client is being connected. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_QUERY_EXTENSION (IM library \(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:n:T{ +byte length of extensions supported by the IM library +T} +:n:LISTofSTR:extensions supported by the IM library +:p::unused, p = Pad(n) +.TE +.RE +.LP +An example of a supported extension is FrontEnd. +The message must be issued after sending +.PN XIM_OPEN +message via XOpenIM(). +.LP +If n is 0, the IM library queries the IM Server for all extensions. +.LP +If n is not 0, the IM library queries whether the IM Server supports the +contents specified in the list. +.LP +If a client uses an extension request without previously having issued a +.PN XIM_QUERY_EXTENSION +message for that extension, the IM Server responds with a +.PN BadProtocol +error. If the IM Server encounters a request with an unknown MAJOR-OPCODE +or MINOR-OPCODE, it responds with a +.PN BadProtocol +error. +.LP +.PN XIM_QUERY_EXTENSION +is a synchronous request. The IM library should wait until receiving +either an +.PN XIM_QUERY_EXTENSION_REPLY +packet or an +.PN XIM_ERROR +packet. +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_QUERY_EXTENSION_REPLY (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:n:T{ +byte length of extensions supported by both the IM library and the IM Server +T} +:n:LISTofEXT:T{ +list of extensions supported by both the IM library and the IM Server +T} +.TE +.RE +.LP +.PN XIM_QUERY_EXTENSION_REPLY +message returns the list of extensions supported by both the IM library and +the IM Server. If the list passed in +.PN XIM_QUERY_EXTENSION +message is NULL, the IM Server returns the full list of extensions supported +by the IM Server. If the list is not NULL, the IM Server returns the +extensions in the list that are supported by the IM Server. +.LP +A zero-length string is not a valid extension name. The IM library should +disregard any zero-length strings that are returned in the extension list. +The IM library does not use the requests which are not supported by the IM +Server. +.LP +.NH 2 +Setting IM Values +.XS +\*(SN Setting IM Values +.XE +.LP +.PN XIM_SET_IM_VALUES +requests to set attributes to the IM. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_SET_IM_VALUES (IM library \(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:n:byte length of im-attribute +:n:LISTofXIMATTRIBUTE:im-attributes +.TE +.RE +.LP +The im-attributes in +.PN XIM_SET_IM_VALUES +message are specified as a LISTofXIMATTRIBUTE, specifying the attributes +to be set. Attributes other than the ones returned by +.PN XIM_OPEN_REPLY +message should not be specified. +.LP +.PN XIM_SET_IM_VALUES +is a synchronous request. The IM library should wait until receiving +either an +.PN XIM_SET_IM_VALUES_REPLY +packet or an +.PN XIM_ERROR +packet, because it must receive the error attribute if +.PN XIM_ERROR +message is returned. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_SET_IM_VALUES_REPLY (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2::unused +.TE +.RE +.LP +.PN XIM_SET_IM_VALUES_REPLY +message returns the input-method-ID to distinguish replies from multiple IMs. +.LP +.NH 2 +Getting IM Values +.XS +\*(SN getting IM Values +.XE +.LP +.PN XIM_GET_IM_VALUES +requests to query IM values supported by the IM Server currently being +connected. +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_GET_IM_VALUES (IM library \(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:n:byte length of im-attribute-id +:n:LISTofCARD16:im-attribute-id +:p::unused, p=Pad(n) +.TE +.RE +.LP +.PN XIM_GET_IM_VALUES +is a synchronous request. The IM library should wait until it receives +either an +.PN XIM_GET_IM_VALUES_REPLY +packet or an +.PN XIM_ERROR +packet. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_GET_IM_VALUES_REPLY (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:n:byte length of im-attributes returned +:n:LISTofXIMATTRIBUTE:im-attributes returned +.TE +.RE +.LP +The IM Server returns IM values with +.PN XIM_GET_IM_VALUES_REPLY +message. The order of the returned im-attribute values corresponds directly +to that of the list passed with the +.PN XIM_GET_IM_VALUES +message. +.LP +.NH 2 +Creating an IC +.XS +\*(SN Creating an IC +.XE +.LP +.PN XIM_CREATE_IC +message requests to create an IC. +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_CREATE_IC (IM library \(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:n:byte length of ic-attributes +:n:LISTofXICATTRIBUTE:ic-attributes +.TE +.RE +.LP +The input-context-id is specified by the IM Server to identify the client +(IC). (It is not specified by the client in +.PN XIM_CREATE_IC +message.), and it should not be set to zero. +.LP +.PN XIM_CREATE_IC +is a synchronous request which returns the input-context-ID. +The IM library should wait until it receives either an +.PN XIM_CREATE_IC_REPLY +packet or an +.PN XIM_ERROR +packet. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_CREATE_IC_REPLY (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +.TE +.RE +.LP +.NH 2 +Destroying the IC +.XS +\*(SN Destroying the IC +.XE +.LP +.PN XIM_DESTROY_IC +message requests to destroy the IC. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_DESTROY_IC (IM library \(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +.TE +.RE +.LP +.PN XIM_DESTROY_IC +is a synchronous request. The IM library should not free its resources +until it receives an +.PN XIM_DESTROY_IC_REPLY +message because +.PN XIM_DESTROY_IC +message may result in Callback packets such as +.PN XIM_PREEDIT_DRAW +and +.PN XIM_PREEDIT_DONE. +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_DESTROY_IC_REPLY (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +.TE +.RE +.LP +.NH 2 +Setting IC Values +.XS +\*(SN Setting IC Values +.XE +.LP +.PN XIM_SET_IC_VALUES +messages requests to set attributes to the IC. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_SET_IC_VALUES (IM library \(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:2:n:byte length of ic-attributes +:2::unused +:n:LISTofXICATTRIBUTE:ic-attributes +.TE +.RE +.LP +The ic-attributes in +.PN XIM_SET_IC_VALUES +message are specified as a LISTofXICATTRIBUTE, specifying the attributes +to be set. Attributes other than the ones returned by +.PN XIM_OPEN_REPLY +message should not be specified. +.LP +.PN XIM_SET_IC_VALUES +is a synchronous request. The IM library should wait until receiving +either an +.PN XIM_SET_IC_VALUES_REPLY +packet or an +.PN XIM_ERROR +packet, because it must receive the error attribute if +.PN XIM_ERROR +message is returned. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_SET_IC_VALUES_REPLY (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +.TE +.RE +.LP +.NH 2 +Getting IC Values +.XS +\*(SN Getting IC Values +.XE +.LP +.PN XIM_GET_IC_VALUES +message requests to query IC values supported by the IM Server currently +being connected. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_GET_IC_VALUES (IM library \(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:2:n:byte length of ic-attribute-id +:n:LISTofCARD16:ic-attribute-id +:p::unused, p=Pad(2+n) +.TE +.RE +.LP +In LISTofCARD16, the appearance of the ic-attribute-id for the separator +of NestedList shows the end of the heading nested list. +.LP +.PN XIM_GET_IC_VALUES +is a synchronous request and returns each attribute with its values to +show the correspondence. The IM library should wait until receiving +either an +.PN XIM_GET_IC_VALUES_REPLY +packet or an +.PN XIM_ERROR +packet. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_GET_IC_VALUES_REPLY (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:2:n:byte length of ic-attribute +:2::unused +:n:LISTofXICATTRIBUTE:ic-attribute +.TE +.RE +.LP +.NH 2 +Setting IC Focus +.XS +\*(SN Setting IC Focus +.XE +.LP +.PN XIM_SET_IC_FOCUS +message requests to set the focus to the IC. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_SET_IC_FOCUS (IM library \(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +.TE +.RE +.LP +.PN XIM_SET_IC_FOCUS +is an asynchronous request. +.LP +.NH 2 +Unsetting IC Focus +.XS +\*(SN Unsetting IC Focus +.XE +.LP +.PN XIM_UNSET_IC_FOCUS +message requests to unset the focus to the focused IC. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_UNSET_IC_FOCUS (IM library \(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +.TE +.RE +.LP +.PN XIM_UNSET_IC_FOCUS +is an asynchronous request. +.LP +.NH 2 +Filtering Events +.XS +\*(SN Filtering Events +.XE +.LP +Event filtering is mainly provided for BackEnd method to allow input method +to capture X events transparently to clients. +.LP +X Events are forwarded by +.PN XIM_FORWARD_EVENT +message. +This message can be operated both synchronously and asynchronously. +If the requester sets the synchronous flag, the receiver must send +.PN XIM_SYNC_REPLY +message back to the requester when all the data processing is done. +.sp +.B +Protocol flow of BackEnd model +.R +.LP +.LP +With BackEnd method, the protocol flow can be classified into two +methods in terms of synchronization, depending on the synchronous-eventmask +of +.PN XIM_SET_EVENT_MASK +message. One can be called on-demand-synchronous method and another +can be called as full-synchronous method. +.LP +In on-demand-synchronous method, the IM library always receives +.PN XIM_FORWARD_EVENT +or +.PN XIM_COMMIT +message as a synchronous request. Also, the IM Server needs to synchronously +process the correspondent reply from the IM library and the following +.PN XIM_FORWARD_EVENT +message sent from the IM library when any of the event causes the IM Server +to send +.PN XIM_FORWARD_EVENT +or +.PN XIM_COMMIT +message to the IM library, so that the input service is consistent. If the +IM library gets the control back from the application after receiving the +synchronous request, the IM library replies for the synchronous request before +processing any of the events. In this time, the IM Server blocks +.PN XIM_FORWARD_EVENT +message which is sent by the IM library, and handles it after receiving the +reply. However, the IM Server handles the other protocols at any time. +.LP +In full-synchronous method, the IM library always sends +.PN XIM_FORWARD_EVENT +message to the IM Server as a synchronous request. Therefore, the reply to it +from the IM Server will be put between the +.PN XIM_FORWARD_EVENT +message and its +.PN XIM_SYNC_REPLY +message. +In case of sending +.PN XIM_FORWARD_EVENT +or +.PN XIM_COMMIT +message, the IM Server should set the synchronous flag off. Because the +synchronization can be done by the following +.PN XIM_SYNC_REPLY +message. +.sp +.LP +.B +Sample Protocol flow chart 1 +.R +.LP +Following chart shows one of the simplest protocol flow which only +deals with keyevents for preediting operation. +.LP +.\"====================== event flow figure start ===================== +\^... 0.425 6.888 6.3 10.296 +\^... 0.000i 3.408i 5.875i 0.000i +.nr 00 \n(.u +.nf +.PS 3.408i 5.875i +.br +.ps 11 +\h'3.125i'\v'0.496i'\D'l1.625i 0.250i' +.sp -1 +\h'4.647i'\v'0.756i'\D'l0.103i -0.010i' +.sp -1 +\h'4.655i'\v'0.706i'\D'l0.095i 0.040i' +.sp -1 +\h'3.125i'\v'1.221i'\D'l1.687i 0.188i' +.sp -1 +\h'4.710i'\v'1.423i'\D'l0.102i -0.014i' +.sp -1 +\h'4.715i'\v'1.373i'\D'l0.097i 0.036i' +.sp -1 +\h'4.750i'\v'0.971i'\D'l-1.625i 0.438i' +.sp -1 +\h'3.215i'\v'1.359i'\D'l-0.090i 0.050i' +.sp -1 +\h'3.228i'\v'1.407i'\D'l-0.103i 0.002i' +.sp -1 +\h'2.000i'\v'0.409i'\D'l1.000i 0.062i' +.sp -1 +\h'2.899i'\v'0.490i'\D'l0.101i -0.019i' +.sp -1 +\h'2.902i'\v'0.440i'\D'l0.098i 0.031i' +.sp -1 +\h'2.000i'\v'1.034i'\D'l1.000i 0.125i' +.sp -1 +\h'2.898i'\v'1.171i'\D'l0.102i -0.012i' +.sp -1 +\h'2.904i'\v'1.122i'\D'l0.096i 0.037i' +.sp -1 +\h'3.000i'\v'1.409i'\D'l-1.000i 0.062i' +.sp -1 +\h'2.098i'\v'1.440i'\D'l-0.098i 0.031i' +.sp -1 +\h'2.101i'\v'1.490i'\D'l-0.101i -0.019i' +.sp -1 +\h'1.125i'\v'1.846i'\l'-0.500i' +.sp -1 +\h'0.725i'\v'1.821i'\D'l-0.100i 0.025i' +.sp -1 +\h'0.725i'\v'1.871i'\D'l-0.100i -0.025i' +.sp -1 +\h'0.688i'\v'0.159i'\l'0.437i' +.sp -1 +\h'1.025i'\v'0.184i'\D'l0.100i -0.025i' +.sp -1 +\h'1.025i'\v'0.134i'\D'l0.100i 0.025i' +.sp -1 +\h'0.688i'\v'0.846i'\l'0.437i' +.sp -1 +\h'1.025i'\v'0.871i'\D'l0.100i -0.025i' +.sp -1 +\h'1.025i'\v'0.821i'\D'l0.100i 0.025i' +.sp -1 +\h'5.562i'\v'1.409i'\l'0.313i' +.sp -1 +\h'5.875i'\v'1.409i'\v'-.13m'\L'1.937i\(br'\v'.13m' +.sp -1 +\h'5.875i'\v'3.346i'\D'l-0.250i 0.000i' +.sp -1 +\h'5.725i'\v'3.321i'\D'l-0.100i 0.025i' +.sp -1 +\h'5.725i'\v'3.371i'\D'l-0.100i -0.025i' +.sp -1 +\h'2.062i'\v'2.096i'\l'0.875i' +.sp -1 +\h'2.837i'\v'2.121i'\D'l0.100i -0.025i' +.sp -1 +\h'2.837i'\v'2.071i'\D'l0.100i 0.025i' +.sp -1 +\h'3.000i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m' +.sp -1 +\h'4.875i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m' +.sp -1 +\h'2.013i'\v'2.871i'\D'l0.937i 0.250i' +.sp -1 +\h'2.847i'\v'3.119i'\D'l0.103i 0.002i' +.sp -1 +\h'2.860i'\v'3.071i'\D'l0.090i 0.050i' +.sp -1 +\h'3.062i'\v'3.134i'\D'l1.688i 0.187i' +.sp -1 +\h'4.648i'\v'3.335i'\D'l0.102i -0.014i' +.sp -1 +\h'4.653i'\v'3.285i'\D'l0.097i 0.036i' +.sp -1 +\h'3.062i'\v'2.533i'\D'l1.750i 0.213i' +.sp -1 +\h'4.710i'\v'2.759i'\D'l0.102i -0.013i' +.sp -1 +\h'4.716i'\v'2.709i'\D'l0.096i 0.037i' +.sp -1 +\h'3.062i'\v'2.096i'\l'1.750i' +.sp -1 +\h'4.712i'\v'2.121i'\D'l0.100i -0.025i' +.sp -1 +\h'4.712i'\v'2.071i'\D'l0.100i 0.025i' +.sp -1 +\h'4.812i'\v'2.284i'\l'-1.750i' +.sp -1 +\h'3.162i'\v'2.259i'\D'l-0.100i 0.025i' +.sp -1 +\h'3.162i'\v'2.309i'\D'l-0.100i -0.025i' +.sp -1 +\h'1.250i'\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP +.sp -1 +\h'1.250i'\v'0.381i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent\fP +.sp -1 +\h'1.250i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP +.sp -1 +\h'1.250i'\v'1.068i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent\fP +.sp -1 +\h'1.250i'\v'1.506i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP +.sp -1 +\h'1.250i'\v'1.881i'\h'-0.0m'\v'0.2m'\s10\fRXmbLookupString\fP +.sp -1 +\h'4.875i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP +.sp -1 +\h'2.437i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP +.sp -1 +\h'1.250i'\v'1.693i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent (returns False) \fP +.sp -1 +\v'2.168i'\h'-0.0m'\v'0.2m'\s10\fRthe focus\fP +.sp -1 +\h'1.250i'\h'-0.0m'\v'0.2m'\s12\fRXlib API\fP +.sp -1 +\v'2.006i'\h'-0.0m'\v'0.2m'\s10\fRApplication moves\fP +.sp -1 +\h'3.187i'\v'0.443i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP +.sp -1 +\h'3.187i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP +.sp -1 +\h'3.187i'\v'1.631i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP +.sp -1 +\h'3.187i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRor XIM_COMMIT\fP +.sp -1 +\h'5.000i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRsynchronous \fP +.sp -1 +\h'5.000i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRrequest\fP +.sp -1 +\h'0.062i'\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRKey event\fP +.sp -1 +\h'0.062i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRKey event\fP +.sp -1 +\h'3.187i'\v'1.131i'\h'-0.0m'\v'0.2m'\s10\fR(synchronous) \fP +.sp -1 +\h'5.000i'\v'1.443i'\h'-0.0m'\v'0.2m'\s10\fRPending\fP +.sp -1 +\h'5.000i'\v'2.381i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP +.sp -1 +\h'5.000i'\v'2.506i'\h'-0.0m'\v'0.2m'\s10\fR(The focused\fP +.sp -1 +\h'5.000i'\v'2.631i'\h'-0.0m'\v'0.2m'\s10\fRIC is changed) \fP +.sp -1 +\h'5.000i'\v'2.881i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP +.sp -1 +\h'1.250i'\v'2.131i'\h'-0.0m'\v'0.2m'\s10\fRXSetICFocus\fP +.sp -1 +\h'3.125i'\v'2.881i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC_REPLY as a reply\fP +.sp -1 +\h'3.125i'\v'3.043i'\h'-0.0m'\v'0.2m'\s10\fRof the XIM_FORWARD_EVENT\fP +.sp -1 +\h'1.250i'\v'2.881i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP +.sp -1 +\h'3.312i'\v'2.506i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SET_IC_FOCUS\fP +.sp -1 +\h'3.312i'\v'2.006i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC\fP +.sp -1 +\h'3.312i'\v'2.193i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC_REPLY\fP +.sp -1 +\h'5.000i'\v'3.381i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP +.sp -1 +.sp 1+3.408i +.PE +.if \n(00 .fi + +.\"====================== event flow figure end ======================= +.ce +.sp +Fig.2 Sample Protocol Flow +.sp +.LP +.B +Sample Protocol flow chart 2 +.R +.LP +Following chart shows one of the complex protocol flow, which deals +with multiple focus windows and button press event as well as keyevent, +and the focus is moved by the application triggered by both of keyevent +and button press event. +.LP +.bp +.\"====================== event2 flow figure start ===================== +\^... 0.425 5.575 6.3 10.296 +\^... 0.000i 4.721i 5.875i 0.000i +.nr 00 \n(.u +.nf +.PS 4.721i 5.875i +.br +.ps 11 +\h'3.125i'\v'0.496i'\D'l1.625i 0.163i' +.sp -1 +\h'4.648i'\v'0.674i'\D'l0.102i -0.015i' +.sp -1 +\h'4.653i'\v'0.624i'\D'l0.097i 0.035i' +.sp -1 +\h'2.000i'\v'0.409i'\D'l1.000i 0.062i' +.sp -1 +\h'2.899i'\v'0.490i'\D'l0.101i -0.019i' +.sp -1 +\h'2.902i'\v'0.440i'\D'l0.098i 0.031i' +.sp -1 +\h'0.688i'\v'0.159i'\l'0.437i' +.sp -1 +\h'1.025i'\v'0.184i'\D'l0.100i -0.025i' +.sp -1 +\h'1.025i'\v'0.134i'\D'l0.100i 0.025i' +.sp -1 +\h'1.250i'\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP +.sp -1 +\h'1.250i'\v'0.381i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent\fP +.sp -1 +\h'3.187i'\v'0.443i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP +.sp -1 +\h'0.062i'\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRKey event\fP +.sp -1 +\h'3.125i'\v'1.221i'\D'l1.687i 0.125i' +.sp -1 +\h'4.710i'\v'1.364i'\D'l0.102i -0.018i' +.sp -1 +\h'4.714i'\v'1.314i'\D'l0.098i 0.032i' +.sp -1 +\h'4.750i'\v'0.971i'\D'l-1.625i 0.750i' +.sp -1 +\h'3.205i'\v'1.656i'\D'l-0.080i 0.065i' +.sp -1 +\h'3.226i'\v'1.702i'\D'l-0.101i 0.019i' +.sp -1 +\h'2.000i'\v'1.034i'\D'l1.000i 0.125i' +.sp -1 +\h'2.898i'\v'1.171i'\D'l0.102i -0.012i' +.sp -1 +\h'2.904i'\v'1.122i'\D'l0.096i 0.037i' +.sp -1 +\h'0.688i'\v'0.846i'\l'0.437i' +.sp -1 +\h'1.025i'\v'0.871i'\D'l0.100i -0.025i' +.sp -1 +\h'1.025i'\v'0.821i'\D'l0.100i 0.025i' +.sp -1 +\h'3.000i'\v'0.034i'\v'-.13m'\L'4.687i\(br'\v'.13m' +.sp -1 +\h'0.750i'\v'1.346i'\l'0.313i' +.sp -1 +\h'0.963i'\v'1.371i'\D'l0.100i -0.025i' +.sp -1 +\h'0.963i'\v'1.321i'\D'l0.100i 0.025i' +.sp -1 +\h'3.125i'\v'1.509i'\D'l1.687i 0.125i' +.sp -1 +\h'4.710i'\v'1.652i'\D'l0.102i -0.018i' +.sp -1 +\h'4.714i'\v'1.602i'\D'l0.098i 0.032i' +.sp -1 +\h'4.812i'\v'1.721i'\D'l-1.687i 0.188i' +.sp -1 +\h'3.222i'\v'1.873i'\D'l-0.097i 0.036i' +.sp -1 +\h'3.227i'\v'1.923i'\D'l-0.102i -0.014i' +.sp -1 +\h'2.937i'\v'1.971i'\D'l-0.937i 0.188i' +.sp -1 +\h'2.093i'\v'2.115i'\D'l-0.093i 0.044i' +.sp -1 +\h'2.103i'\v'2.164i'\D'l-0.103i -0.005i' +.sp -1 +\h'1.125i'\v'2.533i'\l'-0.500i' +.sp -1 +\h'0.725i'\v'2.508i'\D'l-0.100i 0.025i' +.sp -1 +\h'0.725i'\v'2.558i'\D'l-0.100i -0.025i' +.sp -1 +\h'5.562i'\v'1.346i'\l'0.313i' +.sp -1 +\h'5.875i'\v'1.346i'\v'-.13m'\L'2.687i\(br'\v'.13m' +.sp -1 +\h'5.875i'\v'4.033i'\D'l-0.250i 0.000i' +.sp -1 +\h'5.725i'\v'4.008i'\D'l-0.100i 0.025i' +.sp -1 +\h'5.725i'\v'4.058i'\D'l-0.100i -0.025i' +.sp -1 +\h'2.013i'\v'3.559i'\D'l0.937i 0.250i' +.sp -1 +\h'2.847i'\v'3.807i'\D'l0.103i 0.002i' +.sp -1 +\h'2.860i'\v'3.759i'\D'l0.090i 0.050i' +.sp -1 +\h'3.062i'\v'3.821i'\D'l1.688i 0.188i' +.sp -1 +\h'4.648i'\v'4.023i'\D'l0.102i -0.014i' +.sp -1 +\h'4.653i'\v'3.973i'\D'l0.097i 0.036i' +.sp -1 +\h'2.000i'\v'1.358i'\D'l1.000i 0.126i' +.sp -1 +\h'2.898i'\v'1.496i'\D'l0.102i -0.012i' +.sp -1 +\h'2.904i'\v'1.447i'\D'l0.096i 0.037i' +.sp -1 +\h'3.062i'\v'2.159i'\D'l-0.250i 0.000i' +.sp -1 +\h'2.812i'\v'2.159i'\v'-.13m'\L'1.812i\(br'\v'.13m' +.sp -1 +\h'2.812i'\v'3.971i'\D'l0.125i 0.125i' +.sp -1 +\h'2.849i'\v'4.043i'\D'l0.088i 0.053i' +.sp -1 +\h'2.884i'\v'4.008i'\D'l0.053i 0.088i' +.sp -1 +\h'2.062i'\v'2.783i'\l'0.875i' +.sp -1 +\h'2.837i'\v'2.808i'\D'l0.100i -0.025i' +.sp -1 +\h'2.837i'\v'2.758i'\D'l0.100i 0.025i' +.sp -1 +\h'2.062i'\v'3.783i'\D'l0.813i 0.438i' +.sp -1 +\h'2.775i'\v'4.196i'\D'l0.100i 0.025i' +.sp -1 +\h'2.799i'\v'4.152i'\D'l0.076i 0.069i' +.sp -1 +\h'0.625i'\v'3.533i'\l'0.438i' +.sp -1 +\h'0.963i'\v'3.558i'\D'l0.100i -0.025i' +.sp -1 +\h'0.963i'\v'3.508i'\D'l0.100i 0.025i' +.sp -1 +\h'3.062i'\v'4.346i'\D'l1.625i 0.163i' +.sp -1 +\h'4.585i'\v'4.524i'\D'l0.102i -0.015i' +.sp -1 +\h'4.590i'\v'4.474i'\D'l0.097i 0.035i' +.sp -1 +\h'4.875i'\v'0.034i'\v'-.13m'\L'4.687i\(br'\v'.13m' +.sp -1 +\h'3.062i'\v'4.146i'\D'l1.688i 0.187i' +.sp -1 +\h'4.648i'\v'4.347i'\D'l0.102i -0.014i' +.sp -1 +\h'4.653i'\v'4.297i'\D'l0.097i 0.036i' +.sp -1 +\h'3.062i'\v'2.871i'\D'l1.750i 0.212i' +.sp -1 +\h'4.710i'\v'3.096i'\D'l0.102i -0.013i' +.sp -1 +\h'4.716i'\v'3.046i'\D'l0.096i 0.037i' +.sp -1 +\h'1.250i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP +.sp -1 +\h'1.250i'\v'1.068i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent\fP +.sp -1 +\h'4.875i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP +.sp -1 +\h'2.437i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP +.sp -1 +\h'1.250i'\h'-0.0m'\v'0.2m'\s12\fRXlib API\fP +.sp -1 +\h'3.187i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP +.sp -1 +\h'5.000i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRsynchronous \fP +.sp -1 +\h'5.000i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRrequest\fP +.sp -1 +\h'0.062i'\v'0.881i'\h'-0.0m'\v'0.2m'\s10\fRKey event\fP +.sp -1 +\h'3.187i'\v'1.131i'\h'-0.0m'\v'0.2m'\s10\fR(synchronous) \fP +.sp -1 +\h'0.062i'\v'1.256i'\h'-0.0m'\v'0.2m'\s10\fRButton press causes\fP +.sp -1 +\h'0.062i'\v'1.381i'\h'-0.0m'\v'0.2m'\s10\fRfocus change\fP +.sp -1 +\h'1.250i'\v'1.381i'\h'-0.0m'\v'0.2m'\s10\fRXSetICFocus\fP +.sp -1 +\h'3.250i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRor XIM_COMMIT\fP +.sp -1 +\h'3.187i'\v'1.443i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP +.sp -1 +\h'3.687i'\v'1.693i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC\fP +.sp -1 +\h'3.375i'\v'2.006i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC_REPLY\fP +.sp -1 +\h'1.250i'\v'2.193i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP +.sp -1 +\h'1.250i'\v'2.568i'\h'-0.0m'\v'0.2m'\s10\fRXmbLookupString\fP +.sp -1 +\h'1.250i'\v'2.381i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent (returns False) \fP +.sp -1 +\v'2.856i'\h'-0.0m'\v'0.2m'\s10\fRthe focus\fP +.sp -1 +\v'2.693i'\h'-0.0m'\v'0.2m'\s10\fRApplication moves\fP +.sp -1 +\h'5.000i'\v'3.068i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP +.sp -1 +\h'5.000i'\v'3.193i'\h'-0.0m'\v'0.2m'\s10\fR(The focused\fP +.sp -1 +\h'5.000i'\v'3.318i'\h'-0.0m'\v'0.2m'\s10\fRIC is changed) \fP +.sp -1 +\h'5.000i'\v'3.568i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP +.sp -1 +\h'3.125i'\v'3.568i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SYNC_REPLY as a reply\fP +.sp -1 +\h'3.125i'\v'3.731i'\h'-0.0m'\v'0.2m'\s10\fRof the XIM_FORWARD_EVENT\fP +.sp -1 +\h'1.250i'\v'3.568i'\h'-0.0m'\v'0.2m'\s10\fRXNextEvent\fP +.sp -1 +\h'5.000i'\v'4.068i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP +.sp -1 +\h'5.000i'\v'1.381i'\h'-0.0m'\v'0.2m'\s10\fRPending\fP +.sp -1 +\h'5.000i'\v'4.256i'\h'-0.0m'\v'0.2m'\s10\fRprocessed\fP +.sp -1 +\h'1.250i'\v'2.818i'\h'-0.0m'\v'0.2m'\s10\fRXSetICFocus\fP +.sp -1 +\h'3.125i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRis started by XIM_COMMIT\fP +.sp -1 +\h'3.125i'\v'2.193i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SET_IC_FOCUS is\fP +.sp -1 +\h'3.125i'\v'2.318i'\h'-0.0m'\v'0.2m'\s10\fRpend because another sync cycle\fP +.sp -1 +\h'2.062i'\v'1.693i'\h'-0.0m'\v'0.2m'\s10\fRsync cycle is done\fP +.sp -1 +\h'2.062i'\v'1.568i'\h'-0.0m'\v'0.2m'\s10\fRPending until\fP +.sp -1 +\v'3.568i'\h'-0.0m'\v'0.2m'\s10\fRKey event\fP +.sp -1 +\h'1.250i'\v'3.756i'\h'-0.0m'\v'0.2m'\s10\fRXFilterEvent\fP +.sp -1 +\h'3.125i'\v'4.631i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP +.sp -1 +\h'3.375i'\v'4.131i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SET_IC_FOCUS\fP +.sp -1 +\h'3.250i'\v'2.818i'\h'-0.0m'\v'0.2m'\s10\fRXIM_SET_IC_FOCUS\fP +.sp -1 +.sp 1+4.721i +.PE +.if \n(00 .fi + +.\"====================== event2 flow figure end ======================= +.ce +.sp +Fig.3 Sample Protocol Flow chart +.LP +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_FORWARD_EVENT (IM library \(<-\(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:2:BITMASK16:flag +::#0001:synchronous +::#0002:request filtering (*1) +::#0004:request lookupstring (*2) +:2:CARD16:serial number +::XEVENT:X event +.TE +.LP +.IP (*1) +Indicate the receiver should filter events and possible preedit may be invoked. +.IP (*2) +Indicate the receiver should only do lookup string. The IM Server is expected +to just do a conversion of the key event to the best candidate. This bit may +affect the state of the preedit state (e.g. compose of dead key sequences). +.RE +.LP +XEVENT format is same as the X Protocol event format(xEvent). +As the value of xEvent's sequenceNumber is the bottom of 16 bit of XEvent's +xany.serial, the top of 16 bit is sent by serial number(INT16). +.LP +.PN XIM_FORWARD_EVENT +message is used for forwarding the events from the IM library to the IM Server +in order for IM to be able to filter the event. On the other hand, this +message is also used for forwarding the events from the IM Server to the IM +library if the event forwarded from the IM library is not filtered. +The IM Server, which receives +.PN XIM_FORWARD_EVENT +message without synchronous bit, should set synchronous bit. +If both ``request event filtering'' and ``request lookupstring'' flag are +set, then both filtering and lookup should be done for the same event. +.LP +.NH 2 +Synchronizing with the IM Server +.XS +\*(SN Synchronizing with the IM Server +.XE +.LP +.PN XIM_SYNC +message requests to synchronize the IM library and the IM Server. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_SYNC (IM library \(<-\(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +.TE +.RE +.LP +This synchronization can be started either on the IM library side or on the +IM Server side. The side which receives +.PN XIM_SYNC +message should process all XIM requests before replying. The input-context-ID +is necessary to distinguish the IC with which the IM library and the IM +Server are synchronized. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_SYNC_REPLY (IM Server \(<-\(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +.TE +.RE +.LP +The side which receives +.PN XIM_FORWARD_EVENT, +.PN XIM_COMMIT +or any other message with synchronous bit, should process all XIM request +before replying, and send +.PN XIM_SYNC_REPLY +message as the reply to the previous message. +.LP +.NH 2 +Sending a committed string +.XS +\*(SN Sending a committed string +.XE +.LP +When the IM Server commits a string, the IM Server sends either the committed +string or list of KeySym, or both, by +.PN XIM_COMMIT +message. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_COMMIT (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:2:BITMASK16:flag +::#0001:synchronous +::#0002:XLookupChars +::#0004:XLookupKeySym +::#0006: XLookupBoth = XLookupChars | XLookupKeySym +.TE +.LP +If flag is XLookupKeySym, the arguments continue as follows: +.TS +tab(:); +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +:2::unused +:4:KEYSYM:KeySym +.TE +.LP +If flag is XLookupChars, the arguments continue as follows: +.TS +tab(:); +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +:2:m:byte length of committed string +:m:LISTofBYTE:committed string +:p::unused, p = Pad(m) +.TE +.LP +If flag is XLookupBoth, the arguments continue as follows: +.TS +tab(:); +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +:2::unused +:4:KEYSYM:KeySym +:2:n:byte length of committed string +:n:LISTofBYTE:committed string +:p::unused, p = Pad(2+n) +.TE +.RE +.LP +The IM Server which receives +.PN XIM_COMMIT +message without synchronous bit should set synchronous bit. +.LP +.NH 2 +Reset IC +.XS +\*(SN Reset IC +.XE +.LP +.PN XIM_RESET_IC +message requests to reset the status of IC in the IM Server. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_RESET_IC (IM library \(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +.TE +.RE +.LP +.PN XIM_RESET_IC +is a synchronous request. The IM library should wait until receiving either an +.PN XIM_RESET_IC_REPLY +packet or an +.PN XIM_ERROR +packet. +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_RESET_IC_REPLY (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:2:n:byte length of preedit string +:n:LISTofBYTE:preedit string +:p::unused, p = Pad(2+n) +.TE +.RE +.LP +.PN XIM_RESET_IC_REPLY +message returns the input-context-ID to distinguish replies from multiple ICs. +.LP +.\"============================== Callbacks =============================== +.NH 2 +Callbacks +.XS +\*(SN Callbacks +.XE +.LP +If XIMStyle has XIMPreeditArea or XIMStatusArea set, XIMGeometryCallback +may be used, and if XIMPreeditCallback and/or XIMStatusCallback are set, +corresponding callbacks may be used. +.LP +Any callback request may be sent from an IM Server to an IM client +asynchronously in response to any request previously sent by the IM client +to the IM Server. +.LP +When an IM Server needs to send a callback request synchronously with +the request previously sent by an IM client, the IM Server sends it +before replying to the previous request. +.LP +.NH 3 +Negotiating geometry +.XS +\*(SN Negotiating geometry +.XE +.LP +The IM Server sends +.PN XIM_GEOMETRY +message to start geometry negotiation, if XIMStyle has XIMPreeditArea or +XIMStatusArea set. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_GEOMETRY (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +.TE +.RE +.LP +There is always a single Focus Window, even if some input fields have only +one IC. +.LP +.NH 3 +Converting a string +.XS +\*(SN Converting a string +.XE +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_STR_CONVERSION (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:2:CARD16:XIMStringConversionPosition +:2::unused +:4:CARD32:XIMCaretDirection +::#0:XIMForwardChar +::#1:XIMBackwardChar +::#2:XIMForwardWord +::#3:XIMBackwardWord +::#4:XIMCaretUp +::#5:XIMCaretDown +::#6:XIMNextLine +::#7:XIMCPreviousLine +::#8:XIMLineStart +::#9:XIMLineEnd +::#10:XIMAbsolutePosition +::#11:XIMDontChange +:2:CARD16:factor +:2:CARD16:XIMStringConversionOperation +::#0001:XIMStringConversionSubstitution +::#0002:XIMStringConversionRetrieval +:2:INT16:T{ +byte length to multiply the XIMStringConversionType +T} +.TE +.RE +.sp +.LP +.PN XIM_STR_CONVERSION +message may be used to start the string conversion from the IM +Server. +.LP +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_STR_CONVERSION_REPLY (IM library \(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:4:CARD32:XIMStringConversionFeedback +::XIMSTRCONVTEXT:XIMStringConversionText +.sp +.TE +.RE +.LP +.PN XIM_STR_CONVERSION_REPLY +message returns the string to be converted and the feedback information array. +.LP +.NH 3 +Preedit Callbacks +.XS +\*(SN Preedit Callbacks +.XE +.LP +The IM Server sends +.PN XIM_PREEDIT_START +message to call the XIMPreeditStartCallback function. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_PREEDIT_START (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +.TE +.RE +.LP +The reply to this message must be sent synchronously. The reply forwards +the return value from the callback function to the IM Server. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_PREEDIT_START_REPLY (IM library \(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:4:INT32:return value +.TE +.RE +.LP +.PN XIM_PREEDIT_START_REPLY +message returns the input-context-ID to distinguish replies from multiple +IC's. The return value contains the return value of the function +XIMPreeditStartCallback. +.LP +The IM Server sends +.PN XIM_PREEDIT_DRAW +message to call the XIMPreeditDrawCallback function. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_PREEDIT_DRAW (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:4:INT32:caret +:4:INT32:chg_first +:4:INT32:chg_length +:4:BITMASK32:status +::#x0000001:no string +::#x0000002:no feedback +:2:n:length of preedit string +:n:STRING8:preedit string +:p::unused, p = Pad(2+n) +:2:m:byte length of feedback array +:2::unused +:m:LISTofXIMFEEDBACK:feedback array +.TE +.RE +.LP +The fields ``caret'', ``chg_first'' and ``chg_length'' correspond to the +fields of XIMPreeditDrawCallbackStruct. +When the ``no string'' bit of the status field is set, the text field of +XIMPreeditDrawCallbackStruct is NULL. +When the ``no feedback'' bit of the status field is set, the text feedback +field of XIMPreeditDrawCallbackStruct is NULL. +When the above bits are not set, ``preedit string'' contains the preedit +string to be displayed, and the feedback array contains feedback information. +.LP +The IM Server sends +.PN XIM_PREEDIT_CARET +message to call the PreeditCaretCallback function. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_PREEDIT_CARET (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:4:INT32:position +:4:CARD32:direction +::#0:XIMForwardChar +::#1:XIMBackwardChar +::#2:XIMForwardWord +::#3:XIMBackwardWord +::#4:XIMCaretUp +::#5:XIMCaretDown +::#6:XIMNextLine +::#7:XIMCPreviousLine +::#8:XIMLineStart +::#9:XIMLineEnd +::#10:XIMAbsolutePosition +::#11:XIMDontChange +:4:CARD32:style +::#0:XIMInvisible +::#1:XIMCPrimary +::#2:XIMSecondary +.TE +.RE +.LP +Each entry corresponds to a field of XIMPreeditCaretCallbackStruct. +Since this callback sets the caret position, its reply must be sent +synchronously. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_PREEDIT_CARET_REPLY (IM library \(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:4:CARD32:position +.TE +.RE +.LP +The position is the value returned by the callback function after it +has been called. +.LP +The IM Server sends +.PN XIM_PREEDIT_DONE +message to call the XIMPreeditDoneCallback function. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_PREEDIT_DONE (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +.TE +.RE +.LP +.NH 3 +Preedit state notify +.XS +\*(SN Preedit state notify +.XE +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_PREEDITSTATE (IM Server \(-> IM Library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:4:BITMASK32:XIMPreeditState +::#x0000000:XIMPreeditUnknown +::#x0000001:XIMPreeditEnable +::#x0000002:XIMPreeditDisable +.TE +.sp +.TE +.RE +.LP +.PN XIM_PREEDITSTATE +message is used to call the XIMPreeditStateNotifyCallback function. +.LP +.NH 3 +Status Callbacks +.XS +\*(SN Status Callbacks +.XE +.LP +The IM Server sends +.PN XIM_STATUS_START +message to call the XIMStatusStartCallback function. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_STATUS_START (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +.TE +.RE +.LP +The IM Server sends +.PN XIM_STATUS_DRAW +message to call the XIMStatusDrawCallback function. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_STATUS_DRAW (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:4:CARD32:type +::#0:XIMTextType +::#1:XIMBitmapType +.TE +.LP +If type is XIMTextType, the arguments continue as follows. +.TS +tab(:); +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +:4:BITMASK32:status +::#x0000001:no string +::#x0000002:no feedback +:2:n:length of status string +:n:STRING8:status string +:p::unused, p = Pad(2+n) +:2:m:byte length of feedback array +:2::unused +:m:LISTofXIMFEEDBACK:feedback array +.TE +.LP +If type is XIMBitmapType, the arguments continue as follows. +.TS +tab(:); +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +:4:PIXMAP:pixmap data +.TE +.RE +.LP +The field ``type'' corresponds to the field in XIMStatusDrawCallbackStruct. +.LP +The IM Server sends +.PN XIM_STATUS_DONE +message to call the XIMStatusDoneCallback function. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_STATUS_DONE (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +.TE +.RE +.LP +.bp +.NH 1 +Acknowledgements +.XS +\*(SN Acknowledgements +.XE +.LP +This document represents the culmination of several years of debate and +experiments done under the auspices of the MIT X Consortium i18n working +group. Although this was a group effort, the author remains responsible +for any errors or omissions. +.LP +We would like to thank to all members of this group. +And we would like to make special thanks to the following people +(in alphabetical order) for their participation in the IM Protocol +design, +Hector Chan, Takashi Fujiwara, Yoshio Horiuchi, Makoto Inada, +Hiromu Inukai, Mickael Kung, Seiji Kuwari, Franky Ling, Hiroyuki Machida, +Hiroyuki Miyamoto, Frank Rojas, Bob Scheifler, Makiko Shimamura, +Shoji Sugiyama, Hidetoshi Tajima, Masaki Takeuchi, Makoto Wakamatsu, +Masaki Wakao, Nobuyuki Tanaka, Shigeru Yamada, Katsuhisa Yano, Jinsoo Yoon. +.LP +.NH 1 +References +.XS +\*(SN References +.XE +.LP +All of the following documents are X Consortium standards available from MIT: +.LP +[1] Scheifler, Robert W., \fI``X Window System Protocol Version 11''\fP +.LP +[2] Scheifler, Robert W. etc., \fI``Xlib \- C Language X Interface''\fP +.LP +.bp +.XS +Appendix A \- Common Extensions +.XE +.ce 10 +.sp 5 +\s+2\fBAppendix A\fP\s-2 +.sp +\s+1\fBCommon Extensions\fP\s-1 +.ce 0 +.sp +.LP +Extension opcodes and packet names (e.g. +.PN XIM_EXT_SET_EVENT_MASK +) for additional extensions may be registered with X Consortium. +The following is a commonly well-known extended packet. +.LP +.LP +.IP \fB(1) +Extension to manipulate the event handling\fP +.LP +.PN XIM_EXT_SET_EVENT_MASK +message specifies the set of event masks that the IM library should manipulate. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_EXT_SET_EVENT_MASK (IM Server \(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:4:EVENTMASK:filter-event-mask (*1) +:4:EVENTMASK:intercept-event-mask (*2) +:4:EVENTMASK:select-event-mask (*3) +:4:EVENTMASK:forward-event-mask (*4) +:4:EVENTMASK:synchronous-event-mask (*5) +.TE +.IP (*1) +Specify the events to be neglected by the IM library via XFilterEvent. +.IP (*2) +Specify the events to be deselected by the IM library with XSelectInput. +.IP (*3) +Specify the events to be selected by the IM library with XSelectInput. +.IP (*4) +Specify all the events to be forwarded to the IM Server by the IM library. +.IP (*5) +Specify the events to be forwarded with synchronous flag on by the IM library. +.RE +.LP +The IM library must reply +.PN XIM_SYNC_REPLY +message to the IM Server. This request is valid after the ic is created. +.LP +.sp +.IP \fB(2) +Extension for improvement of performance\fR +.LP +The following requests may be used for improvement of performance. +.LP +.PN XIM_EXT_FORWARD_KEYEVENT +message may be used instead of +.PN XIM_FORWARD_EVENT +message. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_EXT_FORWARD_KEYEVENT (IM Server \(<-\(-> IM library) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:2:BITMASK16:flag +::#0001:synchronous +:2:CARD16:sequence number +:1:BYTE:xEvent.u.u.type +:1:BYTE:keycode +:2:CARD16:state +:4:CARD32:time +:4:CARD32:window +.TE +.RE +.LP +.bp +.PN XIM_EXT_MOVE +message may be used to change the spot location instead of +.PN +XIM_SET_IC_VALUES +message. +It is effective only if the client specified XIMPreeditPosition. +.RS +.TS +tab(:); +lfB s s s +lw(.25i) lw(.25i) lw(1.75i) lw(3.5i). +XIM_EXT_MOVE (IM library \(-> IM Server) +.sp 6p +:2:CARD16:input-method-ID +:2:CARD16:input-context-ID +:2:INT16:X +:2:INT16:Y +.TE +.RE +.LP +.PN XIM_EXT_MOVE +message is a asynchronous request. +.LP +.bp +.XS +Appendix B \- The list of transport specific IM Server names registered +.XE +.ce 10 +.sp 5 +\s+2\fBAppendix B\fP\s-2 +.sp +\s+1\fBThe list of transport specific IM Server address format registered\fP\s-1 +.ce 0 +.sp +.LP +The following format represents the ATOM contained in +.PN XIM_SERVERS +property and the string returned from the request converting +selection target LOCALES and TRANSPORT. +.DS + ``{@\^\fIcategory\fP\^=[\^\fIvalue\fP,...]}...'' +.DE +.LP +The following categories are currently registered. +.RS +.TS +tab(;); +l l. +\fBserver\fP;: IM Server name (used for XIM_SERVERS) +\fBlocale\fP;: XPG4 locale name (LOCALES) +\fBtransport\fP;: transport-specific name (TRANSPORT) +.TE +.RE +.LP +The preregistered formats for transport-specific names are as follows: +.RS +.LP +\fBTCP/IP Names\fP +.LP +.RS +The following syntax should be used for system internal domain names: +.DS +<\fIlocal name\fP> ::= ``local/''<\fIhostname\fP>``:''<\fIpathname\fP> +.DE +.LP +Where <\fIpathname\fP> is a path name of socket address. +.LP +IM Server's name should be set to <\fIpathname\fP> to run multiple IM Server +at the same time +.LP +The following syntax should be used for Internet domain names: +.DS +<\fITCP name\fP> ::= ``tcp/''<\fIhostname\fP>``:''<\fIipportnumber\fP> +.DE +where <\fIhostname\fP> is either symbolic (such as expo.lcs.mit.edu) or +numeric decimal (such as 18.30.0.212). The <\fIipportnumber\fP> is the +port on which the IM Server is listening for connections. +For example: +.DS +tcp/expo.lcs.mit.edu:8012 +tcp/18.30.0.212:7890 +.DE +.RE +.LP +\fBDECnet Names\fP +.LP +.RS +The following syntax should be used for DECnet names: +.DS +<\fIDECnet name\fP> ::= ``decnet/''<\fInodename\fP>``::IMSERVER$''<\fIobjname\fP> +.DE +where <\fInodename\fP> is either symbolic (such as SRVNOD) or the numeric +decimal form of the DECnet address (such as 44.70). The <\fIobjname\fP> +is normal, case-insensitive DECnet object name. For example: +.DS +DECNET/SRVNOD::IMSERVER$DEFAULT +decnet/44.70::IMSERVER$other +.DE +.RE +.LP +\fBX Names\fP +.LP +.RS +The following syntax should be used for X names: +.DS +<\fIX name\fP> ::= ``X/'' +.DE +.RE +.RE +.LP +If a given category has multiple values, the value is evaluated in order of +setting. +.bp +.XS +Appendix C \- Protocol number +.XE +.ce 10 +.sp 5 +\s+2\fBAppendix C\fP\s-2 +.sp +\s+1\fBProtocol number\fP\s-1 +.ce 0 +.sp +.LP +\fBMajor Protocol number\fP +.TS +center, tab(:); +lw(9c) l. +XIM_CONNECT:#001 +XIM_CONNECT_REPLY:#002 +XIM_DISCONNECT:#003 +XIM_DISCONNECT_REPLY:#004 + +XIM_AUTH_REQUIRED:#010 +XIM_AUTH_REPLY:#011 +XIM_AUTH_NEXT:#012 +XIM_AUTH_SETUP:#013 +XIM_AUTH_NG:#014 + +XIM_ERROR:#020 + +XIM_OPEN:#030 +XIM_OPEN_REPLY:#031 +XIM_CLOSE:#032 +XIM_CLOSE_REPLY:#033 +XIM_REGISTER_TRIGGERKEYS:#034 +XIM_TRIGGER_NOTIFY:#035 +XIM_TRIGGER_NOTIFY_REPLY:#036 +XIM_SET_EVENT_MASK:#037 +XIM_ENCODING_NEGOTIATION:#038 +XIM_ENCODING_NEGOTIATION_REPLY:#039 +XIM_QUERY_EXTENSION:#040 +XIM_QUERY_EXTENSION_REPLY:#041 +XIM_SET_IM_VALUES:#042 +XIM_SET_IM_VALUES_REPLY:#043 +XIM_GET_IM_VALUES:#044 +XIM_GET_IM_VALUES_REPLY:#045 + +XIM_CREATE_IC:#050 +XIM_CREATE_IC_REPLY:#051 +XIM_DESTROY_IC:#052 +XIM_DESTROY_IC_REPLY:#053 +XIM_SET_IC_VALUES:#054 +XIM_SET_IC_VALUES_REPLY:#055 +XIM_GET_IC_VALUES:#056 +XIM_GET_IC_VALUES_REPLY:#057 +XIM_SET_IC_FOCUS:#058 +XIM_UNSET_IC_FOCUS:#059 +XIM_FORWARD_EVENT:#060 +XIM_SYNC:#061 +XIM_SYNC_REPLY:#062 +XIM_COMMIT:#063 +XIM_RESET_IC:#064 +XIM_RESET_IC_REPLY:#065 + +XIM_GEOMETRY:#070 +XIM_STR_CONVERSION:#071 +XIM_STR_CONVERSION_REPLY:#072 +XIM_PREEDIT_START:#073 +XIM_PREEDIT_START_REPLY:#074 +XIM_PREEDIT_DRAW:#075 +XIM_PREEDIT_CARET:#076 +XIM_PREEDIT_CARET_REPLY:#077 +XIM_PREEDIT_DONE:#078 +XIM_STATUS_START:#079 +XIM_STATUS_DRAW:#080 +XIM_STATUS_DONE:#081 +XIM_PREEDITSTATE:#082 +.TE +.sp +(*) The IM Server's extension protocol number should be more than #128. +.bp +.XS +Appendix D \- Implementation Tips +.XE +.ce 10 +.sp 5 +\s+2\fBAppendix D\fP\s-2 +.sp +\s+1\fBImplementation Tips\fP\s-1 +.ce 0 +.sp +.LP +.B +.IP \fB(1) +FrontEnd Method\fP +.LP +FrontEnd method is recognized as a performance acceleration by the +trade off of the variety of the reliability. +.LP +In order to use the FrontEnd method, the IM library must query the IM +Server to see if the FrontEnd extension is available. The query is +made by using the +.PN XIM_QUERY_EXTENSION +message. The IM Server may send +.PN XIM_EXT_SET_EVENT_MASK +message with intercept-event-mask, forward-event-mask, and +synchronous-event-mask values set after replying +.PN XIM_QUERY_EXTENSION_REPLY +message. +.LP +FrontEnd method can be implemented in a couple of ways depending on +how the IM Server utilize +.PN XIM_EXT_SET_EVENT_MASK +message. +.LP +One approach is to update both of the input mask and the filter-event-mask +depending on the preeidting state. The sample protocol sequence using the +static event flow is as follows: +.LP +.\"=================================================================== +.sp +\^... 1.675 6.888 6.237 10.296 +\^... 0.000i 3.408i 4.562i 0.000i +.nr 00 \n(.u +.nf +.PS 3.408i 4.562i +.br +.ps 11 +\h'3.750i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m' +.sp -1 +\h'3.912i'\v'1.384i'\D'l-0.100i 0.025i' +.sp -1 +\h'3.912i'\v'1.434i'\D'l-0.100i -0.025i' +.sp -1 +\h'3.812i'\v'1.409i'\l'0.750i' +.sp -1 +\h'3.750i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP +.sp -1 +\h'3.812i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP +.sp -1 +\h'3.812i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRto select the event\fP +.sp -1 +\h'3.875i'\v'2.381i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP +.sp -1 +\h'3.875i'\v'2.568i'\h'-0.0m'\v'0.2m'\s10\fRto deselect the event\fP +.sp -1 +\h'3.875i'\v'1.631i'\h'-0.0m'\v'0.2m'\s10\fRX events directly come\fP +.sp -1 +\h'3.875i'\v'1.756i'\h'-0.0m'\v'0.2m'\s10\fRto the IM Server.\fP +.sp -1 +\h'3.875i'\v'2.006i'\h'-0.0m'\v'0.2m'\s10\fRwhen preediting is turning off\fP +.sp -1 +\h'0.625i'\v'0.284i'\l'0.875i' +.sp -1 +\h'1.400i'\v'0.309i'\D'l0.100i -0.025i' +.sp -1 +\h'1.400i'\v'0.259i'\D'l0.100i 0.025i' +.sp -1 +\h'1.750i'\v'0.346i'\l'1.687i' +.sp -1 +\h'3.337i'\v'0.371i'\D'l0.100i -0.025i' +.sp -1 +\h'3.337i'\v'0.321i'\D'l0.100i 0.025i' +.sp -1 +\h'1.850i'\v'2.134i'\D'l-0.100i 0.025i' +.sp -1 +\h'1.850i'\v'2.184i'\D'l-0.100i -0.025i' +.sp -1 +\h'1.750i'\v'2.159i'\l'1.687i' +.sp -1 +\h'1.562i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m' +.sp -1 +\h'1.850i'\v'0.446i'\D'l-0.100i 0.025i' +.sp -1 +\h'1.850i'\v'0.496i'\D'l-0.100i -0.025i' +.sp -1 +\h'1.750i'\v'0.471i'\l'1.687i' +.sp -1 +\h'1.687i'\v'0.631i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP +.sp -1 +\h'1.875i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRintercept-event-mask is set\fP +.sp -1 +\h'1.687i'\v'2.318i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP +.sp -1 +\h'1.875i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRselect-event-mask is set\fP +.sp -1 +\h'0.937i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP +.sp -1 +\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP +.sp -1 +\h'0.250i'\v'2.318i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP +.sp -1 +\h'0.250i'\v'2.506i'\h'-0.0m'\v'0.2m'\s10\fRto select the event\fP +.sp -1 +\h'0.250i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRto deselect the event\fP +.sp -1 +\h'0.250i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP +.sp -1 +\h'1.812i'\v'0.256i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP +.sp -1 +.sp 1+3.408i +.PE +.if \n(00 .fi +.sp +.\"=================================================================== +.LP +To pursuit a maximum performance regardless of the preediting mode, +the IM Server may use the dynamic event flow with the following +sample protocol sequence. +.bp +.LP +.\"=================================================================== +\^... 1.675 6.888 6.237 10.296 +\^... 0.000i 3.408i 4.562i 0.000i +.nr 00 \n(.u +.nf +.PS 3.408i 4.562i +.br +.ps 11 +\h'3.750i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m' +.sp -1 +\h'3.912i'\v'1.384i'\D'l-0.100i 0.025i' +.sp -1 +\h'3.912i'\v'1.434i'\D'l-0.100i -0.025i' +.sp -1 +\h'3.812i'\v'1.409i'\l'0.750i' +.sp -1 +\h'3.750i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP +.sp -1 +\h'3.812i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP +.sp -1 +\h'3.812i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRto select the event\fP +.sp -1 +\h'3.875i'\v'2.381i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP +.sp -1 +\h'3.875i'\v'2.568i'\h'-0.0m'\v'0.2m'\s10\fRto deselect the event\fP +.sp -1 +\h'3.875i'\v'1.631i'\h'-0.0m'\v'0.2m'\s10\fRX events directly come\fP +.sp -1 +\h'3.875i'\v'1.756i'\h'-0.0m'\v'0.2m'\s10\fRto the IM Server.\fP +.sp -1 +\h'3.875i'\v'2.006i'\h'-0.0m'\v'0.2m'\s10\fRwhen preediting is turning off\fP +.sp -1 +\h'0.625i'\v'0.284i'\l'0.875i' +.sp -1 +\h'1.400i'\v'0.309i'\D'l0.100i -0.025i' +.sp -1 +\h'1.400i'\v'0.259i'\D'l0.100i 0.025i' +.sp -1 +\h'1.750i'\v'0.346i'\l'1.687i' +.sp -1 +\h'3.337i'\v'0.371i'\D'l0.100i -0.025i' +.sp -1 +\h'3.337i'\v'0.321i'\D'l0.100i 0.025i' +.sp -1 +\h'1.850i'\v'1.196i'\D'l-0.100i 0.025i' +.sp -1 +\h'1.850i'\v'1.246i'\D'l-0.100i -0.025i' +.sp -1 +\h'1.750i'\v'1.221i'\l'1.687i' +.sp -1 +\h'1.850i'\v'2.134i'\D'l-0.100i 0.025i' +.sp -1 +\h'1.850i'\v'2.184i'\D'l-0.100i -0.025i' +.sp -1 +\h'1.750i'\v'2.159i'\l'1.687i' +.sp -1 +\h'1.562i'\v'0.034i'\v'-.13m'\L'3.374i\(br'\v'.13m' +.sp -1 +\h'1.850i'\v'0.446i'\D'l-0.100i 0.025i' +.sp -1 +\h'1.850i'\v'0.496i'\D'l-0.100i -0.025i' +.sp -1 +\h'1.750i'\v'0.471i'\l'1.687i' +.sp -1 +\h'1.812i'\v'0.256i'\h'-0.0m'\v'0.2m'\s10\fRXIM_TRIGGER_NOTIFY\fP +.sp -1 +\h'1.687i'\v'1.068i'\h'-0.0m'\v'0.2m'\s10\fRXIM_TRIGGER_NOTIFY_REPLY\fP +.sp -1 +\h'1.687i'\v'0.631i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP +.sp -1 +\h'1.875i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRintercept-event-mask is set\fP +.sp -1 +\h'1.687i'\v'2.318i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP +.sp -1 +\h'1.875i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRselect-event-mask is set\fP +.sp -1 +\h'0.937i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP +.sp -1 +\v'0.193i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP +.sp -1 +\h'0.250i'\v'2.318i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP +.sp -1 +\h'0.250i'\v'2.506i'\h'-0.0m'\v'0.2m'\s10\fRto select the event\fP +.sp -1 +\h'0.250i'\v'1.006i'\h'-0.0m'\v'0.2m'\s10\fRto deselect the event\fP +.sp -1 +\h'0.250i'\v'0.818i'\h'-0.0m'\v'0.2m'\s10\fRevent mask is changed\fP +.sp -1 +.sp 1+3.408i +.PE +.if \n(00 .fi +.\"=================================================================== +.LP +This method can reduce the XIM protocol traffic dramatically +by updating intercept-event-mask and select-event-mask accordingly. +The tradeoff of this performance improvement is that the key +events may be lost or disordered in some particular situation, such as +when the user types the keyboard in following sequence really fast: +.sp 6p +.RS +<preediting on key>``some strings''<preediting off key>``another string'' +.RE +.sp 6p +Since this method requires the input mask updates to the both the IM Server +and Xlib when turning on and off the preediting, and there is a time lag +till the requests take effect when two client issues the input mask updates +simultaneously. +.LP +Another approach of the FrontEnd method is to update the filter-event-mask +depending on the preediting state and not to update the input mask. +The IM Server must register both of the preediting on key list and off key +list by +.PN XIM_REGISTER_TRIGGERKEYS +message. +In this method, Both the IM Server and the IM client select the same +events on the same client's window, so that the events are delivered +to both of the IM Server and the client. The preediting on and off +states are expressed by whether the key events are filtered or not. +The sample protocol sequence are as follows: +.LP +.bp +<<Using static event flow>> +.LP +.\"==================================================================== +.sp +\^... 1.488 7.325 6.487 10.358 +\^... 0.000i 3.033i 4.999i 0.000i +.nr 00 \n(.u +.nf +.PS 3.033i 4.999i +.br +.ps 11 +\h'4.099i'\v'0.383i'\D'l-0.100i 0.025i' +.sp -1 +\h'4.099i'\v'0.433i'\D'l-0.100i -0.025i' +.sp -1 +\h'3.999i'\v'0.408i'\l'1.000i' +.sp -1 +\h'4.099i'\v'1.696i'\D'l-0.100i 0.025i' +.sp -1 +\h'4.099i'\v'1.746i'\D'l-0.100i -0.025i' +.sp -1 +\h'3.999i'\v'1.721i'\l'1.000i' +.sp -1 +\h'3.937i'\v'0.096i'\v'-.13m'\L'2.937i\(br'\v'.13m' +.sp -1 +\h'3.937i'\v'0.062i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP +.sp -1 +\h'4.062i'\v'0.755i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP +.sp -1 +\h'4.062i'\v'0.943i'\h'-0.0m'\v'0.2m'\s10\fRare being processed\fP +.sp -1 +\h'4.062i'\v'2.255i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP +.sp -1 +\h'4.062i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRare being discarded\fP +.sp -1 +\h'4.249i'\v'1.568i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the off-key-list\fP +.sp -1 +\h'4.187i'\v'0.318i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP +.sp -1 +\h'0.812i'\v'0.346i'\l'0.875i' +.sp -1 +\h'1.587i'\v'0.371i'\D'l0.100i -0.025i' +.sp -1 +\h'1.587i'\v'0.321i'\D'l0.100i 0.025i' +.sp -1 +\h'1.937i'\v'0.408i'\l'1.687i' +.sp -1 +\h'3.524i'\v'0.433i'\D'l0.100i -0.025i' +.sp -1 +\h'3.524i'\v'0.383i'\D'l0.100i 0.025i' +.sp -1 +\h'1.749i'\v'0.096i'\v'-.13m'\L'2.937i\(br'\v'.13m' +.sp -1 +\h'2.037i'\v'0.508i'\D'l-0.100i 0.025i' +.sp -1 +\h'2.037i'\v'0.558i'\D'l-0.100i -0.025i' +.sp -1 +\h'1.937i'\v'0.533i'\l'1.687i' +.sp -1 +\h'0.812i'\v'1.721i'\l'0.875i' +.sp -1 +\h'1.587i'\v'1.746i'\D'l0.100i -0.025i' +.sp -1 +\h'1.587i'\v'1.696i'\D'l0.100i 0.025i' +.sp -1 +\h'2.099i'\v'1.758i'\D'l-0.100i 0.025i' +.sp -1 +\h'2.099i'\v'1.808i'\D'l-0.100i -0.025i' +.sp -1 +\h'1.999i'\v'1.783i'\l'1.688i' +.sp -1 +\h'1.874i'\v'0.693i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP +.sp -1 +\v'0.255i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP +.sp -1 +\h'2.062i'\v'0.880i'\h'-0.0m'\v'0.2m'\s10\fRfilter-event-mask is set\fP +.sp -1 +\h'0.624i'\v'0.755i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP +.sp -1 +\h'0.624i'\v'0.943i'\h'-0.0m'\v'0.2m'\s10\fRare being filtered\fP +.sp -1 +\h'1.937i'\v'1.943i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP +.sp -1 +\h'2.124i'\v'2.068i'\h'-0.0m'\v'0.2m'\s10\fRfilter-event-mask is set\fP +.sp -1 +\h'0.062i'\v'1.568i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the off-key-list\fP +.sp -1 +\h'1.062i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP +.sp -1 +\h'0.624i'\v'2.255i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP +.sp -1 +\h'0.624i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRare being processed\fP +.sp -1 +\h'1.999i'\v'0.318i'\h'-0.0m'\v'0.2m'\s10\fRXIM_FORWARD_EVENT\fP +.sp -1 +.sp 1+3.033i +.PE +.if \n(00 .fi +.\"==================================================================== +.LP +<<Using the dynamic event flow>> +.LP +.\"==================================================================== +\^... 1.488 7.325 6.487 10.358 +\^... 0.000i 3.033i 4.999i 0.000i +.nr 00 \n(.u +.nf +.PS 3.033i 4.999i +.br +.ps 11 +\h'4.099i'\v'0.383i'\D'l-0.100i 0.025i' +.sp -1 +\h'4.099i'\v'0.433i'\D'l-0.100i -0.025i' +.sp -1 +\h'3.999i'\v'0.408i'\l'1.000i' +.sp -1 +\h'4.099i'\v'1.696i'\D'l-0.100i 0.025i' +.sp -1 +\h'4.099i'\v'1.746i'\D'l-0.100i -0.025i' +.sp -1 +\h'3.999i'\v'1.721i'\l'1.000i' +.sp -1 +\h'3.937i'\v'0.096i'\v'-.13m'\L'2.937i\(br'\v'.13m' +.sp -1 +\h'3.937i'\v'0.062i'\h'-0.0m'\v'0.2m'\s12\fRIM Server\fP +.sp -1 +\h'4.062i'\v'0.755i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP +.sp -1 +\h'4.062i'\v'0.943i'\h'-0.0m'\v'0.2m'\s10\fRare being processed\fP +.sp -1 +\h'4.062i'\v'2.255i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP +.sp -1 +\h'4.062i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRare being discarded\fP +.sp -1 +\h'4.249i'\v'1.568i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the off-key-list\fP +.sp -1 +\h'4.187i'\v'0.318i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP +.sp -1 +\h'0.812i'\v'0.346i'\l'0.875i' +.sp -1 +\h'1.587i'\v'0.371i'\D'l0.100i -0.025i' +.sp -1 +\h'1.587i'\v'0.321i'\D'l0.100i 0.025i' +.sp -1 +\h'1.937i'\v'0.408i'\l'1.687i' +.sp -1 +\h'3.524i'\v'0.433i'\D'l0.100i -0.025i' +.sp -1 +\h'3.524i'\v'0.383i'\D'l0.100i 0.025i' +.sp -1 +\h'2.037i'\v'1.258i'\D'l-0.100i 0.025i' +.sp -1 +\h'2.037i'\v'1.308i'\D'l-0.100i -0.025i' +.sp -1 +\h'1.937i'\v'1.283i'\l'1.687i' +.sp -1 +\h'1.749i'\v'0.096i'\v'-.13m'\L'2.937i\(br'\v'.13m' +.sp -1 +\h'2.037i'\v'0.508i'\D'l-0.100i 0.025i' +.sp -1 +\h'2.037i'\v'0.558i'\D'l-0.100i -0.025i' +.sp -1 +\h'1.937i'\v'0.533i'\l'1.687i' +.sp -1 +\h'0.812i'\v'1.721i'\l'0.875i' +.sp -1 +\h'1.587i'\v'1.746i'\D'l0.100i -0.025i' +.sp -1 +\h'1.587i'\v'1.696i'\D'l0.100i 0.025i' +.sp -1 +\h'2.099i'\v'1.758i'\D'l-0.100i 0.025i' +.sp -1 +\h'2.099i'\v'1.808i'\D'l-0.100i -0.025i' +.sp -1 +\h'1.999i'\v'1.783i'\l'1.688i' +.sp -1 +\h'1.999i'\v'0.318i'\h'-0.0m'\v'0.2m'\s10\fRXIM_TRIGGER_NOTIFY\fP +.sp -1 +\h'1.874i'\v'1.130i'\h'-0.0m'\v'0.2m'\s10\fRXIM_TRIGGER_NOTIFY_REPLY\fP +.sp -1 +\h'1.874i'\v'0.693i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP +.sp -1 +\v'0.255i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the on-key-list\fP +.sp -1 +\h'2.062i'\v'0.880i'\h'-0.0m'\v'0.2m'\s10\fRfilter-event-mask is set\fP +.sp -1 +\h'0.624i'\v'0.755i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP +.sp -1 +\h'0.624i'\v'0.943i'\h'-0.0m'\v'0.2m'\s10\fRare being filtered\fP +.sp -1 +\h'1.937i'\v'1.943i'\h'-0.0m'\v'0.2m'\s10\fRXIM_EXT_SET_EVENT_MASK\fP +.sp -1 +\h'2.124i'\v'2.068i'\h'-0.0m'\v'0.2m'\s10\fRfilter-event-mask is set\fP +.sp -1 +\h'0.062i'\v'1.568i'\h'-0.0m'\v'0.2m'\s10\fRKeys in the off-key-list\fP +.sp -1 +\h'1.062i'\h'-0.0m'\v'0.2m'\s12\fRIM library\fP +.sp -1 +\h'0.624i'\v'2.255i'\h'-0.0m'\v'0.2m'\s10\fRthe specified events\fP +.sp -1 +\h'0.624i'\v'2.443i'\h'-0.0m'\v'0.2m'\s10\fRare being processed\fP +.sp -1 +.sp 1+3.033i +.PE +.if \n(00 .fi + +.\"==================================================================== +.LP +This method does not have the problem of the time lag when going across +the preediting on and off mode, however, the amount of the performance +acceleration is not as good as the method described above. +.LP +In general, the FrontEnd method requires some synchronization to some +of the X protocols, such as the ChangeWindowAttribute protocol for the +event mask change or the GrabKey protocol, since it relies on the X's +principal event dispatching mechanism. Any X protocol bindings do not +consider the synchronization might cause some mis-synchronization +between the IM clients and the IM Server. +.LP +.bp +.IP \fB(2) +Transport Layer\fP +.LP +The Xlib XIM implementation is layered into three functions, a protocol +layer, an interface layer and a transport layer. The purpose of this +layering is to make the protocol independent of transport implementation. +Each function of these layers are: +.RS 3 +.IP "\fIThe protocol layer\fP" +.br +implements overall function of XIM and calls the interface layer +functions when it needs to communicate to IM Server. +.IP "\fIThe interface layer\fP" +.br +separates the implementation of the transport layer from the protocol +layer, in other words, it provides implementation independent hook for +the transport layer functions. +.IP "\fIThe transport layer\fP" +.br +handles actual data communication with IM Server. It is done by a set +of several functions named transporters. +.RE +.LP +The interface layer and the transport layer make various communication +channels usable such as X Protocol, TCP/IP, DECnet or STREAM. +The following is a sample implementation for the transporter using +the X connection. +Refer to "xtrans" for the transporter using Socket Transport. +.LP +At the beginning of the X Transport connection for the XIM transport +mechanism, two different windows must be created either in an Xlib XIM +or in an IM Server, with which the Xlib and the IM Server exchange the +XIM transports by using the ClientMessage events and Window Properties. +In the following, the window created by the Xlib is referred as the +"client communication window", and on the other hand, the window created +by the IM Server is referred as the "IMS communication window". +.LP +.B +Connection +.LP +.RS +In order to establish a connection, a communication window is created. +A ClientMessage in the following event's format is sent to the owner +window of XIM_SERVER selection, which the IM Server has created. +.LP +Refer to "The Input Method Protocol" for the XIM_SERVER atom. +.LP +.ce +Table D-1; The ClientMessage sent to the IMS window. +.TS H +tab(:); +l s|l +l l|l. +_ +.sp 6p +.B +Structure Member:Contents +.sp 6p +_ +.sp 6p +.TH +.R +int:type:ClientMessage +u_long:serial:Set by the X Window System +Bool:send_event:Set by the X Window System +Display:*display:The display to which connects +Window:window:IMS Window ID +Atom:message_type:XInternAtom(display, ``_XIM_XCONNECT'', False) +int:format:32 +long:data.l[0]:client communication window ID +long:data.l[1]:client-major-transport-version (*1) +long:data.l[2]:client-major-transport-version (*1) +.sp 6p +_ +.TE +.LP +In order to establish the connection (to notify the IM Server communication +window), the IM Server sends a ClientMessage in the following event's +format to the client communication window. +.LP +.bp +.ce +Table D-2; The ClientMessage sent by IM Server. +.TS H +tab(:); +l s | l +l l | l. +_ +.sp 6p +.B +Structure Member:Contents +.sp 6p +_ +.sp 6p +.TH +.R +int:type:ClientMessage +u_long:serial:Set by the X Window System +Bool:send_event:Set by the X Window System +Display:*display:The display to which connects +Window:window:client communication window ID +Atom:message_type:XInternAtom(display, ``_XIM_XCONNECT'', False) +int:format:32 +long:data.l[0]:IMS communication window ID +long:data.l[1]:server-major-transport-version (*1) +long:data.l[2]:server-minor-transport-version (*1) +long:data.l[3]:dividing size between ClientMessage and Property (*2) +.sp 6p +_ +.TE +.LP +.IP (*1) +major/minor-transport-version +.RS +The read/write method is decided by the combination of +major/minor-transport-version, as follows: +.LP +.ce +Table D-3; The read/write method and the major/minor-transport-version +.TS +center, tab(:); +| c s | l | +| c | c | l |. +_ +.sp 6p +.B +Transport-version:read/write +.sp 6p +_ +.sp 6p +major:minor: +.sp 6p +_ +.sp 6p +.R +0:0:only-CM & Property-with-CM +:1:only-CM & multi-CM +:2:only-CM & multi-CM & Property-with-CM +.sp 6p +_ +.sp 6p +1:0:PropertyNotify +.sp 6p +_ +.sp 6p +2:0:only-CM & PropertyNotify +:1:only-CM & multi-CM & PropertyNotify +.sp 6p +_ +.TE +.LP +.RS +.TS +center, tab(;); +l n l. +only-CM;:;data is sent via a ClientMessage +multi-CM;:;data is sent via multiple ClientMessages +Property-with-CM;:;T{ +data is written in Property, and its Atom is send via ClientMessage +T} +PropertyNotify;:;T{ +data is written in Property, and its Atom is send via PropertyNotify +T} +.TE +.RE +.LP +The method to decide major/minor-transport-version is as follows: +.LP +.IP (1) +The client sends 0 as major/minor-transport-version to the IM Server. +The client must support all methods in Table D-3. +The client may send another number as major/minor-transport-version to +use other method than the above in the future. +.IP (2) +The IM Server sends its major/minor-transport-version number to +the client. The client sends data using the method specified by the +IM Server. +.IP (3) +If major/minor-transport-version number is not available, it is regarded +as 0. +.RE +.LP +.IP (*2) +dividing size between ClientMessage and Property +.RS +If data is sent via both of multi-CM and Property, specify the dividing +size between ClientMessage and Property. The data, which is smaller than +this size, is sent via multi-CM (or only-CM), and the data, which is +lager than this size, is sent via Property. +.RE +.RE +.LP +.sp +.LP +.B +read/write +.LP +.RS +The data is transferred via either ClientMessage or Window Property in +the X Window System. +.LP +.B +Format for the data from the Client to the IM Server +.LP +.RS +.B +ClientMessage +.LP +If data is sent via ClientMessage event, the format is as follows: +.LP +.ce +Table D-4; The ClientMessage event's format (first or middle) +.TS +tab(;); +l s | l +l l | l. +_ +.sp 6p +.B +Structure Member;Contents +.sp 6p +_ +.sp 6p +.R +int;type;ClientMessage +u_long;serial;Set by the X Window System +Bool;send_event;Set by the X Window System +Display;*display;The display to which connects +Window;window;IMS communication window ID +Atom;message_type;XInternAtom(display, ``_XIM_MOREDATA'', False) +int;format;8 +char;data.b[20];(read/write DATA : 20 byte) +.sp 6p +_ +.TE +.LP +.ce +Table D-5; The ClientMessage event's format (only or last) +.TS H +tab(;); +l s | l +l l | l. +_ +.sp 6p +.B +Structure Member;Contents +.sp 6p +_ +.sp 6p +.TH +.R +int;type;ClientMessage +u_long;serial;Set by the X Window System +Bool;send_event;Set by the X Window System +Display;*display;The display to which connects +Window;window;IMS communication window ID +Atom;message_type;XInternAtom(display, ``_XIM_PROTOCOL'', False) +int;format;8 +char;data.b[20];(read/write DATA : MAX 20 byte) (*1) +.sp 6p +_ +.TE +.IP (*1) +If the data is smaller than 20 byte, all data other than available data +must be 0. +.RE +.LP +.RS +.B +Property +.LP +In the case of large data, data will be sent via the Window Property +for the efficiency. There are the following two methods to notify +Property, and transport-version is decided which method is used. +.LP +.IP (1) +The XChangeProperty function is used to store data in the client +communication window, and Atom of the stored data is notified to the +IM Server via ClientMessage event. +.IP (2) +The XChangeProperty function is used to store data in the client +communication window, and Atom of the stored data is notified to the +IM Server via PropertyNotify event. +.LP +The arguments of the XChangeProperty are as follows: +.LP +.bp +.ce +Table D-6; The XChangeProperty event's format +.TS H +tab(:); +l s | l +l l | l. +_ +.sp 6p +.B +Argument:Contents +.sp 6p +_ +.sp 6p +.TH +.R +Display:*display:The display to which connects +Window:window:IMS communication window ID +Atom:property:read/write property Atom (*1) +Atom:type:XA_STRING +int:format:8 +int:mode:PropModeAppend +u_char:*data:read/write DATA +int:nelements:length of DATA +.sp 6p +_ +.TE +.LP +.IP (*1) +The read/write property ATOM allocates the following strings by +\fBXInternAtom\fP. +.RS +``_clientXXX'' +.RE +.LP +The client changes the property with the mode of PropModeAppend and +the IM Server will read it with the delete mode i.e. (delete = True). +.LP +If Atom is notified via ClientMessage event, the format of the ClientMessage +is as follows: +.LP +.ce +Table D-7; The ClientMessage event's format to send Atom of property +.TS H +tab(:); +l s | l +l l | l. +_ +.sp 6p +.B +Structure Member:Contents +.sp 6p +_ +.sp 6p +.TH +.R +int:type:ClientMessage +u_long:serial:Set by the X Window System +Bool:send_event:Set by the X Window System +Display:*display:The display to which connects +Window:window:IMS communication window ID +Atom:message_type:XInternAtom(display, ``_XIM_PROTOCOL'', False) +int:format:32 +long:data.l[0]:length of read/write property Atom +long:data.l[1]:read/write property Atom +.sp 6p +_ +.TE +.RE +.LP +.B +Format for the data from the IM Server to the Client +.LP +.RS +.B +ClientMessage +.LP +The format of the ClientMessage is as follows: +.LP +.ce +Table D-8; The ClientMessage event's format (first or middle) +.TS H +tab(;); +l s | l +l l | l. +_ +.sp 6p +.B +Structure Member;Contents +.sp 6p +_ +.sp 6p +.TH +.R +int;type;ClientMessage +u_long;serial;Set by the X Window System +Bool;send_event ;Set by the X Window System +Display;*display;The display to which connects +Window;window;client communication window ID +Atom;message_type;XInternAtom(display, ``_XIM_MOREDATA'', False) +int;format;8 +char;data.b[20];(read/write DATA : 20 byte) +.sp 6p +_ +.TE +.LP +.bp +.ce +Table D-9; The ClientMessage event's format (only or last) +.TS +tab(;); +l s | l +l l | l. +_ +.sp 6p +.B +Structure Member;Contents +.sp 6p +_ +.sp 6p +.R +int;type;ClientMessage +u_long;serial;Set by the X Window System +Bool;send_event ;Set by the X Window System +Display;*display;The display to which connects +Window;window;client communication window ID +Atom;message_type;XInternAtom(display, ``_XIM_PROTOCOL'', False) +int;format;8 +char;data.b[20];(read/write DATA : MAX 20 byte) (*1) +.sp 6p +_ +.TE +.LP +.IP (*1) +If the data size is smaller than 20 bytes, all data other than available +data must be 0. +.LP +.B +Property +.LP +In the case of large data, data will be sent via the Window Property +for the efficiency. There are the following two methods to notify +Property, and transport-version is decided which method is used. +.LP +.IP (1) +The XChangeProperty function is used to store data in the IMS +communication window, and Atom of the property is sent via the +ClientMessage event. +.IP (2) +The XChangeProperty function is used to store data in the IMS +communication window, and Atom of the property is sent via +PropertyNotify event. +.LP +The arguments of the XChangeProperty are as follows: +.LP +.ce +Table D-10; The XChangeProperty event's format +.TS H +tab(:); +l s | l +l l | l. +_ +.sp 6p +.B +Argument:Contents +.sp 6p +_ +.sp 6p +.TH +.R +Display:*display:The display which to connects +Window:window:client communication window ID +Atom:property:read/write property Atom (*1) +Atom:type:XA_STRING +int:format:8 +int:mode:PropModeAppend +u_char:*data:read/write DATA +int:nelements:length of DATA +.sp 6p +_ +.TE +.LP +.IP (*1) +The read/write property ATOM allocates some strings, which are not +allocated by the client, by \fBXInternAtom\fP. +.LP +The IM Server changes the property with the mode of PropModeAppend and +the client reads it with the delete mode, i.e. (delete = True). +.LP +If Atom is notified via ClientMessage event, the format of the ClientMessage +is as follows: +.LP +.bp +.ce +Table D-11; The ClientMessage event's format to send Atom of property +.TS H +tab(:); +l s | l +l l | l. +_ +.sp 6p +.B +Structure Member:Contents +.sp 6p +_ +.sp 6p +.TH +.R +int:type:ClientMessage +u_long:serial:Set by the X Window System +Bool:send_event:Set by the X Window System +Display:*display:The display to which connects +Window:window:client communication window ID +Atom:message_type:XInternAtom(display, ``_XIM_PROTOCOL'', False) +int:format:32 +long:data.l[0]:length of read/write property ATOM +long:data.l[1]:read/write property ATOM +.sp 6p +_ +.TE +.RE +.RE +.LP +.B +Closing Connection +.RS +.LP +If the client disconnect with the IM Server, shutdown function should +free the communication window properties and etc.. +.RE +.LP +.bp +.EH '''' +.OH '''' +.EF '''' +.OF '''' +.TC + |