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"><X11/extensions/Xkb.h></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> ⇒ 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⇒select, 0→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<<0)</entry> 584e9fcaa8aSmrg <entry>Keyboard geometry change</entry> 585e9fcaa8aSmrg </row> 586eb411b4bSmrg <row> 587e9fcaa8aSmrg <entry> 5880f8248bfSmrg <symbol>XkbMapNotifyMask</symbol> 589e9fcaa8aSmrg </entry> 590e9fcaa8aSmrg <entry>(1L<<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<<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<<3)</entry> 605e9fcaa8aSmrg <entry>Keyboard control change</entry> 606e9fcaa8aSmrg </row> 607eb411b4bSmrg <row> 608e9fcaa8aSmrg <entry> 6090f8248bfSmrg<symbol>XkbIndicatorStateNotifyMask</symbol> 610e9fcaa8aSmrg </entry> 611e9fcaa8aSmrg <entry>(1L<<4)</entry> 612e9fcaa8aSmrg <entry>Keyboard indicator state change</entry> 613e9fcaa8aSmrg </row> 614eb411b4bSmrg <row> 615e9fcaa8aSmrg <entry> 6160f8248bfSmrg<symbol>XkbIndicatorMapNotifyMask</symbol> 617e9fcaa8aSmrg </entry> 618e9fcaa8aSmrg <entry>(1L<<5)</entry> 619e9fcaa8aSmrg <entry>Keyboard indicator map change</entry> 620e9fcaa8aSmrg </row> 621eb411b4bSmrg <row> 622e9fcaa8aSmrg <entry> 6230f8248bfSmrg<symbol>XkbNamesNotifyMask</symbol> 624e9fcaa8aSmrg </entry> 625e9fcaa8aSmrg <entry>(1L<<6)</entry> 626e9fcaa8aSmrg <entry>Keyboard name change</entry> 627e9fcaa8aSmrg </row> 628eb411b4bSmrg <row> 629e9fcaa8aSmrg <entry> 6300f8248bfSmrg<symbol>XkbCompatMapNotifyMask</symbol> 631e9fcaa8aSmrg </entry> 632e9fcaa8aSmrg <entry>(1L<<7)</entry> 633e9fcaa8aSmrg <entry>Keyboard compat map change</entry> 634e9fcaa8aSmrg </row> 635eb411b4bSmrg <row> 636e9fcaa8aSmrg <entry> 6370f8248bfSmrg<symbol>XkbBellNotifyMask</symbol> 638e9fcaa8aSmrg </entry> 639e9fcaa8aSmrg <entry>(1L<<8)</entry> 640e9fcaa8aSmrg <entry>Bell</entry> 641e9fcaa8aSmrg </row> 642eb411b4bSmrg <row> 643e9fcaa8aSmrg <entry> 6440f8248bfSmrg<symbol>XkbActionMessageMask</symbol> 645e9fcaa8aSmrg </entry> 646e9fcaa8aSmrg <entry>(1L<<9)</entry> 647e9fcaa8aSmrg <entry>Action message</entry> 648e9fcaa8aSmrg </row> 649eb411b4bSmrg <row> 650e9fcaa8aSmrg <entry> 6510f8248bfSmrg<symbol>XkbAccessXNotifyMask</symbol> 652e9fcaa8aSmrg </entry> 653e9fcaa8aSmrg <entry>(1L<<10)</entry> 654e9fcaa8aSmrg <entry>AccessX features</entry> 655e9fcaa8aSmrg </row> 656eb411b4bSmrg <row> 657e9fcaa8aSmrg <entry> 6580f8248bfSmrg<symbol>XkbExtensionDeviceNotifyMask</symbol> 659e9fcaa8aSmrg </entry> 660e9fcaa8aSmrg <entry>(1L<<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,&xkbev.core);</programlisting> 7330f8248bfSmrg</para> 734e9fcaa8aSmrg</sect1> 735e9fcaa8aSmrg</chapter> 736