10f8248bfSmrg<?xml version="1.0" encoding="UTF-8" ?>
20f8248bfSmrg<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
30f8248bfSmrg	  "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
4eb411b4bSmrg<chapter id='Interpreting_Key_Events'>
5e9fcaa8aSmrg<title>Interpreting Key Events</title>
6e9fcaa8aSmrg
7e9fcaa8aSmrg<para>
8e9fcaa8aSmrgXkb provides functions to help developers interpret key events without having
9e9fcaa8aSmrgto directly interpret Xkb data structures. Xkb also modifies the behavior of
10e9fcaa8aSmrgseveral core X library functions.
11e9fcaa8aSmrg</para>
12e9fcaa8aSmrg
13eb411b4bSmrg<sect1 id='Effects_of_Xkb_on_the_Core_X_Library'>
14e9fcaa8aSmrg<title>Effects of Xkb on the Core X Library</title>
15e9fcaa8aSmrg
16e9fcaa8aSmrg<para>
170f8248bfSmrgWhen support for Xkb is built into the X library, the
180f8248bfSmrg<function>XOpenDisplay</function>
190f8248bfSmrgfunction looks for a compatible version of Xkb on the server. If it finds a
200f8248bfSmrgcompatible version, it initializes the extension and enables
210f8248bfSmrg<firstterm>implicit support</firstterm>
220f8248bfSmrgfor Xkb in a number of X library functions. This makes it possible for clients
23e9fcaa8aSmrgto take advantage of nearly all Xkb features without having to be rewritten or
24e9fcaa8aSmrgeven recompiled, if they are built with shared libraries. This implicit support
25e9fcaa8aSmrgis invisible to most clients, but it can have side effects, so the extension
26e9fcaa8aSmrgincludes ways to control or disable it.
27e9fcaa8aSmrg</para>
28e9fcaa8aSmrg
29e9fcaa8aSmrg
30eb411b4bSmrg<sect2 id='Effects_of_Xkb_on_Event_State'>
31e9fcaa8aSmrg<title>Effects of Xkb on Event State</title>
32e9fcaa8aSmrg
33e9fcaa8aSmrg<para>
340f8248bfSmrgBecause
350f8248bfSmrg<function>XOpenDisplay</function>
360f8248bfSmrginitializes Xkb, some events contain an Xkb description of the keyboard state
370f8248bfSmrginstead of that normally used by the core protocol. See <link linkend="Xkb_State_to_Core_Protocol_State_Transformation">section 17.1.1</link> for more
38e9fcaa8aSmrginformation about the differences between Xkb keyboard state and that reported
39e9fcaa8aSmrgby the core protocol.
40e9fcaa8aSmrg</para>
41e9fcaa8aSmrg
42e9fcaa8aSmrg
43e9fcaa8aSmrg</sect2>
44eb411b4bSmrg<sect2 id='Effects_of_Xkb_on_MappingNotify_Events'>
45e9fcaa8aSmrg<title>Effects of Xkb on MappingNotify Events</title>
46e9fcaa8aSmrg
470f8248bfSmrg<indexterm zone="Effects_of_Xkb_on_MappingNotify_Events">
480f8248bfSmrg<primary>events</primary><secondary><symbol>MappingNotify</symbol></secondary></indexterm>
490f8248bfSmrg
50e9fcaa8aSmrg<para>
51e9fcaa8aSmrgWhen Xkb is missing or disabled, the X library tracks changes to the keyboard
520f8248bfSmrgmapping using
530f8248bfSmrg<symbol>MappingNotify</symbol>
540f8248bfSmrgevents. Whenever the keyboard mapping is changed, the server sends all clients
550f8248bfSmrga
560f8248bfSmrg<symbol>MappingNotify</symbol>
570f8248bfSmrgevent to report the change. When a client receives a
580f8248bfSmrg<symbol>MappingNotify</symbol>
590f8248bfSmrgevent, it is supposed to call
600f8248bfSmrg<function>XRefreshKeyboardMapping</function>
610f8248bfSmrgto update the keyboard description used internally by the X library.
62e9fcaa8aSmrg</para>
63e9fcaa8aSmrg
64e9fcaa8aSmrg
65e9fcaa8aSmrg<para>
660f8248bfSmrgThe X Keyboard Extension uses
670f8248bfSmrg<symbol>XkbMapNotify</symbol>
680f8248bfSmrgand
690f8248bfSmrg<symbol>XkbNewKeyboardNotify</symbol>
700f8248bfSmrgevents to track changes to the keyboard mapping. When an Xkb-aware client
710f8248bfSmrgreceives either event, it should call
720f8248bfSmrg<function>XkbRefreshKeyboardMapping</function>
730f8248bfSmrgto update the keyboard description used internally by the X library. To avoid
740f8248bfSmrgduplicate events, the X server does not send core protocol
750f8248bfSmrg<symbol>MappingNotify</symbol>
760f8248bfSmrgevents to a client that has selected for
770f8248bfSmrg<symbol>XkbMapNotify</symbol>
780f8248bfSmrgevents.
79e9fcaa8aSmrg</para>
80e9fcaa8aSmrg
81e9fcaa8aSmrg
82e9fcaa8aSmrg<para>
830f8248bfSmrgThe implicit support for Xkb selects for
840f8248bfSmrg<symbol>XkbMapNotify</symbol>
850f8248bfSmrgevents. This means that clients that do not explicitly use Xkb but that are
86e9fcaa8aSmrgusing a version of the X library that has implicit support for Xkb do not
870f8248bfSmrgreceive
880f8248bfSmrg<symbol>MappingNotify</symbol>
890f8248bfSmrgevents over the wire. Clients that were not written with Xkb in mind do not
90e9fcaa8aSmrgrecognize or properly handle the new Xkb events, so the implicit support
910f8248bfSmrgconverts them to
920f8248bfSmrg<symbol>MappingNotify</symbol>
930f8248bfSmrgevents that report approximately the same information, unless the client has
94e9fcaa8aSmrgexplicitly selected for the Xkb version of the event.
95e9fcaa8aSmrg</para>
96e9fcaa8aSmrg
97e9fcaa8aSmrg
98e9fcaa8aSmrg<para>
99e9fcaa8aSmrgAn Xkb-capable X server does not send events from keys that fall outside the
100e9fcaa8aSmrglegal range of keycodes expected by that client. Once the server sends a client
1010f8248bfSmrgan
1020f8248bfSmrg<symbol>XkbNewKeyboardNotify</symbol>
1030f8248bfSmrgevent, it reports events from all keys because it assumes that any client that
1040f8248bfSmrghas received an
1050f8248bfSmrg<symbol>XkbNewKeyboardNotify</symbol>
1060f8248bfSmrgevent expects key events from the new range of keycodes. The implicit support
1070f8248bfSmrgfor Xkb asks for
1080f8248bfSmrg<symbol>XkbNewKeyboardNotify</symbol>
1090f8248bfSmrgevents, so the range of keycodes reported to the client might vary without the
110e9fcaa8aSmrgclient’s knowledge. Most clients don’t really care about the range of legal
111e9fcaa8aSmrgkeycodes, but some clients maintain information about each key and might have
112e9fcaa8aSmrgproblems with events that come from unexpected keys. Such clients can set the
1130f8248bfSmrg<symbol>XkbLC_IgnoreNewKeyboards</symbol>
1140f8248bfSmrglibrary control (see <link linkend="IgnoreNewKeyboards">section 11.3.1</link>) to prevent the implicit support from
115e9fcaa8aSmrgrequesting notification of changes to the legal range of keycodes.
116e9fcaa8aSmrg</para>
117e9fcaa8aSmrg
118e9fcaa8aSmrg
119e9fcaa8aSmrg</sect2>
120eb411b4bSmrg<sect2 id='X_Library_Functions_Affected_by_Xkb'>
121e9fcaa8aSmrg<title>X Library Functions Affected by Xkb</title>
122e9fcaa8aSmrg
123e9fcaa8aSmrg<para>
124e9fcaa8aSmrgThe following X library functions are modified by Xkb:
125e9fcaa8aSmrg
1260f8248bfSmrg  <simplelist type='vert' columns='1'>
1270f8248bfSmrg    <member><function>XKeycodeToKeysym</function></member>
1280f8248bfSmrg    <member><function>XKeysymToKeycode</function></member>
1290f8248bfSmrg    <member><function>XLookupKeysym</function></member>
1300f8248bfSmrg    <member><function>XLookupString</function></member>
1310f8248bfSmrg    <member><function>XRefreshKeyboardMapping</function></member>
1320f8248bfSmrg    <member><function>XRebindKeysym</function></member>
1330f8248bfSmrg  </simplelist>
1340f8248bfSmrg</para>
135e9fcaa8aSmrg
136e9fcaa8aSmrg<para>
137e9fcaa8aSmrgThe implicit support for Xkb replaces a number of X library functions with
138e9fcaa8aSmrgversions that understand and use the X Keyboard Extension. In most cases, the
139e9fcaa8aSmrgsemantics of the new versions are identical to those of the old, but there are
140e9fcaa8aSmrgoccasional visible differences. This section lists all of the functions that
141e9fcaa8aSmrgare affected and the differences in behavior, if any, that are visible to
142e9fcaa8aSmrgclients.
143e9fcaa8aSmrg</para>
144e9fcaa8aSmrg
145e9fcaa8aSmrg
1460f8248bfSmrg<para id='XKeycodeToKeysym'>
1470f8248bfSmrgThe
1480f8248bfSmrg<olink targetdoc='libX11' targetptr='XKeycodeToKeysym'><function>XKeycodeToKeysym</function></olink>
1490f8248bfSmrg<indexterm significance="preferred" zone="XKeycodeToKeysym"><primary><function>XKeycodeToKeysym</function></primary></indexterm>
1500f8248bfSmrgfunction reports the keysym associated with a particular index for a single
151e9fcaa8aSmrgkey. The index specifies a column of symbols in the core keyboard mapping (that
1520f8248bfSmrgis, as reported by the core protocol
1530f8248bfSmrg<systemitem>GetKeyboardMapping</systemitem>
1540f8248bfSmrgrequest). The order of the symbols in the core mapping does not necessarily
1550f8248bfSmrgcorrespond to the order of the symbols used by Xkb; <link linkend="Xkb_Keyboard_Mapping_to_Core_Keyboard_Mapping_Transformations">section 17.1.3</link> describes
156e9fcaa8aSmrgthe differences.
157e9fcaa8aSmrg</para>
158e9fcaa8aSmrg
159e9fcaa8aSmrg
1600f8248bfSmrg<para id='XKeysymToKeycode'>
1610f8248bfSmrgThe
1620f8248bfSmrg<olink targetdoc='libX11' targetptr='XKeysymToKeycode'><function>XKeysymToKeycode</function></olink>
1630f8248bfSmrg<indexterm significance="preferred" zone="XKeysymToKeycode"><primary><function>XKeysymToKeycode</function></primary></indexterm>
1640f8248bfSmrgfunction reports a keycode to which a particular keysym is bound. When Xkb is
165e9fcaa8aSmrgmissing or disabled, this function looks in each column of the core keyboard
166e9fcaa8aSmrgmapping in turn and returns the lowest numbered key that matches in the lowest
167e9fcaa8aSmrgnumbered group. When Xkb is present, this function uses the Xkb ordering for
168e9fcaa8aSmrgsymbols instead.
169e9fcaa8aSmrg</para>
170e9fcaa8aSmrg
171e9fcaa8aSmrg
1720f8248bfSmrg<para id='XLookupKeysym'>
1730f8248bfSmrgThe
1740f8248bfSmrg<olink targetdoc='libX11' targetptr='XLookupKeysym'><function>XLookupKeysym</function></olink>
1750f8248bfSmrg<indexterm significance="preferred" zone="XLookupKeysym"><primary><function>XLookupKeysym</function></primary></indexterm>
1760f8248bfSmrgfunction reports the symbol in a specific column of the key associated with an
177e9fcaa8aSmrgevent. Whether or not Xkb is present, the column specifies an index into the
178e9fcaa8aSmrgcore symbol mapping.
179e9fcaa8aSmrg</para>
180e9fcaa8aSmrg
181e9fcaa8aSmrg
1820f8248bfSmrg<para id='XLookupString'>
1830f8248bfSmrgThe
1840f8248bfSmrg<olink targetdoc='libX11' targetptr='XLookupString'><function>XLookupString</function></olink>
1850f8248bfSmrg<indexterm significance="preferred" zone="XLookupString"><primary><function>XLookupString</function></primary></indexterm>
1860f8248bfSmrgfunction reports the symbol and string associated with a key event, taking
187e9fcaa8aSmrginto account the keycode and keyboard state as reported in the event. When Xkb
1880f8248bfSmrgis disabled or missing,
1890f8248bfSmrg<function>XLookupString</function>
1900f8248bfSmrguses the rules specified by the core protocol and reports only ISO Latin-1
1910f8248bfSmrgcharacters. When Xkb is present,
1920f8248bfSmrg<function>XLookupString</function>
1930f8248bfSmrguses the explicit keyboard group, key types, and rules specified by Xkb. When
1940f8248bfSmrgXkb is present,
1950f8248bfSmrg<function>XLookupString</function>
1960f8248bfSmrgis allowed, but not required, to return strings in character sets other than
197e9fcaa8aSmrgISO Latin-1, depending on the current locale. If any key bindings are defined,
1980f8248bfSmrg<function>XLookupString</function>
1990f8248bfSmrgdoes not use any consumed modifiers (see <link linkend="ConsumeLookupMods">section 11.1.2</link> and <link linkend="Key_Types">section 15.2</link>) to
200e9fcaa8aSmrgdetermine matching bindings.
201e9fcaa8aSmrg</para>
202e9fcaa8aSmrg
203e9fcaa8aSmrg
2040f8248bfSmrg<para id='XRefreshKeyboardMapping'>
2050f8248bfSmrgThe
2060f8248bfSmrg<olink targetdoc='libX11' targetptr='XRefreshKeyboardMapping'><function>XRefreshKeyboardMapping</function></olink>
2070f8248bfSmrg<indexterm significance="preferred" zone="XRefreshKeyboardMapping"><primary><function>XRefreshKeyboardMapping</function></primary></indexterm>
2080f8248bfSmrgfunction updates the X library’s internal representation of the keyboard to
2090f8248bfSmrgreflect changes reported via
2100f8248bfSmrg<symbol>MappingNotify</symbol>
2110f8248bfSmrgevents. When Xkb is missing or disabled, this function reloads the entire
212e9fcaa8aSmrgmodifier map or keyboard mapping. When Xkb is present, the implicit Xkb support
2130f8248bfSmrgkeeps track of the changed components reported by each
2140f8248bfSmrg<symbol>XkbMapNotify</symbol>
2150f8248bfSmrgevent and updates only those pieces of the keyboard description that have
216e9fcaa8aSmrgchanged. If the implicit support has not noted any keyboard mapping changes,
2170f8248bfSmrg<function>XRefreshKeyboardMapping</function>
2180f8248bfSmrgupdates the entire keyboard description.
219e9fcaa8aSmrg</para>
220e9fcaa8aSmrg
221e9fcaa8aSmrg
2220f8248bfSmrg<para id='XRebindKeysym'>
2230f8248bfSmrgThe
2240f8248bfSmrg<olink targetdoc='libX11' targetptr='XRebindKeysym'><function>XRebindKeysym</function></olink>
2250f8248bfSmrg<indexterm significance="preferred" zone="XRebindKeysym"><primary><function>XRebindKeysym</function></primary></indexterm>
2260f8248bfSmrgfunction associates a string with a keysym and a set of modifiers. Xkb does
227e9fcaa8aSmrgnot directly change this function, but it does affect the way that the state
2280f8248bfSmrgreported in the event is compared to the state specified to
2290f8248bfSmrg<function>XRebindKeysym</function>.
2300f8248bfSmrgWhen Xkb is missing or disabled,
2310f8248bfSmrg<function>XLookupString</function>
2320f8248bfSmrgreturns the specified string if the modifiers in the event exactly match the
233e9fcaa8aSmrgmodifiers from this call. When Xkb is present, any modifiers used to determine
234e9fcaa8aSmrgthe keysym are consumed and are not used to look up the string.
235e9fcaa8aSmrg</para>
236e9fcaa8aSmrg
237e9fcaa8aSmrg
238e9fcaa8aSmrg</sect2>
239e9fcaa8aSmrg</sect1>
240eb411b4bSmrg<sect1 id='Xkb_Event_and_Keymap_Functions'>
241e9fcaa8aSmrg<title>Xkb Event and Keymap Functions</title>
242e9fcaa8aSmrg
243e9fcaa8aSmrg<para>
244e9fcaa8aSmrgTo find the keysym bound to a particular key at a specified group and shift
2450f8248bfSmrglevel, use <function>XkbKeycodeToKeysym</function>.
246e9fcaa8aSmrg</para>
247e9fcaa8aSmrg
2480f8248bfSmrg<indexterm significance="preferred" zone="XkbKeycodeToKeysym"><primary><function>XkbKeycodeToKeysym</function></primary></indexterm>
2490f8248bfSmrg<funcsynopsis id="XkbKeycodeToKeysym">
2500f8248bfSmrg  <funcprototype>
2510f8248bfSmrg    <funcdef>KeySym <function>XkbKeycodeToKeysym</function></funcdef>
2520f8248bfSmrg<!-- (
2530f8248bfSmrg<parameter>dpy, kc, group, level</parameter>
2540f8248bfSmrg) -->
2550f8248bfSmrg
2560f8248bfSmrg    <paramdef>Display *<parameter>dpy</parameter></paramdef>
2570f8248bfSmrg    <paramdef>KeyCode <parameter>kc</parameter></paramdef>
2580f8248bfSmrg    <paramdef>unsigned int <parameter>group</parameter></paramdef>
2590f8248bfSmrg    <paramdef>unsigned int <parameter>level</parameter></paramdef>
2600f8248bfSmrg  </funcprototype>
2610f8248bfSmrg</funcsynopsis>
2620f8248bfSmrg<variablelist>
2630f8248bfSmrg  <varlistentry>
2640f8248bfSmrg    <term>
2650f8248bfSmrg      <parameter>dpy</parameter>
2660f8248bfSmrg    </term>
2670f8248bfSmrg    <listitem>
2680f8248bfSmrg      <para>
2690f8248bfSmrg        connection to X server
2700f8248bfSmrg      </para>
2710f8248bfSmrg    </listitem>
2720f8248bfSmrg  </varlistentry>
2730f8248bfSmrg  <varlistentry>
2740f8248bfSmrg    <term>
2750f8248bfSmrg      <parameter>kc</parameter>
2760f8248bfSmrg    </term>
2770f8248bfSmrg    <listitem>
2780f8248bfSmrg      <para>
2790f8248bfSmrg        key of interest
2800f8248bfSmrg      </para>
2810f8248bfSmrg    </listitem>
2820f8248bfSmrg  </varlistentry>
2830f8248bfSmrg  <varlistentry>
2840f8248bfSmrg    <term>
2850f8248bfSmrg      <parameter>group</parameter>
2860f8248bfSmrg    </term>
2870f8248bfSmrg    <listitem>
2880f8248bfSmrg      <para>
2890f8248bfSmrg        group of interest
2900f8248bfSmrg      </para>
2910f8248bfSmrg    </listitem>
2920f8248bfSmrg  </varlistentry>
2930f8248bfSmrg  <varlistentry>
2940f8248bfSmrg    <term>
2950f8248bfSmrg      <parameter>level</parameter>
2960f8248bfSmrg    </term>
2970f8248bfSmrg    <listitem>
2980f8248bfSmrg      <para>
2990f8248bfSmrg        shift level of interest
3000f8248bfSmrg      </para>
3010f8248bfSmrg    </listitem>
3020f8248bfSmrg  </varlistentry>
3030f8248bfSmrg</variablelist>
304e9fcaa8aSmrg
305e9fcaa8aSmrg<para>
3060f8248bfSmrg<function>XkbKeycodeToKeysym</function>
3070f8248bfSmrgreturns the keysym bound to a particular group and shift level for a
3080f8248bfSmrgparticular key on the core keyboard. If
3090f8248bfSmrg<parameter>kc</parameter>
3100f8248bfSmrgis not a legal keycode for the core keyboard, or if
3110f8248bfSmrg<parameter>group</parameter>
3120f8248bfSmrgor
3130f8248bfSmrg<parameter>level</parameter>
3140f8248bfSmrgare out of range for the specified key,
3150f8248bfSmrg<function>XkbKeycodeToKeysym</function>
3160f8248bfSmrgreturns
3170f8248bfSmrg<symbol>NoSymbol</symbol>.
318e9fcaa8aSmrg</para>
319e9fcaa8aSmrg
320e9fcaa8aSmrg
321e9fcaa8aSmrg<para>
322e9fcaa8aSmrgTo find the set of modifiers bound to a particular keysym on the core keyboard,
3230f8248bfSmrguse
3240f8248bfSmrg<function>XkbKeysymToModifiers</function>.
325e9fcaa8aSmrg</para>
326e9fcaa8aSmrg
327e9fcaa8aSmrg
3280f8248bfSmrg<indexterm significance="preferred" zone="XkbKeysymToModifiers"><primary><function>XkbKeysymToModifiers</function></primary></indexterm>
3290f8248bfSmrg<funcsynopsis id="XkbKeysymToModifiers">
3300f8248bfSmrg  <funcprototype>
3310f8248bfSmrg    <funcdef>unsigned int <function>XkbKeysymToModifiers</function></funcdef>
3320f8248bfSmrg<!-- (
3330f8248bfSmrg<parameter>dpy</parameter>,
3340f8248bfSmrg<parameter>ks</parameter>
3350f8248bfSmrg) -->
3360f8248bfSmrg
3370f8248bfSmrg    <paramdef>Display *<parameter>dpy</parameter></paramdef>
3380f8248bfSmrg    <paramdef>KeySym <parameter>ks</parameter></paramdef>
3390f8248bfSmrg  </funcprototype>
3400f8248bfSmrg</funcsynopsis>
3410f8248bfSmrg<variablelist>
3420f8248bfSmrg  <varlistentry>
3430f8248bfSmrg    <term>
3440f8248bfSmrg      <parameter>dpy</parameter>
3450f8248bfSmrg    </term>
3460f8248bfSmrg    <listitem>
3470f8248bfSmrg      <para>
3480f8248bfSmrg        connection to X server
3490f8248bfSmrg      </para>
3500f8248bfSmrg    </listitem>
3510f8248bfSmrg  </varlistentry>
3520f8248bfSmrg  <varlistentry>
3530f8248bfSmrg    <term>
3540f8248bfSmrg      <parameter>ks</parameter>
3550f8248bfSmrg    </term>
3560f8248bfSmrg    <listitem>
3570f8248bfSmrg      <para>
3580f8248bfSmrg        keysym of interest
3590f8248bfSmrg      </para>
3600f8248bfSmrg    </listitem>
3610f8248bfSmrg  </varlistentry>
3620f8248bfSmrg</variablelist>
363e9fcaa8aSmrg
364e9fcaa8aSmrg<para>
3650f8248bfSmrg<function>XkbKeysymToModifiers</function>
3660f8248bfSmrgfinds the set of modifiers currently bound to the keysym
3670f8248bfSmrg<parameter>ks</parameter>
3680f8248bfSmrgon the core keyboard. The value returned is the mask of modifiers bound to the
3690f8248bfSmrgkeysym
3700f8248bfSmrg<parameter>ks</parameter>.
3710f8248bfSmrgIf no modifiers are bound to the keysym,
3720f8248bfSmrg<function>XkbKeysymToModifiers</function>
3730f8248bfSmrgreturns zero; otherwise, it returns the inclusive OR of zero or more of the
3740f8248bfSmrgfollowing:
3750f8248bfSmrg<symbol>ShiftMask</symbol>,
3760f8248bfSmrg<symbol>ControlMask</symbol>,
3770f8248bfSmrg<symbol>LockMask</symbol>,
3780f8248bfSmrg<symbol>Mod1Mask</symbol>,
3790f8248bfSmrg<symbol>Mod2Mask</symbol>,
3800f8248bfSmrg<symbol>Mod3Mask</symbol>,
3810f8248bfSmrg<symbol>Mod4Mask</symbol>,
3820f8248bfSmrgand
3830f8248bfSmrg<symbol>Mod5Mask</symbol>.
384e9fcaa8aSmrg</para>
385e9fcaa8aSmrg
386e9fcaa8aSmrg
387e9fcaa8aSmrg<para>
3880f8248bfSmrgUse
3890f8248bfSmrg<function>XkbLookupKeySym</function>
3900f8248bfSmrgto find the symbol associated with a key for a particular state.
391e9fcaa8aSmrg</para>
392e9fcaa8aSmrg
393e9fcaa8aSmrg
3940f8248bfSmrg<indexterm significance="preferred" zone="XkbLookupKeySym"><primary><function>XkbLookupKeySym</function></primary></indexterm>
3950f8248bfSmrg<funcsynopsis id="XkbLookupKeySym">
3960f8248bfSmrg  <funcprototype>
3970f8248bfSmrg    <funcdef>Bool <function>XkbLookupKeySym</function></funcdef>
3980f8248bfSmrg<!-- (
3990f8248bfSmrg<parameter>dpy</parameter>,
4000f8248bfSmrg<parameter>key</parameter>,
4010f8248bfSmrg<parameter>state</parameter>,
4020f8248bfSmrg<parameter>mods_rtrn</parameter>,
4030f8248bfSmrg<parameter>sym_rtrn</parameter>
4040f8248bfSmrg) -->
4050f8248bfSmrg
4060f8248bfSmrg    <paramdef>Display *<parameter>dpy</parameter></paramdef>
4070f8248bfSmrg    <paramdef>KeyCode <parameter>key</parameter></paramdef>
4080f8248bfSmrg    <paramdef>unsigned int <parameter>state</parameter></paramdef>
4090f8248bfSmrg    <paramdef>unsigned int *<parameter>mods_rtrn</parameter></paramdef>
4100f8248bfSmrg    <paramdef>KeySym *<parameter>sym_rtrn</parameter></paramdef>
4110f8248bfSmrg  </funcprototype>
4120f8248bfSmrg</funcsynopsis>
4130f8248bfSmrg<variablelist>
4140f8248bfSmrg  <varlistentry>
4150f8248bfSmrg    <term>
4160f8248bfSmrg      <parameter>dpy</parameter>
4170f8248bfSmrg    </term>
4180f8248bfSmrg    <listitem>
4190f8248bfSmrg      <para>
4200f8248bfSmrg        connection to X server
4210f8248bfSmrg      </para>
4220f8248bfSmrg    </listitem>
4230f8248bfSmrg  </varlistentry>
4240f8248bfSmrg  <varlistentry>
4250f8248bfSmrg    <term>
4260f8248bfSmrg      <parameter>key</parameter>
4270f8248bfSmrg    </term>
4280f8248bfSmrg    <listitem>
4290f8248bfSmrg      <para>
4300f8248bfSmrg        key for which symbols are to be found
4310f8248bfSmrg      </para>
4320f8248bfSmrg    </listitem>
4330f8248bfSmrg  </varlistentry>
4340f8248bfSmrg  <varlistentry>
4350f8248bfSmrg    <term>
4360f8248bfSmrg      <parameter>state</parameter>
4370f8248bfSmrg    </term>
4380f8248bfSmrg    <listitem>
4390f8248bfSmrg      <para>
4400f8248bfSmrg        state for which symbol should be found
4410f8248bfSmrg      </para>
4420f8248bfSmrg    </listitem>
4430f8248bfSmrg  </varlistentry>
4440f8248bfSmrg  <varlistentry>
4450f8248bfSmrg    <term>
4460f8248bfSmrg      <parameter>mods_rtrn</parameter>
4470f8248bfSmrg    </term>
4480f8248bfSmrg    <listitem>
4490f8248bfSmrg      <para>
4500f8248bfSmrg        backfilled with consumed modifiers
4510f8248bfSmrg      </para>
4520f8248bfSmrg    </listitem>
4530f8248bfSmrg  </varlistentry>
4540f8248bfSmrg  <varlistentry>
4550f8248bfSmrg    <term>
4560f8248bfSmrg      <parameter>sym_rtrn</parameter>
4570f8248bfSmrg    </term>
4580f8248bfSmrg    <listitem>
4590f8248bfSmrg      <para>
4600f8248bfSmrg        backfilled with symbol associated with key + state
4610f8248bfSmrg      </para>
4620f8248bfSmrg    </listitem>
4630f8248bfSmrg  </varlistentry>
4640f8248bfSmrg</variablelist>
465e9fcaa8aSmrg
466e9fcaa8aSmrg<para>
4670f8248bfSmrg<function>XkbLookupKeySym</function>
4680f8248bfSmrgis the equivalent of the core
4690f8248bfSmrg<symbol>XLookupKeySym</symbol>
4700f8248bfSmrgfunction. For the core keyboard, given a keycode
4710f8248bfSmrg<parameter>key</parameter>
4720f8248bfSmrgand an Xkb state
4730f8248bfSmrg<parameter>state</parameter>,
4740f8248bfSmrg<function>XkbLookupKeySym</function>
4750f8248bfSmrgreturns the symbol associated with the key  in
4760f8248bfSmrg<parameter>sym_rtrn</parameter>
4770f8248bfSmrgand the list of modifiers that should still be applied in
4780f8248bfSmrg<parameter>mods_rtrn</parameter>.
4790f8248bfSmrgThe
4800f8248bfSmrg<parameter>state</parameter>
4810f8248bfSmrgparameter is the state from a
4820f8248bfSmrg<symbol>KeyPress</symbol>
4830f8248bfSmrgor
4840f8248bfSmrg<symbol>KeyRelease</symbol>
4850f8248bfSmrgevent.
4860f8248bfSmrg<function>XkbLookupKeySym</function>
4870f8248bfSmrgreturns
4880f8248bfSmrg<symbol>True</symbol>
4890f8248bfSmrgif it succeeds.
490e9fcaa8aSmrg</para>
491e9fcaa8aSmrg
492e9fcaa8aSmrg
493e9fcaa8aSmrg<para>
4940f8248bfSmrgUse
4950f8248bfSmrg<function>XkbLookupKeyBinding</function>
4960f8248bfSmrgto find the string bound to a key by
4970f8248bfSmrg<function>XRebindKeysym</function>.
4980f8248bfSmrg<function>XkbLookupKeyBinding</function>
4990f8248bfSmrgis the equivalent of the core
5000f8248bfSmrg<function>XLookupString</function>
5010f8248bfSmrgfunction.
502e9fcaa8aSmrg</para>
503e9fcaa8aSmrg
504e9fcaa8aSmrg
5050f8248bfSmrg<indexterm significance="preferred" zone="XkbLookupKeyBinding"><primary><function>XkbLookupKeyBinding</function></primary></indexterm>
5060f8248bfSmrg<funcsynopsis id="XkbLookupKeyBinding">
5070f8248bfSmrg  <funcprototype>
5080f8248bfSmrg    <funcdef>int <function>XkbLookupKeyBinding</function></funcdef>
5090f8248bfSmrg<!-- (
5100f8248bfSmrg<parameter>dpy</parameter>,
5110f8248bfSmrg<parameter>sym</parameter>,
5120f8248bfSmrg<parameter>state</parameter>,
5130f8248bfSmrg<parameter>buf</parameter>,
5140f8248bfSmrg<parameter>nbytes</parameter>,
5150f8248bfSmrg<parameter>extra_rtrn</parameter>
5160f8248bfSmrg) -->
5170f8248bfSmrg
5180f8248bfSmrg    <paramdef>Display *<parameter>dpy</parameter></paramdef>
5190f8248bfSmrg    <paramdef>KeySym <parameter>sym</parameter></paramdef>
5200f8248bfSmrg    <paramdef>unsigned int <parameter>state</parameter></paramdef>
5210f8248bfSmrg    <paramdef>char *<parameter>buf</parameter></paramdef>
5220f8248bfSmrg    <paramdef>int <parameter>nbytes</parameter></paramdef>
5230f8248bfSmrg    <paramdef>int *<parameter>extra_rtrn</parameter></paramdef>
5240f8248bfSmrg  </funcprototype>
5250f8248bfSmrg</funcsynopsis>
5260f8248bfSmrg<variablelist>
5270f8248bfSmrg  <varlistentry>
5280f8248bfSmrg    <term>
5290f8248bfSmrg      <parameter>dpy</parameter>
5300f8248bfSmrg    </term>
5310f8248bfSmrg    <listitem>
5320f8248bfSmrg      <para>
5330f8248bfSmrg        connection to server
5340f8248bfSmrg      </para>
5350f8248bfSmrg    </listitem>
5360f8248bfSmrg  </varlistentry>
5370f8248bfSmrg  <varlistentry>
5380f8248bfSmrg    <term>
5390f8248bfSmrg      <parameter>sym</parameter>
5400f8248bfSmrg    </term>
5410f8248bfSmrg    <listitem>
5420f8248bfSmrg      <para>
5430f8248bfSmrg        symbol to be looked up
5440f8248bfSmrg      </para>
5450f8248bfSmrg    </listitem>
5460f8248bfSmrg  </varlistentry>
5470f8248bfSmrg  <varlistentry>
5480f8248bfSmrg    <term>
5490f8248bfSmrg      <parameter>state</parameter>
5500f8248bfSmrg    </term>
5510f8248bfSmrg    <listitem>
5520f8248bfSmrg      <para>
5530f8248bfSmrg        state for which string is to be looked up
5540f8248bfSmrg      </para>
5550f8248bfSmrg    </listitem>
5560f8248bfSmrg  </varlistentry>
5570f8248bfSmrg  <varlistentry>
5580f8248bfSmrg    <term>
5590f8248bfSmrg      <parameter>buf</parameter>
5600f8248bfSmrg    </term>
5610f8248bfSmrg    <listitem>
5620f8248bfSmrg      <para>
5630f8248bfSmrg        buffer into which returned string is written
5640f8248bfSmrg      </para>
5650f8248bfSmrg    </listitem>
5660f8248bfSmrg  </varlistentry>
5670f8248bfSmrg  <varlistentry>
5680f8248bfSmrg    <term>
5690f8248bfSmrg      <parameter>nbytes</parameter>
5700f8248bfSmrg    </term>
5710f8248bfSmrg    <listitem>
5720f8248bfSmrg      <para>
5730f8248bfSmrg        size of buffer in bytes
5740f8248bfSmrg      </para>
5750f8248bfSmrg    </listitem>
5760f8248bfSmrg  </varlistentry>
5770f8248bfSmrg  <varlistentry>
5780f8248bfSmrg    <term>
5790f8248bfSmrg      <parameter>extra_rtrn</parameter>
5800f8248bfSmrg    </term>
5810f8248bfSmrg    <listitem>
5820f8248bfSmrg      <para>
5830f8248bfSmrg        backfilled with number bytes overflow
5840f8248bfSmrg      </para>
5850f8248bfSmrg    </listitem>
5860f8248bfSmrg  </varlistentry>
5870f8248bfSmrg</variablelist>
588e9fcaa8aSmrg
589e9fcaa8aSmrg<para>
5900f8248bfSmrg<function>XRebindKeysym</function>
5910f8248bfSmrgbinds an ASCII string to a specified keysym, so that the string and keysym are
592e9fcaa8aSmrgreturned when the key is pressed and a specified list of modifiers are also
5930f8248bfSmrgbeing held down.
5940f8248bfSmrg<function>XkbLookupKeyBinding</function>
5950f8248bfSmrgreturns in
5960f8248bfSmrg<parameter>buf</parameter>
5970f8248bfSmrgthe string associated with the keysym
5980f8248bfSmrg<parameter>sym</parameter>
5990f8248bfSmrgand modifier state
6000f8248bfSmrg<parameter>state</parameter>.
6010f8248bfSmrg<parameter>buf</parameter>
6020f8248bfSmrgis
6030f8248bfSmrg<symbol>NULL</symbol>
6040f8248bfSmrgterminated unless there’s an overflow. If the string returned is larger than
6050f8248bfSmrg<parameter>nbytes</parameter>,
6060f8248bfSmrga count of bytes that does not fit into the buffer is returned in extra_rtrn.
6070f8248bfSmrg<function>XkbTranslateKeySym</function>
6080f8248bfSmrgreturns the number of bytes that it placed into
6090f8248bfSmrg<parameter>buf</parameter>.
610e9fcaa8aSmrg</para>
611e9fcaa8aSmrg
612e9fcaa8aSmrg
613e9fcaa8aSmrg<para>
614e9fcaa8aSmrgTo find the string and symbol associated with a keysym for a given keyboard
6150f8248bfSmrgstate, use
6160f8248bfSmrg<function>XkbTranslateKeySym</function>.
617e9fcaa8aSmrg</para>
618e9fcaa8aSmrg
619e9fcaa8aSmrg
6200f8248bfSmrg<indexterm significance="preferred" zone="XkbTranslateKeySym"><primary><function>XkbTranslateKeySym</function></primary></indexterm>
6210f8248bfSmrg<funcsynopsis id="XkbTranslateKeySym">
6220f8248bfSmrg  <funcprototype>
6230f8248bfSmrg    <funcdef>int <function>XkbTranslateKeySym</function></funcdef>
6240f8248bfSmrg<!-- (
6250f8248bfSmrg<parameter>dpy</parameter>,
6260f8248bfSmrg<parameter>sym_inout</parameter>,
6270f8248bfSmrg<parameter>mods</parameter>,
6280f8248bfSmrg<parameter>buf</parameter>,
6290f8248bfSmrg<parameter>nbytes</parameter>,
6300f8248bfSmrg<parameter>extra_rtrn</parameter>
6310f8248bfSmrg) -->
6320f8248bfSmrg
6330f8248bfSmrg    <paramdef>Display *<parameter>dpy</parameter></paramdef>
6340f8248bfSmrg    <paramdef>KeySym *<parameter>sym_inout</parameter></paramdef>
6350f8248bfSmrg    <paramdef>unsigned int <parameter>mods</parameter></paramdef>
6360f8248bfSmrg    <paramdef>char *<parameter>buf</parameter></paramdef>
6370f8248bfSmrg    <paramdef>int <parameter>nbytes</parameter></paramdef>
6380f8248bfSmrg    <paramdef>int *<parameter>extra_rtrn</parameter></paramdef>
6390f8248bfSmrg  </funcprototype>
6400f8248bfSmrg</funcsynopsis>
6410f8248bfSmrg<variablelist>
6420f8248bfSmrg  <varlistentry>
6430f8248bfSmrg    <term>
6440f8248bfSmrg      <parameter>dpy</parameter>
6450f8248bfSmrg    </term>
6460f8248bfSmrg    <listitem>
6470f8248bfSmrg      <para>
6480f8248bfSmrg        connection to X server
6490f8248bfSmrg      </para>
6500f8248bfSmrg    </listitem>
6510f8248bfSmrg  </varlistentry>
6520f8248bfSmrg  <varlistentry>
6530f8248bfSmrg    <term>
6540f8248bfSmrg      <parameter>sym_inout</parameter>
6550f8248bfSmrg    </term>
6560f8248bfSmrg    <listitem>
6570f8248bfSmrg      <para>
6580f8248bfSmrg        symbol to be translated; result of translation
6590f8248bfSmrg      </para>
6600f8248bfSmrg    </listitem>
6610f8248bfSmrg  </varlistentry>
6620f8248bfSmrg  <varlistentry>
6630f8248bfSmrg    <term>
6640f8248bfSmrg      <parameter>mods</parameter>
6650f8248bfSmrg    </term>
6660f8248bfSmrg    <listitem>
6670f8248bfSmrg      <para>
6680f8248bfSmrg        modifiers to apply to <parameter>sym_inout</parameter>
6690f8248bfSmrg      </para>
6700f8248bfSmrg    </listitem>
6710f8248bfSmrg  </varlistentry>
6720f8248bfSmrg  <varlistentry>
6730f8248bfSmrg    <term>
6740f8248bfSmrg      <parameter>buf</parameter>
6750f8248bfSmrg    </term>
6760f8248bfSmrg    <listitem>
6770f8248bfSmrg      <para>
6780f8248bfSmrg        buffer into which returned string is written
6790f8248bfSmrg      </para>
6800f8248bfSmrg    </listitem>
6810f8248bfSmrg  </varlistentry>
6820f8248bfSmrg  <varlistentry>
6830f8248bfSmrg    <term>
6840f8248bfSmrg      <parameter>nbytes</parameter>
6850f8248bfSmrg    </term>
6860f8248bfSmrg    <listitem>
6870f8248bfSmrg      <para>
6880f8248bfSmrg        size of buffer in bytes
6890f8248bfSmrg      </para>
6900f8248bfSmrg    </listitem>
6910f8248bfSmrg  </varlistentry>
6920f8248bfSmrg  <varlistentry>
6930f8248bfSmrg    <term>
6940f8248bfSmrg      <parameter>extra_rtrn</parameter>
6950f8248bfSmrg    </term>
6960f8248bfSmrg    <listitem>
6970f8248bfSmrg      <para>
6980f8248bfSmrg        number of bytes overflow
6990f8248bfSmrg      </para>
7000f8248bfSmrg    </listitem>
7010f8248bfSmrg  </varlistentry>
7020f8248bfSmrg</variablelist>
703e9fcaa8aSmrg
704e9fcaa8aSmrg<para>
7050f8248bfSmrg<function>XkbTranslateKeySym</function>
7060f8248bfSmrgapplies the transformations specified in
7070f8248bfSmrg<parameter>mods</parameter>
7080f8248bfSmrgto the symbol specified by
7090f8248bfSmrg<parameter>sym_inout</parameter>.
7100f8248bfSmrgIt returns in
7110f8248bfSmrg<parameter>buf</parameter>
7120f8248bfSmrgthe string, if any, associated with the keysym for the current locale. If the
7130f8248bfSmrgtransformations in
7140f8248bfSmrg<parameter>mods</parameter>
7150f8248bfSmrgchanges the keysym,
7160f8248bfSmrg<parameter>sym_inout</parameter>
7170f8248bfSmrgis updated accordingly. If the string returned is larger than
7180f8248bfSmrg<parameter>nbytes</parameter>,
7190f8248bfSmrga count of bytes that does not fit into the buffer is returned in extra_rtrn.
7200f8248bfSmrg<function>XkbTranslateKeySym</function>
7210f8248bfSmrgreturns the number of bytes it placed into
7220f8248bfSmrg<parameter>buf</parameter>.
723e9fcaa8aSmrg</para>
724e9fcaa8aSmrg
725e9fcaa8aSmrg
726e9fcaa8aSmrg<para>
727e9fcaa8aSmrgTo update the keyboard description that is internal to the X library, use
7280f8248bfSmrg<function>XkbRefreshKeyboardMapping</function>.
729e9fcaa8aSmrg</para>
730e9fcaa8aSmrg
731e9fcaa8aSmrg
7320f8248bfSmrg<indexterm significance="preferred" zone="XkbRefreshKeyboardMapping"><primary><function>XkbRefreshKeyboardMapping</function></primary></indexterm>
7330f8248bfSmrg<funcsynopsis id="XkbRefreshKeyboardMapping">
7340f8248bfSmrg  <funcprototype>
7350f8248bfSmrg    <funcdef>Status <function>XkbRefreshKeyboardMapping</function></funcdef>
7360f8248bfSmrg<!-- (
7370f8248bfSmrg<parameter>event)</parameter> -->
7380f8248bfSmrg
7390f8248bfSmrg    <paramdef>XkbMapNotifyEvent *<parameter>event</parameter></paramdef>
7400f8248bfSmrg  </funcprototype>
7410f8248bfSmrg</funcsynopsis>
7420f8248bfSmrg<variablelist>
7430f8248bfSmrg  <varlistentry>
7440f8248bfSmrg    <term>
7450f8248bfSmrg      <parameter>event</parameter>
7460f8248bfSmrg    </term>
7470f8248bfSmrg    <listitem>
7480f8248bfSmrg      <para>
7490f8248bfSmrg        event initiating remapping
7500f8248bfSmrg      </para>
7510f8248bfSmrg    </listitem>
7520f8248bfSmrg  </varlistentry>
7530f8248bfSmrg</variablelist>
754e9fcaa8aSmrg
755e9fcaa8aSmrg<para>
7560f8248bfSmrg<function>XkbRefreshKeyboardMapping</function>
7570f8248bfSmrgis the Xkb equivalent of the core
7580f8248bfSmrg<function>XRefreshKeyboardMapping</function>
7590f8248bfSmrgfunction. It requests that the X server send the current key mapping
7600f8248bfSmrginformation to this client. A client usually invokes
7610f8248bfSmrg<function>XkbRefreshKeyboardMapping</function>
7620f8248bfSmrgafter receiving an
7630f8248bfSmrg<symbol>XkbMapNotify</symbol>
7640f8248bfSmrgevent.
7650f8248bfSmrg<function>XkbRefreshKeyboardMapping</function>
7660f8248bfSmrgreturns
7670f8248bfSmrg<symbol>Success</symbol>
7680f8248bfSmrgif it succeeds and
7690f8248bfSmrg<errorname>BadMatch</errorname>
7700f8248bfSmrgif the event is not an Xkb event.
771e9fcaa8aSmrg</para>
772e9fcaa8aSmrg
773e9fcaa8aSmrg
774e9fcaa8aSmrg<para>
7750f8248bfSmrgThe
7760f8248bfSmrg<symbol>XkbMapNotify</symbol>
7770f8248bfSmrgevent can be generated when some client calls
7780f8248bfSmrg<function>XkbSetMap</function>,
7790f8248bfSmrg<function>XkbChangeMap</function>,
7800f8248bfSmrg<function>XkbGetKeyboardByName</function>,
7810f8248bfSmrgor any of the standard X library functions that change the keyboard mapping
782e9fcaa8aSmrgor modifier mapping.
783e9fcaa8aSmrg</para>
784e9fcaa8aSmrg
785e9fcaa8aSmrg
786e9fcaa8aSmrg<para>
7870f8248bfSmrgTo translate a keycode to a key symbol and modifiers, use
7880f8248bfSmrg<function>XkbTranslateKeyCode</function>.
789e9fcaa8aSmrg</para>
790e9fcaa8aSmrg
791e9fcaa8aSmrg
7920f8248bfSmrg<indexterm significance="preferred" zone="XkbTranslateKeyCode"><primary><function>XkbTranslateKeyCode</function></primary></indexterm>
7930f8248bfSmrg<funcsynopsis id="XkbTranslateKeyCode">
7940f8248bfSmrg  <funcprototype>
7950f8248bfSmrg    <funcdef>Bool <function>XkbTranslateKeyCode</function></funcdef>
7960f8248bfSmrg<!-- (
7970f8248bfSmrg<parameter>xkb, key, mods, mods_rtrn, keysym_rtrn)</parameter> -->
7980f8248bfSmrg
7990f8248bfSmrg    <paramdef>XkbDescPtr <parameter>xkb</parameter></paramdef>
8000f8248bfSmrg    <paramdef>KeyCode <parameter>key</parameter></paramdef>
8010f8248bfSmrg    <paramdef>unsigned int <parameter>mods</parameter></paramdef>
8020f8248bfSmrg    <paramdef>unsigned int *<parameter>mods_rtrn</parameter></paramdef>
8030f8248bfSmrg    <paramdef>KeySym *<parameter>keysym_rtrn</parameter></paramdef>
8040f8248bfSmrg  </funcprototype>
8050f8248bfSmrg</funcsynopsis>
8060f8248bfSmrg<variablelist>
8070f8248bfSmrg  <varlistentry>
8080f8248bfSmrg    <term>
8090f8248bfSmrg      <parameter>xkb</parameter>
8100f8248bfSmrg    </term>
8110f8248bfSmrg    <listitem>
8120f8248bfSmrg      <para>
8130f8248bfSmrg        keyboard description to use for translation
8140f8248bfSmrg      </para>
8150f8248bfSmrg    </listitem>
8160f8248bfSmrg  </varlistentry>
8170f8248bfSmrg  <varlistentry>
8180f8248bfSmrg    <term>
8190f8248bfSmrg      <parameter>key</parameter>
8200f8248bfSmrg    </term>
8210f8248bfSmrg    <listitem>
8220f8248bfSmrg      <para>
8230f8248bfSmrg        keycode to translate
8240f8248bfSmrg      </para>
8250f8248bfSmrg    </listitem>
8260f8248bfSmrg  </varlistentry>
8270f8248bfSmrg  <varlistentry>
8280f8248bfSmrg    <term>
8290f8248bfSmrg      <parameter>mods</parameter>
8300f8248bfSmrg    </term>
8310f8248bfSmrg    <listitem>
8320f8248bfSmrg      <para>
8330f8248bfSmrg        modifiers to apply when translating <parameter>key</parameter>
8340f8248bfSmrg      </para>
8350f8248bfSmrg    </listitem>
8360f8248bfSmrg  </varlistentry>
8370f8248bfSmrg  <varlistentry>
8380f8248bfSmrg    <term>
8390f8248bfSmrg      <parameter>mods_rtrn</parameter>
8400f8248bfSmrg    </term>
8410f8248bfSmrg    <listitem>
8420f8248bfSmrg      <para>
8430f8248bfSmrg        backfilled with consumed modifiers
8440f8248bfSmrg      </para>
8450f8248bfSmrg    </listitem>
8460f8248bfSmrg  </varlistentry>
8470f8248bfSmrg  <varlistentry>
8480f8248bfSmrg    <term>
8490f8248bfSmrg      <parameter>keysym_rtrn</parameter>
8500f8248bfSmrg    </term>
8510f8248bfSmrg    <listitem>
8520f8248bfSmrg      <para>
8530f8248bfSmrg        keysym resulting from translation
8540f8248bfSmrg      </para>
8550f8248bfSmrg    </listitem>
8560f8248bfSmrg  </varlistentry>
8570f8248bfSmrg</variablelist>
858e9fcaa8aSmrg
859e9fcaa8aSmrg<para>
8600f8248bfSmrg<parameter>mods_rtrn</parameter>
8610f8248bfSmrgis backfilled with the modifiers consumed by the translation process.
8620f8248bfSmrg<parameter>mods</parameter>
8630f8248bfSmrgis a bitwise inclusive OR of the legal modifier masks:
8640f8248bfSmrg<symbol>ShiftMask</symbol>,
8650f8248bfSmrg<symbol>LockMask</symbol>,
8660f8248bfSmrg<symbol>ControlMask</symbol>,
8670f8248bfSmrg<symbol>Mod1Mask</symbol>,
8680f8248bfSmrg<symbol>Mod2Mask</symbol>,
8690f8248bfSmrg<symbol>Mod3Mask</symbol>,
8700f8248bfSmrg<symbol>Mod4Mask</symbol>,
8710f8248bfSmrg<symbol>Mod5Mask</symbol>.
8720f8248bfSmrgThe
8730f8248bfSmrg<emphasis>AlwaysConsumeShiftAndLock</emphasis>
8740f8248bfSmrglibrary control (see <link linkend="AlwaysConsumeShiftAndLock">section 11.1.3</link>), if enabled, causes
8750f8248bfSmrg<function>XkbTranslateKeyCode</function>
8760f8248bfSmrgto consume shift and lock.
8770f8248bfSmrg<function>XkbTranslateKeyCode</function>
8780f8248bfSmrgreturns
8790f8248bfSmrg<symbol>True</symbol>
8800f8248bfSmrgif the translation resulted in a keysym, and
8810f8248bfSmrg<symbol>False</symbol>
8820f8248bfSmrgif it resulted in
8830f8248bfSmrg<symbol>NoSymbol</symbol>.
884e9fcaa8aSmrg</para>
885e9fcaa8aSmrg</sect1>
886e9fcaa8aSmrg</chapter>
887