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='Overview'>
5e9fcaa8aSmrg<title>Overview</title>
6e9fcaa8aSmrg
7e9fcaa8aSmrg<para>
8e9fcaa8aSmrgThe X Keyboard Extension provides capabilities that are lacking or are
9e9fcaa8aSmrgcumbersome in the core X protocol.
10e9fcaa8aSmrg</para>
11e9fcaa8aSmrg
12eb411b4bSmrg<sect1 id='Core_X_Protocol_Support_for_Keyboards'>
13e9fcaa8aSmrg<title>Core X Protocol Support for Keyboards</title>
14e9fcaa8aSmrg
15e9fcaa8aSmrg<para>
16e9fcaa8aSmrgThe core X protocol specifies the ways that the
170f8248bfSmrg<symbol>Shift</symbol>,
180f8248bfSmrg<symbol>Control</symbol>, and
190f8248bfSmrg<symbol>Lock</symbol>
20e9fcaa8aSmrgmodifiers and the modifiers bound to the
210f8248bfSmrg<keysym>Mode_switch</keysym> or
220f8248bfSmrg<keysym>Num_Lock</keysym>
23e9fcaa8aSmrgkeysyms interact to generate keysyms and characters. The core protocol also
24e9fcaa8aSmrgallows users to specify that a key affects one or more modifiers. This behavior
25e9fcaa8aSmrgis simple and fairly flexible, but it has a number of limitations that make it
26e9fcaa8aSmrgdifficult or impossible to properly support many common varieties of keyboard
27e9fcaa8aSmrgbehavior. The limitations of core protocol support for keyboards include:
28e9fcaa8aSmrg</para>
29e9fcaa8aSmrg
30e9fcaa8aSmrg<itemizedlist>
31e9fcaa8aSmrg  <listitem>
32e9fcaa8aSmrg    <para>
33e9fcaa8aSmrgUse of a single, uniform, four-symbol mapping for all keyboard keys makes it
34e9fcaa8aSmrgdifficult to properly support keyboard overlays, PC-style break keys, or
35e9fcaa8aSmrgkeyboards that comply with ISO9995, or a host of other national and
36e9fcaa8aSmrginternational standards.
37e9fcaa8aSmrg    </para>
38e9fcaa8aSmrg  </listitem>
39e9fcaa8aSmrg  <listitem>
40e9fcaa8aSmrg    <para>
41e9fcaa8aSmrgA second keyboard group may be specified using a modifier, but this has side
42e9fcaa8aSmrgeffects that wreak havoc with client grabs and X toolkit translations.
43e9fcaa8aSmrgFurthermore, this approach limits the number of keyboard groups to two.
44e9fcaa8aSmrg    </para>
45e9fcaa8aSmrg  </listitem>
46e9fcaa8aSmrg  <listitem>
47e9fcaa8aSmrg    <para>
48e9fcaa8aSmrgPoorly specified locking key behavior requires X servers to look for a few
490f8248bfSmrg<quote>magic</quote> keysyms to determine that keys should lock when pressed. This leads to
50e9fcaa8aSmrgincompatibilities between X servers with no way for clients to detect
51e9fcaa8aSmrgimplementation differences.
52e9fcaa8aSmrg    </para>
53e9fcaa8aSmrg  </listitem>
54e9fcaa8aSmrg  <listitem>
55e9fcaa8aSmrg    <para>
56e9fcaa8aSmrgPoorly specified capitalization and control behavior requires modifications to
57e9fcaa8aSmrgX library source code to support new character sets or locales and can lead to
58e9fcaa8aSmrgincompatibilities between system wide and X library capitalization behavior.
59e9fcaa8aSmrg    </para>
60e9fcaa8aSmrg  </listitem>
61e9fcaa8aSmrg  <listitem>
62e9fcaa8aSmrg    <para>
63e9fcaa8aSmrgLimited interactions between modifiers specified by the core protocol make many
64e9fcaa8aSmrgcommon keyboard behaviors difficult or impossible to implement. For example,
65e9fcaa8aSmrgthere is no reliable way to indicate whether or not the shift modifier should
660f8248bfSmrg<quote>cancel</quote> the lock modifier.
67e9fcaa8aSmrg    </para>
68e9fcaa8aSmrg  </listitem>
69e9fcaa8aSmrg  <listitem>
70e9fcaa8aSmrg    <para>
71e9fcaa8aSmrgThe lack of any explicit descriptions for indicators, most modifiers, and other
72e9fcaa8aSmrgaspects of the keyboard appearance requires clients that wish to clearly
73e9fcaa8aSmrgdescribe the keyboard to a user to resort to a mish-mash of prior knowledge and
74e9fcaa8aSmrgheuristics.
75e9fcaa8aSmrg    </para>
76e9fcaa8aSmrg  </listitem>
77e9fcaa8aSmrg</itemizedlist>
78e9fcaa8aSmrg
79e9fcaa8aSmrg</sect1>
80eb411b4bSmrg<sect1 id='Xkb_Keyboard_Extension_Support_for_Keyboards'>
81e9fcaa8aSmrg<title>Xkb Keyboard Extension Support for Keyboards</title>
82e9fcaa8aSmrg
83e9fcaa8aSmrg<para>
84e9fcaa8aSmrgThe X Keyboard Extension makes it possible to clearly and explicitly specify
85e9fcaa8aSmrgmost aspects of keyboard behavior on a per-key basis. It adds the notion of a
86e9fcaa8aSmrgkeyboard group to the global keyboard state and provides mechanisms to more
87e9fcaa8aSmrgclosely track the logical and physical state of the keyboard. For
88e9fcaa8aSmrgkeyboard-control clients, Xkb provides descriptions and symbolic names for many
89e9fcaa8aSmrgaspects of keyboard appearance and behavior.
90e9fcaa8aSmrg</para>
91e9fcaa8aSmrg
92e9fcaa8aSmrg<para>
93e9fcaa8aSmrgIn addition, the X Keyboard Extension includes additional keyboard controls
94e9fcaa8aSmrgdesigned to make keyboards more accessible to people with movement impairments.
95e9fcaa8aSmrg</para>
96e9fcaa8aSmrg
97e9fcaa8aSmrg</sect1>
98e9fcaa8aSmrg
99eb411b4bSmrg<sect1 id='Xkb_Extension_Components'>
100e9fcaa8aSmrg<title>Xkb Extension Components</title>
101e9fcaa8aSmrg
102e9fcaa8aSmrg<para>
103e9fcaa8aSmrgThe Xkb extension is composed of two parts: a server extension, and a
104e9fcaa8aSmrgclient-side X library extension. These consist of a loadable module that may be
105e9fcaa8aSmrgactivated when an X server is started and a modified version of Xlib. Both
106e9fcaa8aSmrgserver and Xlib versions must be at least X11 R6.
107e9fcaa8aSmrg</para>
108e9fcaa8aSmrg
109e9fcaa8aSmrg
110e9fcaa8aSmrg<para>
1110f8248bfSmrg<link linkend="figure1.1">Figure 1.1</link> shows the overall structure of the Xkb extension:
112e9fcaa8aSmrg</para>
113e9fcaa8aSmrg
1140f8248bfSmrg<figure id='figure1.1'>
1150f8248bfSmrg  <title>Overall Xkb Structure</title>
1160f8248bfSmrg  <mediaobject>
1170f8248bfSmrg    <imageobject>
1180f8248bfSmrg      <imagedata format="SVG" fileref="XKBlib-1.svg"/>
1190f8248bfSmrg    </imageobject>
1200f8248bfSmrg  </mediaobject>
1210f8248bfSmrg</figure>
122e9fcaa8aSmrg
123e9fcaa8aSmrg
1240f8248bfSmrg<para id="keyboard_description">
125e9fcaa8aSmrgThe server portion of the Xkb extension encompasses a database of named
126e9fcaa8aSmrgkeyboard components, in unspecified format, that may be used to configure a
1270f8248bfSmrgkeyboard. Internally, the server maintains a
1280f8248bfSmrg<firstterm>keyboard description</firstterm>
1290f8248bfSmrg<indexterm significance="preferred" zone="keyboard_description">
1300f8248bfSmrg<primary>keyboard description</primary></indexterm>
1310f8248bfSmrgthat includes the keyboard state and configuration (mapping). By
1320f8248bfSmrg<quote>keyboard</quote> we
133e9fcaa8aSmrgmean the logical keyboard device, which includes not only the physical keys,
134e9fcaa8aSmrgbut also potentially a set of up to 32 indicators (usually LEDs) and bells.
135e9fcaa8aSmrg</para>
136e9fcaa8aSmrg
137e9fcaa8aSmrg
138e9fcaa8aSmrg<para>
139e9fcaa8aSmrgThe keyboard description is a composite of several different data structures,
140e9fcaa8aSmrgeach of which may be manipulated separately. When manipulating the server
141e9fcaa8aSmrgcomponents, the design allows partial components to be transmitted between the
1420f8248bfSmrgserver and a client. The individual components are shown in <link linkend="figure1.1">Figure 1.1</link>.
143e9fcaa8aSmrg</para>
144e9fcaa8aSmrg
145e9fcaa8aSmrg<variablelist>
146e9fcaa8aSmrg  <varlistentry>
1470f8248bfSmrg    <term><link linkend="Xkb_Client_Keyboard_Mapping">Client Map</link></term>
148e9fcaa8aSmrg    <listitem>
149e9fcaa8aSmrg      <para>
150e9fcaa8aSmrgThe key mapping information needed to convert arbitrary keycodes to symbols.
151e9fcaa8aSmrg      </para>
152e9fcaa8aSmrg    </listitem>
153e9fcaa8aSmrg  </varlistentry>
154e9fcaa8aSmrg  <varlistentry>
1550f8248bfSmrg    <term><link linkend="Xkb_Server_Keyboard_Mapping">Server Map</link></term>
156e9fcaa8aSmrg    <listitem>
157e9fcaa8aSmrg      <para>
158e9fcaa8aSmrgThe key mapping information categorizing keys by functionality (which keys are
159e9fcaa8aSmrgmodifiers, how keys behave, and so on).
160e9fcaa8aSmrg      </para>
161e9fcaa8aSmrg    </listitem>
162e9fcaa8aSmrg  </varlistentry>
163e9fcaa8aSmrg  <varlistentry>
1640f8248bfSmrg    <term><link linkend="Keyboard_Controls">Controls</link></term>
165e9fcaa8aSmrg    <listitem>
166e9fcaa8aSmrg      <para>
167e9fcaa8aSmrgClient configurable quantities effecting how the keyboard behaves, such as
168e9fcaa8aSmrgrepeat behavior and modifications for people with movement impairments.
169e9fcaa8aSmrg      </para>
170e9fcaa8aSmrg    </listitem>
171e9fcaa8aSmrg  </varlistentry>
172e9fcaa8aSmrg  <varlistentry>
1730f8248bfSmrg    <term><link linkend="Indicators">Indicators</link></term>
174e9fcaa8aSmrg    <listitem>
175e9fcaa8aSmrg      <para>
176e9fcaa8aSmrgThe mapping of behavior to indicators.
177e9fcaa8aSmrg      </para>
178e9fcaa8aSmrg    </listitem>
179e9fcaa8aSmrg  </varlistentry>
180e9fcaa8aSmrg  <varlistentry>
1810f8248bfSmrg    <term><link linkend="Keyboard_Geometry">Geometry</link></term>
182e9fcaa8aSmrg    <listitem>
183e9fcaa8aSmrg      <para>
184e9fcaa8aSmrgA complete description of the physical keyboard layout, sufficient to draw a
185e9fcaa8aSmrgrepresentation of the keyboard.
186e9fcaa8aSmrg      </para>
187e9fcaa8aSmrg    </listitem>
188e9fcaa8aSmrg  </varlistentry>
189e9fcaa8aSmrg  <varlistentry>
1900f8248bfSmrg    <term><link linkend="Symbolic_Names">Names</link></term>
191e9fcaa8aSmrg    <listitem>
192e9fcaa8aSmrg      <para>
193e9fcaa8aSmrgA mapping of names to various aspects of the keyboard such as individual
194e9fcaa8aSmrgvirtual modifiers, indicators, and bells.
195e9fcaa8aSmrg      </para>
196e9fcaa8aSmrg    </listitem>
197e9fcaa8aSmrg  </varlistentry>
198e9fcaa8aSmrg  <varlistentry>
1990f8248bfSmrg    <term><link linkend="The_Xkb_Compatibility_Map">Compatibility Map</link></term>
200e9fcaa8aSmrg    <listitem>
201e9fcaa8aSmrg      <para>
202e9fcaa8aSmrgThe definition of how to map core protocol keyboard state to Xkb keyboard state.
203e9fcaa8aSmrg      </para>
204e9fcaa8aSmrg    </listitem>
205e9fcaa8aSmrg  </varlistentry>
206e9fcaa8aSmrg</variablelist>
207e9fcaa8aSmrg
208e9fcaa8aSmrg<para>
209e9fcaa8aSmrgA client application interrogates and manipulates the keyboard by reading and
210e9fcaa8aSmrgwriting portions of the server description for the keyboard. In a typical
211e9fcaa8aSmrgsequence a client would fetch the current information it is interested in,
212e9fcaa8aSmrgmodify it, and write it back. If a client wishes to track some portion of the
213e9fcaa8aSmrgkeyboard state, it typically maintains a local copy of the portion of the
214e9fcaa8aSmrgserver keyboard description dealing with the items of interest and updates this
215e9fcaa8aSmrglocal copy from events describing state transitions that are sent by the server.
216e9fcaa8aSmrg</para>
217e9fcaa8aSmrg
218e9fcaa8aSmrg<para>
219e9fcaa8aSmrgA client may request the server to reconfigure the keyboard either by sending
220e9fcaa8aSmrgexplicit reconfiguration instructions to it, or by telling it to load a new
221e9fcaa8aSmrgconfiguration from its database of named components. Partial reconfiguration
222e9fcaa8aSmrgand incremental reconfiguration are both supported.
223e9fcaa8aSmrg</para>
224e9fcaa8aSmrg
225eb411b4bSmrg<sect2 id='Groups_and_Shift_Levels'>
226e9fcaa8aSmrg<title>Groups and Shift Levels</title>
227e9fcaa8aSmrg
228e9fcaa8aSmrg<para>
229e9fcaa8aSmrgThe graphic characters or control functions that may be accessed by one key are
2300f8248bfSmrglogically arranged in groups and levels. See <link linkend="Notation_and_Terminology">section 14.1</link> for a complete
231e9fcaa8aSmrgdescription of groups and levels.
232e9fcaa8aSmrg</para>
233e9fcaa8aSmrg
234e9fcaa8aSmrg
235e9fcaa8aSmrg</sect2>
236eb411b4bSmrg<sect2 id='Radio_Groups'>
237e9fcaa8aSmrg<title>Radio Groups</title>
238e9fcaa8aSmrg
239e9fcaa8aSmrg<para>
2400f8248bfSmrg<indexterm significance="preferred" zone="Radio_Groups">
2410f8248bfSmrg<primary>radio group</primary></indexterm>
2420f8248bfSmrg<indexterm significance="preferred" zone="Radio_Groups">
2430f8248bfSmrg<primary>group</primary><secondary>radio</secondary></indexterm>
2440f8248bfSmrgA <firstterm>radio group</firstterm>
2450f8248bfSmrgis a set of keys whose behavior simulates a set of radio buttons.
246e9fcaa8aSmrgOnce a key in a radio group is pressed, it stays logically depressed until
247e9fcaa8aSmrganother key in the group is pressed, at which point the previously depressed
248e9fcaa8aSmrgkey is logically released. Consequently, at most one key in a radio group can
249e9fcaa8aSmrgbe logically depressed at one time. A radio group is defined by a radio group
2500f8248bfSmrgindex, an optional name, and by assigning each key in the radio group
2510f8248bfSmrg<symbol>XkbKB_RadioGroup</symbol>
2520f8248bfSmrgbehavior and the radio group index.
253e9fcaa8aSmrg</para>
254e9fcaa8aSmrg
255e9fcaa8aSmrg</sect2>
256e9fcaa8aSmrg</sect1>
257e9fcaa8aSmrg
258eb411b4bSmrg<sect1 id='Client_Types'>
259e9fcaa8aSmrg<title>Client Types</title>
260e9fcaa8aSmrg
261e9fcaa8aSmrg<para>
262e9fcaa8aSmrgThis specification differentiates between three different classes of client
263e9fcaa8aSmrgapplications:
264e9fcaa8aSmrg</para>
265e9fcaa8aSmrg
266e9fcaa8aSmrg<itemizedlist>
267e9fcaa8aSmrg  <listitem>
268e9fcaa8aSmrg    <para>
269e9fcaa8aSmrgXkb-aware applications
270e9fcaa8aSmrg    </para>
271e9fcaa8aSmrg    <para>
272e9fcaa8aSmrgThese applications make specific use of Xkb functionality and APIs not present
273e9fcaa8aSmrgin the core protocol.
274e9fcaa8aSmrg    </para>
275e9fcaa8aSmrg  </listitem>
276e9fcaa8aSmrg  <listitem>
277e9fcaa8aSmrg    <para>
278e9fcaa8aSmrgXkb-capable applications
279e9fcaa8aSmrg    </para>
280e9fcaa8aSmrg    <para>
281e9fcaa8aSmrgThese applications make no use of Xkb extended functionality and Application
282e9fcaa8aSmrgProgramming Interfaces (APIs) directly. However, they are linked with a version
283e9fcaa8aSmrgof Xlib that includes Xkb and indirectly benefit from some of Xkb’s
284e9fcaa8aSmrgfeatures.
285e9fcaa8aSmrg    </para>
286e9fcaa8aSmrg  </listitem>
287e9fcaa8aSmrg  <listitem>
288e9fcaa8aSmrg    <para>
289e9fcaa8aSmrgXkb-unaware applications
290e9fcaa8aSmrg    </para>
291e9fcaa8aSmrg    <para>
292e9fcaa8aSmrgThese applications make no use of Xkb extended functionality or APIs and
293e9fcaa8aSmrgrequire Xkb’s functionality to be mapped to core Xlib functionality to
294e9fcaa8aSmrgoperate properly.
295e9fcaa8aSmrg    </para>
296e9fcaa8aSmrg  </listitem>
297e9fcaa8aSmrg</itemizedlist>
298e9fcaa8aSmrg
299e9fcaa8aSmrg</sect1>
300e9fcaa8aSmrg
301eb411b4bSmrg<sect1 id='Compatibility_With_the_Core_Protocol'>
302e9fcaa8aSmrg<title>Compatibility With the Core Protocol</title>
303e9fcaa8aSmrg
304e9fcaa8aSmrg<para>
305e9fcaa8aSmrgBecause the Xkb extension allows a keyboard to be configured in ways not
306e9fcaa8aSmrgforeseen by the core protocol, and because Xkb-unaware clients are allowed to
307e9fcaa8aSmrgconnect to a server using the Xkb extension, there must be a means of
308e9fcaa8aSmrgconverting between the Xkb domain and the core protocol. The Xkb server
309e9fcaa8aSmrgextension maintains a compatibility map as part of its keyboard description;
310e9fcaa8aSmrgthis map controls the conversion of Xkb generated events to core protocol
311e9fcaa8aSmrgevents and the results of core protocol requests to appropriate Xkb state and
312e9fcaa8aSmrgconfiguration.
313e9fcaa8aSmrg</para>
314e9fcaa8aSmrg
315e9fcaa8aSmrg
316e9fcaa8aSmrg</sect1>
317eb411b4bSmrg<sect1 id='Additional_Protocol_Errors'>
318e9fcaa8aSmrg<title>Additional Protocol Errors</title>
319e9fcaa8aSmrg
320e9fcaa8aSmrg<para>
3210f8248bfSmrgThe Xkb extension adds a single protocol error,
3220f8248bfSmrg<errorname>BadKeyboard</errorname>,
3230f8248bfSmrgto the core protocol error set. See <link linkend="Protocol_Errors">section 2.6</link> for a discussion of the
3240f8248bfSmrg<errorname>BadKeyboard</errorname>
3250f8248bfSmrgprotocol error.
326e9fcaa8aSmrg</para>
327e9fcaa8aSmrg
328e9fcaa8aSmrg
329e9fcaa8aSmrg</sect1>
330eb411b4bSmrg<sect1 id='Extension_Library_Functions'>
331e9fcaa8aSmrg<title>Extension Library Functions</title>
332e9fcaa8aSmrg
333e9fcaa8aSmrg<para>
334e9fcaa8aSmrgThe X Keyboard Extension replaces the core protocol definition of a keyboard
335e9fcaa8aSmrgwith a more comprehensive one. The X Keyboard Extension library interfaces are
336e9fcaa8aSmrgincluded in Xlib.<footnote><para>
3370f8248bfSmrgX11R6.1 is the first release by the X Consortium, Inc., that includes the X
338e9fcaa8aSmrgKeyboard Extension in Xlib. X11R6 included work in progress on this extension
339e9fcaa8aSmrgas nonstandard additions to the library.
340e9fcaa8aSmrg</para>
341e9fcaa8aSmrg</footnote>
342e9fcaa8aSmrg</para>
343e9fcaa8aSmrg
344e9fcaa8aSmrg<para>
345e9fcaa8aSmrgXlib detects the presence of the X Keyboard server extension and uses Xkb
346e9fcaa8aSmrgprotocol to replace some standard X library functions related to the keyboard.
347e9fcaa8aSmrgIf an application uses only standard X library functions to examine the
348e9fcaa8aSmrgkeyboard or process key events, it should not need to be modified when linked
349e9fcaa8aSmrgwith an X library containing the X keyboard extension. All of the
350e9fcaa8aSmrgkeyboard-related X library functions have been modified to automatically use
351e9fcaa8aSmrgXkb protocol when the server extension is present.
352e9fcaa8aSmrg</para>
353e9fcaa8aSmrg
354e9fcaa8aSmrg<para>
355e9fcaa8aSmrgThe Xkb extension adds library interfaces to allow a client application to
356e9fcaa8aSmrgdirectly manipulate the new capabilities.
357e9fcaa8aSmrg</para>
358e9fcaa8aSmrg
359e9fcaa8aSmrg
360eb411b4bSmrg<sect2 id='Error_Indications'>
361e9fcaa8aSmrg<title>Error Indications</title>
3620f8248bfSmrg<indexterm zone="Error_Indications"><primary>errors</primary></indexterm>
363e9fcaa8aSmrg
364e9fcaa8aSmrg<para>
365e9fcaa8aSmrgXkb functions that communicate with the X server check to be sure the Xkb
366e9fcaa8aSmrgextension has been properly initialized prior to doing any other operations. If
367e9fcaa8aSmrgthe extension has not been properly initialized or the application, library,
368e9fcaa8aSmrgand server versions are incompatible, these functions return an error
3690f8248bfSmrgindication as shown in <link linkend="table1.1">Table 1.1</link>.
3700f8248bfSmrgBecause of this test,
3710f8248bfSmrg<errorname>BadAccess</errorname>
3720f8248bfSmrgand
3730f8248bfSmrg<errorname>BadMatch</errorname>
3740f8248bfSmrg(due to incompatible versions) protocol errors should normally not be
375e9fcaa8aSmrggenerated.
376e9fcaa8aSmrg</para>
377e9fcaa8aSmrg
3780f8248bfSmrg<table id='table1.1' frame='topbot'>
379e9fcaa8aSmrg<!-- <caption>Function Error Returns Due to Extension Problems</caption> -->
380e9fcaa8aSmrg<title>Function Error Returns Due to Extension Problems</title>
381eb411b4bSmrg<?dbfo keep-together="always" ?>
382eb411b4bSmrg<tgroup cols='2' align='left' colsep='0' rowsep='0'>
383eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/>
384eb411b4bSmrg<colspec colname='c2' colwidth='1.0*'/>
385e9fcaa8aSmrg<thead>
386eb411b4bSmrg  <row rowsep='1'>
387e9fcaa8aSmrg    <entry>Functions return type</entry>
388e9fcaa8aSmrg    <entry>Return value</entry>
389e9fcaa8aSmrg  </row>
390e9fcaa8aSmrg</thead>
391e9fcaa8aSmrg<tbody>
392eb411b4bSmrg  <row>
393e9fcaa8aSmrg    <entry>pointer to a structure</entry>
3940f8248bfSmrg    <entry><symbol>NULL</symbol></entry>
395e9fcaa8aSmrg  </row>
396eb411b4bSmrg  <row>
397e9fcaa8aSmrg    <entry>Bool</entry>
3980f8248bfSmrg    <entry><symbol>False</symbol></entry>
399e9fcaa8aSmrg  </row>
400eb411b4bSmrg  <row>
401e9fcaa8aSmrg    <entry>Status</entry>
4020f8248bfSmrg    <entry><errorname>BadAccess</errorname></entry>
403e9fcaa8aSmrg  </row>
404e9fcaa8aSmrg</tbody>
405e9fcaa8aSmrg</tgroup>
406e9fcaa8aSmrg</table>
407e9fcaa8aSmrg
408e9fcaa8aSmrg<para>
409e9fcaa8aSmrgMany Xkb functions do not actually communicate with the X server; they only
410e9fcaa8aSmrgrequire processing in the client-side portion of the library. Furthermore, some
411e9fcaa8aSmrgapplications may never actually need to communicate with the server; they
412e9fcaa8aSmrgsimply use the Xkb library capabilities. The functions that do not communicate
413e9fcaa8aSmrgwith the server return either a pointer to a structure, a Bool, or a Status.
414e9fcaa8aSmrgThese functions check that the application has queried the Xkb library version
4150f8248bfSmrgand return the values shown in <link linkend="table1.1">Table 1.1</link>
4160f8248bfSmrgif it has not.
417e9fcaa8aSmrg</para>
418e9fcaa8aSmrg</sect2>
419e9fcaa8aSmrg</sect1>
420e9fcaa8aSmrg</chapter>
421