# Input Method (GUI)
[GUI API]

Input method support on window systems. More...

## Data Structures
struct | MInputGUIArgIC
| Type of the argument to the function minput_create_ic(). More...
struct | MInputXIMArgIM
| Structure pointed to by the argument arg of the function minput_open_im(). More...
struct | MInputXIMArgIC
| Structure pointed to by the argument arg of the function minput_create_ic(). More...
## Functions
MSymbol | minput_event_to_key (MFrame *frame, void *event)
| Convert an event to an input key.
## Variables
MInputDriver | minput_gui_driver
| Input driver for internal input methods on window systems.
MSymbol | Mxim
| Symbol of the name "xim".
MInputDriver | minput_xim_driver
| Input method driver for XIM.

## Detailed Description

Input method support on window systems.

The input driver `minput_gui_driver` is provided for internal input methods that is useful on window systems. It displays preedit text and status text at the inputting spot. See the documentation of `minput_gui_driver` for more details.

In the m17n-X library, the foreign input method of name `Mxim` is provided. It uses XIM (X Input Method) as a background input engine. The symbol `Mxim` has a property `Minput_driver` whose value is a pointer to the input driver `minput_xim_driver`. See the documentation of `minput_xim_driver` for more details.

## Function Documentation

MSymbol minput_event_to_key | ( | MFrame * | frame,
|  | void * | event |
| ) |  |  |

Convert an event to an input key.

The minput_event_to_key() function returns the input key corresponding to event event on frame by a window system dependent manner.

In the m17n-X library, event must be a pointer to the structure `XKeyEvent`, and it is handled as below.

At first, the keysym name of event is acquired by the function `XKeysymToString`. Then, the name is modified as below.

If the name is one of "a" .. "z" and event has a Shift modifier, the name is converted to "A" .. "Z" respectively, and the Shift modifier is cleared.

If the name is one byte length and event has a Control modifier, the byte is bitwise anded by 0x1F and the Control modifier is cleared.

If event still has modifiers, the name is preceded by "S-" (Shift), "C-" (Control), "M-" (Meta), "A-" (Alt), "s-" (Super), and/or "H-" (Hyper) in this order.

For instance, if the keysym name is "a" and the event has Shift, Meta, and Hyper modifiers, the resulting name is "M-H-A".

At last, a symbol who has the name is returned.

## Variable Documentation

MInputDriver minput_gui_driver

Input driver for internal input methods on window systems.

The input driver `minput_gui_driver` is for internal input methods to be used on window systems.

It creates sub-windows for a preedit text and a status text, and displays them at the input spot set by the function minput_set_spot().

The macro M17N_INIT() set the variable `minput_driver` to the pointer to this driver so that all internal input methods use it.

Therefore, unless `minput_driver` is changed from the default, the driver dependent arguments to the functions whose name begin with minput_ must are treated as follows.

The argument arg of the function minput_open_im() is ignored.

The argument arg of the function minput_create_ic() must be a pointer to the structure `MInputGUIArgIC`. See the documentation of `MInputGUIArgIC` for more details.

If the argument key of function minput_filter() is `Mnil`, the argument arg must be a pointer to the object of type `XEvent`. In that case, key is generated from arg.

The argument arg of the function minput_lookup() must be the same one as that of the function minput_filter().

MSymbol Mxim

Symbol of the name "xim".

The variable Mxim is a symbol of name "xim". It is a name of the input method driver minput_xim_driver.

MInputDriver minput_xim_driver

Initial value:

      { xim_open_im, xim_close_im, xim_create_ic, xim_destroy_ic,
        xim_filter, xim_lookup, NULL }

Input method driver for XIM.

The driver minput_xim_driver is for the foreign input method of name Mxim. It uses XIM (X Input Methods) as a background input engine.

As the symbol Mxim has property Minput_driver whose value is a pointer to this driver, the input method of language Mnil and name Mxim uses this driver.

Therefore, for such input methods, the driver dependent arguments to the functions whose name begin with minput_ must be as follows.

The argument arg of the function minput_open_im() must be a pointer to the structure MInputXIMArgIM. See the documentation of MInputXIMArgIM for more details.

The argument arg of the function minput_create_ic() must be a pointer to the structure MInputXIMArgIC. See the documentation of MInputXIMArgIC for more details.

The argument arg of the function minput_filter() must be a pointer to the structure `XEvent`. The argument key is ignored.

The argument arg of the function minput_lookup() must be the same one as that of the function minput_filter(). The argument key is ignored.