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='Attaching_Xkb_Actions_to_X_Input_Extension_Devices'> 5e9fcaa8aSmrg<title>Attaching Xkb Actions to X Input Extension Devices</title> 6e9fcaa8aSmrg 7e9fcaa8aSmrg<para> 8e9fcaa8aSmrgThe X input extension allows an X server to support multiple keyboards, as well 9e9fcaa8aSmrgas other input devices, in addition to the core X keyboard and pointer. The 10e9fcaa8aSmrginput extension categorizes devices by grouping them into classes. Keyboards 11e9fcaa8aSmrgand other input devices with keys are classified as KeyClass devices by the 12e9fcaa8aSmrginput extension. Other types of devices supported by the input extension 13e9fcaa8aSmrginclude, but are not limited to: mice, tablets, touchscreens, barcode readers, 14e9fcaa8aSmrgbutton boxes, trackballs, identifier devices, data gloves, and eye trackers. 15e9fcaa8aSmrgXkb provides additional control over all X input extension devices, whether 160f8248bfSmrgthey are <symbol>KeyClass</symbol> 170f8248bfSmrgdevices or not, as well as the core keyboard and pointer. 18e9fcaa8aSmrg</para> 19e9fcaa8aSmrg 20e9fcaa8aSmrg 21e9fcaa8aSmrg<para> 22e9fcaa8aSmrgIf an X server implements support for both the input extension and Xkb, the 23e9fcaa8aSmrgserver implementor determines whether interaction between Xkb and the input 24e9fcaa8aSmrgextension is allowed. Implementors are free to restrict the effects of Xkb to 25e9fcaa8aSmrgonly the core X keyboard device or allow interaction between Xkb and the input 26e9fcaa8aSmrgextension. 27e9fcaa8aSmrg</para> 28e9fcaa8aSmrg 29e9fcaa8aSmrg 30e9fcaa8aSmrg<para> 31e9fcaa8aSmrgSeveral types of interaction between Xkb and the input extension are defined by 32e9fcaa8aSmrgXkb. Some or all may be allowed by the X server implementation. 33e9fcaa8aSmrg</para> 34e9fcaa8aSmrg 35e9fcaa8aSmrg 36e9fcaa8aSmrg<para> 37e9fcaa8aSmrgRegardless of whether the server allows interaction between Xkb and the input 38e9fcaa8aSmrgextension, the following access is provided: 39e9fcaa8aSmrg</para> 40e9fcaa8aSmrg 41e9fcaa8aSmrg<itemizedlist> 42e9fcaa8aSmrg<listitem> 43e9fcaa8aSmrg <para> 44e9fcaa8aSmrgXkb functionality for the core X keyboard device and its mapping is accessed 45e9fcaa8aSmrgvia the functions described in the other chapters of this specification. 46e9fcaa8aSmrg </para> 47e9fcaa8aSmrg</listitem> 48e9fcaa8aSmrg<listitem> 49e9fcaa8aSmrg <para> 50e9fcaa8aSmrgXkb functionality for the core X pointer device is accessed via the 51e9fcaa8aSmrgXkbGetDeviceInfo and XkbSetDeviceInfo functions described in this chapter. 52e9fcaa8aSmrg </para> 53e9fcaa8aSmrg</listitem> 54e9fcaa8aSmrg</itemizedlist> 55e9fcaa8aSmrg 56e9fcaa8aSmrg<para> 57e9fcaa8aSmrgIf all types of interaction are allowed between Xkb and the input extension, 58e9fcaa8aSmrgthe following additional access is provided: 59e9fcaa8aSmrg</para> 60e9fcaa8aSmrg 61e9fcaa8aSmrg<itemizedlist> 62e9fcaa8aSmrg<listitem> 63e9fcaa8aSmrg <para> 640f8248bfSmrgIf allowed, Xkb functionality for additional 650f8248bfSmrg<symbol>KeyClass</symbol> 660f8248bfSmrgdevices supported by the input extension is accessed via those same functions. 67e9fcaa8aSmrg </para> 68e9fcaa8aSmrg</listitem> 69e9fcaa8aSmrg<listitem> 70e9fcaa8aSmrg <para> 710f8248bfSmrgIf allowed, Xkb functionality for non- 720f8248bfSmrg<symbol>KeyClass</symbol> 730f8248bfSmrgdevices supported by the input extension is also accessed via the 74e9fcaa8aSmrgXkbGetDeviceInfo and XkbSetDeviceInfo functions described in this chapter. 75e9fcaa8aSmrg </para> 76e9fcaa8aSmrg</listitem> 77e9fcaa8aSmrg</itemizedlist> 78e9fcaa8aSmrg 79e9fcaa8aSmrg<para> 80e9fcaa8aSmrgEach device has an X Input Extension device ID. Each device may have several 81e9fcaa8aSmrgclasses of feedback. For example, there are two types of feedbacks that can 820f8248bfSmrggenerate bells: bell feedback and keyboard feedback 830f8248bfSmrg(<symbol>BellFeedbackClass</symbol> 840f8248bfSmrgand 850f8248bfSmrg<symbol>KbdFeedbackClass</symbol>). 860f8248bfSmrgA device can have more than one feedback of each type; the feedback ID 87e9fcaa8aSmrgidentifies the particular feedback within its class. 88e9fcaa8aSmrg</para> 89e9fcaa8aSmrg 90e9fcaa8aSmrg 91e9fcaa8aSmrg<para> 92e9fcaa8aSmrgA keyboard feedback has: 93e9fcaa8aSmrg</para> 94e9fcaa8aSmrg 95e9fcaa8aSmrg<itemizedlist> 96e9fcaa8aSmrg<listitem> 97e9fcaa8aSmrg <para> 98e9fcaa8aSmrgAuto-repeat status (global and per key) 99e9fcaa8aSmrg </para> 100e9fcaa8aSmrg</listitem> 101e9fcaa8aSmrg<listitem> 102e9fcaa8aSmrg <para> 103e9fcaa8aSmrg32 LEDs 104e9fcaa8aSmrg </para> 105e9fcaa8aSmrg</listitem> 106e9fcaa8aSmrg<listitem> 107e9fcaa8aSmrg <para> 108e9fcaa8aSmrgA bell 109e9fcaa8aSmrg </para> 110e9fcaa8aSmrg</listitem> 111e9fcaa8aSmrg</itemizedlist> 112e9fcaa8aSmrg 113e9fcaa8aSmrg<para> 114e9fcaa8aSmrgAn indicator feedback has: 115e9fcaa8aSmrg</para> 116e9fcaa8aSmrg 117e9fcaa8aSmrg<itemizedlist> 118e9fcaa8aSmrg<listitem> 119e9fcaa8aSmrg <para> 120e9fcaa8aSmrgUp to 32 LEDs 121e9fcaa8aSmrg </para> 122e9fcaa8aSmrg</listitem> 123e9fcaa8aSmrg</itemizedlist> 124e9fcaa8aSmrg 125e9fcaa8aSmrg<para> 126e9fcaa8aSmrgIf the input extension is present and the server allows interaction between the 127e9fcaa8aSmrginput extension and Xkb, then the core keyboard, the core keyboard indicators, 128e9fcaa8aSmrgand the core keyboard bells may each be addressed using an appropriate device 1290f8248bfSmrgspec, class, and ID. The constant 1300f8248bfSmrg<symbol>XkbDfltXIId</symbol> 1310f8248bfSmrgmay be used as the device ID to specify the core keyboard indicators for the 132e9fcaa8aSmrgcore indicator feedback. The particular device ID corresponding to the core 133e9fcaa8aSmrgkeyboard feedback and the core indicator feedback may be obtained by calling 1340f8248bfSmrg<function>XkbGetDeviceInfo</function> 1350f8248bfSmrgand specifying 1360f8248bfSmrg<symbol>XkbUseCoreKbd</symbol> 1370f8248bfSmrgas the 1380f8248bfSmrg<parameter>device_spec</parameter>; 1390f8248bfSmrgthe values will be returned in 1400f8248bfSmrg<structfield>dflt_kbd_fb</structfield> 1410f8248bfSmrgand 1420f8248bfSmrg<structfield>dflt_led_fb</structfield>. 1430f8248bfSmrg</para> 1440f8248bfSmrg 1450f8248bfSmrg 1460f8248bfSmrg<para> 1470f8248bfSmrgIf the server does not allow Xkb access to input extension 1480f8248bfSmrg<symbol>KeyClass</symbol> 1490f8248bfSmrgdevices, attempts to use Xkb requests with those devices fail with a 1500f8248bfSmrg<errorname>BadKeyboard</errorname> 1510f8248bfSmrgerror. Attempts to access non- 1520f8248bfSmrg<symbol>KeyClass</symbol> 1530f8248bfSmrginput extension devices via XkbGetDeviceInfo and XkbSetDeviceInfo fail 154e9fcaa8aSmrgsilently if Xkb access to those devices is not supported by the X server. 155e9fcaa8aSmrg</para> 156e9fcaa8aSmrg 157eb411b4bSmrg<sect1 id='XkbDeviceInfoRec'> 158e9fcaa8aSmrg<title>XkbDeviceInfoRec</title> 1590f8248bfSmrg<indexterm significance="preferred" zone="XkbDeviceInfoRec"> 1600f8248bfSmrg<primary><structname>XkbDeviceInfoRec</structname></primary></indexterm> 1610f8248bfSmrg<indexterm significance="preferred" zone="XkbDeviceInfoRec"> 1620f8248bfSmrg<primary><structname>XkbDeviceLedInfoRec</structname></primary></indexterm> 163e9fcaa8aSmrg 164e9fcaa8aSmrg<para> 165e9fcaa8aSmrgInformation about X Input Extension devices is transferred between a client 1660f8248bfSmrgprogram and the Xkb extension in an 1670f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 1680f8248bfSmrgstructure: 169e9fcaa8aSmrg 1700f8248bfSmrg<programlisting> 171e9fcaa8aSmrgtypedef struct { 1720f8248bfSmrg char * name; /* name for device */ 1730f8248bfSmrg Atom type; /* name for class of devices */ 1740f8248bfSmrg unsigned short device_spec; /* device of interest */ 1750f8248bfSmrg Bool has_own_state; /* <symbol>True</symbol> ⇒ this device has 1760f8248bfSmrg its own state */ 1770f8248bfSmrg unsigned short supported; /* bits indicating supported capabilities */ 1780f8248bfSmrg unsigned short unsupported; /* bits indicating unsupported capabilities */ 1790f8248bfSmrg unsigned short num_btns; /* number of entries in <structfield>btn_acts</structfield> */ 1800f8248bfSmrg XkbAction * btn_acts; /* button actions */ 1810f8248bfSmrg unsigned short sz_leds; /* total number of entries in LEDs vector */ 1820f8248bfSmrg unsigned short num_leds; /* number of valid entries in LEDs vector */ 1830f8248bfSmrg unsigned short dflt_kbd_fb; /* input extension ID of default 1840f8248bfSmrg (core kbd) indicator */ 1850f8248bfSmrg unsigned short dflt_led_fb; /* input extension ID of default 1860f8248bfSmrg indicator feedback */ 1870f8248bfSmrg XkbDeviceLedInfoPtr leds; /* LED descriptions */ 1880f8248bfSmrg} <structname>XkbDeviceInfoRec</structname>, *XkbDeviceInfoPtr; 189e9fcaa8aSmrg 190e9fcaa8aSmrgtypedef struct { 1910f8248bfSmrg unsigned short led_class; /* class for this LED device */ 1920f8248bfSmrg unsigned short led_id; /* ID for this LED device */ 1930f8248bfSmrg unsigned int phys_indicators; /* bits for which LEDs physically present */ 1940f8248bfSmrg unsigned int maps_present; /* bits for which LEDs have maps in <structfield>maps</structfield> */ 1950f8248bfSmrg unsigned int names_present; /* bits for which LEDs are in <structfield>names</structfield> */ 1960f8248bfSmrg unsigned int state; /* 1 bit ⇒ corresponding LED is on */ 1970f8248bfSmrg Atom names[XkbNumIndicators]; /* names for LEDs */ 1980f8248bfSmrg XkbIndicatorMapRec maps; /* indicator maps for each LED */ 1990f8248bfSmrg} <structname>XkbDeviceLedInfoRec</structname>, *XkbDeviceLedInfoPtr; 200e9fcaa8aSmrg</programlisting></para> 201e9fcaa8aSmrg 202e9fcaa8aSmrg<para> 2030f8248bfSmrgThe 2040f8248bfSmrg<structfield>type</structfield> 2050f8248bfSmrgfield is a registered symbolic name for a class of devices (for example, 2060f8248bfSmrg"TABLET"). If a device is a keyboard (that is, is a member of 2070f8248bfSmrg<symbol>KeyClass</symbol>), 2080f8248bfSmrgit has its own state, and 2090f8248bfSmrg<structfield>has_own_state</structfield> 2100f8248bfSmrgis 2110f8248bfSmrg<symbol>True</symbol>. 2120f8248bfSmrgIf 2130f8248bfSmrg<structfield>has_own_state</structfield> 2140f8248bfSmrgis 2150f8248bfSmrg<symbol>False</symbol>, 2160f8248bfSmrgthe state of the core keyboard is used. The 2170f8248bfSmrg<structfield>supported</structfield> 2180f8248bfSmrgand 2190f8248bfSmrg<structfield>unsupported</structfield> 2200f8248bfSmrgfields are masks where each bit indicates a capability. The meaning of the 2210f8248bfSmrgmask bits is listed in <link linkend="table21.1">Table 21.1</link>, 2220f8248bfSmrgtogether with the fields in the 2230f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 2240f8248bfSmrgstructure that are associated with the capability represented by each bit. The 225e9fcaa8aSmrgsame bits are used to indicate the specific information desired in many of the 226e9fcaa8aSmrgfunctions described subsequently in this section. 227e9fcaa8aSmrg</para> 228e9fcaa8aSmrg 2290f8248bfSmrg<table id='table21.1' frame='topbot'> 230e9fcaa8aSmrg<title>XkbDeviceInfoRec Mask Bits</title> 231eb411b4bSmrg<?dbfo keep-together="always" ?> 232eb411b4bSmrg<tgroup cols='4' align='left' colsep='0' rowsep='0'> 233eb411b4bSmrg<colspec colname='c1' colwidth='2.9*'/> 234eb411b4bSmrg<colspec colname='c2' colwidth='2.0*'/> 235eb411b4bSmrg<colspec colname='c3' colwidth='0.9*'/> 236eb411b4bSmrg<colspec colname='c4' colwidth='2.0*'/> 237e9fcaa8aSmrg<thead> 238eb411b4bSmrg <row rowsep='1'> 239e9fcaa8aSmrg <entry>Name</entry> 240e9fcaa8aSmrg <entry>XkbDeviceInfoRec Fields Effected</entry> 241e9fcaa8aSmrg <entry>Value</entry> 242e9fcaa8aSmrg <entry>Capability If Set</entry> 243e9fcaa8aSmrg </row> 244e9fcaa8aSmrg</thead> 245e9fcaa8aSmrg<tbody> 246eb411b4bSmrg <row> 2470f8248bfSmrg <entry><symbol>XkbXI_KeyboardsMask</symbol></entry> 248e9fcaa8aSmrg <entry></entry> 249e9fcaa8aSmrg <entry>(1L << 0)</entry> 250e9fcaa8aSmrg <entry> 251e9fcaa8aSmrgClients can use all Xkb requests and events with 2520f8248bfSmrg<symbol>KeyClass</symbol> 253e9fcaa8aSmrgdevices supported by the input device extension. 254e9fcaa8aSmrg </entry> 255e9fcaa8aSmrg </row> 256eb411b4bSmrg <row> 2570f8248bfSmrg <entry><symbol>XkbXI_ButtonActionsMask</symbol></entry> 258e9fcaa8aSmrg <entry> 259e9fcaa8aSmrg<para>num_btns</para> 260e9fcaa8aSmrg<para>btn_acts</para> 261e9fcaa8aSmrg </entry> 262e9fcaa8aSmrg <entry>(1L <<1)</entry> 263e9fcaa8aSmrg <entry> 2640f8248bfSmrgClients can assign key actions to buttons on non- 2650f8248bfSmrg<symbol>KeyClass</symbol> 266e9fcaa8aSmrginput extension devices. 267e9fcaa8aSmrg </entry> 268e9fcaa8aSmrg </row> 269eb411b4bSmrg <row> 2700f8248bfSmrg <entry><symbol>XkbXI_IndicatorNamesMask</symbol></entry> 271e9fcaa8aSmrg <entry>leds->names</entry> 272e9fcaa8aSmrg <entry>(1L <<2)</entry> 273e9fcaa8aSmrg <entry> 2740f8248bfSmrgClients can assign names to indicators on non- 2750f8248bfSmrg<symbol>KeyClass</symbol> 2760f8248bfSmrginput extension devices. 277e9fcaa8aSmrg </entry> 278e9fcaa8aSmrg </row> 279eb411b4bSmrg <row> 2800f8248bfSmrg <entry><symbol>XkbXI_IndicatorMapsMask</symbol></entry> 281e9fcaa8aSmrg <entry>leds->maps</entry> 282e9fcaa8aSmrg <entry>(1L <<3)</entry> 283e9fcaa8aSmrg <entry> 2840f8248bfSmrgClients can assign indicator maps to indicators on non- 2850f8248bfSmrg<symbol>KeyClass</symbol> 2860f8248bfSmrginput extension devices. 287e9fcaa8aSmrg </entry> 288e9fcaa8aSmrg </row> 289eb411b4bSmrg <row> 2900f8248bfSmrg <entry><symbol>XkbXI_IndicatorStateMask</symbol></entry> 291e9fcaa8aSmrg <entry>leds->state</entry> 292e9fcaa8aSmrg <entry>(1L <<4)</entry> 293e9fcaa8aSmrg <entry> 2940f8248bfSmrgClients can request the status of indicators on non- 2950f8248bfSmrg<symbol>KeyClass</symbol> 2960f8248bfSmrginput extension devices. 297e9fcaa8aSmrg </entry> 298e9fcaa8aSmrg </row> 299eb411b4bSmrg <row> 3000f8248bfSmrg <entry><symbol>XkbXI_IndicatorsMask</symbol></entry> 301e9fcaa8aSmrg <entry> 302e9fcaa8aSmrg<para>sz_leds</para> 303e9fcaa8aSmrg<para>num_leds</para> 304e9fcaa8aSmrg<para>leds->*</para> 305e9fcaa8aSmrg </entry> 306e9fcaa8aSmrg <entry>(0x1c)</entry> 307e9fcaa8aSmrg <entry> 3080f8248bfSmrg<para><symbol>XkbXI_IndicatorNames­Mask</symbol> |</para> 3090f8248bfSmrg<para><symbol>XkbXI_IndicatorMaps­Mask</symbol> |</para> 3100f8248bfSmrg<para><symbol>XkbXI_IndicatorState­Mask</symbol></para> 311e9fcaa8aSmrg </entry> 312e9fcaa8aSmrg </row> 313eb411b4bSmrg <row> 3140f8248bfSmrg <entry><symbol>XkbXI_UnsupportedFeaturesMask</symbol></entry> 315e9fcaa8aSmrg <entry>unsupported</entry> 316e9fcaa8aSmrg <entry>(1L <<15)</entry> 317e9fcaa8aSmrg <entry></entry> 318e9fcaa8aSmrg </row> 319eb411b4bSmrg <row> 3200f8248bfSmrg <entry><symbol>XkbXI_AllDeviceFeaturesMask</symbol></entry> 321e9fcaa8aSmrg <entry>Those selected by Value column masks</entry> 322e9fcaa8aSmrg <entry>(0x1e)</entry> 323e9fcaa8aSmrg <entry> 3240f8248bfSmrg<para><symbol>XkbXI_Indicators­Mask</symbol> | </para> 3250f8248bfSmrg<para><symbol>XkbXI_ButtonActions­Mask</symbol> </para> 326e9fcaa8aSmrg </entry> 327e9fcaa8aSmrg </row> 328eb411b4bSmrg <row> 3290f8248bfSmrg <entry><symbol>XkbXI_AllFeaturesMask</symbol></entry> 330e9fcaa8aSmrg <entry>Those selected by Value column masks</entry> 331e9fcaa8aSmrg <entry>(0x1f)</entry> 332e9fcaa8aSmrg <entry> 3330f8248bfSmrg<para><symbol>XkbXI_AllDevice­FeaturesMask</symbol> | </para> 3340f8248bfSmrg<para><symbol>XkbXI_Keyboards­Mask</symbol> </para> 335e9fcaa8aSmrg </entry> 336e9fcaa8aSmrg </row> 337eb411b4bSmrg <row> 3380f8248bfSmrg <entry><symbol>XkbXI_AllDetailsMask</symbol></entry> 339e9fcaa8aSmrg <entry>Those selected by Value column masks</entry> 340e9fcaa8aSmrg <entry>(0x801f)</entry> 341e9fcaa8aSmrg <entry> 3420f8248bfSmrg<para><symbol>XkbXI_AllFeatures­Mask</symbol> | </para> 3430f8248bfSmrg<para><symbol>XkbXI_Unsupported­FeaturesMask</symbol></para> 344e9fcaa8aSmrg </entry> 345e9fcaa8aSmrg </row> 346e9fcaa8aSmrg</tbody> 347e9fcaa8aSmrg</tgroup> 348e9fcaa8aSmrg</table> 349e9fcaa8aSmrg 350e9fcaa8aSmrg<para> 3510f8248bfSmrgThe 3520f8248bfSmrg<structfield>name</structfield>, 3530f8248bfSmrg<structfield>type</structfield>, 3540f8248bfSmrg<structfield>has_own_state</structfield>, 3550f8248bfSmrg<structfield>supported</structfield>, 3560f8248bfSmrgand 3570f8248bfSmrg<structfield>unsupported</structfield> 3580f8248bfSmrgfields are always filled in when a valid reply is returned from the server 3590f8248bfSmrginvolving an 3600f8248bfSmrg<structname>XkbDeviceInfoRec</structname>. 3610f8248bfSmrgAll of the other fields are modified only if the particular function asks for 362e9fcaa8aSmrgthem. 363e9fcaa8aSmrg</para> 364e9fcaa8aSmrg 365e9fcaa8aSmrg</sect1> 366eb411b4bSmrg<sect1 id='Querying_Xkb_Features_for_Non_KeyClass_Input_Extension_Devices'> 367e9fcaa8aSmrg<title>Querying Xkb Features for Non-KeyClass Input Extension Devices</title> 368e9fcaa8aSmrg 369e9fcaa8aSmrg<para> 370e9fcaa8aSmrgTo determine whether the X server allows Xkb access to particular capabilities 371e9fcaa8aSmrgof input devices other than the core X keyboard, or to determine the status of 3720f8248bfSmrgindicator maps, indicator names or button actions on a non- 3730f8248bfSmrg<symbol>KeyClass</symbol> 3740f8248bfSmrgextension device, use XkbGetDeviceInfo. 3750f8248bfSmrg</para> 3760f8248bfSmrg 3770f8248bfSmrg<indexterm significance="preferred" zone="XkbGetDeviceInfo"><primary><function>XkbGetDeviceInfo</function></primary></indexterm> 3780f8248bfSmrg<funcsynopsis id="XkbGetDeviceInfo"> 3790f8248bfSmrg <funcprototype> 3800f8248bfSmrg <funcdef>XkbDeviceInfoPtr <function>XkbGetDeviceInfo</function></funcdef> 3810f8248bfSmrg<!-- ( 3820f8248bfSmrg<parameter>dpy</parameter>, 3830f8248bfSmrgwhich, device_spec, ind_class, ind_id) --> 3840f8248bfSmrg 3850f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 3860f8248bfSmrg <paramdef>unsigned int <parameter>which</parameter></paramdef> 3870f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 3880f8248bfSmrg <paramdef>unsigned int <parameter>ind_class</parameter></paramdef> 3890f8248bfSmrg <paramdef>unsigned int <parameter>ind_id</parameter></paramdef> 3900f8248bfSmrg </funcprototype> 3910f8248bfSmrg</funcsynopsis> 3920f8248bfSmrg<variablelist> 3930f8248bfSmrg <varlistentry> 3940f8248bfSmrg <term> 3950f8248bfSmrg <parameter>dpy</parameter> 3960f8248bfSmrg </term> 3970f8248bfSmrg <listitem> 3980f8248bfSmrg <para> 3990f8248bfSmrg connection to X server 4000f8248bfSmrg </para> 4010f8248bfSmrg </listitem> 4020f8248bfSmrg </varlistentry> 4030f8248bfSmrg <varlistentry> 4040f8248bfSmrg <term> 4050f8248bfSmrg <parameter>which</parameter> 4060f8248bfSmrg </term> 4070f8248bfSmrg <listitem> 4080f8248bfSmrg <para> 4090f8248bfSmrg mask indicating information to return 4100f8248bfSmrg </para> 4110f8248bfSmrg </listitem> 4120f8248bfSmrg </varlistentry> 4130f8248bfSmrg <varlistentry> 4140f8248bfSmrg <term> 4150f8248bfSmrg <parameter>device_spec</parameter> 4160f8248bfSmrg </term> 4170f8248bfSmrg <listitem> 4180f8248bfSmrg <para> 4190f8248bfSmrg device ID, or <symbol>XkbUseCoreKbd</symbol> 4200f8248bfSmrg </para> 4210f8248bfSmrg </listitem> 4220f8248bfSmrg </varlistentry> 4230f8248bfSmrg <varlistentry> 4240f8248bfSmrg <term> 4250f8248bfSmrg <parameter>ind_class</parameter> 4260f8248bfSmrg </term> 4270f8248bfSmrg <listitem> 4280f8248bfSmrg <para> 4290f8248bfSmrg feedback class for indicator requests 4300f8248bfSmrg </para> 4310f8248bfSmrg </listitem> 4320f8248bfSmrg </varlistentry> 4330f8248bfSmrg <varlistentry> 4340f8248bfSmrg <term> 4350f8248bfSmrg <parameter>ind_id</parameter> 4360f8248bfSmrg </term> 4370f8248bfSmrg <listitem> 4380f8248bfSmrg <para> 4390f8248bfSmrg feedback ID for indicator requests 4400f8248bfSmrg </para> 4410f8248bfSmrg </listitem> 4420f8248bfSmrg </varlistentry> 4430f8248bfSmrg</variablelist> 4440f8248bfSmrg 4450f8248bfSmrg<para> 4460f8248bfSmrg<function>XkbGetDeviceInfo</function> 4470f8248bfSmrgreturns information about the input device specified by 4480f8248bfSmrg<parameter>device_spec</parameter>. 4490f8248bfSmrgUnlike the 4500f8248bfSmrg<parameter>device_spec</parameter> 4510f8248bfSmrgparameter of most Xkb functions, 4520f8248bfSmrg<parameter>device_spec</parameter> 4530f8248bfSmrgdoes not need to be a keyboard device. It must, however, indicate either the 454e9fcaa8aSmrgcore keyboard or a valid X Input Extension device. 455e9fcaa8aSmrg</para> 456e9fcaa8aSmrg 457e9fcaa8aSmrg 458e9fcaa8aSmrg<para> 4590f8248bfSmrgThe 4600f8248bfSmrg<parameter>which</parameter> 4610f8248bfSmrgparameter 462e9fcaa8aSmrgis a mask specifying optional information to be returned. It is an inclusive OR 4630f8248bfSmrgof one or more of the values from <link linkend="table21.1">Table 21.1</link> 4640f8248bfSmrgand causes the returned 4650f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 4660f8248bfSmrgto contain values for the corresponding fields specified in the table. 467e9fcaa8aSmrg</para> 468e9fcaa8aSmrg 469e9fcaa8aSmrg 470e9fcaa8aSmrg<para> 4710f8248bfSmrgThe 4720f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 4730f8248bfSmrgreturned by 4740f8248bfSmrg<function>XkbGetDeviceInfo</function> 4750f8248bfSmrgalways has values for 4760f8248bfSmrg<structfield>name</structfield> 4770f8248bfSmrg(may be a null string, ""), 4780f8248bfSmrg<structfield>type</structfield>, 4790f8248bfSmrg<structfield>supported</structfield>, 4800f8248bfSmrg<structfield>unsupported</structfield>, 4810f8248bfSmrg<structfield>has_own_state</structfield>, 4820f8248bfSmrg<structfield>dflt_kbd_fb</structfield>, 4830f8248bfSmrgand 4840f8248bfSmrg<structfield>dflt_led_fb</structfield>. 4850f8248bfSmrgOther fields are filled in as specified by 4860f8248bfSmrg<parameter>which</parameter>. 487e9fcaa8aSmrg</para> 488e9fcaa8aSmrg 489e9fcaa8aSmrg 490e9fcaa8aSmrg<para> 4910f8248bfSmrgUpon return, the 4920f8248bfSmrg<structfield>supported</structfield> 4930f8248bfSmrgfield will be set to the inclusive OR of zero or more bits from 4940f8248bfSmrg<link linkend="table21.1">Table 21.1</link>; 495e9fcaa8aSmrgeach bit set indicates an optional Xkb extension device feature supported by 496e9fcaa8aSmrgthe server implementation, and a client may modify the associated behavior. 497e9fcaa8aSmrg</para> 498e9fcaa8aSmrg 499e9fcaa8aSmrg 500e9fcaa8aSmrg<para> 5010f8248bfSmrgIf the 5020f8248bfSmrg<symbol>XkbXI_ButtonActionsMask</symbol> 5030f8248bfSmrgbit is set in 5040f8248bfSmrg<parameter>which</parameter>, 5050f8248bfSmrgthe 5060f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 5070f8248bfSmrgreturned will have the button actions 5080f8248bfSmrg(<structfield>btn_acts</structfield> 5090f8248bfSmrgfield) filled in for all buttons. 510e9fcaa8aSmrg</para> 511e9fcaa8aSmrg 512e9fcaa8aSmrg 513e9fcaa8aSmrg<para> 5140f8248bfSmrgIf 5150f8248bfSmrg<parameter>which</parameter> 5160f8248bfSmrgincludes one of the bits in <symbol>XkbXI_IndicatorsMask</symbol>, 5170f8248bfSmrgthe feedback class of the 518e9fcaa8aSmrgindicators must be specified in ind_class, and the feedback ID of the 519e9fcaa8aSmrgindicators must be specified in ind_id. If the request does not include any of 5200f8248bfSmrgthe bits in <symbol>XkbXI_IndicatorsMask</symbol>, 5210f8248bfSmrgthe ind_class and ind_id parameters are 522e9fcaa8aSmrgignored. The class and ID can be obtained via the input device extension 523e9fcaa8aSmrgXListInputDevices request. 524e9fcaa8aSmrg</para> 525e9fcaa8aSmrg 526e9fcaa8aSmrg 527e9fcaa8aSmrg<para> 5280f8248bfSmrgIf any of the 5290f8248bfSmrg<symbol>XkbXI_IndicatorsMask</symbol> 5300f8248bfSmrgbits are set in 5310f8248bfSmrg<parameter>which</parameter>, 5320f8248bfSmrgthe 5330f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 5340f8248bfSmrgreturned will have filled in the portions of the 5350f8248bfSmrg<structfield>leds</structfield> 5360f8248bfSmrgstructure corresponding to the indicator feedback identified by 5370f8248bfSmrg<parameter>ind_class</parameter> 5380f8248bfSmrgand 5390f8248bfSmrg<parameter>ind_id</parameter>. 5400f8248bfSmrgThe 5410f8248bfSmrg<structfield>leds</structfield> 5420f8248bfSmrgvector of the 5430f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 5440f8248bfSmrgis allocated if necessary and 5450f8248bfSmrg<structfield>sz_leds</structfield> 5460f8248bfSmrgand 5470f8248bfSmrg<structfield>num_leds</structfield> 5480f8248bfSmrgfilled in. The 5490f8248bfSmrg<structfield>led_class</structfield>, 5500f8248bfSmrg<structfield>led_id</structfield> 5510f8248bfSmrgand 5520f8248bfSmrg<structfield>phys_indicators</structfield> 5530f8248bfSmrgfields of the 5540f8248bfSmrg<structfield>leds</structfield> 5550f8248bfSmrgentry corresponding to 5560f8248bfSmrg<parameter>ind_class</parameter> 5570f8248bfSmrgand 5580f8248bfSmrg<parameter>ind_id</parameter> 5590f8248bfSmrgare always filled in. If 5600f8248bfSmrg<parameter>which</parameter> 5610f8248bfSmrgcontains 5620f8248bfSmrg<symbol>XkbXI_IndicatorNamesMask</symbol>, 5630f8248bfSmrgthe 5640f8248bfSmrg<structfield>names_present</structfield> 5650f8248bfSmrgand 5660f8248bfSmrg<structfield>names</structfield> 5670f8248bfSmrgfields of the 5680f8248bfSmrg<structfield>leds</structfield> 5690f8248bfSmrgstructure corresponding to 5700f8248bfSmrg<parameter>ind_class</parameter> 5710f8248bfSmrgand 5720f8248bfSmrg<parameter>ind_id</parameter> 5730f8248bfSmrgare returned. 5740f8248bfSmrgIf 5750f8248bfSmrg<parameter>which</parameter> 5760f8248bfSmrgcontains 5770f8248bfSmrg<symbol>XkbXI_IndicatorStateMask</symbol>, 5780f8248bfSmrgthe corresponding 5790f8248bfSmrg<structfield>state</structfield> 5800f8248bfSmrgfield is updated. If 5810f8248bfSmrg<parameter>which</parameter> 5820f8248bfSmrgcontains 5830f8248bfSmrg<symbol>XkbXI_IndicatorMapsMask</symbol>, 5840f8248bfSmrgthe 5850f8248bfSmrg<structfield>maps_present</structfield> 5860f8248bfSmrgand 5870f8248bfSmrg<structfield>maps</structfield> 5880f8248bfSmrgfields are updated. 589e9fcaa8aSmrg</para> 590e9fcaa8aSmrg 591e9fcaa8aSmrg 592e9fcaa8aSmrg<para> 593e9fcaa8aSmrgXkb provides convenience functions to request subsets of the information 5940f8248bfSmrgavailable via 5950f8248bfSmrg<function>XkbGetDeviceInfo</function>. 5960f8248bfSmrgThese convenience functions mirror some of the mask bits. The functions all 5970f8248bfSmrgtake an 5980f8248bfSmrg<type>XkbDeviceInfoPtr</type> 5990f8248bfSmrgas an input argument and operate on the X Input Extension device specified by 6000f8248bfSmrgthe 6010f8248bfSmrg<parameter>device_spec</parameter> 6020f8248bfSmrgfield of the structure. Only the parts of the structure indicated in the 6030f8248bfSmrgfunction description are updated. The 6040f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 6050f8248bfSmrgstructure used in the function call can be obtained by calling 6060f8248bfSmrgXkbGetDeviceInfo or can be allocated by calling XkbAllocDeviceInfo 6070f8248bfSmrg(see <link linkend="Allocating_Initializing_and_Freeing_the_XkbDeviceInfoRecStructure">section 21.3</link>). 608e9fcaa8aSmrg</para> 609e9fcaa8aSmrg 610e9fcaa8aSmrg 611e9fcaa8aSmrg<para> 612e9fcaa8aSmrgThese convenience functions are described as follows. 613e9fcaa8aSmrg</para> 614e9fcaa8aSmrg 615e9fcaa8aSmrg 616e9fcaa8aSmrg<para> 617e9fcaa8aSmrgTo query the button actions associated with an X Input Extension device, use 618e9fcaa8aSmrgXkbGetDeviceButtonActions. 619e9fcaa8aSmrg</para> 620e9fcaa8aSmrg 621e9fcaa8aSmrg 6220f8248bfSmrg<indexterm significance="preferred" zone="XkbGetDeviceButtonActions"><primary><function>XkbGetDeviceButtonActions</function></primary></indexterm> 6230f8248bfSmrg<funcsynopsis id="XkbGetDeviceButtonActions"> 6240f8248bfSmrg <funcprototype> 6250f8248bfSmrg <funcdef>Status <function>XkbGetDeviceButtonActions</function></funcdef> 6260f8248bfSmrg<!-- ( 6270f8248bfSmrg<parameter>dpy, device_info, all_buttons, first_button, num_buttons</parameter> 6280f8248bfSmrg) --> 6290f8248bfSmrg 6300f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 6310f8248bfSmrg <paramdef>XkbDeviceInfoPtr <parameter>device_info</parameter></paramdef> 6320f8248bfSmrg <paramdef>Bool <parameter>all_buttons</parameter></paramdef> 6330f8248bfSmrg <paramdef>unsigned int <parameter>first_button</parameter></paramdef> 6340f8248bfSmrg <paramdef>unsigned int <parameter>num_buttons</parameter></paramdef> 6350f8248bfSmrg </funcprototype> 6360f8248bfSmrg</funcsynopsis> 6370f8248bfSmrg<variablelist> 6380f8248bfSmrg <varlistentry> 6390f8248bfSmrg <term> 6400f8248bfSmrg <parameter>dpy</parameter> 6410f8248bfSmrg </term> 6420f8248bfSmrg <listitem> 6430f8248bfSmrg <para> 6440f8248bfSmrg connection to X server 6450f8248bfSmrg </para> 6460f8248bfSmrg </listitem> 6470f8248bfSmrg </varlistentry> 6480f8248bfSmrg <varlistentry> 6490f8248bfSmrg <term> 6500f8248bfSmrg <parameter>device_info</parameter> 6510f8248bfSmrg </term> 6520f8248bfSmrg <listitem> 6530f8248bfSmrg <para> 6540f8248bfSmrg structure to update with results 6550f8248bfSmrg </para> 6560f8248bfSmrg </listitem> 6570f8248bfSmrg </varlistentry> 6580f8248bfSmrg <varlistentry> 6590f8248bfSmrg <term> 6600f8248bfSmrg <parameter>all_buttons</parameter> 6610f8248bfSmrg </term> 6620f8248bfSmrg <listitem> 6630f8248bfSmrg <para> 6640f8248bfSmrg <symbol>True</symbol> ⇒ get information for all buttons 6650f8248bfSmrg </para> 6660f8248bfSmrg </listitem> 6670f8248bfSmrg </varlistentry> 6680f8248bfSmrg <varlistentry> 6690f8248bfSmrg <term> 6700f8248bfSmrg <parameter>first_button</parameter> 6710f8248bfSmrg </term> 6720f8248bfSmrg <listitem> 6730f8248bfSmrg <para> 6740f8248bfSmrg number of first button for which info is desired 6750f8248bfSmrg </para> 6760f8248bfSmrg </listitem> 6770f8248bfSmrg </varlistentry> 6780f8248bfSmrg <varlistentry> 6790f8248bfSmrg <term> 6800f8248bfSmrg <parameter>num_buttons</parameter> 6810f8248bfSmrg </term> 6820f8248bfSmrg <listitem> 6830f8248bfSmrg <para> 6840f8248bfSmrg number of buttons for which info is desired 6850f8248bfSmrg </para> 6860f8248bfSmrg </listitem> 6870f8248bfSmrg </varlistentry> 6880f8248bfSmrg</variablelist> 6890f8248bfSmrg 6900f8248bfSmrg<para> 6910f8248bfSmrg<function>XkbGetDeviceButtonActions</function> 6920f8248bfSmrgqueries the server for the desired button information for the device indicated 6930f8248bfSmrgby the 6940f8248bfSmrg<structfield>device_spec</structfield> 6950f8248bfSmrgfield of 6960f8248bfSmrg<parameter>device_info</parameter> 6970f8248bfSmrgand waits for a reply. If successful, 6980f8248bfSmrg<function>XkbGetDeviceButtonActions</function> 6990f8248bfSmrgbackfills the button actions 7000f8248bfSmrg(<structfield>btn_acts</structfield> 7010f8248bfSmrgfield of 7020f8248bfSmrg<parameter>device_info</parameter>) 7030f8248bfSmrgfor only the requested buttons, updates the 7040f8248bfSmrg<structfield>name</structfield>, 7050f8248bfSmrg<structfield>type</structfield>, 7060f8248bfSmrg<structfield>supported</structfield>, 7070f8248bfSmrgand 7080f8248bfSmrg<structfield>unsupported</structfield> 7090f8248bfSmrgfields, and returns 7100f8248bfSmrg<symbol>Success</symbol>. 7110f8248bfSmrg</para> 7120f8248bfSmrg 7130f8248bfSmrg 7140f8248bfSmrg<para> 7150f8248bfSmrg<parameter>all_buttons</parameter>, 7160f8248bfSmrg<parameter>first_button</parameter> 7170f8248bfSmrgand 7180f8248bfSmrg<parameter>num_buttons</parameter> 7190f8248bfSmrgspecify the device buttons for which actions should be returned. Setting 7200f8248bfSmrg<parameter>all_buttons</parameter> 7210f8248bfSmrgto 7220f8248bfSmrg<symbol>True</symbol> 7230f8248bfSmrgrequests actions for all device buttons; if 7240f8248bfSmrg<parameter>all_buttons</parameter> 7250f8248bfSmrgis 7260f8248bfSmrg<symbol>False</symbol>, 7270f8248bfSmrg<parameter>first_button</parameter> 7280f8248bfSmrgand 7290f8248bfSmrg<parameter>num_buttons</parameter> 7300f8248bfSmrgspecify a range of buttons for which actions are requested. 731e9fcaa8aSmrg</para> 732e9fcaa8aSmrg 733e9fcaa8aSmrg 734e9fcaa8aSmrg<para> 735e9fcaa8aSmrgIf a compatible version of Xkb is not available in the server or the Xkb 736e9fcaa8aSmrgextension has not been properly initialized, XkbGetDeviceButtonActions returns 7370f8248bfSmrg<errorname>BadAccess</errorname>. 7380f8248bfSmrgIf allocation errors occur, a 7390f8248bfSmrg<errorname>BadAlloc</errorname> 7400f8248bfSmrgstatus is returned. If the specified device 7410f8248bfSmrg(<parameter>device_info</parameter>-><structfield>device_spec</structfield>) 7420f8248bfSmrgis invalid, a 7430f8248bfSmrg<errorname>BadKeyboard</errorname> 7440f8248bfSmrgstatus is returned. If the device has no buttons, a 7450f8248bfSmrg<errorname>BadMatch</errorname> 7460f8248bfSmrgstatus is returned. If 7470f8248bfSmrg<parameter>first_button</parameter> 7480f8248bfSmrgand 7490f8248bfSmrg<parameter>num_buttons</parameter> 7500f8248bfSmrgspecify illegal buttons, a 7510f8248bfSmrg<errorname>BadValue</errorname> 7520f8248bfSmrgstatus is returned. 753e9fcaa8aSmrg</para> 754e9fcaa8aSmrg 755e9fcaa8aSmrg 756e9fcaa8aSmrg<para> 757e9fcaa8aSmrgTo query the indicator names, maps, and state associated with an LED feedback 758e9fcaa8aSmrgof an input extension device, use XkbGetDeviceLedInfo. 759e9fcaa8aSmrg</para> 760e9fcaa8aSmrg 761e9fcaa8aSmrg 7620f8248bfSmrg<indexterm significance="preferred" zone="XkbGetDeviceLedInfo"><primary><function>XkbGetDeviceLedInfo</function></primary></indexterm> 7630f8248bfSmrg<funcsynopsis id="XkbGetDeviceLedInfo"> 7640f8248bfSmrg <funcprototype> 7650f8248bfSmrg <funcdef>Status <function>XkbGetDeviceLedInfo</function></funcdef> 7660f8248bfSmrg<!-- ( 7670f8248bfSmrg<parameter>dpy, device_i</parameter> 7680f8248bfSmrgnfo, led_class, led_id, which) --> 7690f8248bfSmrg 7700f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 7710f8248bfSmrg <paramdef>XkbDeviceInfoPtr <parameter>device_info</parameter></paramdef> 7720f8248bfSmrg <paramdef>unsigned int <parameter>led_class</parameter></paramdef> 7730f8248bfSmrg <paramdef>unsigned int <parameter>led_id</parameter></paramdef> 7740f8248bfSmrg <paramdef>unsigned int <parameter>which</parameter></paramdef> 7750f8248bfSmrg </funcprototype> 7760f8248bfSmrg</funcsynopsis> 7770f8248bfSmrg<variablelist> 7780f8248bfSmrg <varlistentry> 7790f8248bfSmrg <term> 7800f8248bfSmrg <parameter>dpy</parameter> 7810f8248bfSmrg </term> 7820f8248bfSmrg <listitem> 7830f8248bfSmrg <para> 7840f8248bfSmrg connection to X server 7850f8248bfSmrg </para> 7860f8248bfSmrg </listitem> 7870f8248bfSmrg </varlistentry> 7880f8248bfSmrg <varlistentry> 7890f8248bfSmrg <term> 7900f8248bfSmrg <parameter>device_info</parameter> 7910f8248bfSmrg </term> 7920f8248bfSmrg <listitem> 7930f8248bfSmrg <para> 7940f8248bfSmrg structure to update with results 7950f8248bfSmrg </para> 7960f8248bfSmrg </listitem> 7970f8248bfSmrg </varlistentry> 7980f8248bfSmrg <varlistentry> 7990f8248bfSmrg <term> 8000f8248bfSmrg <parameter>led_class</parameter> 8010f8248bfSmrg </term> 8020f8248bfSmrg <listitem> 8030f8248bfSmrg <para> 8040f8248bfSmrg LED feedback class assigned by input extension 8050f8248bfSmrg </para> 8060f8248bfSmrg </listitem> 8070f8248bfSmrg </varlistentry> 8080f8248bfSmrg <varlistentry> 8090f8248bfSmrg <term> 8100f8248bfSmrg <parameter>led_id</parameter> 8110f8248bfSmrg </term> 8120f8248bfSmrg <listitem> 8130f8248bfSmrg <para> 8140f8248bfSmrg LED feedback ID assigned by input extension 8150f8248bfSmrg </para> 8160f8248bfSmrg </listitem> 8170f8248bfSmrg </varlistentry> 8180f8248bfSmrg <varlistentry> 8190f8248bfSmrg <term> 8200f8248bfSmrg <parameter>which</parameter> 8210f8248bfSmrg </term> 8220f8248bfSmrg <listitem> 8230f8248bfSmrg <para> 8240f8248bfSmrg mask indicating desired information 8250f8248bfSmrg </para> 8260f8248bfSmrg </listitem> 8270f8248bfSmrg </varlistentry> 8280f8248bfSmrg</variablelist> 8290f8248bfSmrg 8300f8248bfSmrg<para> 8310f8248bfSmrg<function>XkbGetDeviceLedInfo</function> 8320f8248bfSmrgqueries the server for the desired LED information for the feedback specified 8330f8248bfSmrgby 8340f8248bfSmrg<parameter>led_class</parameter> 8350f8248bfSmrgand 8360f8248bfSmrg<parameter>led_id</parameter> 8370f8248bfSmrgfor the X input extension device indicated by 8380f8248bfSmrg<structfield>device_spec</structfield>-><parameter>device_info</parameter> 8390f8248bfSmrgand waits for a reply. If successful, 8400f8248bfSmrg<function>XkbGetDeviceLedInfo</function> 8410f8248bfSmrgbackfills the relevant fields of 8420f8248bfSmrg<parameter>device_info</parameter> 8430f8248bfSmrgas determined by 8440f8248bfSmrg<parameter>which</parameter> 8450f8248bfSmrgwith the results and returns 8460f8248bfSmrg<symbol>Success</symbol>. 8470f8248bfSmrgValid values for 8480f8248bfSmrg<parameter>which</parameter> 8490f8248bfSmrgare the inclusive OR of any of 8500f8248bfSmrg<symbol>XkbXI_IndicatorNamesMask</symbol>, 8510f8248bfSmrg<symbol>XkbXI_IndicatorMapsMask</symbol>, 8520f8248bfSmrgand 8530f8248bfSmrg<symbol>XkbXI_IndicatorStateMask</symbol>. 8540f8248bfSmrg</para> 8550f8248bfSmrg 8560f8248bfSmrg 8570f8248bfSmrg<para> 8580f8248bfSmrgThe fields of 8590f8248bfSmrg<parameter>device_info</parameter> 8600f8248bfSmrgthat are filled in when this request succeeds are 8610f8248bfSmrg<structfield>name</structfield>, 8620f8248bfSmrg<structfield>type</structfield>, 8630f8248bfSmrg<structfield>supported</structfield>, 8640f8248bfSmrgand 8650f8248bfSmrg<structfield>unsupported</structfield>, 8660f8248bfSmrgand portions of the 8670f8248bfSmrg<structfield>leds</structfield> 8680f8248bfSmrgstructure corresponding to 8690f8248bfSmrg<parameter>led_class</parameter> 8700f8248bfSmrgand 8710f8248bfSmrg<parameter>led_id</parameter> 8720f8248bfSmrgas indicated by the bits set in 8730f8248bfSmrg<parameter>which</parameter>. 8740f8248bfSmrgThe 8750f8248bfSmrg<structfield>device_info->leds</structfield> 8760f8248bfSmrgvector is allocated if necessary and 8770f8248bfSmrg<structfield>sz_leds</structfield> 8780f8248bfSmrgand 8790f8248bfSmrg<structfield>num_leds</structfield> 8800f8248bfSmrgfilled in. The 8810f8248bfSmrg<parameter>led_class</parameter>, 8820f8248bfSmrg<parameter>led_id</parameter> 8830f8248bfSmrgand 8840f8248bfSmrg<structfield>phys_indicators</structfield> 8850f8248bfSmrgfields of the 8860f8248bfSmrg<parameter>device_info</parameter>-><structfield>leds</structfield> 8870f8248bfSmrgentry corresponding to 8880f8248bfSmrg<parameter>led_class</parameter> 8890f8248bfSmrgand 8900f8248bfSmrg<parameter>led_id</parameter> 8910f8248bfSmrgare always filled in. 8920f8248bfSmrg</para> 8930f8248bfSmrg 8940f8248bfSmrg 8950f8248bfSmrg<para> 8960f8248bfSmrgIf 8970f8248bfSmrg<parameter>which</parameter> 8980f8248bfSmrgcontains 8990f8248bfSmrg<symbol>XkbXI_IndicatorNamesMask</symbol>, 9000f8248bfSmrgthe 9010f8248bfSmrg<structfield>names_present</structfield> 9020f8248bfSmrgand 9030f8248bfSmrg<structfield>names</structfield> 9040f8248bfSmrgfields of the 9050f8248bfSmrg<parameter>device_info</parameter>-><structfield>leds</structfield> 9060f8248bfSmrgstructure corresponding to 9070f8248bfSmrg<parameter>led_class</parameter> 9080f8248bfSmrgand 9090f8248bfSmrg<parameter>led_id</parameter> 9100f8248bfSmrgare updated, if 9110f8248bfSmrg<parameter>which</parameter> 9120f8248bfSmrgcontains 9130f8248bfSmrg<symbol>XkbXI_IndicatorStateMask</symbol>, 9140f8248bfSmrgthe corresponding 9150f8248bfSmrg<structfield>state</structfield> 9160f8248bfSmrgfield is updated, and if 9170f8248bfSmrg<parameter>which</parameter> 9180f8248bfSmrgcontains 9190f8248bfSmrg<symbol>XkbXI_IndicatorMapsMask</symbol>, 9200f8248bfSmrgthe 9210f8248bfSmrg<structfield>maps_present</structfield> 9220f8248bfSmrgand 9230f8248bfSmrg<structfield>maps</structfield> 9240f8248bfSmrgfields are updated. 925e9fcaa8aSmrg</para> 926e9fcaa8aSmrg 927e9fcaa8aSmrg 928e9fcaa8aSmrg<para> 929e9fcaa8aSmrgIf a compatible version of Xkb is not available in the server or the Xkb 9300f8248bfSmrgextension has not been properly initialized, 9310f8248bfSmrg<function>XkbGetDeviceLedInfo</function> 9320f8248bfSmrgreturns 9330f8248bfSmrg<errorname>BadAccess</errorname>. 9340f8248bfSmrgIf allocation errors occur, a 9350f8248bfSmrg<errorname>BadAlloc</errorname> 9360f8248bfSmrgstatus is returned. If the device has no indicators, a 9370f8248bfSmrg<errorname>BadMatch</errorname> 9380f8248bfSmrgerror is returned. If 9390f8248bfSmrg<structfield>ledClass</structfield> 9400f8248bfSmrgor 9410f8248bfSmrg<structfield>ledID</structfield> 9420f8248bfSmrghave illegal values, a 9430f8248bfSmrg<errorname>BadValue</errorname> 9440f8248bfSmrgerror is returned. If they have legal values but do not specify a feedback 9450f8248bfSmrgthat contains LEDs and is associated with the specified device, a 9460f8248bfSmrg<errorname>BadMatch</errorname> 9470f8248bfSmrgerror is returned. 948e9fcaa8aSmrg</para> 949e9fcaa8aSmrg 950e9fcaa8aSmrg 951e9fcaa8aSmrg</sect1> 952eb411b4bSmrg<sect1 id='Allocating_Initializing_and_Freeing_the_XkbDeviceInfoRecStructure'> 953e9fcaa8aSmrg<title>Allocating, Initializing, and Freeing the XkbDeviceInfoRec 954e9fcaa8aSmrgStructure</title> 955e9fcaa8aSmrg 956e9fcaa8aSmrg<para> 9570f8248bfSmrgTo obtain an 9580f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 9590f8248bfSmrgstructure, use XkbGetDeviceInfo or XkbAllocDeviceInfo. 9600f8248bfSmrg</para> 9610f8248bfSmrg 9620f8248bfSmrg<indexterm significance="preferred" zone="XkbAllocDeviceInfo"><primary><function>XkbAllocDeviceInfo</function></primary></indexterm> 9630f8248bfSmrg<funcsynopsis id="XkbAllocDeviceInfo"> 9640f8248bfSmrg <funcprototype> 9650f8248bfSmrg <funcdef>XkbDeviceInfoPtr <function>XkbAllocDeviceInfo</function></funcdef> 9660f8248bfSmrg<!-- (device_spec, n_buttons, sz_leds) --> 9670f8248bfSmrg 9680f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 9690f8248bfSmrg <paramdef>unsigned int <parameter>n_buttons</parameter></paramdef> 9700f8248bfSmrg <paramdef>unsigned int <parameter>sz_leds</parameter></paramdef> 9710f8248bfSmrg </funcprototype> 9720f8248bfSmrg</funcsynopsis> 9730f8248bfSmrg<variablelist> 9740f8248bfSmrg <varlistentry> 9750f8248bfSmrg <term> 9760f8248bfSmrg <parameter>device_spec</parameter> 9770f8248bfSmrg </term> 9780f8248bfSmrg <listitem> 9790f8248bfSmrg <para> 9800f8248bfSmrg device ID with which structure will be used 9810f8248bfSmrg </para> 9820f8248bfSmrg </listitem> 9830f8248bfSmrg </varlistentry> 9840f8248bfSmrg <varlistentry> 9850f8248bfSmrg <term> 9860f8248bfSmrg <parameter>n_buttons</parameter> 9870f8248bfSmrg </term> 9880f8248bfSmrg <listitem> 9890f8248bfSmrg <para> 9900f8248bfSmrg number of button actions to allocate space for 9910f8248bfSmrg </para> 9920f8248bfSmrg </listitem> 9930f8248bfSmrg </varlistentry> 9940f8248bfSmrg <varlistentry> 9950f8248bfSmrg <term> 9960f8248bfSmrg <parameter>sz_leds</parameter> 9970f8248bfSmrg </term> 9980f8248bfSmrg <listitem> 9990f8248bfSmrg <para> 10000f8248bfSmrg number of LED feedbacks to allocate space for 10010f8248bfSmrg </para> 10020f8248bfSmrg </listitem> 10030f8248bfSmrg </varlistentry> 10040f8248bfSmrg</variablelist> 10050f8248bfSmrg 10060f8248bfSmrg<para> 10070f8248bfSmrg<function>XkbAllocDeviceInfo</function> 10080f8248bfSmrgallocates space for an 10090f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 10100f8248bfSmrgstructure and initializes that structure’s 10110f8248bfSmrg<parameter>device_spec</parameter> 10120f8248bfSmrgfield with the device ID specified by device_spec. If 10130f8248bfSmrg<parameter>n_buttons</parameter> 10140f8248bfSmrgis nonzero, 10150f8248bfSmrg<parameter>n_buttons</parameter> 10160f8248bfSmrg<structname>XkbAction</structname>s 10170f8248bfSmrgare linked into the 10180f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 10190f8248bfSmrgstructure and initialized to zero. If sz_leds is nonzero, 10200f8248bfSmrg<parameter>sz_leds</parameter> 10210f8248bfSmrg<structname>XkbDeviceLedInfoRec</structname> 10220f8248bfSmrgstructures are also allocated and linked into the 10230f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 10240f8248bfSmrgstructure. If you request 10250f8248bfSmrg<structname>XkbDeviceLedInfoRec</structname> 10260f8248bfSmrgstructures be allocated using this request, you must initialize them 1027e9fcaa8aSmrgexplicitly. 1028e9fcaa8aSmrg</para> 1029e9fcaa8aSmrg 1030e9fcaa8aSmrg 1031e9fcaa8aSmrg<para> 10320f8248bfSmrgTo initialize an 10330f8248bfSmrg<structname>XkbDeviceLedInfoRec</structname> 10340f8248bfSmrgstructure, use XkbAddDeviceLedInfo. 10350f8248bfSmrg</para> 10360f8248bfSmrg 10370f8248bfSmrg 10380f8248bfSmrg<indexterm significance="preferred" zone="XkbAddDeviceLedInfo"><primary><function>XkbAddDeviceLedInfo</function></primary></indexterm> 10390f8248bfSmrg<funcsynopsis id="XkbAddDeviceLedInfo"> 10400f8248bfSmrg <funcprototype> 10410f8248bfSmrg <funcdef>XkbDeviceLedInfoPtr <function>XkbAddDeviceLedInfo</function></funcdef> 10420f8248bfSmrg<!-- (device_info, led_class, led_id) --> 10430f8248bfSmrg 10440f8248bfSmrg <paramdef>XkbDeviceInfoPtr <parameter>device_info</parameter></paramdef> 10450f8248bfSmrg <paramdef>unsigned int <parameter>led_class</parameter></paramdef> 10460f8248bfSmrg <paramdef>unsigned int <parameter>led_id</parameter></paramdef> 10470f8248bfSmrg </funcprototype> 10480f8248bfSmrg</funcsynopsis> 10490f8248bfSmrg<variablelist> 10500f8248bfSmrg <varlistentry> 10510f8248bfSmrg <term> 10520f8248bfSmrg <parameter>device_info</parameter> 10530f8248bfSmrg </term> 10540f8248bfSmrg <listitem> 10550f8248bfSmrg <para> 10560f8248bfSmrg structure in which to add LED info 10570f8248bfSmrg </para> 10580f8248bfSmrg </listitem> 10590f8248bfSmrg </varlistentry> 10600f8248bfSmrg <varlistentry> 10610f8248bfSmrg <term> 10620f8248bfSmrg <parameter>led_class</parameter> 10630f8248bfSmrg </term> 10640f8248bfSmrg <listitem> 10650f8248bfSmrg <para> 10660f8248bfSmrg input extension class for LED device of interest 10670f8248bfSmrg </para> 10680f8248bfSmrg </listitem> 10690f8248bfSmrg </varlistentry> 10700f8248bfSmrg <varlistentry> 10710f8248bfSmrg <term> 10720f8248bfSmrg <parameter>led_id</parameter> 10730f8248bfSmrg </term> 10740f8248bfSmrg <listitem> 10750f8248bfSmrg <para> 10760f8248bfSmrg input extension ID for LED device of interest 10770f8248bfSmrg </para> 10780f8248bfSmrg </listitem> 10790f8248bfSmrg </varlistentry> 10800f8248bfSmrg</variablelist> 10810f8248bfSmrg 10820f8248bfSmrg<para> 10830f8248bfSmrg<function>XkbAddDeviceLedInfo</function> 10840f8248bfSmrgfirst checks to see whether an entry matching 10850f8248bfSmrg<parameter>led_class</parameter> 10860f8248bfSmrgand 10870f8248bfSmrg<parameter>led_id</parameter> 10880f8248bfSmrgalready exists in the 10890f8248bfSmrg<structfield>device_info->leds</structfield> 10900f8248bfSmrgarray. If it finds a matching entry, it returns a pointer to that entry. 10910f8248bfSmrgOtherwise, it checks to be sure there is at least one empty entry in 10920f8248bfSmrg<parameter>device_info</parameter>-><structfield>leds</structfield> 10930f8248bfSmrgand extends it if there is not enough room. It then increments 10940f8248bfSmrg<parameter>device_info</parameter>-><structfield>num_leds</structfield> 10950f8248bfSmrgand fills in the next available entry in 10960f8248bfSmrg<parameter>device_info</parameter>-><structfield>leds</structfield> 10970f8248bfSmrgwith 10980f8248bfSmrg<parameter>led_class</parameter> 10990f8248bfSmrgand 11000f8248bfSmrg<parameter>led_id</parameter>. 11010f8248bfSmrg</para> 11020f8248bfSmrg 11030f8248bfSmrg 11040f8248bfSmrg<para> 11050f8248bfSmrgIf successful, 11060f8248bfSmrg<function>XkbAddDeviceLedInfo</function> 11070f8248bfSmrgreturns a pointer to the 11080f8248bfSmrg<structname>XkbDeviceLedInfoRec</structname> 11090f8248bfSmrgstructure that was initialized. If unable to allocate sufficient storage, or 11100f8248bfSmrgif 11110f8248bfSmrg<parameter>device_info</parameter> 11120f8248bfSmrgpoints to an invalid 11130f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 11140f8248bfSmrgstructure, or if 11150f8248bfSmrg<parameter>led_class</parameter> 11160f8248bfSmrgor 11170f8248bfSmrg<parameter>led_id</parameter> 11180f8248bfSmrgare inappropriate, 11190f8248bfSmrg<function>XkbAddDeviceLedInfo</function> 11200f8248bfSmrgreturns 11210f8248bfSmrg<symbol>NULL</symbol>. 11220f8248bfSmrg</para> 11230f8248bfSmrg 11240f8248bfSmrg 11250f8248bfSmrg<para> 11260f8248bfSmrgTo allocate additional space for button actions in an 11270f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 11280f8248bfSmrgstructure, use XkbResizeDeviceButtonActions. 11290f8248bfSmrg</para> 11300f8248bfSmrg 11310f8248bfSmrg 11320f8248bfSmrg<indexterm significance="preferred" zone="XkbResizeDeviceButtonActions"><primary><function>XkbResizeDeviceButtonActions</function></primary></indexterm> 11330f8248bfSmrg<funcsynopsis id="XkbResizeDeviceButtonActions"> 11340f8248bfSmrg <funcprototype> 11350f8248bfSmrg <funcdef>Status <function>XkbResizeDeviceButtonActions</function></funcdef> 11360f8248bfSmrg<!-- (device_info, new_total) --> 11370f8248bfSmrg 11380f8248bfSmrg <paramdef>XkbDeviceInfoPtr <parameter>device_info</parameter></paramdef> 11390f8248bfSmrg <paramdef>unsigned int <parameter>new_total</parameter></paramdef> 11400f8248bfSmrg </funcprototype> 11410f8248bfSmrg</funcsynopsis> 11420f8248bfSmrg<variablelist> 11430f8248bfSmrg <varlistentry> 11440f8248bfSmrg <term> 11450f8248bfSmrg <parameter>device_info</parameter> 11460f8248bfSmrg </term> 11470f8248bfSmrg <listitem> 11480f8248bfSmrg <para> 11490f8248bfSmrg structure in which to allocate button actions 11500f8248bfSmrg </para> 11510f8248bfSmrg </listitem> 11520f8248bfSmrg </varlistentry> 11530f8248bfSmrg <varlistentry> 11540f8248bfSmrg <term> 11550f8248bfSmrg <parameter>new_total</parameter> 11560f8248bfSmrg </term> 11570f8248bfSmrg <listitem> 11580f8248bfSmrg <para> 11590f8248bfSmrg new total number of button actions needed 11600f8248bfSmrg </para> 11610f8248bfSmrg </listitem> 11620f8248bfSmrg </varlistentry> 11630f8248bfSmrg</variablelist> 11640f8248bfSmrg 11650f8248bfSmrg<para> 11660f8248bfSmrg<function>XkbResizeDeviceButtonActions</function> 11670f8248bfSmrgreallocates space, if necessary, to make sure there is room for a total of 11680f8248bfSmrg<parameter>new_total</parameter> 11690f8248bfSmrgbutton actions in the 11700f8248bfSmrg<parameter>device_info</parameter> 11710f8248bfSmrgstructure. Any new entries allocated are zeroed. If successful, 11720f8248bfSmrg<function>XkbResizeDeviceButtonActions</function> 11730f8248bfSmrgreturns Success. If new_total is zero, all button actions are deleted, 11740f8248bfSmrg<parameter>device_info</parameter>-><structfield>num_btns</structfield> 11750f8248bfSmrgis set to zero, and 11760f8248bfSmrg<parameter>device_info</parameter>-><structfield>btn_acts</structfield> 11770f8248bfSmrgis set to 11780f8248bfSmrg<symbol>NULL</symbol>. 11790f8248bfSmrgIf device_info is invalid or new_total is greater than 255, 11800f8248bfSmrg<errorname>BadValue</errorname> 11810f8248bfSmrgis returned. If a memory allocation failure occurs, a 11820f8248bfSmrg<errorname>BadAlloc</errorname> 11830f8248bfSmrgis returned. 11840f8248bfSmrg</para> 11850f8248bfSmrg 11860f8248bfSmrg 11870f8248bfSmrg<para> 11880f8248bfSmrgTo free an 11890f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 11900f8248bfSmrgstructure, use XkbFreeDeviceInfo. 11910f8248bfSmrg</para> 11920f8248bfSmrg 11930f8248bfSmrg 11940f8248bfSmrg<indexterm significance="preferred" zone="XkbFreeDeviceInfo"><primary><function>XkbFreeDeviceInfo</function></primary></indexterm> 11950f8248bfSmrg<funcsynopsis id="XkbFreeDeviceInfo"> 11960f8248bfSmrg <funcprototype> 11970f8248bfSmrg <funcdef>void <function>XkbFreeDeviceInfo</function></funcdef> 11980f8248bfSmrg<!-- (device_info, which, free_all) --> 11990f8248bfSmrg 12000f8248bfSmrg <paramdef>XkbDeviceInfoPtr <parameter>device_info</parameter></paramdef> 12010f8248bfSmrg <paramdef>unsigned int <parameter>which</parameter></paramdef> 12020f8248bfSmrg <paramdef>Bool <parameter>free_all</parameter></paramdef> 12030f8248bfSmrg </funcprototype> 12040f8248bfSmrg</funcsynopsis> 12050f8248bfSmrg<variablelist> 12060f8248bfSmrg <varlistentry> 12070f8248bfSmrg <term> 12080f8248bfSmrg <parameter>device_info</parameter> 12090f8248bfSmrg </term> 12100f8248bfSmrg <listitem> 12110f8248bfSmrg <para> 12120f8248bfSmrg pointer to <structname>XkbDeviceInfoRec</structname> in which to free items 12130f8248bfSmrg </para> 12140f8248bfSmrg </listitem> 12150f8248bfSmrg </varlistentry> 12160f8248bfSmrg <varlistentry> 12170f8248bfSmrg <term> 12180f8248bfSmrg <parameter>which</parameter> 12190f8248bfSmrg </term> 12200f8248bfSmrg <listitem> 12210f8248bfSmrg <para> 12220f8248bfSmrg mask of components of <parameter>device_info</parameter> to free 12230f8248bfSmrg </para> 12240f8248bfSmrg </listitem> 12250f8248bfSmrg </varlistentry> 12260f8248bfSmrg <varlistentry> 12270f8248bfSmrg <term> 12280f8248bfSmrg <parameter>free_all</parameter> 12290f8248bfSmrg </term> 12300f8248bfSmrg <listitem> 12310f8248bfSmrg <para> 12320f8248bfSmrg <symbol>True</symbol> ⇒ free everything, including device_info 12330f8248bfSmrg </para> 12340f8248bfSmrg </listitem> 12350f8248bfSmrg </varlistentry> 12360f8248bfSmrg</variablelist> 12370f8248bfSmrg 12380f8248bfSmrg<para> 12390f8248bfSmrgIf free_all is 12400f8248bfSmrg<symbol>True</symbol>, 12410f8248bfSmrgthe 12420f8248bfSmrg<function>XkbFreeDeviceInfo</function> 12430f8248bfSmrgfrees all components of 12440f8248bfSmrg<parameter>device_info</parameter> 12450f8248bfSmrgand the 12460f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 12470f8248bfSmrgstructure pointed to by 12480f8248bfSmrg<parameter>device_info</parameter> 12490f8248bfSmrgitself. If free_all is 12500f8248bfSmrg<symbol>False</symbol>, 12510f8248bfSmrgthe value of which determines which subcomponents are freed. 12520f8248bfSmrg<parameter>which</parameter> 12530f8248bfSmrgis an inclusive OR of one or more of the values from 12540f8248bfSmrg<link linkend="table21.1">Table 21.1</link>. If which 12550f8248bfSmrgcontains <symbol>XkbXI_ButtonActionsMask</symbol>, 12560f8248bfSmrgall button actions associated with 12570f8248bfSmrg<parameter>device_info</parameter> 12580f8248bfSmrgare freed, 12590f8248bfSmrg<parameter>device_info</parameter>-><structfield>btn_acts</structfield> 12600f8248bfSmrgis set to 12610f8248bfSmrg<symbol>NULL</symbol>, 12620f8248bfSmrgand 12630f8248bfSmrg<parameter>device_info</parameter>-><structfield>num_btns</structfield> 12640f8248bfSmrgis set to zero. If which contains all bits in 12650f8248bfSmrg<symbol>XkbXI_IndicatorsMask</symbol>, all 12660f8248bfSmrg<structname>XkbDeviceLedInfoRec</structname> 12670f8248bfSmrgstructures associated with 12680f8248bfSmrg<parameter>device_info</parameter> 12690f8248bfSmrgare freed, 12700f8248bfSmrg<parameter>device_info</parameter>-><structfield>leds</structfield> 12710f8248bfSmrgis set to 12720f8248bfSmrg<symbol>NULL</symbol>, 12730f8248bfSmrgand 12740f8248bfSmrg<parameter>device_info</parameter>-><structfield>sz_leds</structfield> 12750f8248bfSmrgand 12760f8248bfSmrg<parameter>device_info</parameter>-><structfield>num_leds</structfield> 12770f8248bfSmrgare set to zero. If which contains <symbol>XkbXI_IndicatorMapsMask</symbol>, 12780f8248bfSmrgall indicator maps associated with 12790f8248bfSmrg<parameter>device_info</parameter> 12800f8248bfSmrgare cleared, but the number of LEDs and the leds structures themselves are 12810f8248bfSmrgpreserved. If which contains <symbol>XkbXI_IndicatorNamesMask</symbol>, 12820f8248bfSmrgall indicator names 1283e9fcaa8aSmrgassociated with device_info are cleared, but the number of LEDs and the leds 1284e9fcaa8aSmrgstructures themselves are preserved. If which contains 12850f8248bfSmrg<symbol>XkbXI_IndicatorStateMask</symbol>, 12860f8248bfSmrgthe indicator state associated with the 12870f8248bfSmrg<parameter>device_info</parameter> 12880f8248bfSmrgleds are set to zeros but the number of LEDs and the leds structures 1289e9fcaa8aSmrgthemselves are preserved. 1290e9fcaa8aSmrg</para> 1291e9fcaa8aSmrg 1292e9fcaa8aSmrg 1293e9fcaa8aSmrg</sect1> 1294eb411b4bSmrg<sect1 id='Setting_Xkb_Features_for_Non_KeyClass_Input_Extension_Devices'> 1295eb411b4bSmrg<title>Setting Xkb Features for Non-KeyClass Input Extension Devices</title> 1296e9fcaa8aSmrg 1297e9fcaa8aSmrg<para> 1298e9fcaa8aSmrgThe Xkb extension allows clients to assign any key action to either core 1299e9fcaa8aSmrgpointer or input extension device buttons. This makes it possible to control 1300e9fcaa8aSmrgthe keyboard or generate keyboard key events from extension devices or from the 1301e9fcaa8aSmrgcore pointer. 1302e9fcaa8aSmrg</para> 1303e9fcaa8aSmrg 1304e9fcaa8aSmrg 1305e9fcaa8aSmrg<para> 1306e9fcaa8aSmrgKey actions assigned to core X pointer buttons or input extension device 1307e9fcaa8aSmrgbuttons cause key events to be generated as if they had originated from the 1308e9fcaa8aSmrgcore X keyboard. 1309e9fcaa8aSmrg</para> 1310e9fcaa8aSmrg 1311e9fcaa8aSmrg 1312e9fcaa8aSmrg<para> 1313e9fcaa8aSmrgXkb implementations are required to support key actions for the buttons of the 1314e9fcaa8aSmrgcore pointer device, but support for actions on extension devices is optional. 1315e9fcaa8aSmrgImplementations that do not support button actions for extension devices must 13160f8248bfSmrgnot set the 13170f8248bfSmrg<symbol>XkbXI_ButtonActionsMask</symbol> 13180f8248bfSmrgbit in the 13190f8248bfSmrg<structfield>supported</structfield> 13200f8248bfSmrgfield of an 13210f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 13220f8248bfSmrgstructure. 1323e9fcaa8aSmrg</para> 1324e9fcaa8aSmrg 1325e9fcaa8aSmrg 1326e9fcaa8aSmrg<para> 1327e9fcaa8aSmrgIf a client attempts to modify valid characteristics of a device using an 1328e9fcaa8aSmrgimplementation that does not support modification of those characteristics, no 1329e9fcaa8aSmrgprotocol error is generated. Instead, the server reports a failure for the 13300f8248bfSmrgrequest; it also sends an 13310f8248bfSmrg<symbol>XkbExtensionDeviceNotify</symbol> 13320f8248bfSmrgevent to the client that issued the request if the client has selected to 1333e9fcaa8aSmrgreceive these events. 1334e9fcaa8aSmrg</para> 1335e9fcaa8aSmrg 1336e9fcaa8aSmrg 1337e9fcaa8aSmrg<para> 1338e9fcaa8aSmrgTo change characteristics of an X Input Extension device in the server, first 13390f8248bfSmrgmodify a local copy of the device structure and then use either 13400f8248bfSmrg<function>XkbSetDeviceInfo</function>, 13410f8248bfSmrgor, to save network traffic, use an 13420f8248bfSmrg<structname>XkbDeviceChangesRec</structname> 13430f8248bfSmrgstructure (see <link linkend="Tracking_Changes_to_Extension_Devices">section 21.6</link>) and call 13440f8248bfSmrg<function>XkbChangeDeviceInfo</function> 13450f8248bfSmrgto download the changes to the server. 1346e9fcaa8aSmrg</para> 1347e9fcaa8aSmrg 1348e9fcaa8aSmrg 1349e9fcaa8aSmrg<para> 1350e9fcaa8aSmrgTo modify some or all of the characteristics of an X Input Extension device, 1351e9fcaa8aSmrguse XkbSetDeviceInfo. 1352e9fcaa8aSmrg</para> 1353e9fcaa8aSmrg 13540f8248bfSmrg<indexterm significance="preferred" zone="XkbSetDeviceInfo"><primary><function>XkbSetDeviceInfo</function></primary></indexterm> 13550f8248bfSmrg<funcsynopsis id="XkbSetDeviceInfo"> 13560f8248bfSmrg <funcprototype> 13570f8248bfSmrg <funcdef>Bool <function>XkbSetDeviceInfo</function></funcdef> 13580f8248bfSmrg<!-- ( 13590f8248bfSmrg<parameter>dpy</parameter>, 13600f8248bfSmrgwhich, device_info) --> 13610f8248bfSmrg 13620f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 13630f8248bfSmrg <paramdef>unsigned int <parameter>which</parameter></paramdef> 13640f8248bfSmrg <paramdef>XkbDeviceInfoPtr <parameter>device_info</parameter></paramdef> 13650f8248bfSmrg </funcprototype> 13660f8248bfSmrg</funcsynopsis> 13670f8248bfSmrg<variablelist> 13680f8248bfSmrg <varlistentry> 13690f8248bfSmrg <term> 13700f8248bfSmrg <parameter>dpy</parameter> 13710f8248bfSmrg </term> 13720f8248bfSmrg <listitem> 13730f8248bfSmrg <para> 13740f8248bfSmrg connection to X server 13750f8248bfSmrg </para> 13760f8248bfSmrg </listitem> 13770f8248bfSmrg </varlistentry> 13780f8248bfSmrg <varlistentry> 13790f8248bfSmrg <term> 13800f8248bfSmrg <parameter>which</parameter> 13810f8248bfSmrg </term> 13820f8248bfSmrg <listitem> 13830f8248bfSmrg <para> 13840f8248bfSmrg mask indicating characteristics to modify 13850f8248bfSmrg </para> 13860f8248bfSmrg </listitem> 13870f8248bfSmrg </varlistentry> 13880f8248bfSmrg <varlistentry> 13890f8248bfSmrg <term> 13900f8248bfSmrg <parameter>device_info</parameter> 13910f8248bfSmrg </term> 13920f8248bfSmrg <listitem> 13930f8248bfSmrg <para> 13940f8248bfSmrg structure defining the device and modifications 13950f8248bfSmrg </para> 13960f8248bfSmrg </listitem> 13970f8248bfSmrg </varlistentry> 13980f8248bfSmrg</variablelist> 13990f8248bfSmrg 14000f8248bfSmrg<para> 14010f8248bfSmrg<function>XkbSetDeviceInfo</function> 14020f8248bfSmrgsends a request to the server to modify the characteristics of the device 14030f8248bfSmrgspecified in the 14040f8248bfSmrg<parameter>device_info</parameter> 14050f8248bfSmrgstructure. The particular characteristics modified are identified by the bits 14060f8248bfSmrgset in 14070f8248bfSmrg<parameter>which</parameter> 14080f8248bfSmrgand take their values from the relevant fields in 14090f8248bfSmrg<parameter>device_info</parameter> 14100f8248bfSmrg(see <link linkend="table21.1">Table 21.1</link>). 14110f8248bfSmrg<function>XkbSetDeviceInfo</function> 14120f8248bfSmrgreturns 14130f8248bfSmrg<symbol>True</symbol> 14140f8248bfSmrgif the request was successfully sent to the server. If the X server 1415e9fcaa8aSmrgimplementation does not allow interaction between the X input extension and the 14160f8248bfSmrgXkb Extension, the function does nothing and returns 14170f8248bfSmrg<symbol>False</symbol>. 1418e9fcaa8aSmrg</para> 1419e9fcaa8aSmrg 1420e9fcaa8aSmrg 1421e9fcaa8aSmrg<para> 14220f8248bfSmrgThe 14230f8248bfSmrg<parameter>which</parameter> 14240f8248bfSmrgparameter specifies which aspects of the device should be changed and is a 1425e9fcaa8aSmrgbitmask composed of an inclusive OR or one or more of the following bits: 14260f8248bfSmrg<symbol>XkbXI_ButtonActionsMask</symbol>, 14270f8248bfSmrg<symbol>XkbXI_IndicatorNamesMask</symbol>, 14280f8248bfSmrg<symbol>XkbXI_IndicatorMapsMask</symbol>. 14290f8248bfSmrgIf the features requested to be manipulated in 14300f8248bfSmrg<parameter>which</parameter> 14310f8248bfSmrgare valid for the device, but the server does not support assignment of one or 1432e9fcaa8aSmrgmore of them, that particular portion of the request is ignored. 1433e9fcaa8aSmrg</para> 1434e9fcaa8aSmrg 1435e9fcaa8aSmrg 1436e9fcaa8aSmrg<para> 14370f8248bfSmrgIf the device specified in 14380f8248bfSmrg<parameter>device_info</parameter>-><structfield>device_spec</structfield> 14390f8248bfSmrgdoes not contain buttons and a request affecting buttons is made, or the 1440e9fcaa8aSmrgdevice does not contain indicators and a request affecting indicators is made, 14410f8248bfSmrga 14420f8248bfSmrg<errorname>BadMatch</errorname> 14430f8248bfSmrgprotocol error results. 1444e9fcaa8aSmrg</para> 1445e9fcaa8aSmrg 1446e9fcaa8aSmrg 1447e9fcaa8aSmrg<para> 14480f8248bfSmrgIf the 14490f8248bfSmrg<symbol>XkbXI_ButtonActionsMask</symbol> 14500f8248bfSmrgbit is set in the supported mask returned by XkbGetDeviceInfo, the Xkb 1451e9fcaa8aSmrgextension allows applications to assign key actions to buttons on input 14520f8248bfSmrgextension devices other than the core keyboard device. If the 14530f8248bfSmrg<symbol>XkbXI_ButtonActionsMask</symbol> 14540f8248bfSmrgis set in 14550f8248bfSmrg<parameter>which</parameter>, 14560f8248bfSmrgthe actions for all buttons specified in device_info are set to the 14570f8248bfSmrg<structname>XkbAction</structname>s 14580f8248bfSmrgspecified in 14590f8248bfSmrg<parameter>device_info</parameter>-><structfield>btn_acts</structfield>. 14600f8248bfSmrgIf the number of buttons requested to be updated is not valid for the device, 14610f8248bfSmrg<function>XkbSetDeviceInfo</function> 14620f8248bfSmrgreturns 14630f8248bfSmrg<symbol>False</symbol> 14640f8248bfSmrgand a 14650f8248bfSmrg<errorname>BadValue</errorname> 14660f8248bfSmrgprotocol error results. 14670f8248bfSmrg</para> 14680f8248bfSmrg 14690f8248bfSmrg 14700f8248bfSmrg<para> 14710f8248bfSmrgIf the 14720f8248bfSmrg<symbol>XkbXI_IndicatorMapsMask</symbol> 14730f8248bfSmrgand / or 14740f8248bfSmrg<symbol>XkbXI_IndicatorNamesMask</symbol> 14750f8248bfSmrgbit is set in the supported mask returned by XkbGetDeviceInfo, the Xkb 1476e9fcaa8aSmrgextension allows applications to assign maps and / or names to the indicators 1477e9fcaa8aSmrgof nonkeyboard extension devices. If supported, maps and / or names can be 1478e9fcaa8aSmrgassigned to all extension device indicators, whether they are part of a 1479e9fcaa8aSmrgkeyboard feedback or part of an indicator feedback. 1480e9fcaa8aSmrg</para> 1481e9fcaa8aSmrg 1482e9fcaa8aSmrg 1483e9fcaa8aSmrg<para> 14840f8248bfSmrgIf the 14850f8248bfSmrg<symbol>XkbXI_IndicatorMapsMask</symbol> 14860f8248bfSmrgand / or 14870f8248bfSmrg<symbol>XkbXI_IndicatorNamesMask</symbol> 14880f8248bfSmrgflag is set in 14890f8248bfSmrg<parameter>which</parameter>, 14900f8248bfSmrgthe indicator maps and / or names for all 14910f8248bfSmrg<parameter>device_info</parameter>-><structfield>num_leds</structfield> 14920f8248bfSmrgindicator devices specified in 14930f8248bfSmrg<parameter>device_info</parameter>-><structfield>leds</structfield> 14940f8248bfSmrgare set to the maps and / or names specified in 14950f8248bfSmrg<parameter>device_info</parameter>-><structfield>leds</structfield>. 14960f8248bfSmrg<parameter>device_info</parameter>-><structfield>leds</structfield>-><structfield>led_class</structfield> 14970f8248bfSmrgand 14980f8248bfSmrg<structfield>led_id</structfield> 14990f8248bfSmrgspecify the input extension class and device ID for each indicator device to 15000f8248bfSmrgmodify; if they have invalid values, a 15010f8248bfSmrg<errorname>BadValue</errorname> 15020f8248bfSmrgprotocol error results and 15030f8248bfSmrg<function>XkbSetDeviceInfo</function> 15040f8248bfSmrgreturns 15050f8248bfSmrg<symbol>False</symbol>. 15060f8248bfSmrgIf they have legal values but do not specify a keyboard or indicator class 15070f8248bfSmrgfeedback for the device in question, a 15080f8248bfSmrg<errorname>BadMatch</errorname> 15090f8248bfSmrgerror results. If any of the values in 15100f8248bfSmrg<parameter>device_info</parameter>-><structfield>leds->names</structfield> 15110f8248bfSmrgare not a valid Atom or 15120f8248bfSmrg<symbol>None</symbol>, 15130f8248bfSmrga 15140f8248bfSmrg<errorname>BadAtom</errorname> 15150f8248bfSmrgprotocol error results. 1516e9fcaa8aSmrg</para> 1517e9fcaa8aSmrg 1518e9fcaa8aSmrg 1519e9fcaa8aSmrg<para> 1520e9fcaa8aSmrgXkb provides convenience functions to modify subsets of the information 15210f8248bfSmrgaccessible via 15220f8248bfSmrg<function>XkbSetDeviceInfo</function>. 15230f8248bfSmrgOnly the parts of the structure indicated in the function description are 1524e9fcaa8aSmrgmodified. These convenience functions are described as follows. 1525e9fcaa8aSmrg</para> 1526e9fcaa8aSmrg 1527e9fcaa8aSmrg 1528e9fcaa8aSmrg<para> 1529e9fcaa8aSmrgTo change only the button actions for an input extension device, use 1530e9fcaa8aSmrgXkbSetDeviceButtonActions. 1531e9fcaa8aSmrg</para> 1532e9fcaa8aSmrg 1533e9fcaa8aSmrg 15340f8248bfSmrg<indexterm significance="preferred" zone="XkbSetDeviceButtonActions"><primary><function>XkbSetDeviceButtonActions</function></primary></indexterm> 15350f8248bfSmrg<funcsynopsis id="XkbSetDeviceButtonActions"> 15360f8248bfSmrg <funcprototype> 15370f8248bfSmrg <funcdef>Bool <function>XkbSetDeviceButtonActions</function></funcdef> 15380f8248bfSmrg<!-- ( 15390f8248bfSmrg<parameter>dpy</parameter>, 15400f8248bfSmrgdevice, first_button, num_buttons, actions) --> 15410f8248bfSmrg 15420f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 15430f8248bfSmrg <paramdef>XkbDeviceInfoPtr <parameter>device_info</parameter></paramdef> 15440f8248bfSmrg <paramdef>unsigned int <parameter>first_button</parameter></paramdef> 15450f8248bfSmrg <paramdef>unsigned int <parameter>num_buttons</parameter></paramdef> 15460f8248bfSmrg </funcprototype> 15470f8248bfSmrg</funcsynopsis> 15480f8248bfSmrg<variablelist> 15490f8248bfSmrg <varlistentry> 15500f8248bfSmrg <term> 15510f8248bfSmrg <parameter>dpy</parameter> 15520f8248bfSmrg </term> 15530f8248bfSmrg <listitem> 15540f8248bfSmrg <para> 15550f8248bfSmrg connection to X server 15560f8248bfSmrg </para> 15570f8248bfSmrg </listitem> 15580f8248bfSmrg </varlistentry> 15590f8248bfSmrg <varlistentry> 15600f8248bfSmrg <term> 15610f8248bfSmrg <parameter>device_info</parameter> 15620f8248bfSmrg </term> 15630f8248bfSmrg <listitem> 15640f8248bfSmrg <para> 15650f8248bfSmrg structure defining the device and modifications 15660f8248bfSmrg </para> 15670f8248bfSmrg </listitem> 15680f8248bfSmrg </varlistentry> 15690f8248bfSmrg <varlistentry> 15700f8248bfSmrg <term> 15710f8248bfSmrg <parameter>first_button</parameter> 15720f8248bfSmrg </term> 15730f8248bfSmrg <listitem> 15740f8248bfSmrg <para> 15750f8248bfSmrg number of first button to update, 0 relative 15760f8248bfSmrg </para> 15770f8248bfSmrg </listitem> 15780f8248bfSmrg </varlistentry> 15790f8248bfSmrg <varlistentry> 15800f8248bfSmrg <term> 15810f8248bfSmrg <parameter>num_buttons</parameter> 15820f8248bfSmrg </term> 15830f8248bfSmrg <listitem> 15840f8248bfSmrg <para> 15850f8248bfSmrg number of buttons to update 15860f8248bfSmrg </para> 15870f8248bfSmrg </listitem> 15880f8248bfSmrg </varlistentry> 15890f8248bfSmrg</variablelist> 15900f8248bfSmrg 15910f8248bfSmrg<para> 15920f8248bfSmrg<function>XkbSetDeviceButtonActions</function> 15930f8248bfSmrgassigns actions to the buttons of the device specified in 15940f8248bfSmrgdevice_info-><structfield>device_spec</structfield>. 15950f8248bfSmrgActions are assigned to 15960f8248bfSmrg<parameter>num_buttons</parameter> 15970f8248bfSmrgbuttons beginning with 15980f8248bfSmrg<parameter>first_button</parameter> 15990f8248bfSmrgand are taken from the actions specified in 16000f8248bfSmrg<parameter>device_info</parameter>-><structfield>btn_acts</structfield>. 1601e9fcaa8aSmrg</para> 1602e9fcaa8aSmrg 1603e9fcaa8aSmrg 1604e9fcaa8aSmrg<para> 1605e9fcaa8aSmrgIf the server does not support assignment of Xkb actions to extension device 16060f8248bfSmrgbuttons, 16070f8248bfSmrg<function>XkbSetDeviceButtonActions</function> 16080f8248bfSmrghas no effect and returns 16090f8248bfSmrg<symbol>False</symbol>. 16100f8248bfSmrgIf the device has no buttons or if 16110f8248bfSmrg<parameter>first_button</parameter> 16120f8248bfSmrgor 16130f8248bfSmrg<parameter>num_buttons</parameter> 16140f8248bfSmrgspecify buttons outside of the valid range as determined by 16150f8248bfSmrg<parameter>device_info</parameter>-><structfield>num_btns</structfield>, 16160f8248bfSmrgthe function has no effect and returns 16170f8248bfSmrg<symbol>False</symbol>. 16180f8248bfSmrgOtherwise, 16190f8248bfSmrg<function>XkbSetDeviceButtonActions</function> 16200f8248bfSmrgsends a request to the server to change the actions for the specified buttons 16210f8248bfSmrgand returns 16220f8248bfSmrg<symbol>True</symbol>. 1623e9fcaa8aSmrg</para> 1624e9fcaa8aSmrg 1625e9fcaa8aSmrg 1626e9fcaa8aSmrg<para> 1627e9fcaa8aSmrgIf the actual request sent to the server involved illegal button numbers, a 16280f8248bfSmrg<errorname>BadValue</errorname> 16290f8248bfSmrgprotocol error is generated. If an invalid device identifier is specified in 16300f8248bfSmrgdevice_info-><structfield>device_spec</structfield>, 16310f8248bfSmrga <errorname>BadKeyboard</errorname> 16320f8248bfSmrgprotocol error results. If the actual device specified in 16330f8248bfSmrg<parameter>device_info</parameter>-><structfield>device_spec</structfield> 16340f8248bfSmrgdoes not contain buttons and a request affecting buttons is made, a 16350f8248bfSmrg<errorname>BadMatch</errorname> 16360f8248bfSmrgprotocol error is generated. 1637e9fcaa8aSmrg</para> 1638e9fcaa8aSmrg 1639e9fcaa8aSmrg 1640e9fcaa8aSmrg</sect1> 1641eb411b4bSmrg<sect1 id='XkbExtensionDeviceNotify_Event'> 1642e9fcaa8aSmrg<title>XkbExtensionDeviceNotify Event</title> 16430f8248bfSmrg<indexterm significance="preferred" zone="XkbExtensionDeviceNotify_Event"> 16440f8248bfSmrg<primary>events</primary><secondary><symbol>XkbExtensionDeviceNotify</symbol></secondary></indexterm> 16450f8248bfSmrg<indexterm significance="preferred" zone="XkbExtensionDeviceNotify_Event"> 16460f8248bfSmrg<primary><structname>XkbExtensionDeviceNotifyEvent</structname></primary></indexterm> 1647e9fcaa8aSmrg 1648e9fcaa8aSmrg<para> 16490f8248bfSmrgThe Xkb extension generates 16500f8248bfSmrg<symbol>XkbExtensionDeviceNotify</symbol> 16510f8248bfSmrgevents when the status of an input extension device changes or when an attempt 1652e9fcaa8aSmrgis made to use an Xkb feature that is not supported by a particular device. 1653e9fcaa8aSmrg</para> 1654e9fcaa8aSmrg 1655e9fcaa8aSmrg<note><para>Events indicating an attempt to use an unsupported feature are 1656e9fcaa8aSmrgdelivered only to the client requesting the event.</para></note> 1657e9fcaa8aSmrg 1658e9fcaa8aSmrg<para> 1659e9fcaa8aSmrgTo track changes to the status of input extension devices or attempts to use 16600f8248bfSmrgunsupported features of a device, select to receive 16610f8248bfSmrg<symbol>XkbExtensionDeviceNotify</symbol> 16620f8248bfSmrgevents by calling either 16630f8248bfSmrg<function>XkbSelectEvents</function> 16640f8248bfSmrgor 16650f8248bfSmrg<function>XkbSelectEventDetails</function> 16660f8248bfSmrg(see <link linkend="Selecting_Xkb_Events">section 4.3</link>). 1667e9fcaa8aSmrg</para> 1668e9fcaa8aSmrg 1669e9fcaa8aSmrg 1670e9fcaa8aSmrg<para> 16710f8248bfSmrgTo receive 16720f8248bfSmrg<symbol>XkbExtensionDeviceNotify</symbol> 16730f8248bfSmrgevents under all possible conditions, call 16740f8248bfSmrg<function>XkbSelectEvents</function> 16750f8248bfSmrgand pass 16760f8248bfSmrg<symbol>XkbExtensionDeviceNotifyMask</symbol> 16770f8248bfSmrgin both 16780f8248bfSmrg<parameter>bits_to_change</parameter> 16790f8248bfSmrgand 16800f8248bfSmrg<parameter>values_for_bits</parameter>. 1681e9fcaa8aSmrg</para> 1682e9fcaa8aSmrg 1683e9fcaa8aSmrg 1684e9fcaa8aSmrg<para> 16850f8248bfSmrgThe 16860f8248bfSmrg<symbol>XkbExtensionDeviceNotify</symbol> 16870f8248bfSmrgevent has no event details. However, you can call 16880f8248bfSmrg<function>XkbSelectEventDetails</function> 16890f8248bfSmrgusing 16900f8248bfSmrg<symbol>XkbExtensionDeviceNotify</symbol> 16910f8248bfSmrgas the 16920f8248bfSmrg<structfield>event_type</structfield> 16930f8248bfSmrgand specifying 16940f8248bfSmrg<symbol>XkbAllExtensionDeviceEventsMask</symbol> 16950f8248bfSmrgin 16960f8248bfSmrg<parameter>bits_to_change</parameter> 16970f8248bfSmrgand 16980f8248bfSmrg<parameter>values_for_bits</parameter>. 16990f8248bfSmrgThis has the same effect as a call to 17000f8248bfSmrg<function>XkbSelectEvents</function>. 1701e9fcaa8aSmrg</para> 1702e9fcaa8aSmrg 1703e9fcaa8aSmrg 1704e9fcaa8aSmrg<para> 17050f8248bfSmrgThe structure for 17060f8248bfSmrg<symbol>XkbExtensionDeviceNotify</symbol> 17070f8248bfSmrgevents is: 1708e9fcaa8aSmrg 17090f8248bfSmrg<programlisting> 1710e9fcaa8aSmrgtypedef struct { 17110f8248bfSmrg int type; /* Xkb extension base event code */ 17120f8248bfSmrg unsigned long serial; /* X server serial number for event */ 17130f8248bfSmrg Bool send_event; /* <symbol>True</symbol> ⇒ synthetically generated */ 17140f8248bfSmrg Display * display; /* server connection where event generated */ 17150f8248bfSmrg Time time; /* server time when event generated */ 17160f8248bfSmrg int xkb_type; /* <structname>XkbExtensionDeviceNotifyEvent</structname> */ 17170f8248bfSmrg int device; /* Xkb device ID, will not be <symbol>XkbUseCoreKbd</symbol> */ 17180f8248bfSmrg unsigned int reason; /* reason for the event */ 17190f8248bfSmrg unsigned int supported; /* mask of supported features */ 17200f8248bfSmrg unsigned int unsupported; /* unsupported features this client 1721e9fcaa8aSmrg attempted to use */ 17220f8248bfSmrg int first_btn; /* first button that changed */ 17230f8248bfSmrg int num_btns; /* number of buttons that changed */ 17240f8248bfSmrg unsigned int leds_defined; /* indicators with names or maps */ 17250f8248bfSmrg unsigned int led_state; /* current state of the indicators */ 17260f8248bfSmrg int led_class; /* feedback class for LED changes */ 17270f8248bfSmrg int led_id; /* feedback ID for LED changes */ 17280f8248bfSmrg} <structname>XkbExtensionDeviceNotifyEvent</structname>; 1729e9fcaa8aSmrg</programlisting></para> 1730e9fcaa8aSmrg 1731e9fcaa8aSmrg<para> 17320f8248bfSmrgThe 17330f8248bfSmrg<symbol>XkbExtensionDeviceNotify</symbol> 17340f8248bfSmrgevent has fields enabling it to report changes in the state (on/off) of all of 1735e9fcaa8aSmrgthe buttons for a device, but only for one LED feedback associated with a 1736e9fcaa8aSmrgdevice. You will get multiple events when more than one LED feedback changes 1737e9fcaa8aSmrgstate or configuration. 1738e9fcaa8aSmrg</para> 1739e9fcaa8aSmrg 1740e9fcaa8aSmrg 1741e9fcaa8aSmrg</sect1> 1742eb411b4bSmrg<sect1 id='Tracking_Changes_to_Extension_Devices'> 1743e9fcaa8aSmrg<title>Tracking Changes to Extension Devices</title> 17440f8248bfSmrg<indexterm significance="preferred" zone="Tracking_Changes_to_Extension_Devices"> 17450f8248bfSmrg<primary><structname>XkbDeviceChangesRec</structname></primary></indexterm> 17460f8248bfSmrg<indexterm significance="preferred" zone="Tracking_Changes_to_Extension_Devices"> 17470f8248bfSmrg<primary><structname>XkbDeviceLedChangesRec</structname></primary></indexterm> 1748e9fcaa8aSmrg 1749e9fcaa8aSmrg<para> 17500f8248bfSmrgChanges to an Xkb extension device may be tracked by listening to 17510f8248bfSmrg<symbol>XkbExtensionDeviceNotify</symbol> 17520f8248bfSmrgevents and accumulating the changes in an 17530f8248bfSmrg<structname>XkbDeviceChangesRec</structname> 17540f8248bfSmrgstructure. The changes noted in the structure may then be used in subsequent 1755e9fcaa8aSmrgoperations to update either a server configuration or a local copy of an Xkb 1756e9fcaa8aSmrgextension device configuration. The changes structure is defined as follows: 1757e9fcaa8aSmrg 17580f8248bfSmrg<programlisting> 1759e9fcaa8aSmrgtypedef struct _XkbDeviceChanges { 17600f8248bfSmrg unsigned int changed; /* bits indicating what has changed */ 17610f8248bfSmrg unsigned short first_btn; /* number of first button which changed, 17620f8248bfSmrg if any */ 17630f8248bfSmrg unsigned short num_btns; /* number of buttons that have changed */ 17640f8248bfSmrg XkbDeviceLedChangesRec leds; 17650f8248bfSmrg} <structname>XkbDeviceChangesRec</structname>, *XkbDeviceChangesPtr; 1766e9fcaa8aSmrg 1767e9fcaa8aSmrgtypedef struct _XkbDeviceLedChanges { 17680f8248bfSmrg unsigned short led_class; /* class of this indicator feedback bundle */ 17690f8248bfSmrg unsigned short led_id; /* ID of this indicator feedback bundle */ 17700f8248bfSmrg unsigned int names; /* bits indicating which names have changed */ 17710f8248bfSmrg unsigned int maps; /* bits indicating which maps have changed */ 17720f8248bfSmrg struct _XkbDeviceLedChanges *next; /* link to indicator change record 17730f8248bfSmrg for next set */ 17740f8248bfSmrg} <structname>XkbDeviceLedChangesRec</structname>, *XkbDeviceLedChangesPtr; 1775e9fcaa8aSmrg</programlisting></para> 1776e9fcaa8aSmrg 1777e9fcaa8aSmrg<para> 1778e9fcaa8aSmrgA local description of the configuration and state of a device may be kept in 17790f8248bfSmrgan 17800f8248bfSmrg<structname>XkbDeviceInfoRec</structname> 17810f8248bfSmrgstructure. The actual state or configuration of the device may change because 1782e9fcaa8aSmrgof XkbSetDeviceInfo and XkbSetButtonActions requests made by clients or by user 1783e9fcaa8aSmrginteraction with the device. The X server sends an XkbExtensionDeviceNotify 1784e9fcaa8aSmrgevent to all interested clients when the state of any buttons or indicators or 1785e9fcaa8aSmrgthe configuration of the buttons or indicators on the core keyboard or any 1786e9fcaa8aSmrginput extension device changes. The event reports the state of indicators for a 1787e9fcaa8aSmrgsingle indicator feedback, and the state of up to 128 buttons. If more than 128 1788e9fcaa8aSmrgbuttons or more than one indicator feedback are changed, the additional buttons 1789e9fcaa8aSmrgand indicator feedbacks are reported in subsequent events. Xkb provides 1790e9fcaa8aSmrgfunctions with which you can track changes to input extension devices by noting 1791e9fcaa8aSmrgthe changes that were made and then requesting the changed information from the 1792e9fcaa8aSmrgserver. 1793e9fcaa8aSmrg</para> 1794e9fcaa8aSmrg 1795e9fcaa8aSmrg 1796e9fcaa8aSmrg<para> 17970f8248bfSmrgTo note device changes reported in an 17980f8248bfSmrg<symbol>XkbExtensionDeviceNotify</symbol> 17990f8248bfSmrgevent, use XkbNoteDeviceChanges. 18000f8248bfSmrg</para> 18010f8248bfSmrg 18020f8248bfSmrg<indexterm significance="preferred" zone="XkbNoteDeviceChanges"><primary><function>XkbNoteDeviceChanges</function></primary></indexterm> 18030f8248bfSmrg<funcsynopsis id="XkbNoteDeviceChanges"> 18040f8248bfSmrg <funcprototype> 18050f8248bfSmrg <funcdef>void <function>XkbNoteDeviceChanges</function></funcdef> 18060f8248bfSmrg<!-- ( 18070f8248bfSmrg<parameter>old, new, wanted</parameter> 18080f8248bfSmrg) --> 18090f8248bfSmrg 18100f8248bfSmrg <paramdef>XkbDeviceChangesPtr <parameter>old</parameter></paramdef> 18110f8248bfSmrg <paramdef>XkbExtensionDeviceNotifyEvent *<parameter>new</parameter></paramdef> 18120f8248bfSmrg <paramdef>unsigned int <parameter>wanted</parameter></paramdef> 18130f8248bfSmrg </funcprototype> 18140f8248bfSmrg</funcsynopsis> 18150f8248bfSmrg<variablelist> 18160f8248bfSmrg <varlistentry> 18170f8248bfSmrg <term> 18180f8248bfSmrg <parameter>old</parameter> 18190f8248bfSmrg </term> 18200f8248bfSmrg <listitem> 18210f8248bfSmrg <para> 18220f8248bfSmrg structure tracking state changes 18230f8248bfSmrg </para> 18240f8248bfSmrg </listitem> 18250f8248bfSmrg </varlistentry> 18260f8248bfSmrg <varlistentry> 18270f8248bfSmrg <term> 18280f8248bfSmrg <parameter>new</parameter> 18290f8248bfSmrg </term> 18300f8248bfSmrg <listitem> 18310f8248bfSmrg <para> 18320f8248bfSmrg event indicating state changes 18330f8248bfSmrg </para> 18340f8248bfSmrg </listitem> 18350f8248bfSmrg </varlistentry> 18360f8248bfSmrg <varlistentry> 18370f8248bfSmrg <term> 18380f8248bfSmrg <parameter>wanted</parameter> 18390f8248bfSmrg </term> 18400f8248bfSmrg <listitem> 18410f8248bfSmrg <para> 18420f8248bfSmrg mask indicating changes to note 18430f8248bfSmrg </para> 18440f8248bfSmrg </listitem> 18450f8248bfSmrg </varlistentry> 18460f8248bfSmrg</variablelist> 18470f8248bfSmrg 18480f8248bfSmrg<para> 18490f8248bfSmrgThe wanted field specifies the changes that should be noted in 18500f8248bfSmrg<parameter>old</parameter>, 18510f8248bfSmrgand is composed of the bitwise inclusive OR of one or more of the masks from 18520f8248bfSmrg<link linkend="table21.1">Table 21.1</link>. 18530f8248bfSmrgThe 18540f8248bfSmrg<structfield>reason</structfield> 18550f8248bfSmrgfield of the event in 18560f8248bfSmrg<parameter>new</parameter> 18570f8248bfSmrgindicates the types of changes the event is reporting. 18580f8248bfSmrg<function>XkbNoteDeviceChanges</function> 18590f8248bfSmrgupdates the 18600f8248bfSmrg<structname>XkbDeviceChangesRec</structname> 18610f8248bfSmrgspecified by 18620f8248bfSmrg<parameter>old</parameter> 18630f8248bfSmrgwith the changes that are both specified in 18640f8248bfSmrg<parameter>wanted</parameter> 18650f8248bfSmrgand contained in 18660f8248bfSmrg<parameter>new</parameter>-><structfield>reason</structfield>. 1867e9fcaa8aSmrg</para> 1868e9fcaa8aSmrg 1869e9fcaa8aSmrg 1870e9fcaa8aSmrg<para> 1871e9fcaa8aSmrgTo update a local copy of the state and configuration of an X input extension 18720f8248bfSmrgdevice with the changes previously noted in an 18730f8248bfSmrg<structname>XkbDeviceChangesRec</structname> 18740f8248bfSmrgstructure, use XkbGetDeviceInfoChanges. 1875e9fcaa8aSmrg</para> 1876e9fcaa8aSmrg 1877e9fcaa8aSmrg 1878e9fcaa8aSmrg<para> 1879e9fcaa8aSmrgTo query the changes that have occurred in the button actions or indicator 1880e9fcaa8aSmrgnames and indicator maps associated with an input extension device, use 1881e9fcaa8aSmrgXkbGetDeviceInfoChanges. 1882e9fcaa8aSmrg</para> 1883e9fcaa8aSmrg 1884e9fcaa8aSmrg 18850f8248bfSmrg<indexterm significance="preferred" zone="XkbGetDeviceInfoChanges"><primary><function>XkbGetDeviceInfoChanges</function></primary></indexterm> 18860f8248bfSmrg<funcsynopsis id="XkbGetDeviceInfoChanges"> 18870f8248bfSmrg <funcprototype> 18880f8248bfSmrg <funcdef>Status <function>XkbGetDeviceInfoChanges</function></funcdef> 18890f8248bfSmrg<!-- ( 18900f8248bfSmrg<parameter>dpy</parameter>, 18910f8248bfSmrg<parameter>device_info</parameter>, 18920f8248bfSmrgchanges) --> 18930f8248bfSmrg 18940f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 18950f8248bfSmrg <paramdef>XkbDeviceInfoPtr <parameter>device_info</parameter></paramdef> 18960f8248bfSmrg <paramdef>XkbDeviceChangesPtr <parameter>changes</parameter></paramdef> 18970f8248bfSmrg </funcprototype> 18980f8248bfSmrg</funcsynopsis> 18990f8248bfSmrg<variablelist> 19000f8248bfSmrg <varlistentry> 19010f8248bfSmrg <term> 19020f8248bfSmrg <parameter>dpy</parameter> 19030f8248bfSmrg </term> 19040f8248bfSmrg <listitem> 19050f8248bfSmrg <para> 19060f8248bfSmrg connection to X server 19070f8248bfSmrg </para> 19080f8248bfSmrg </listitem> 19090f8248bfSmrg </varlistentry> 19100f8248bfSmrg <varlistentry> 19110f8248bfSmrg <term> 19120f8248bfSmrg <parameter>device_info</parameter> 19130f8248bfSmrg </term> 19140f8248bfSmrg <listitem> 19150f8248bfSmrg <para> 19160f8248bfSmrg structure to update with results 19170f8248bfSmrg </para> 19180f8248bfSmrg </listitem> 19190f8248bfSmrg </varlistentry> 19200f8248bfSmrg <varlistentry> 19210f8248bfSmrg <term> 19220f8248bfSmrg <parameter>changes</parameter> 19230f8248bfSmrg </term> 19240f8248bfSmrg <listitem> 19250f8248bfSmrg <para> 19260f8248bfSmrg contains notes of changes that have occurred 19270f8248bfSmrg </para> 19280f8248bfSmrg </listitem> 19290f8248bfSmrg </varlistentry> 19300f8248bfSmrg</variablelist> 1931e9fcaa8aSmrg 1932e9fcaa8aSmrg<para> 1933e9fcaa8aSmrgThe changes->changed field indicates which attributes of the device 19340f8248bfSmrgspecified in 19350f8248bfSmrg<parameter>changes</parameter>-><structfield>device</structfield> 19360f8248bfSmrghave changed. The parameters describing the changes are contained in the other 19370f8248bfSmrgfields of 19380f8248bfSmrg<parameter>changes</parameter>. 19390f8248bfSmrg<function>XkbGetDeviceInfoChanges</function> 19400f8248bfSmrguses that information to call XkbGetDeviceInfo to obtain the current status of 1941e9fcaa8aSmrgthose attributes that have changed. It then updates the local description of 19420f8248bfSmrgthe device in 19430f8248bfSmrg<parameter>device_info</parameter> 19440f8248bfSmrgwith the new information. 1945e9fcaa8aSmrg</para> 1946e9fcaa8aSmrg 1947e9fcaa8aSmrg 1948e9fcaa8aSmrg<para> 1949e9fcaa8aSmrgTo update the server’s description of a device with the changes noted in an 1950e9fcaa8aSmrgXkbDeviceChangesRec, use XkbChangeDeviceInfo. 1951e9fcaa8aSmrg</para> 1952e9fcaa8aSmrg 1953e9fcaa8aSmrg 19540f8248bfSmrg<indexterm significance="preferred" zone="XkbChangeDeviceInfo"><primary><function>XkbChangeDeviceInfo</function></primary></indexterm> 19550f8248bfSmrg<funcsynopsis id="XkbChangeDeviceInfo"> 19560f8248bfSmrg <funcprototype> 19570f8248bfSmrg <funcdef>Bool <function>XkbChangeDeviceInfo</function></funcdef> 19580f8248bfSmrg<!-- ( 19590f8248bfSmrg<parameter>dpy, device_info, changes</parameter> 19600f8248bfSmrg) --> 19610f8248bfSmrg 19620f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 19630f8248bfSmrg <paramdef>XkbDeviceInfoPtr <parameter>device_info</parameter></paramdef> 19640f8248bfSmrg <paramdef>XkbDeviceChangesPtr <parameter>changes</parameter></paramdef> 19650f8248bfSmrg </funcprototype> 19660f8248bfSmrg</funcsynopsis> 19670f8248bfSmrg<variablelist> 19680f8248bfSmrg <varlistentry> 19690f8248bfSmrg <term> 19700f8248bfSmrg <parameter>dpy</parameter> 19710f8248bfSmrg </term> 19720f8248bfSmrg <listitem> 19730f8248bfSmrg <para> 19740f8248bfSmrg connection to X server 19750f8248bfSmrg </para> 19760f8248bfSmrg </listitem> 19770f8248bfSmrg </varlistentry> 19780f8248bfSmrg <varlistentry> 19790f8248bfSmrg <term> 19800f8248bfSmrg <parameter>device_info</parameter> 19810f8248bfSmrg </term> 19820f8248bfSmrg <listitem> 19830f8248bfSmrg <para> 19840f8248bfSmrg local copy of device state and configuration 19850f8248bfSmrg </para> 19860f8248bfSmrg </listitem> 19870f8248bfSmrg </varlistentry> 19880f8248bfSmrg <varlistentry> 19890f8248bfSmrg <term> 19900f8248bfSmrg <parameter>changes</parameter> 19910f8248bfSmrg </term> 19920f8248bfSmrg <listitem> 19930f8248bfSmrg <para> 19940f8248bfSmrg note specifying changes in <parameter>device_info</parameter> 19950f8248bfSmrg </para> 19960f8248bfSmrg </listitem> 19970f8248bfSmrg </varlistentry> 19980f8248bfSmrg</variablelist> 19990f8248bfSmrg 20000f8248bfSmrg<para> 20010f8248bfSmrg<function>XkbChangeDeviceInfo</function> 20020f8248bfSmrgupdates the server’s description of the device specified in 20030f8248bfSmrg<parameter>device_info</parameter>-><structfield>device_spec</structfield> 20040f8248bfSmrgwith the changes specified in 20050f8248bfSmrg<parameter>changes</parameter> 20060f8248bfSmrgand contained in 20070f8248bfSmrg<parameter>device_info</parameter>. 20080f8248bfSmrgThe update is made by an XkbSetDeviceInfo request. 2009e9fcaa8aSmrg</para> 2010e9fcaa8aSmrg 2011e9fcaa8aSmrg</sect1> 2012e9fcaa8aSmrg</chapter> 2013