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='Xkb_Events'>
5e9fcaa8aSmrg<title>Xkb Events</title>
60f8248bfSmrg<indexterm zone="Xkb_Events"><primary>events</primary></indexterm>
7e9fcaa8aSmrg
8e9fcaa8aSmrg<para>
9e9fcaa8aSmrgThe primary way the X server communicates with clients is by sending X events
10e9fcaa8aSmrgto them. Some events are sent to all clients, while others are sent only to
11e9fcaa8aSmrgclients that have requested them. Some of the events that can be requested are
12e9fcaa8aSmrgassociated with a particular window and are only sent to those clients who have
13e9fcaa8aSmrgboth requested the event and specified the window in which the event occurred.
14e9fcaa8aSmrg</para>
15e9fcaa8aSmrg
16e9fcaa8aSmrg
17e9fcaa8aSmrg<para>
18e9fcaa8aSmrgThe Xkb extension uses events to communicate the keyboard status to interested
19e9fcaa8aSmrgclients. These events are not associated with a particular window. Instead, all
20e9fcaa8aSmrgXkb keyboard status events are reported to all interested clients, regardless
21e9fcaa8aSmrgof which window currently has the keyboard focus and regardless of the grab
22e9fcaa8aSmrgstate of the keyboard.<footnote><para>The one exception to this rule is the
23e9fcaa8aSmrgXkbExtensionDeviceNotify event report that is sent when a client attempts to
240f8248bfSmrguse an unsupported feature of an X Input Extension device (see <link linkend="Setting_Xkb_Features_for_Non_KeyClass_Input_Extension_Devices">section 21.4</link>).
250f8248bfSmrg</para></footnote>
26e9fcaa8aSmrg</para>
27e9fcaa8aSmrg
28e9fcaa8aSmrg
29e9fcaa8aSmrg<para>
30e9fcaa8aSmrgThe X server reports the events defined by the Xkb extension to your client
31e9fcaa8aSmrgapplication only if you have requested them. You may request Xkb events by
320f8248bfSmrgcalling either
330f8248bfSmrg<function>XkbSelectEvents</function>
340f8248bfSmrgor
350f8248bfSmrg<function>XkbSelectEventDetails</function>.
360f8248bfSmrg<function>XkbSelectEvents</function>
370f8248bfSmrgrequests Xkb events by their event type and causes them to be reported to your
38e9fcaa8aSmrgclient application under all circumstances. You can specify a finer granularity
390f8248bfSmrgfor event reporting by using
400f8248bfSmrg<function>XkbSelectEventDetails</function>;
410f8248bfSmrgin this case events are reported only when the specific detail conditions you
42e9fcaa8aSmrgspecify have been met.
43e9fcaa8aSmrg</para>
44e9fcaa8aSmrg
45eb411b4bSmrg<sect1 id='Xkb_Event_Types'>
46e9fcaa8aSmrg<title>Xkb Event Types</title>
47e9fcaa8aSmrg
48e9fcaa8aSmrg<para>
49e9fcaa8aSmrgThe Xkb Extension adds new event types to the X protocol definition. An Xkb
50e9fcaa8aSmrgevent type is defined by two fields in the X event data structure. One is the
510f8248bfSmrg<structfield>type</structfield>
520f8248bfSmrgfield, containing the
530f8248bfSmrg<emphasis>base event code</emphasis>.
540f8248bfSmrgThis base event code is a value the X server assigns to each X extension at
550f8248bfSmrgruntime and that identifies the extension that generated the event; thus, the
560f8248bfSmrgevent code in the
570f8248bfSmrg<structfield>type</structfield>
580f8248bfSmrgfield identifies the event as an Xkb extension event, rather than an event
59e9fcaa8aSmrgfrom another extension or a core X protocol event. You can obtain the base
600f8248bfSmrgevent code via a call to
610f8248bfSmrg<function>XkbQueryExtension</function>
620f8248bfSmrgor
630f8248bfSmrg<function>XkbOpenDisplay</function>.
640f8248bfSmrgThe second field is the Xkb event type, which contains a value uniquely
65e9fcaa8aSmrgidentifying each different Xkb event type. Possible values are defined by
660f8248bfSmrgconstants declared in the header file
670f8248bfSmrg<filename class="headerfile">&lt;X11/extensions/Xkb.h&gt;</filename>.
68e9fcaa8aSmrg</para>
69e9fcaa8aSmrg
70e9fcaa8aSmrg
71e9fcaa8aSmrg<para>
720f8248bfSmrg<link linkend="table4.1">Table 4.1</link>
730f8248bfSmrglists the categories of events defined by Xkb and their associated
740f8248bfSmrgevent types, as defined in
750f8248bfSmrg<filename class="headerfile">Xkb.h</filename>.
760f8248bfSmrgEach event is described in more detail in the section referenced for that
77e9fcaa8aSmrgevent.
78e9fcaa8aSmrg</para>
79e9fcaa8aSmrg
800f8248bfSmrg<table id='table4.1' frame='topbot'>
81e9fcaa8aSmrg<title>Xkb Event Types</title>
82eb411b4bSmrg<?dbfo keep-together="always" ?>
830f8248bfSmrg<tgroup cols='3' align='left' colsep='0' rowsep='0'>
84eb411b4bSmrg<colspec colname='c1' colwidth='3.0*'/>
85eb411b4bSmrg<colspec colname='c2' colwidth='4.0*'/>
86eb411b4bSmrg<colspec colname='c3' colwidth='1.0*'/>
87e9fcaa8aSmrg<thead>
88eb411b4bSmrg<row rowsep='1'>
89e9fcaa8aSmrg  <entry>Event Type</entry>
90e9fcaa8aSmrg  <entry>Conditions Generating Event</entry>
91e9fcaa8aSmrg  <entry>Section</entry>
92e9fcaa8aSmrg</row>
93e9fcaa8aSmrg</thead>
94e9fcaa8aSmrg<tbody>
95eb411b4bSmrg<row>
960f8248bfSmrg  <entry><symbol>XkbNewKeyboardNotify</symbol></entry>
970f8248bfSmrg  <entry>Keyboard geometry; keycode range change</entry>
980f8248bfSmrg  <entry><link linkend="Replacing_a_Keyboard_On_the_Fly">19</link></entry>
99e9fcaa8aSmrg</row>
100eb411b4bSmrg<row>
1010f8248bfSmrg  <entry><symbol>XkbMapNotify</symbol></entry>
1020f8248bfSmrg  <entry>Keyboard mapping change</entry>
1030f8248bfSmrg  <entry><link linkend="Tracking_Changes_to_Map_Components">14.4</link></entry>
104e9fcaa8aSmrg</row>
105eb411b4bSmrg<row>
1060f8248bfSmrg  <entry><symbol>XkbStateNotify</symbol></entry>
1070f8248bfSmrg  <entry>Keyboard state change</entry>
1080f8248bfSmrg  <entry><link linkend="Tracking_Keyboard_State">5.4</link></entry>
109e9fcaa8aSmrg</row>
110eb411b4bSmrg<row>
1110f8248bfSmrg  <entry><symbol>XkbControlsNotify</symbol></entry>
1120f8248bfSmrg  <entry>Keyboard controls state change</entry>
1130f8248bfSmrg  <entry><link linkend="Tracking_Changes_to_Keyboard_Controls">10.11</link></entry>
114e9fcaa8aSmrg</row>
115eb411b4bSmrg<row>
1160f8248bfSmrg  <entry><symbol>XkbIndicatorStateNotify</symbol></entry>
1170f8248bfSmrg  <entry>Keyboard indicators state change</entry>
1180f8248bfSmrg  <entry><link linkend="Tracking_Changes_to_Indicator_State_or_Map">8.5</link></entry>
119e9fcaa8aSmrg</row>
120eb411b4bSmrg<row>
1210f8248bfSmrg  <entry><symbol>XkbIndicatorMapNotify</symbol></entry>
1220f8248bfSmrg  <entry>Keyboard indicators map change</entry>
1230f8248bfSmrg  <entry><link linkend="Tracking_Changes_to_Indicator_State_or_Map">8.5</link></entry>
124e9fcaa8aSmrg</row>
125eb411b4bSmrg<row>
1260f8248bfSmrg  <entry><symbol>XkbNamesNotify</symbol></entry>
1270f8248bfSmrg  <entry>Keyboard name change</entry>
1280f8248bfSmrg  <entry><link linkend="Tracking_Name_Changes">18.5</link></entry>
129e9fcaa8aSmrg</row>
130eb411b4bSmrg<row>
1310f8248bfSmrg  <entry><symbol>XkbCompatMapNotify</symbol></entry>
1320f8248bfSmrg  <entry>Keyboard compatibility map change</entry>
1330f8248bfSmrg  <entry><link linkend="Tracking_Changes_to_the_Compatibility_Map">17.5</link></entry>
134e9fcaa8aSmrg</row>
135eb411b4bSmrg<row>
1360f8248bfSmrg  <entry><symbol>XkbBellNotify</symbol></entry>
1370f8248bfSmrg  <entry>Keyboard bell generated</entry>
1380f8248bfSmrg  <entry><link linkend="Detecting_Bells">9.4</link></entry>
139e9fcaa8aSmrg</row>
140eb411b4bSmrg<row>
1410f8248bfSmrg  <entry><symbol>XkbActionMessage</symbol></entry>
1420f8248bfSmrg  <entry>Keyboard action message</entry>
1430f8248bfSmrg  <entry><link linkend="Actions_for_Generating_Messages">16.1.11</link></entry>
144e9fcaa8aSmrg</row>
145eb411b4bSmrg<row>
1460f8248bfSmrg  <entry><symbol>XkbAccessXNotify</symbol></entry>
1470f8248bfSmrg  <entry>AccessX state change</entry>
1480f8248bfSmrg  <entry><link linkend="AccessXNotify_Events">10.6.4</link></entry>
149e9fcaa8aSmrg</row>
150eb411b4bSmrg<row>
1510f8248bfSmrg  <entry><symbol>XkbExtensionDeviceNotify</symbol></entry>
1520f8248bfSmrg  <entry>Extension device change</entry>
1530f8248bfSmrg  <entry><link linkend="Tracking_Changes_to_Extension_Devices">21.6</link></entry>
154e9fcaa8aSmrg</row>
155e9fcaa8aSmrg</tbody>
156e9fcaa8aSmrg</tgroup>
157e9fcaa8aSmrg</table>
158e9fcaa8aSmrg
159e9fcaa8aSmrg</sect1>
160eb411b4bSmrg<sect1 id='Xkb_Event_Data_Structures'>
161e9fcaa8aSmrg<title>Xkb Event Data Structures</title>
162e9fcaa8aSmrg
1630f8248bfSmrg<para id='XkbAnyEvent'>
1640f8248bfSmrg<indexterm significance="preferred" zone="Xkb_Event_Data_Structures">
1650f8248bfSmrg<primary>events</primary><secondary><structname>XkbAnyEvent</structname></secondary></indexterm>
1660f8248bfSmrg<indexterm significance="preferred" zone="Xkb_Event_Data_Structures">
1670f8248bfSmrg<primary><structname>XkbAnyEvent</structname></primary></indexterm>
168e9fcaa8aSmrgXkb reports each event it generates in a unique structure holding the data
169e9fcaa8aSmrgvalues needed to describe the conditions the event is reporting. However, all
170e9fcaa8aSmrgXkb events have certain things in common. These common features are contained
171e9fcaa8aSmrgin the same fields at the beginning of all Xkb event structures and are
1720f8248bfSmrgdescribed in the
1730f8248bfSmrg<structname>XkbAnyEvent</structname>
1740f8248bfSmrgstructure:
175e9fcaa8aSmrg
1760f8248bfSmrg<programlisting>
177e9fcaa8aSmrgtypedef struct {
1780f8248bfSmrg    int             type;        /* Xkb extension base event code */
1790f8248bfSmrg    unsigned long   serial;      /* X server serial number for event */
1800f8248bfSmrg    Bool            send_event;  /* <symbol>True</symbol> &rArr; synthetically generated */
1810f8248bfSmrg    Display *       display;     /* server connection where event generated */
1820f8248bfSmrg    Time            time;        /* server time when event generated */
1830f8248bfSmrg    int             xkb_type;    /* Xkb minor event code */
1840f8248bfSmrg    unsigned int    device;      /* Xkb device ID, will not be <symbol>XkbUseCoreKbd</symbol> */
1850f8248bfSmrg} <structname>XkbAnyEvent</structname>;
186e9fcaa8aSmrg</programlisting></para>
187e9fcaa8aSmrg
188e9fcaa8aSmrg<para>
1890f8248bfSmrgFor any Xkb event, the
1900f8248bfSmrg<structfield>type</structfield>
1910f8248bfSmrgfield is set to the base event code for the Xkb extension, assigned by the
1920f8248bfSmrgserver to all Xkb extension events. The
1930f8248bfSmrg<structfield>serial</structfield>,
1940f8248bfSmrg<structfield>send_event</structfield>,
1950f8248bfSmrgand
1960f8248bfSmrg<structfield>display</structfield>
1970f8248bfSmrgfields are as described for all X11 events. The
1980f8248bfSmrg<structfield>time</structfield>
1990f8248bfSmrgfield is set to the time when the event was generated and is expressed in
2000f8248bfSmrgmilliseconds. The
2010f8248bfSmrg<structfield>xkb_type</structfield>
2020f8248bfSmrgfield contains the minor extension event code, which is the extension event
2030f8248bfSmrgtype, and is one of the values listed in
2040f8248bfSmrg<link linkend="table4.1">Table 4.1</link>. The
2050f8248bfSmrg<structfield>device</structfield>
2060f8248bfSmrgfield contains the keyboard device identifier associated with the event. This
2070f8248bfSmrgis never
2080f8248bfSmrg<symbol>XkbUseCoreKbd</symbol>,
2090f8248bfSmrgeven if the request that generated the event specified a device of
2100f8248bfSmrg<symbol>XkbUseCoreKbd</symbol>.
2110f8248bfSmrgIf the request that generated the event specified
2120f8248bfSmrg<symbol>XkbUseCoreKbd</symbol>,
2130f8248bfSmrg<structfield>device</structfield>
2140f8248bfSmrgcontains a value assigned by the server to specify the core keyboard. If the
215e9fcaa8aSmrgrequest that generated the event specified an X input extension device,
2160f8248bfSmrg<structfield>device</structfield>
2170f8248bfSmrgcontains that same identifier.
218e9fcaa8aSmrg</para>
219e9fcaa8aSmrg
220e9fcaa8aSmrg
221e9fcaa8aSmrg<para>
222e9fcaa8aSmrgOther data fields specific to individual Xkb events are described in subsequent
223e9fcaa8aSmrgchapters where the events are described.
224e9fcaa8aSmrg</para>
225e9fcaa8aSmrg
226e9fcaa8aSmrg
227e9fcaa8aSmrg</sect1>
228eb411b4bSmrg<sect1 id='Selecting_Xkb_Events'>
229e9fcaa8aSmrg<title>Selecting Xkb Events</title>
2300f8248bfSmrg<indexterm significance="preferred" zone="Selecting_Xkb_Events">
2310f8248bfSmrg<primary>events</primary><secondary>mask</secondary></indexterm>
2320f8248bfSmrg<indexterm significance="preferred" zone="Selecting_Xkb_Events">
2330f8248bfSmrg<primary>mask</primary><secondary>event</secondary></indexterm>
234e9fcaa8aSmrg
235e9fcaa8aSmrg<para>
236e9fcaa8aSmrgXkb events are selected using an event mask, much the same as normal core X
237e9fcaa8aSmrgevents are selected. However, unlike selecting core X events, where you must
238e9fcaa8aSmrgspecify the selection status (on or off) for all possible event types whenever
239e9fcaa8aSmrgyou wish to change the selection criteria for any one event, Xkb allows you to
240e9fcaa8aSmrgrestrict the specification to only the event types you wish to change. This
241e9fcaa8aSmrgmeans that you do not need to remember the event selection values for all
242e9fcaa8aSmrgpossible types each time you want to change one of them.
243e9fcaa8aSmrg</para>
244e9fcaa8aSmrg
245e9fcaa8aSmrg
246e9fcaa8aSmrg<para>
247e9fcaa8aSmrgMany Xkb event types are generated under several different circumstances. When
248e9fcaa8aSmrgselecting to receive an Xkb event, you may specify either that you want it
249e9fcaa8aSmrgdelivered under all circumstances, or that you want it delivered only for a
250e9fcaa8aSmrgsubset of the possible circumstances.
251e9fcaa8aSmrg</para>
252e9fcaa8aSmrg
253e9fcaa8aSmrg<para>
254e9fcaa8aSmrgYou can also deselect an event type that was previously selected for, using the
255e9fcaa8aSmrgsame granularity.
256e9fcaa8aSmrg</para>
257e9fcaa8aSmrg
258e9fcaa8aSmrg<para>
259e9fcaa8aSmrgXkb provides two functions to select and deselect delivery of Xkb events.
2600f8248bfSmrg<function>XkbSelectEvents</function>
2610f8248bfSmrgallows you to select or deselect delivery of more than one Xkb event type at
2620f8248bfSmrgonce. Events selected using
2630f8248bfSmrg<function>XkbSelectEvents</function>
2640f8248bfSmrgare delivered to your program under all circumstances that generate the
265e9fcaa8aSmrgevents. To restrict delivery of an event to a subset of the conditions under
2660f8248bfSmrgwhich it occurs, use
2670f8248bfSmrg<function>XkbSelectEventDetails</function>.
2680f8248bfSmrg<function>XkbSelectEventDetails</function>
2690f8248bfSmrgonly allows you to change the selection conditions for a single event at a
270e9fcaa8aSmrgtime, but it provides a means of fine-tuning the conditions under which the
271e9fcaa8aSmrgevent is delivered.
272e9fcaa8aSmrg</para>
273e9fcaa8aSmrg
274e9fcaa8aSmrg
275e9fcaa8aSmrg<para>
276e9fcaa8aSmrgTo select and / or deselect for delivery of one or more Xkb events and have
2770f8248bfSmrgthem delivered under all conditions, use
2780f8248bfSmrg<function>XkbSelectEvents</function>.
279e9fcaa8aSmrg</para>
280e9fcaa8aSmrg
2810f8248bfSmrg<indexterm significance="preferred" zone="XkbSelectEvents"><primary><function>XkbSelectEvents</function></primary></indexterm>
2820f8248bfSmrg<funcsynopsis id="XkbSelectEvents">
2830f8248bfSmrg  <funcprototype>
2840f8248bfSmrg    <funcdef>Bool <function>XkbSelectEvents</function></funcdef>
2850f8248bfSmrg<!-- (
2860f8248bfSmrg<parameter>display, device_spec, bits_to_change, values_for_bits</parameter>
2870f8248bfSmrg) -->
2880f8248bfSmrg
2890f8248bfSmrg    <paramdef>Display *<parameter>display</parameter></paramdef>
2900f8248bfSmrg    <paramdef>unsigned int <parameter>device_spec</parameter></paramdef>
2910f8248bfSmrg    <paramdef>unsigned long int <parameter>bits_to_change</parameter></paramdef>
2920f8248bfSmrg    <paramdef>unsigned long int <parameter>values_for_bits</parameter></paramdef>
2930f8248bfSmrg  </funcprototype>
2940f8248bfSmrg</funcsynopsis>
2950f8248bfSmrg<variablelist>
2960f8248bfSmrg  <varlistentry>
2970f8248bfSmrg    <term>
2980f8248bfSmrg      <parameter>display</parameter>
2990f8248bfSmrg    </term>
3000f8248bfSmrg    <listitem>
3010f8248bfSmrg      <para>
3020f8248bfSmrg        connection to the X server
3030f8248bfSmrg      </para>
3040f8248bfSmrg    </listitem>
3050f8248bfSmrg  </varlistentry>
3060f8248bfSmrg  <varlistentry>
3070f8248bfSmrg    <term>
3080f8248bfSmrg      <parameter>device_spec</parameter>
3090f8248bfSmrg    </term>
3100f8248bfSmrg    <listitem>
3110f8248bfSmrg      <para>
3120f8248bfSmrg        device ID, or <symbol>XkbUseCoreKbd</symbol>
3130f8248bfSmrg      </para>
3140f8248bfSmrg    </listitem>
3150f8248bfSmrg  </varlistentry>
3160f8248bfSmrg  <varlistentry>
3170f8248bfSmrg    <term>
3180f8248bfSmrg      <parameter>bits_to_change</parameter>
3190f8248bfSmrg    </term>
3200f8248bfSmrg    <listitem>
3210f8248bfSmrg      <para>
3220f8248bfSmrg        determines events to be selected / deselected
3230f8248bfSmrg      </para>
3240f8248bfSmrg    </listitem>
3250f8248bfSmrg  </varlistentry>
3260f8248bfSmrg  <varlistentry>
3270f8248bfSmrg    <term>
3280f8248bfSmrg      <parameter>values_for_bits</parameter>
3290f8248bfSmrg    </term>
3300f8248bfSmrg    <listitem>
3310f8248bfSmrg      <para>
3320f8248bfSmrg        1&rArr;select, 0&rarr;deselect; for events in <parameter>bits_to_change</parameter>
3330f8248bfSmrg      </para>
3340f8248bfSmrg    </listitem>
3350f8248bfSmrg  </varlistentry>
3360f8248bfSmrg</variablelist>
337e9fcaa8aSmrg
338e9fcaa8aSmrg<para>
339e9fcaa8aSmrgThis request changes the Xkb event selection mask for the keyboard specified by
3400f8248bfSmrg<parameter>device_spec</parameter>.
341e9fcaa8aSmrg</para>
342e9fcaa8aSmrg
343e9fcaa8aSmrg
344e9fcaa8aSmrg<para>
3450f8248bfSmrgEach Xkb event that can be selected is represented by a bit in the
3460f8248bfSmrg<parameter>bits_to_change</parameter>
3470f8248bfSmrgand
3480f8248bfSmrg<parameter>values_for_bits</parameter>
3490f8248bfSmrgmasks. Only the event selection bits specified by the
3500f8248bfSmrg<parameter>bits_to_change</parameter>
3510f8248bfSmrgparameter are affected; any unspecified bits are left unchanged. To turn on
3520f8248bfSmrgevent selection for an event, set the bit for the event in the
3530f8248bfSmrg<parameter>bits_to_change</parameter>
3540f8248bfSmrgparameter and set the corresponding bit in the
3550f8248bfSmrg<parameter>values_for_bits</parameter>
3560f8248bfSmrgparameter. To turn off event selection for an event, set the bit for the event
3570f8248bfSmrgin the
3580f8248bfSmrg<parameter>bits_to_change</parameter>
3590f8248bfSmrgparameter and do not set the corresponding bit in the
3600f8248bfSmrg<parameter>values_for_bits</parameter>
3610f8248bfSmrgparameter. The valid values for both of these parameters are an inclusive
3620f8248bfSmrgbitwise OR of the masks shown in <link linkend="table4.2">Table 4.2</link>.
3630f8248bfSmrgThere is no interface to return
364e9fcaa8aSmrgyour client’s current event selection mask. Clients cannot set other
365e9fcaa8aSmrgclients’ event selection masks.
366e9fcaa8aSmrg</para>
367e9fcaa8aSmrg
368e9fcaa8aSmrg
369e9fcaa8aSmrg<para>
3700f8248bfSmrgIf a bit is not set in the
3710f8248bfSmrg<parameter>bits_to_change</parameter>
3720f8248bfSmrgparameter, but the corresponding bit is set in the
3730f8248bfSmrg<parameter>values_for_bits</parameter>
3740f8248bfSmrgparameter, a
3750f8248bfSmrg<errorname>BadMatch</errorname>
3760f8248bfSmrgprotocol error results. If an undefined bit is set in either the
3770f8248bfSmrg<parameter>bits_to_change</parameter>
3780f8248bfSmrgor the
3790f8248bfSmrg<parameter>values_for_bits</parameter>
3800f8248bfSmrgparameter, a
3810f8248bfSmrg<errorname>BadValue</errorname>
3820f8248bfSmrgprotocol error results.
383e9fcaa8aSmrg</para>
384e9fcaa8aSmrg
385e9fcaa8aSmrg
386e9fcaa8aSmrg<para>
387e9fcaa8aSmrgAll event selection bits are initially zero for clients using the Xkb
388e9fcaa8aSmrgextension. Once you set some bits, they remain set for your client until you
3890f8248bfSmrgclear them via another call to
3900f8248bfSmrg<function>XkbSelectEvents</function>.
391e9fcaa8aSmrg</para>
392e9fcaa8aSmrg
393e9fcaa8aSmrg
394e9fcaa8aSmrg<para>
3950f8248bfSmrg<function>XkbSelectEvents</function>
3960f8248bfSmrgreturns
3970f8248bfSmrg<symbol>False</symbol>
3980f8248bfSmrgif the Xkb extension has not been initialized and
3990f8248bfSmrg<symbol>True</symbol>
4000f8248bfSmrgotherwise.
401e9fcaa8aSmrg</para>
402e9fcaa8aSmrg
403e9fcaa8aSmrg
404e9fcaa8aSmrg<para>
405e9fcaa8aSmrgTo select or deselect for a specific Xkb event and optionally place conditions
4060f8248bfSmrgon when events of that type are reported to your client, use
4070f8248bfSmrg<function>XkbSelectEventDetails</function>.
4080f8248bfSmrgThis allows you to exercise a finer granularity of control over delivery of
4090f8248bfSmrgXkb events with
4100f8248bfSmrg<function>XkbSelectEvents</function>.
411e9fcaa8aSmrg</para>
412e9fcaa8aSmrg
413e9fcaa8aSmrg
4140f8248bfSmrg<indexterm significance="preferred" zone="XkbSelectEventDetails"><primary><function>XkbSelectEventDetails</function></primary></indexterm>
4150f8248bfSmrg<funcsynopsis id="XkbSelectEventDetails">
4160f8248bfSmrg  <funcprototype>
4170f8248bfSmrg    <funcdef>Bool <function>XkbSelectEventDetails</function></funcdef>
4180f8248bfSmrg<!-- (
4190f8248bfSmrg<parameter>display, device_spec, event_type, bits_to_change</parameter>,
4200f8248bfSmrg<parameter>values_for_bits</parameter>
4210f8248bfSmrg) -->
4220f8248bfSmrg
4230f8248bfSmrg    <paramdef>Display *<parameter>display</parameter></paramdef>
4240f8248bfSmrg    <paramdef>unsigned int <parameter>device_spec</parameter></paramdef>
4250f8248bfSmrg    <paramdef>unsigned int <parameter>event_type</parameter></paramdef>
4260f8248bfSmrg    <paramdef>unsigned long int <parameter>bits_to_change</parameter></paramdef>
4270f8248bfSmrg    <paramdef>unsigned long int <parameter>values_for_bits</parameter></paramdef>
4280f8248bfSmrg  </funcprototype>
4290f8248bfSmrg</funcsynopsis>
4300f8248bfSmrg<variablelist>
4310f8248bfSmrg  <varlistentry>
4320f8248bfSmrg    <term>
4330f8248bfSmrg      <parameter>display</parameter>
4340f8248bfSmrg    </term>
4350f8248bfSmrg    <listitem>
4360f8248bfSmrg      <para>
4370f8248bfSmrg        connection to the X server
4380f8248bfSmrg      </para>
4390f8248bfSmrg    </listitem>
4400f8248bfSmrg  </varlistentry>
4410f8248bfSmrg  <varlistentry>
4420f8248bfSmrg    <term>
4430f8248bfSmrg      <parameter>device_spec</parameter>
4440f8248bfSmrg    </term>
4450f8248bfSmrg    <listitem>
4460f8248bfSmrg      <para>
4470f8248bfSmrg        device ID, or <symbol>XkbUseCoreKbd</symbol>
4480f8248bfSmrg      </para>
4490f8248bfSmrg    </listitem>
4500f8248bfSmrg  </varlistentry>
4510f8248bfSmrg  <varlistentry>
4520f8248bfSmrg    <term>
4530f8248bfSmrg      <parameter>event_type</parameter>
4540f8248bfSmrg    </term>
4550f8248bfSmrg    <listitem>
4560f8248bfSmrg      <para>
4570f8248bfSmrg        Xkb event type of interest
4580f8248bfSmrg      </para>
4590f8248bfSmrg    </listitem>
4600f8248bfSmrg  </varlistentry>
4610f8248bfSmrg  <varlistentry>
4620f8248bfSmrg    <term>
4630f8248bfSmrg      <parameter>bits_to_change</parameter>
4640f8248bfSmrg    </term>
4650f8248bfSmrg    <listitem>
4660f8248bfSmrg      <para>
4670f8248bfSmrg        event selection details
4680f8248bfSmrg      </para>
4690f8248bfSmrg    </listitem>
4700f8248bfSmrg  </varlistentry>
4710f8248bfSmrg  <varlistentry>
4720f8248bfSmrg    <term>
4730f8248bfSmrg      <parameter>values_for_bits</parameter>
4740f8248bfSmrg    </term>
4750f8248bfSmrg    <listitem>
4760f8248bfSmrg      <para>
4770f8248bfSmrg        values for bits selected by <parameter>bits_to_change</parameter>
4780f8248bfSmrg      </para>
4790f8248bfSmrg    </listitem>
4800f8248bfSmrg  </varlistentry>
4810f8248bfSmrg</variablelist>
482e9fcaa8aSmrg
483e9fcaa8aSmrg<para>
4840f8248bfSmrgWhile
4850f8248bfSmrg<function>XkbSelectEvents</function>
4860f8248bfSmrgallows multiple events to be selected,
4870f8248bfSmrg<function>XkbSelectEventDetails</function>
4880f8248bfSmrgchanges the selection criteria for a single type of Xkb event. The
4890f8248bfSmrginterpretation of the
4900f8248bfSmrg<parameter>bits_to_change</parameter>
4910f8248bfSmrgand
4920f8248bfSmrg<parameter>values_for_bits</parameter>
4930f8248bfSmrgmasks depends on the event type in question.
494e9fcaa8aSmrg</para>
495e9fcaa8aSmrg
496e9fcaa8aSmrg
497e9fcaa8aSmrg<para>
4980f8248bfSmrg<function>XkbSelectEventDetails</function>
4990f8248bfSmrgchanges the Xkb event selection mask for the keyboard specified by
5000f8248bfSmrg<parameter>device_spec</parameter>
5010f8248bfSmrgand the Xkb event specified by
5020f8248bfSmrg<parameter>event_type</parameter>.
5030f8248bfSmrgTo turn on event selection for an event detail, set the bit for the detail in
5040f8248bfSmrgthe
5050f8248bfSmrg<parameter>bits_to_change</parameter>
5060f8248bfSmrgparameter and set the corresponding bit in the
5070f8248bfSmrg<parameter>values_for_bits</parameter>
5080f8248bfSmrgparameter. To turn off event detail selection for a detail, set the bit for
5090f8248bfSmrgthe detail in the
5100f8248bfSmrg<parameter>bits_to_change</parameter>
5110f8248bfSmrgparameter and do not set the corresponding bit in the
5120f8248bfSmrg<parameter>values_for_bits</parameter>
5130f8248bfSmrgparameter.
514e9fcaa8aSmrg</para>
515e9fcaa8aSmrg
516e9fcaa8aSmrg
517e9fcaa8aSmrg<para>
5180f8248bfSmrgIf an invalid event type is specified, a
5190f8248bfSmrg<errorname>BadValue</errorname>
5200f8248bfSmrgprotocol error results. If a bit is not set in the
5210f8248bfSmrg<parameter>bits_to_change</parameter>
5220f8248bfSmrgparameter, but the corresponding bit is set in the
5230f8248bfSmrg<parameter>values_for_bits</parameter>
5240f8248bfSmrgparameter, a
5250f8248bfSmrg<errorname>BadMatch</errorname>
5260f8248bfSmrgprotocol error results. If an undefined bit is set in either the
5270f8248bfSmrg<parameter>bits_to_change</parameter>
5280f8248bfSmrgor the
5290f8248bfSmrg<parameter>values_for_bits</parameter>
5300f8248bfSmrgparameter, a
5310f8248bfSmrg<errorname>BadValue</errorname>
5320f8248bfSmrgprotocol error results.
533e9fcaa8aSmrg</para>
534e9fcaa8aSmrg
535e9fcaa8aSmrg
536e9fcaa8aSmrg<para>
537e9fcaa8aSmrgFor each type of Xkb event, the legal event details that you can specify in the
5380f8248bfSmrg<function>XkbSelectEventDetails</function>
5390f8248bfSmrgrequest are listed in the chapters that describe each event in detail.
540e9fcaa8aSmrg</para>
541e9fcaa8aSmrg
542e9fcaa8aSmrg
543eb411b4bSmrg<sect2 id='Event_Masks'>
544e9fcaa8aSmrg<title>Event Masks</title>
545e9fcaa8aSmrg
546e9fcaa8aSmrg<para>
547e9fcaa8aSmrgThe X server reports the events defined by Xkb to your client application only
5480f8248bfSmrgif you have requested them via a call to
5490f8248bfSmrg<function>XkbSelectEvents</function>
5500f8248bfSmrgor
5510f8248bfSmrg<function>XkbSelectEventDetails</function>.
5520f8248bfSmrgSpecify the event types in which you are interested in a mask, as described
5530f8248bfSmrgin <link linkend="Selecting_Xkb_Events">section 4.3</link>.
554e9fcaa8aSmrg</para>
555e9fcaa8aSmrg
556e9fcaa8aSmrg
557e9fcaa8aSmrg<para>
5580f8248bfSmrg<link linkend="table4.2">Table 4.2</link>
5590f8248bfSmrglists the event mask constants that can be specified with the
5600f8248bfSmrg<function>XkbSelectEvents</function>
5610f8248bfSmrgrequest and the circumstances in which the mask should be specified.
562e9fcaa8aSmrg</para>
563e9fcaa8aSmrg
5640f8248bfSmrg<table id='table4.2' frame='topbot'>
565e9fcaa8aSmrg<title>XkbSelectEvents Mask Constants</title>
566eb411b4bSmrg<?dbfo keep-together="always" ?>
567eb411b4bSmrg<tgroup cols='3' align='left' colsep='0' rowsep='0'>
568eb411b4bSmrg<colspec colname='c1' colwidth='2.0*'/>
569eb411b4bSmrg<colspec colname='c2' colwidth='1.0*'/>
570eb411b4bSmrg<colspec colname='c3' colwidth='2.0*'/>
571e9fcaa8aSmrg<thead>
572eb411b4bSmrg<row rowsep='1'>
573e9fcaa8aSmrg  <entry>Event Mask</entry>
574e9fcaa8aSmrg  <entry>Value</entry>
575e9fcaa8aSmrg  <entry>Notification Wanted</entry>
576e9fcaa8aSmrg</row>
577e9fcaa8aSmrg</thead>
578e9fcaa8aSmrg<tbody>
579eb411b4bSmrg  <row>
580e9fcaa8aSmrg    <entry>
5810f8248bfSmrg<symbol>XkbNewKeyboardNotifyMask</symbol>
582e9fcaa8aSmrg    </entry>
583e9fcaa8aSmrg    <entry>(1L&lt;&lt;0)</entry>
584e9fcaa8aSmrg    <entry>Keyboard geometry change</entry>
585e9fcaa8aSmrg  </row>
586eb411b4bSmrg  <row>
587e9fcaa8aSmrg    <entry>
5880f8248bfSmrg      <symbol>XkbMapNotifyMask</symbol>
589e9fcaa8aSmrg    </entry>
590e9fcaa8aSmrg    <entry>(1L&lt;&lt;1)</entry>
591e9fcaa8aSmrg    <entry>Keyboard mapping change</entry>
592e9fcaa8aSmrg  </row>
593eb411b4bSmrg  <row>
594e9fcaa8aSmrg    <entry>
5950f8248bfSmrg<para><symbol>XkbStateNotifyMask</symbol></para>
596e9fcaa8aSmrg    </entry>
597e9fcaa8aSmrg    <entry>(1L&lt;&lt;2)</entry>
598e9fcaa8aSmrg    <entry><para>Keyboard state change</para></entry>
599e9fcaa8aSmrg  </row>
600eb411b4bSmrg  <row>
601e9fcaa8aSmrg    <entry>
6020f8248bfSmrg<para><symbol>XkbControlsNotifyMask</symbol></para>
603e9fcaa8aSmrg    </entry>
604e9fcaa8aSmrg    <entry>(1L&lt;&lt;3)</entry>
605e9fcaa8aSmrg    <entry>Keyboard control change</entry>
606e9fcaa8aSmrg  </row>
607eb411b4bSmrg  <row>
608e9fcaa8aSmrg    <entry>
6090f8248bfSmrg<symbol>XkbIndicatorStateNotifyMask</symbol>
610e9fcaa8aSmrg    </entry>
611e9fcaa8aSmrg    <entry>(1L&lt;&lt;4)</entry>
612e9fcaa8aSmrg    <entry>Keyboard indicator state change</entry>
613e9fcaa8aSmrg  </row>
614eb411b4bSmrg  <row>
615e9fcaa8aSmrg    <entry>
6160f8248bfSmrg<symbol>XkbIndicatorMapNotifyMask</symbol>
617e9fcaa8aSmrg    </entry>
618e9fcaa8aSmrg    <entry>(1L&lt;&lt;5)</entry>
619e9fcaa8aSmrg    <entry>Keyboard indicator map change</entry>
620e9fcaa8aSmrg  </row>
621eb411b4bSmrg  <row>
622e9fcaa8aSmrg    <entry>
6230f8248bfSmrg<symbol>XkbNamesNotifyMask</symbol>
624e9fcaa8aSmrg    </entry>
625e9fcaa8aSmrg    <entry>(1L&lt;&lt;6)</entry>
626e9fcaa8aSmrg    <entry>Keyboard name change</entry>
627e9fcaa8aSmrg  </row>
628eb411b4bSmrg  <row>
629e9fcaa8aSmrg    <entry>
6300f8248bfSmrg<symbol>XkbCompatMapNotifyMask</symbol>
631e9fcaa8aSmrg    </entry>
632e9fcaa8aSmrg    <entry>(1L&lt;&lt;7)</entry>
633e9fcaa8aSmrg    <entry>Keyboard compat map change</entry>
634e9fcaa8aSmrg  </row>
635eb411b4bSmrg  <row>
636e9fcaa8aSmrg    <entry>
6370f8248bfSmrg<symbol>XkbBellNotifyMask</symbol>
638e9fcaa8aSmrg    </entry>
639e9fcaa8aSmrg    <entry>(1L&lt;&lt;8)</entry>
640e9fcaa8aSmrg    <entry>Bell</entry>
641e9fcaa8aSmrg  </row>
642eb411b4bSmrg  <row>
643e9fcaa8aSmrg    <entry>
6440f8248bfSmrg<symbol>XkbActionMessageMask</symbol>
645e9fcaa8aSmrg    </entry>
646e9fcaa8aSmrg    <entry>(1L&lt;&lt;9)</entry>
647e9fcaa8aSmrg    <entry>Action message</entry>
648e9fcaa8aSmrg  </row>
649eb411b4bSmrg  <row>
650e9fcaa8aSmrg    <entry>
6510f8248bfSmrg<symbol>XkbAccessXNotifyMask</symbol>
652e9fcaa8aSmrg    </entry>
653e9fcaa8aSmrg    <entry>(1L&lt;&lt;10)</entry>
654e9fcaa8aSmrg    <entry>AccessX features</entry>
655e9fcaa8aSmrg  </row>
656eb411b4bSmrg  <row>
657e9fcaa8aSmrg    <entry>
6580f8248bfSmrg<symbol>XkbExtensionDeviceNotifyMask</symbol>
659e9fcaa8aSmrg    </entry>
660e9fcaa8aSmrg    <entry>(1L&lt;&lt;11)</entry>
661e9fcaa8aSmrg    <entry>Extension device</entry>
662e9fcaa8aSmrg  </row>
663eb411b4bSmrg  <row>
664e9fcaa8aSmrg    <entry>
6650f8248bfSmrg<symbol>XkbAllEventsMask</symbol>
666e9fcaa8aSmrg    </entry>
667e9fcaa8aSmrg    <entry>(0xFFF)</entry>
668e9fcaa8aSmrg    <entry>All Xkb events</entry>
669e9fcaa8aSmrg  </row>
670e9fcaa8aSmrg</tbody>
671e9fcaa8aSmrg</tgroup>
672e9fcaa8aSmrg</table>
673e9fcaa8aSmrg
674e9fcaa8aSmrg</sect2>
675e9fcaa8aSmrg</sect1>
676eb411b4bSmrg<sect1 id='Unified_Xkb_Event_Type'>
677e9fcaa8aSmrg<title>Unified Xkb Event Type</title>
6780f8248bfSmrg<indexterm significance="preferred" zone="Unified_Xkb_Event_Type">
6790f8248bfSmrg<primary>events</primary><secondary><structname>XkbEvent</structname></secondary></indexterm>
6800f8248bfSmrg<indexterm significance="preferred" zone="Unified_Xkb_Event_Type">
6810f8248bfSmrg<primary><structname>XkbEvent</structname></primary></indexterm>
682e9fcaa8aSmrg
683e9fcaa8aSmrg<para>
6840f8248bfSmrgThe
6850f8248bfSmrg<structname>XkbEvent</structname>
6860f8248bfSmrgstructure is a union of the individual structures declared for each Xkb event
6870f8248bfSmrgtype and for the core protocol
6880f8248bfSmrg<structname>XEvent</structname>
6890f8248bfSmrgtype. Given an
6900f8248bfSmrg<structname>XkbEvent</structname>
6910f8248bfSmrgstructure, you may use the
6920f8248bfSmrg<structfield>type</structfield>
6930f8248bfSmrgfield to determine if the event is an Xkb event
6940f8248bfSmrg(<structfield>type</structfield>
6950f8248bfSmrgequals the Xkb base event code; see <link linkend="Initializing_the_Keyboard_Extension">section 2.4</link>). If the event is an Xkb
6960f8248bfSmrgevent, you may then use the
6970f8248bfSmrg<structfield>any.xkb_type</structfield>
6980f8248bfSmrgfield to determine the type of Xkb event and thereafter access the
699e9fcaa8aSmrgevent-dependent components using the union member corresponding to the
700e9fcaa8aSmrgparticular Xkb event type.
701e9fcaa8aSmrg</para>
702e9fcaa8aSmrg
703e9fcaa8aSmrg<para><programlisting>
704e9fcaa8aSmrgtypedef union _XkbEvent {
705e9fcaa8aSmrg      int                            type;
706e9fcaa8aSmrg      XkbAnyEvent                    any;
707e9fcaa8aSmrg      XkbStateNotifyEvent            state;
708e9fcaa8aSmrg      XkbMapNotifyEvent              map;
709e9fcaa8aSmrg      XkbControlsNotifyEvent         ctrls;
710e9fcaa8aSmrg      XkbIndicatorNotifyEvent        indicators;
711e9fcaa8aSmrg      XkbBellNotifyEvent             bell;
712e9fcaa8aSmrg      XkbAccessXNotifyEvent          accessx;
713e9fcaa8aSmrg      XkbNamesNotifyEvent            names;
714e9fcaa8aSmrg      XkbCompatMapNotifyEvent        compat;
715e9fcaa8aSmrg      XkbActionMessageEvent          message;
716e9fcaa8aSmrg      XkbExtensionDeviceNotifyEvent  device;
717e9fcaa8aSmrg      XkbNewKeyboardNotifyEvent      new_kbd;
718e9fcaa8aSmrg      XEvent                         core;
7190f8248bfSmrg} <structname>XkbEvent</structname>;
720e9fcaa8aSmrg</programlisting></para>
721e9fcaa8aSmrg
722e9fcaa8aSmrg<para>
7230f8248bfSmrgThis unified Xkb event type includes a normal
7240f8248bfSmrg<structname>XEvent</structname>
7250f8248bfSmrgas used by the core protocol, so it is straightforward for applications that
726e9fcaa8aSmrguse Xkb events to call the X library event functions without having to cast
727e9fcaa8aSmrgevery reference. For example, to get the next event, you can simply declare a
7280f8248bfSmrgvariable of type
7290f8248bfSmrg<structname>XkbEvent</structname>
7300f8248bfSmrgand call:
731e9fcaa8aSmrg
7320f8248bfSmrg<programlisting>XNextEvent(dpy,&amp;xkbev.core);</programlisting>
7330f8248bfSmrg</para>
734e9fcaa8aSmrg</sect1>
735e9fcaa8aSmrg</chapter>
736