ch10.xml revision 0f8248bf
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='Keyboard_Controls'> 5e9fcaa8aSmrg<title>Keyboard Controls</title> 6e9fcaa8aSmrg 70f8248bfSmrg<indexterm significance="preferred" zone="Keyboard_Controls"> 80f8248bfSmrg<primary>controls</primary></indexterm> 90f8248bfSmrg<indexterm significance="preferred" zone="Keyboard_Controls"> 100f8248bfSmrg<primary>server controls</primary></indexterm> 110f8248bfSmrg<indexterm significance="preferred" zone="Keyboard_Controls"> 120f8248bfSmrg<primary>controls</primary><secondary>server</secondary></indexterm> 130f8248bfSmrg 14e9fcaa8aSmrg<para> 15e9fcaa8aSmrgThe Xkb extension is composed of two parts: a server extension, and a 16e9fcaa8aSmrgclient-side X library extension. This chapter discusses functions used to 17e9fcaa8aSmrgmodify controls effecting the behavior of the server portion of the Xkb 180f8248bfSmrgextension. <xref linkend="X_Library_Controls" /> discusses functions used to modify controls that affect 19e9fcaa8aSmrgonly the behavior of the client portion of the extension; those controls are 20e9fcaa8aSmrgknown as Library Controls. 21e9fcaa8aSmrg</para> 22e9fcaa8aSmrg 23e9fcaa8aSmrg 24e9fcaa8aSmrg<para> 25e9fcaa8aSmrgXkb contains control features that affect the entire keyboard, known as global 26e9fcaa8aSmrgkeyboard controls. Some of the controls may be selectively enabled and 270f8248bfSmrgdisabled; these controls are known as the 280f8248bfSmrg<firstterm>Boolean Controls</firstterm>. 290f8248bfSmrg<indexterm significance="preferred" zone="Keyboard_Controls"> 300f8248bfSmrg<primary>boolean controls</primary></indexterm> 310f8248bfSmrg<indexterm significance="preferred" zone="Keyboard_Controls"> 320f8248bfSmrg<primary>controls</primary><secondary>boolean</secondary></indexterm> 330f8248bfSmrgBoolean Controls can be turned on or off under program control and can also 34e9fcaa8aSmrgbe automatically set to an on or off condition when a client program exits. The 350f8248bfSmrgremaining controls, known as the 360f8248bfSmrg<firstterm>Non-Boolean Controls</firstterm>, 370f8248bfSmrg<indexterm significance="preferred" zone="Keyboard_Controls"> 380f8248bfSmrg<primary>non-boolean controls</primary></indexterm> 390f8248bfSmrg<indexterm significance="preferred" zone="Keyboard_Controls"> 400f8248bfSmrg<primary>controls</primary><secondary>non-boolean</secondary></indexterm> 410f8248bfSmrgare always active. The 420f8248bfSmrg<structname>XkbControlsRec</structname> 430f8248bfSmrgstructure describes the current state of most of the global controls and the 44e9fcaa8aSmrgattributes effecting the behavior of each of these Xkb features. This chapter 45e9fcaa8aSmrgdescribes the Xkb controls and how to manipulate them. 46e9fcaa8aSmrg</para> 47e9fcaa8aSmrg 48e9fcaa8aSmrg 49e9fcaa8aSmrg<para> 50e9fcaa8aSmrgThere are two possible components for each of the Boolean Controls: attributes 51e9fcaa8aSmrgdescribing how the control should work, and a state describing whether the 52e9fcaa8aSmrgbehavior as a whole is enabled or disabled. The attributes and state for most 530f8248bfSmrgof these controls are held in the 540f8248bfSmrg<structname>XkbControlsRec</structname> 550f8248bfSmrgstructure (see <link linkend="The_XkbControlsRec_Structure">section 10.8</link>). 56e9fcaa8aSmrg</para> 57e9fcaa8aSmrg 58e9fcaa8aSmrg 59e9fcaa8aSmrg<para> 60e9fcaa8aSmrgYou can manipulate the Xkb controls individually, via convenience functions, or 610f8248bfSmrgas a whole. To treat them as a group, modify an 620f8248bfSmrg<structname>XkbControlsRec</structname> 630f8248bfSmrgstructure to describe all of the changes to be made, and then pass that 640f8248bfSmrgstructure and appropriate flags to an Xkb library function, or use a 650f8248bfSmrg<structname>XkbControlsChangesRec</structname> 660f8248bfSmrg(see <link linkend="The_XkbControlsChangesRec_Structure">section 10.10.1</link>) to reduce network traffic. When using a convenience 670f8248bfSmrgfunction to manipulate one control individually, you do not use an 680f8248bfSmrg<structname>XkbControlsRec</structname> 690f8248bfSmrgstructure directly. 70e9fcaa8aSmrg</para> 71e9fcaa8aSmrg 72e9fcaa8aSmrg 73e9fcaa8aSmrg<para> 740f8248bfSmrgThe Xkb controls are grouped as shown in 750f8248bfSmrg<link linkend="table10.1">Table 10.1</link>. 76e9fcaa8aSmrg</para> 77e9fcaa8aSmrg 780f8248bfSmrg<table id='table10.1' frame='topbot'> 79e9fcaa8aSmrg<title>Xkb Keyboard Controls</title> 80eb411b4bSmrg<?dbfo keep-together="always" ?> 81eb411b4bSmrg<tgroup cols='3' align='left' colsep='0' rowsep='0'> 82eb411b4bSmrg<colspec colname='c1' colwidth='1.5*'/> 83eb411b4bSmrg<colspec colname='c2' colwidth='1.5*'/> 84eb411b4bSmrg<colspec colname='c3' colwidth='1.0*'/> 85e9fcaa8aSmrg<thead> 86eb411b4bSmrg<row rowsep='1'> 87e9fcaa8aSmrg <entry>Type of Control</entry> 88e9fcaa8aSmrg <entry>Control Name</entry> 89e9fcaa8aSmrg <entry>Boolean Control?</entry> 90e9fcaa8aSmrg </row> 91e9fcaa8aSmrg</thead> 92e9fcaa8aSmrg<tbody> 93eb411b4bSmrg <row> 94e9fcaa8aSmrg <entry>Controls for enabling and disabling other controls</entry> 95e9fcaa8aSmrg <entry>EnabledControls</entry> 96e9fcaa8aSmrg <entry>No</entry> 97e9fcaa8aSmrg </row> 98eb411b4bSmrg <row> 99e9fcaa8aSmrg <entry></entry> 100e9fcaa8aSmrg <entry>AutoReset</entry> 101e9fcaa8aSmrg <entry>No</entry> 102e9fcaa8aSmrg </row> 103eb411b4bSmrg <row> 104e9fcaa8aSmrg <entry>Control for bell behavior</entry> 105e9fcaa8aSmrg <entry>AudibleBell</entry> 106e9fcaa8aSmrg <entry>Boolean</entry> 107e9fcaa8aSmrg </row> 108eb411b4bSmrg <row> 109e9fcaa8aSmrg <entry>Controls for repeat key behavior</entry> 110e9fcaa8aSmrg <entry>PerKeyRepeat</entry> 111e9fcaa8aSmrg <entry>No</entry> 112e9fcaa8aSmrg </row> 113eb411b4bSmrg <row> 114e9fcaa8aSmrg <entry></entry> 115e9fcaa8aSmrg <entry>RepeatKeys</entry> 116e9fcaa8aSmrg <entry>Boolean</entry> 117e9fcaa8aSmrg </row> 118eb411b4bSmrg <row> 119e9fcaa8aSmrg <entry></entry> 120e9fcaa8aSmrg <entry>DetectableAutorepeat</entry> 121e9fcaa8aSmrg <entry>Boolean</entry> 122e9fcaa8aSmrg </row> 123eb411b4bSmrg <row> 124e9fcaa8aSmrg <entry>Controls for keyboard overlays</entry> 125e9fcaa8aSmrg <entry>Overlay1</entry> 126e9fcaa8aSmrg <entry>Boolean</entry> 127e9fcaa8aSmrg </row> 128eb411b4bSmrg <row> 129e9fcaa8aSmrg <entry></entry> 130e9fcaa8aSmrg <entry>Overlay2</entry> 131e9fcaa8aSmrg <entry>Boolean</entry> 132e9fcaa8aSmrg </row> 133eb411b4bSmrg <row> 134e9fcaa8aSmrg <entry>Controls for using the mouse from the keyboard</entry> 135e9fcaa8aSmrg <entry>MouseKeys</entry> 136e9fcaa8aSmrg <entry>Boolean</entry> 137e9fcaa8aSmrg </row> 138eb411b4bSmrg <row> 139e9fcaa8aSmrg <entry></entry> 140e9fcaa8aSmrg <entry>MouseKeysAccel</entry> 141e9fcaa8aSmrg <entry>Boolean</entry> 142e9fcaa8aSmrg </row> 143eb411b4bSmrg <row> 144e9fcaa8aSmrg <entry>Controls for better keyboard access by </entry> 145e9fcaa8aSmrg <entry>AccessXFeedback</entry> 146e9fcaa8aSmrg <entry>Boolean</entry> 147e9fcaa8aSmrg </row> 148eb411b4bSmrg <row> 149e9fcaa8aSmrg <entry>physically impaired persons</entry> 150e9fcaa8aSmrg <entry>AccessXKeys</entry> 151e9fcaa8aSmrg <entry>Boolean</entry> 152e9fcaa8aSmrg </row> 153eb411b4bSmrg <row> 154e9fcaa8aSmrg <entry></entry> 155e9fcaa8aSmrg <entry>AccessXTimeout</entry> 156e9fcaa8aSmrg <entry>Boolean</entry> 157e9fcaa8aSmrg </row> 158eb411b4bSmrg <row> 159e9fcaa8aSmrg <entry></entry> 160e9fcaa8aSmrg <entry>BounceKeys</entry> 161e9fcaa8aSmrg <entry>Boolean</entry> 162e9fcaa8aSmrg </row> 163eb411b4bSmrg <row> 164e9fcaa8aSmrg <entry></entry> 165e9fcaa8aSmrg <entry>SlowKeys</entry> 166e9fcaa8aSmrg <entry>Boolean</entry> 167e9fcaa8aSmrg </row> 168eb411b4bSmrg <row> 169e9fcaa8aSmrg <entry></entry> 170e9fcaa8aSmrg <entry>StickyKeys</entry> 171e9fcaa8aSmrg <entry>Boolean</entry> 172e9fcaa8aSmrg </row> 173eb411b4bSmrg <row> 174e9fcaa8aSmrg <entry>Controls for general keyboard mapping</entry> 175e9fcaa8aSmrg <entry>GroupsWrap</entry> 176e9fcaa8aSmrg <entry>No</entry> 177e9fcaa8aSmrg </row> 178eb411b4bSmrg <row> 179e9fcaa8aSmrg <entry></entry> 180e9fcaa8aSmrg <entry>IgnoreGroupLock</entry> 181e9fcaa8aSmrg <entry>Boolean</entry> 182e9fcaa8aSmrg </row> 183eb411b4bSmrg <row> 184e9fcaa8aSmrg <entry></entry> 185e9fcaa8aSmrg <entry>IgnoreLockMods</entry> 186e9fcaa8aSmrg <entry>No</entry> 187e9fcaa8aSmrg </row> 188eb411b4bSmrg <row> 189e9fcaa8aSmrg <entry></entry> 190e9fcaa8aSmrg <entry>InternalMods</entry> 191e9fcaa8aSmrg <entry>No</entry> 192e9fcaa8aSmrg </row> 193eb411b4bSmrg <row> 194e9fcaa8aSmrg <entry>Miscellaneous per-client controls</entry> 195e9fcaa8aSmrg <entry>GrabsUseXKBState</entry> 196e9fcaa8aSmrg <entry>Boolean</entry> 197e9fcaa8aSmrg </row> 198eb411b4bSmrg <row> 199e9fcaa8aSmrg <entry></entry> 200e9fcaa8aSmrg <entry>LookupStateWhenGrabbed</entry> 201e9fcaa8aSmrg <entry>Boolean</entry> 202e9fcaa8aSmrg </row> 203eb411b4bSmrg <row> 204e9fcaa8aSmrg <entry></entry> 205e9fcaa8aSmrg <entry>SendEventUsesXKBState</entry> 206e9fcaa8aSmrg <entry>Boolean</entry> 207e9fcaa8aSmrg </row> 208e9fcaa8aSmrg</tbody> 209e9fcaa8aSmrg</tgroup> 210e9fcaa8aSmrg</table> 211e9fcaa8aSmrg 212e9fcaa8aSmrg<para> 213e9fcaa8aSmrgThe individual categories and controls are described first, together with 2140f8248bfSmrgfunctions for manipulating them. A description of the 2150f8248bfSmrg<structname>XkbControlsRec</structname> 2160f8248bfSmrgstructure and the general functions for dealing with all of the controls at 217e9fcaa8aSmrgonce follow at the end of the chapter. 218e9fcaa8aSmrg</para> 219e9fcaa8aSmrg 220eb411b4bSmrg<sect1 id='Controls_that_Enable_and_Disable_Other_Controls'> 221e9fcaa8aSmrg<title>Controls that Enable and Disable Other Controls</title> 222e9fcaa8aSmrg 223e9fcaa8aSmrg<para> 224e9fcaa8aSmrgEnable and disable the boolean controls under program control by using the 2250f8248bfSmrg<emphasis>EnabledControls</emphasis> 2260f8248bfSmrgcontrol; enable and disable them upon program exit by configuring the 2270f8248bfSmrg<emphasis>AutoReset</emphasis> 2280f8248bfSmrgcontrol. 229e9fcaa8aSmrg</para> 230e9fcaa8aSmrg 231e9fcaa8aSmrg 232eb411b4bSmrg<sect2 id='The_EnabledControls_Control'> 233e9fcaa8aSmrg<title>The EnabledControls Control</title> 234e9fcaa8aSmrg 235e9fcaa8aSmrg<para> 2360f8248bfSmrgThe 2370f8248bfSmrg<emphasis>EnabledControls</emphasis> 2380f8248bfSmrgcontrol is a bit mask where each bit that is turned on means the corresponding 239e9fcaa8aSmrgcontrol is enabled, and when turned off, disabled. It corresponds to the 2400f8248bfSmrg<structfield>enabled_ctrls</structfield> 2410f8248bfSmrgfield of an 2420f8248bfSmrg<structname>XkbControlsRec</structname> 2430f8248bfSmrgstructure (see <link linkend="The_XkbControlsRec_Structure">section 10.8</link>). The bits describing which controls are turned on 2440f8248bfSmrgor off are defined in <link linkend="table10.7">Table 10.7</link>. 2450f8248bfSmrg</para> 2460f8248bfSmrg 2470f8248bfSmrg 2480f8248bfSmrg<para> 2490f8248bfSmrgUse 2500f8248bfSmrg<function>XkbChangeEnabledControls</function> 2510f8248bfSmrgto manipulate the 2520f8248bfSmrg<emphasis>EnabledControls</emphasis> 2530f8248bfSmrgcontrol. 2540f8248bfSmrg</para> 2550f8248bfSmrg 2560f8248bfSmrg<indexterm significance="preferred" zone="XkbChangeEnabledControls"><primary><function>XkbChangeEnabledControls</function></primary></indexterm> 2570f8248bfSmrg<funcsynopsis id="XkbChangeEnabledControls"> 2580f8248bfSmrg <funcprototype> 2590f8248bfSmrg <funcdef>Bool <function>XkbChangeEnabledControls</function></funcdef> 2600f8248bfSmrg<!-- ( 2610f8248bfSmrg<parameter>dpy</parameter>, 2620f8248bfSmrg<parameter>device_spec</parameter>, 2630f8248bfSmrg<parameter>mask</parameter>, 2640f8248bfSmrg<parameter>values</parameter> 2650f8248bfSmrg) --> 2660f8248bfSmrg 2670f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 2680f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 2690f8248bfSmrg <paramdef>unsigned int <parameter>mask</parameter></paramdef> 2700f8248bfSmrg <paramdef>unsigned int <parameter>values</parameter></paramdef> 2710f8248bfSmrg </funcprototype> 2720f8248bfSmrg</funcsynopsis> 2730f8248bfSmrg<variablelist> 2740f8248bfSmrg <varlistentry> 2750f8248bfSmrg <term> 2760f8248bfSmrg <parameter>dpy</parameter> 2770f8248bfSmrg </term> 2780f8248bfSmrg <listitem> 2790f8248bfSmrg <para> 2800f8248bfSmrg connection to X server 2810f8248bfSmrg </para> 2820f8248bfSmrg </listitem> 2830f8248bfSmrg </varlistentry> 2840f8248bfSmrg <varlistentry> 2850f8248bfSmrg <term> 2860f8248bfSmrg <parameter>device_spec</parameter> 2870f8248bfSmrg </term> 2880f8248bfSmrg <listitem> 2890f8248bfSmrg <para> 2900f8248bfSmrg keyboard device to modify 2910f8248bfSmrg </para> 2920f8248bfSmrg </listitem> 2930f8248bfSmrg </varlistentry> 2940f8248bfSmrg <varlistentry> 2950f8248bfSmrg <term> 2960f8248bfSmrg <parameter>mask</parameter> 2970f8248bfSmrg </term> 2980f8248bfSmrg <listitem> 2990f8248bfSmrg <para> 3000f8248bfSmrg 1 bit → controls to enable / disable 3010f8248bfSmrg </para> 3020f8248bfSmrg </listitem> 3030f8248bfSmrg </varlistentry> 3040f8248bfSmrg <varlistentry> 3050f8248bfSmrg <term> 3060f8248bfSmrg <parameter>values</parameter> 3070f8248bfSmrg </term> 3080f8248bfSmrg <listitem> 3090f8248bfSmrg <para> 3100f8248bfSmrg 1 bit ⇒ enable, 0 bit ⇒ disable 3110f8248bfSmrg </para> 3120f8248bfSmrg </listitem> 3130f8248bfSmrg </varlistentry> 3140f8248bfSmrg</variablelist> 3150f8248bfSmrg 3160f8248bfSmrg<para> 3170f8248bfSmrgThe 3180f8248bfSmrg<parameter>mask</parameter> 3190f8248bfSmrgparameter specifies the boolean controls to be enabled or disabled, and the 3200f8248bfSmrg<parameter>values</parameter> 3210f8248bfSmrgmask specifies the new state for those controls. Valid values for both of 322e9fcaa8aSmrgthese masks are composed of a bitwise inclusive OR of bits taken from the set 3230f8248bfSmrgof mask bits in <link linkend="table10.7">Table 10.7</link>, 3240f8248bfSmrgusing only those masks with <quote>ok</quote> in the 3250f8248bfSmrg<structfield>enabled_ctrls</structfield> 3260f8248bfSmrgcolumn. 327e9fcaa8aSmrg</para> 328e9fcaa8aSmrg 329e9fcaa8aSmrg 330e9fcaa8aSmrg<para> 331e9fcaa8aSmrgIf the X server does not support a compatible version of Xkb or the Xkb 3320f8248bfSmrgextension has not been properly initialized, 3330f8248bfSmrg<function>XkbChangeEnabledControls</function> 3340f8248bfSmrgreturns 3350f8248bfSmrg<symbol>False</symbol>; 3360f8248bfSmrgotherwise, it sends the request to the X server and returns 3370f8248bfSmrg<symbol>True</symbol>. 338e9fcaa8aSmrg</para> 339e9fcaa8aSmrg 340e9fcaa8aSmrg 341e9fcaa8aSmrg<para> 3420f8248bfSmrgNote that the 3430f8248bfSmrg<emphasis>EnabledControls</emphasis> 3440f8248bfSmrgcontrol only enables and disables controls; it does not configure them. Some 3450f8248bfSmrgcontrols, such as the 3460f8248bfSmrg<emphasis>AudibleBell</emphasis> 3470f8248bfSmrgcontrol, have no configuration attributes and are therefore manipulated solely 348e9fcaa8aSmrgby enabling and disabling them. Others, however, have additional attributes to 3490f8248bfSmrgconfigure their behavior. For example, the 3500f8248bfSmrg<emphasis>RepeatControl</emphasis> 3510f8248bfSmrgcontrol uses 3520f8248bfSmrg<structfield>repeat_delay</structfield> 3530f8248bfSmrgand 3540f8248bfSmrg<structfield>repeat_interval</structfield> 3550f8248bfSmrgfields to describe the timing behavior of keys that repeat. The 3560f8248bfSmrg<emphasis>RepeatControl</emphasis> 3570f8248bfSmrgbehavior is turned on or off depending on the value of the 3580f8248bfSmrg<symbol>XkbRepeatKeysMask</symbol> 3590f8248bfSmrgbit, but you must use other means, as described in this chapter, to configure 360e9fcaa8aSmrgits behavior in detail. 361e9fcaa8aSmrg</para> 362e9fcaa8aSmrg 363e9fcaa8aSmrg 364e9fcaa8aSmrg</sect2> 365eb411b4bSmrg<sect2 id='The_AutoReset_Control'> 366e9fcaa8aSmrg<title>The AutoReset Control</title> 367e9fcaa8aSmrg 368e9fcaa8aSmrg<para> 369e9fcaa8aSmrgYou can configure the boolean controls to automatically be enabled or disabled 370e9fcaa8aSmrgwhen a program exits. This capability is controlled via two masks maintained in 371e9fcaa8aSmrgthe X server on a per-client basis. There is no client-side Xkb data structure 372e9fcaa8aSmrgcorresponding to these masks. Whenever the client exits for any reason, any 3730f8248bfSmrgboolean controls specified in the 3740f8248bfSmrg<firstterm>auto-reset mask</firstterm> 3750f8248bfSmrg<indexterm significance="preferred" zone="The_AutoReset_Control"> 3760f8248bfSmrg<primary>auto-reset mask</primary></indexterm> 3770f8248bfSmrg<indexterm significance="preferred" zone="The_AutoReset_Control"> 3780f8248bfSmrg<primary>mask</primary><secondary>auto-reset</secondary></indexterm> 3790f8248bfSmrgare set to the corresponding value from the 3800f8248bfSmrg<firstterm>auto-reset values</firstterm> 3810f8248bfSmrgmask. This makes it possible for clients to "clean up after themselves" 382e9fcaa8aSmrgautomatically, even if abnormally terminated. The bits used in the masks 3830f8248bfSmrgcorrespond to the 3840f8248bfSmrg<emphasis>EnabledControls</emphasis> 3850f8248bfSmrgcontrol bits. 386e9fcaa8aSmrg</para> 387e9fcaa8aSmrg 388e9fcaa8aSmrg 389e9fcaa8aSmrg<para> 390e9fcaa8aSmrgFor example, a client that replaces the keyboard bell with some other audible 3910f8248bfSmrgcue might want to turn off the 3920f8248bfSmrg<emphasis>AudibleBell</emphasis> 3930f8248bfSmrgcontrol to prevent the server from also generating a sound and avoid 3940f8248bfSmrgcacophony. If the client were to exit without resetting the 3950f8248bfSmrg<emphasis>AudibleBell</emphasis> 3960f8248bfSmrgcontrol, the user would be left without any feedback at all. Setting 3970f8248bfSmrg<emphasis>AudibleBell</emphasis> 3980f8248bfSmrgin both the auto-reset mask and auto-reset values guarantees that the audible 399e9fcaa8aSmrgbell will be turned back on when the client exits. 400e9fcaa8aSmrg</para> 401e9fcaa8aSmrg 402e9fcaa8aSmrg 403e9fcaa8aSmrg<para> 4040f8248bfSmrgTo get the current values of the auto-reset controls, use 4050f8248bfSmrg<function>XkbGetAutoResetControls</function>. 4060f8248bfSmrg</para> 4070f8248bfSmrg 4080f8248bfSmrg<indexterm significance="preferred" zone="XkbGetAutoResetControls"><primary><function>XkbGetAutoResetControls</function></primary></indexterm> 4090f8248bfSmrg<funcsynopsis id="XkbGetAutoResetControls"> 4100f8248bfSmrg <funcprototype> 4110f8248bfSmrg <funcdef>Bool <function>XkbGetAutoResetControls</function></funcdef> 4120f8248bfSmrg<!-- ( 4130f8248bfSmrg<parameter>dpy</parameter>, 4140f8248bfSmrg<parameter>auto_ctrls</parameter>, 4150f8248bfSmrg<parameter>auto_values</parameter> 4160f8248bfSmrg) --> 4170f8248bfSmrg 4180f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 4190f8248bfSmrg <paramdef>unsigned int *<parameter>auto_ctrls</parameter></paramdef> 4200f8248bfSmrg <paramdef>unsigned int *<parameter>auto_values</parameter></paramdef> 4210f8248bfSmrg </funcprototype> 4220f8248bfSmrg</funcsynopsis> 4230f8248bfSmrg<variablelist> 4240f8248bfSmrg <varlistentry> 4250f8248bfSmrg <term> 4260f8248bfSmrg <parameter>dpy</parameter> 4270f8248bfSmrg </term> 4280f8248bfSmrg <listitem> 4290f8248bfSmrg <para> 4300f8248bfSmrg connection to X server 4310f8248bfSmrg </para> 4320f8248bfSmrg </listitem> 4330f8248bfSmrg </varlistentry> 4340f8248bfSmrg <varlistentry> 4350f8248bfSmrg <term> 4360f8248bfSmrg <parameter>auto_ctrls</parameter> 4370f8248bfSmrg </term> 4380f8248bfSmrg <listitem> 4390f8248bfSmrg <para> 4400f8248bfSmrg specifies which bits in <parameter>auto_values</parameter> are relevant 4410f8248bfSmrg </para> 4420f8248bfSmrg </listitem> 4430f8248bfSmrg </varlistentry> 4440f8248bfSmrg <varlistentry> 4450f8248bfSmrg <term> 4460f8248bfSmrg <parameter>auto_values</parameter> 4470f8248bfSmrg </term> 4480f8248bfSmrg <listitem> 4490f8248bfSmrg <para> 4500f8248bfSmrg 1 bit ⇒ corresponding control has auto-reset on 4510f8248bfSmrg </para> 4520f8248bfSmrg </listitem> 4530f8248bfSmrg </varlistentry> 4540f8248bfSmrg</variablelist> 4550f8248bfSmrg 4560f8248bfSmrg<para> 4570f8248bfSmrg<function>XkbGetAutoResetControls</function> 4580f8248bfSmrgbackfills 4590f8248bfSmrg<parameter>auto_ctrls</parameter> 4600f8248bfSmrgand 4610f8248bfSmrg<parameter>auto_values</parameter> 4620f8248bfSmrgwith the 4630f8248bfSmrg<emphasis>AutoReset</emphasis> 4640f8248bfSmrgcontrol attributes for this particular client. It returns 4650f8248bfSmrg<symbol>True</symbol> 4660f8248bfSmrgif successful, and 4670f8248bfSmrg<symbol>False</symbol> 4680f8248bfSmrgotherwise. 4690f8248bfSmrg</para> 4700f8248bfSmrg 4710f8248bfSmrg 4720f8248bfSmrg<para> 4730f8248bfSmrgTo change the current values of the 4740f8248bfSmrg<emphasis>AutoReset</emphasis> 4750f8248bfSmrgcontrol attributes, use 4760f8248bfSmrg<function>XkbSetAutoResetControls</function>. 4770f8248bfSmrg</para> 4780f8248bfSmrg 4790f8248bfSmrg 4800f8248bfSmrg<indexterm significance="preferred" zone="XkbSetAutoResetControls"><primary><function>XkbSetAutoResetControls</function></primary></indexterm> 4810f8248bfSmrg<funcsynopsis id="XkbSetAutoResetControls"> 4820f8248bfSmrg <funcprototype> 4830f8248bfSmrg <funcdef>Bool <function>XkbSetAutoResetControls</function></funcdef> 4840f8248bfSmrg<!-- ( 4850f8248bfSmrg<parameter>dpy</parameter>, 4860f8248bfSmrg<parameter>changes</parameter>, 4870f8248bfSmrg<parameter>auto_ctrls</parameter>, 4880f8248bfSmrg<parameter>auto_values</parameter> 4890f8248bfSmrg) --> 4900f8248bfSmrg 4910f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 4920f8248bfSmrg <paramdef>unsigned int <parameter>changes</parameter></paramdef> 4930f8248bfSmrg <paramdef>unsigned int *<parameter>auto_ctrls</parameter></paramdef> 4940f8248bfSmrg <paramdef>unsigned int *<parameter>auto_values</parameter></paramdef> 4950f8248bfSmrg </funcprototype> 4960f8248bfSmrg</funcsynopsis> 4970f8248bfSmrg<variablelist> 4980f8248bfSmrg <varlistentry> 4990f8248bfSmrg <term> 5000f8248bfSmrg <parameter>dpy</parameter> 5010f8248bfSmrg </term> 5020f8248bfSmrg <listitem> 5030f8248bfSmrg <para> 5040f8248bfSmrg connection to X server 5050f8248bfSmrg </para> 5060f8248bfSmrg </listitem> 5070f8248bfSmrg </varlistentry> 5080f8248bfSmrg <varlistentry> 5090f8248bfSmrg <term> 5100f8248bfSmrg <parameter>changes</parameter> 5110f8248bfSmrg </term> 5120f8248bfSmrg <listitem> 5130f8248bfSmrg <para> 5140f8248bfSmrg controls for which to change auto-reset values 5150f8248bfSmrg </para> 5160f8248bfSmrg </listitem> 5170f8248bfSmrg </varlistentry> 5180f8248bfSmrg <varlistentry> 5190f8248bfSmrg <term> 5200f8248bfSmrg <parameter>auto_ctrls</parameter> 5210f8248bfSmrg </term> 5220f8248bfSmrg <listitem> 5230f8248bfSmrg <para> 5240f8248bfSmrg controls from changes that should auto reset 5250f8248bfSmrg </para> 5260f8248bfSmrg </listitem> 5270f8248bfSmrg </varlistentry> 5280f8248bfSmrg <varlistentry> 5290f8248bfSmrg <term> 5300f8248bfSmrg <parameter>auto_values</parameter> 5310f8248bfSmrg </term> 5320f8248bfSmrg <listitem> 5330f8248bfSmrg <para> 5340f8248bfSmrg 1 bit ⇒ auto-reset on 5350f8248bfSmrg </para> 5360f8248bfSmrg </listitem> 5370f8248bfSmrg </varlistentry> 5380f8248bfSmrg</variablelist> 5390f8248bfSmrg 5400f8248bfSmrg<para> 5410f8248bfSmrg<function>XkbSetAutoResetControls</function> 5420f8248bfSmrgchanges the auto-reset status and associated auto-reset 5430f8248bfSmrgvalues for the controls selected by 5440f8248bfSmrg<parameter>changes</parameter>. 5450f8248bfSmrgFor any control selected by 5460f8248bfSmrg<parameter>changes</parameter>, 5470f8248bfSmrgif the corresponding bit is set in 5480f8248bfSmrg<parameter>auto_ctrls</parameter>, 5490f8248bfSmrgthe control is configured to auto-reset when the client exits. If the 5500f8248bfSmrgcorresponding bit in 5510f8248bfSmrg<parameter>auto_values</parameter> 5520f8248bfSmrgis on, the control is turned on when the client exits; 5530f8248bfSmrgif zero, the control is turned off when the client exits. 5540f8248bfSmrgFor any control selected by 5550f8248bfSmrg<parameter>changes</parameter>, 5560f8248bfSmrgif the corresponding bit is not set in 5570f8248bfSmrg<parameter>auto_ctrls</parameter>, 5580f8248bfSmrgthe control is configured to not reset when the client exits. For example: 5590f8248bfSmrg</para> 5600f8248bfSmrg 5610f8248bfSmrg 5620f8248bfSmrg<para> 5630f8248bfSmrgTo leave the auto-reset controls for 5640f8248bfSmrg<emphasis>StickyKeys</emphasis> 5650f8248bfSmrgthe way they are: 566e9fcaa8aSmrg 5670f8248bfSmrg<programlisting> 5680f8248bfSmrg ok = XkbSetAutoResetControls(dpy, 0, 0, 0); 569e9fcaa8aSmrg</programlisting></para> 570e9fcaa8aSmrg 571e9fcaa8aSmrg<para> 5720f8248bfSmrgTo change the auto-reset controls so that 5730f8248bfSmrg<emphasis>StickyKeys</emphasis> 5740f8248bfSmrgare unaffected when the client exits: 575e9fcaa8aSmrg 5760f8248bfSmrg<programlisting> 5770f8248bfSmrg ok = XkbSetAutoResetControls(dpy, XkbStickyKeysMask, 0, 0); 578e9fcaa8aSmrg</programlisting></para> 579e9fcaa8aSmrg 580e9fcaa8aSmrg<para> 5810f8248bfSmrgTo change the auto-reset controls so that 5820f8248bfSmrg<emphasis>StickyKeys</emphasis> 5830f8248bfSmrgare turned off when the client exits: 584e9fcaa8aSmrg 5850f8248bfSmrg<programlisting> 5860f8248bfSmrg ok = XkbSetAutoResetControls(dpy, XkbStickyKeysMask, XkbStickyKeysMask, 0); 587e9fcaa8aSmrg</programlisting></para> 588e9fcaa8aSmrg 589e9fcaa8aSmrg<para> 5900f8248bfSmrgTo change the auto-reset controls so that 5910f8248bfSmrg<emphasis>StickyKeys</emphasis> 5920f8248bfSmrgare turned on when the client exits: 593e9fcaa8aSmrg 5940f8248bfSmrg<programlisting> 5950f8248bfSmrg ok = XkbSetAutoResetControls(dpy, XkbStickyKeysMask, XkbStickyKeysMask, 5960f8248bfSmrg XkbStickyKeysMask); 597e9fcaa8aSmrg</programlisting></para> 598e9fcaa8aSmrg 599e9fcaa8aSmrg<para> 6000f8248bfSmrg<function>XkbSetAutoResetControls</function> 6010f8248bfSmrgbackfills 6020f8248bfSmrg<parameter>auto_ctrls</parameter> 6030f8248bfSmrgand 6040f8248bfSmrg<parameter>auto_values</parameter> 6050f8248bfSmrgwith the auto-reset controls for this particular client. Note that all of the 606e9fcaa8aSmrgbits are valid in the returned values, not just the ones selected in the 6070f8248bfSmrg<parameter>changes</parameter> 6080f8248bfSmrgmask. 609e9fcaa8aSmrg</para> 610e9fcaa8aSmrg 611e9fcaa8aSmrg 612e9fcaa8aSmrg</sect2> 613e9fcaa8aSmrg</sect1> 614eb411b4bSmrg<sect1 id='Control_for_Bell_Behavior'> 615e9fcaa8aSmrg<title>Control for Bell Behavior</title> 616e9fcaa8aSmrg 617e9fcaa8aSmrg<para> 6180f8248bfSmrgThe X server’s generation of sounds is controlled by the 6190f8248bfSmrg<emphasis>AudibleBell</emphasis> 6200f8248bfSmrgcontrol. Configuration of different bell sounds is discussed in <xref linkend="Bells" />. 621e9fcaa8aSmrg</para> 622e9fcaa8aSmrg 623e9fcaa8aSmrg 624eb411b4bSmrg<sect2 id='The_AudibleBell_Control'> 625e9fcaa8aSmrg<title>The AudibleBell Control</title> 626e9fcaa8aSmrg 627e9fcaa8aSmrg<para> 6280f8248bfSmrgThe 6290f8248bfSmrg<emphasis>AudibleBell</emphasis> 6300f8248bfSmrgcontrol is a boolean control that has no attributes. As such, you may enable 6310f8248bfSmrgand disable it using either the 6320f8248bfSmrg<emphasis>EnabledControls</emphasis> 6330f8248bfSmrgcontrol or the 6340f8248bfSmrg<emphasis>AutoReset</emphasis> 6350f8248bfSmrgcontrol discussed in <link linkend="The_EnabledControls_Control">section 10.1.1</link>. When enabled, protocol requests to 636e9fcaa8aSmrggenerate a sound result in the X server actually producing a real sound; when 637e9fcaa8aSmrgdisabled, requests to the server to generate a sound are ignored unless the 6380f8248bfSmrgsound is forced. See <link linkend="Audible_Bells">section 9.2</link>. 639e9fcaa8aSmrg</para> 640e9fcaa8aSmrg 641e9fcaa8aSmrg 642e9fcaa8aSmrg</sect2> 643e9fcaa8aSmrg</sect1> 644eb411b4bSmrg<sect1 id='Controls_for_Repeat_Key_Behavior'> 645e9fcaa8aSmrg<title>Controls for Repeat Key Behavior</title> 646e9fcaa8aSmrg 6470f8248bfSmrg<indexterm significance="preferred" zone="Controls_for_Repeat_Key_Behavior"> 6480f8248bfSmrg<primary>auto-repeat</primary><secondary>controls</secondary></indexterm> 6490f8248bfSmrg 650e9fcaa8aSmrg<para> 651e9fcaa8aSmrgThe repeating behavior of keyboard keys is governed by three controls, the 6520f8248bfSmrg<emphasis>PerKeyRepeat</emphasis> 6530f8248bfSmrgcontrol, which is always active, and the 6540f8248bfSmrg<emphasis>RepeatKeys</emphasis> 6550f8248bfSmrgand 6560f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 6570f8248bfSmrgcontrols, which are boolean controls that may be enabled and disabled. 6580f8248bfSmrg<emphasis>PerKeyRepeat</emphasis> 6590f8248bfSmrgdetermines which keys are allowed to repeat. 6600f8248bfSmrg<emphasis>RepeatKeys</emphasis> 6610f8248bfSmrggoverns the behavior of an individual key when it is repeating. 6620f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 6630f8248bfSmrgallows a client to detect when a key is repeating as a result of being held 664e9fcaa8aSmrgdown. 665e9fcaa8aSmrg</para> 666e9fcaa8aSmrg 667e9fcaa8aSmrg 668eb411b4bSmrg<sect2 id='The_PerKeyRepeat_Control'> 669e9fcaa8aSmrg<title>The PerKeyRepeat Control</title> 670e9fcaa8aSmrg 671e9fcaa8aSmrg<para> 6720f8248bfSmrgThe 6730f8248bfSmrg<emphasis>PerKeyRepeat</emphasis> 6740f8248bfSmrgcontrol is a bitmask long enough to contain a bit for each key on the device; 6750f8248bfSmrgit determines which individual keys are allowed to repeat. The Xkb 6760f8248bfSmrg<emphasis>PerKeyRepeat</emphasis> 6770f8248bfSmrgcontrol provides no functionality different from that available via the core X 678e9fcaa8aSmrgprotocol. There are no convenience functions in Xkb for manipulating this 6790f8248bfSmrgcontrol. The 6800f8248bfSmrg<emphasis>PerKeyRepeat</emphasis> 6810f8248bfSmrgcontrol settings are carried in the 6820f8248bfSmrg<structfield>per_key_repeat</structfield> 6830f8248bfSmrgfield of an 6840f8248bfSmrg<structname>XkbControlsRec</structname> 6850f8248bfSmrgstructure, discussed in <link linkend="The_XkbControlsRec_Structure">section 10.8</link>. 686e9fcaa8aSmrg</para> 687e9fcaa8aSmrg 688e9fcaa8aSmrg 689e9fcaa8aSmrg</sect2> 690eb411b4bSmrg<sect2 id='The_RepeatKeys_Control'> 691e9fcaa8aSmrg<title>The RepeatKeys Control</title> 692e9fcaa8aSmrg 693e9fcaa8aSmrg<para> 694e9fcaa8aSmrgThe core protocol allows only control over whether or not the entire keyboard 6950f8248bfSmrgor individual keys should auto-repeat when held down. 6960f8248bfSmrg<emphasis>RepeatKeys</emphasis> 6970f8248bfSmrgis a boolean control that extends this capability by adding control over the 6980f8248bfSmrgdelay until a key begins to repeat and the rate at which it repeats. 6990f8248bfSmrg<emphasis>RepeatKeys</emphasis> 7000f8248bfSmrgis coupled with the core auto-repeat control: when 7010f8248bfSmrg<emphasis>RepeatKeys</emphasis> 7020f8248bfSmrgis enabled or disabled, the core auto-repeat is enabled or disabled and vice 703e9fcaa8aSmrgversa. 704e9fcaa8aSmrg</para> 705e9fcaa8aSmrg 706e9fcaa8aSmrg 707e9fcaa8aSmrg<para> 7080f8248bfSmrgAuto-repeating keys are controlled by two attributes. The first, 7090f8248bfSmrg<firstterm>timeout</firstterm>, 7100f8248bfSmrgis the delay after the initial press of an auto-repeating key and the first 7110f8248bfSmrggenerated repeat event. The second, 7120f8248bfSmrg<firstterm>interval</firstterm>, 7130f8248bfSmrgis the delay between all subsequent generated repeat events. As with all 714e9fcaa8aSmrgboolean controls, configuring the attributes that determine how the control 7150f8248bfSmrgoperates does not automatically enable the control as a whole; see <link linkend="Controls_that_Enable_and_Disable_Other_Controls">section 10.1</link>. 7160f8248bfSmrg</para> 7170f8248bfSmrg 7180f8248bfSmrg 7190f8248bfSmrg<para> 7200f8248bfSmrgTo get the current attributes of the 7210f8248bfSmrg<emphasis>RepeatKeys</emphasis> 7220f8248bfSmrgcontrol for a keyboard device, use 7230f8248bfSmrg<function>XkbGetAutoRepeatRate</function>. 7240f8248bfSmrg</para> 7250f8248bfSmrg 7260f8248bfSmrg<indexterm significance="preferred" zone="XkbGetAutoRepeatRate"><primary><function>XkbGetAutoRepeatRate</function></primary></indexterm> 7270f8248bfSmrg<funcsynopsis id="XkbGetAutoRepeatRate"> 7280f8248bfSmrg <funcprototype> 7290f8248bfSmrg <funcdef>Bool <function>XkbGetAutoRepeatRate</function></funcdef> 7300f8248bfSmrg<!-- ( 7310f8248bfSmrg<parameter>display, device_spec, timeout_rtrn, interval_rtrn</parameter> 7320f8248bfSmrg) --> 7330f8248bfSmrg 7340f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 7350f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 7360f8248bfSmrg <paramdef>unsigned int *<parameter>timeout_rtrn</parameter></paramdef> 7370f8248bfSmrg <paramdef>unsigned int *<parameter>interval_rtrn</parameter></paramdef> 7380f8248bfSmrg </funcprototype> 7390f8248bfSmrg</funcsynopsis> 7400f8248bfSmrg<variablelist> 7410f8248bfSmrg <varlistentry> 7420f8248bfSmrg <term> 7430f8248bfSmrg <parameter>display</parameter> 7440f8248bfSmrg </term> 7450f8248bfSmrg <listitem> 7460f8248bfSmrg <para> 7470f8248bfSmrg connection to X server 7480f8248bfSmrg </para> 7490f8248bfSmrg </listitem> 7500f8248bfSmrg </varlistentry> 7510f8248bfSmrg <varlistentry> 7520f8248bfSmrg <term> 7530f8248bfSmrg <parameter>device_spec</parameter> 7540f8248bfSmrg </term> 7550f8248bfSmrg <listitem> 7560f8248bfSmrg <para> 7570f8248bfSmrg desired device ID, or <symbol>XkbUseCoreKbd</symbol> 7580f8248bfSmrg </para> 7590f8248bfSmrg </listitem> 7600f8248bfSmrg </varlistentry> 7610f8248bfSmrg <varlistentry> 7620f8248bfSmrg <term> 7630f8248bfSmrg <parameter>timeout_rtrn</parameter> 7640f8248bfSmrg </term> 7650f8248bfSmrg <listitem> 7660f8248bfSmrg <para> 7670f8248bfSmrg backfilled with initial repeat delay, ms 7680f8248bfSmrg </para> 7690f8248bfSmrg </listitem> 7700f8248bfSmrg </varlistentry> 7710f8248bfSmrg <varlistentry> 7720f8248bfSmrg <term> 7730f8248bfSmrg <parameter>interval_rtrn</parameter> 7740f8248bfSmrg </term> 7750f8248bfSmrg <listitem> 7760f8248bfSmrg <para> 7770f8248bfSmrg backfilled with subsequent repeat delay, ms 7780f8248bfSmrg </para> 7790f8248bfSmrg </listitem> 7800f8248bfSmrg </varlistentry> 7810f8248bfSmrg</variablelist> 7820f8248bfSmrg 7830f8248bfSmrg<para> 7840f8248bfSmrg<function>XkbGetAutoRepeatRate</function> 7850f8248bfSmrgqueries the server for the current values of the 7860f8248bfSmrg<emphasis>RepeatControls</emphasis> 7870f8248bfSmrgcontrol attributes, backfills 7880f8248bfSmrg<parameter>timeout_rtrn</parameter> 7890f8248bfSmrgand 7900f8248bfSmrg<parameter>interval_rtrn</parameter> 7910f8248bfSmrgwith them, and returns 7920f8248bfSmrg<symbol>True</symbol>. 7930f8248bfSmrgIf a compatible version of the Xkb extension is not available in the server 7940f8248bfSmrg<function>XkbGetAutoRepeatRate</function> 7950f8248bfSmrgreturns 7960f8248bfSmrg<symbol>False</symbol>. 797e9fcaa8aSmrg</para> 798e9fcaa8aSmrg 799e9fcaa8aSmrg 800e9fcaa8aSmrg<para> 801e9fcaa8aSmrgTo set the attributes of the RepeatKeys control for a keyboard device, use 8020f8248bfSmrg<function>XkbSetAutoRepeatRate</function>. 8030f8248bfSmrg</para> 8040f8248bfSmrg 8050f8248bfSmrg 8060f8248bfSmrg<indexterm significance="preferred" zone="XkbSetAutoRepeatRate"><primary><function>XkbSetAutoRepeatRate</function></primary></indexterm> 8070f8248bfSmrg<funcsynopsis id="XkbSetAutoRepeatRate"> 8080f8248bfSmrg <funcprototype> 8090f8248bfSmrg <funcdef>Bool <function>XkbSetAutoRepeatRate</function></funcdef> 8100f8248bfSmrg<!-- ( 8110f8248bfSmrg<parameter>display, device_spec, timeout, interval</parameter> 8120f8248bfSmrg) --> 8130f8248bfSmrg 8140f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 8150f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 8160f8248bfSmrg <paramdef>unsigned int <parameter>timeout</parameter></paramdef> 8170f8248bfSmrg <paramdef>unsigned int <parameter>interval</parameter></paramdef> 8180f8248bfSmrg </funcprototype> 8190f8248bfSmrg</funcsynopsis> 8200f8248bfSmrg<variablelist> 8210f8248bfSmrg <varlistentry> 8220f8248bfSmrg <term> 8230f8248bfSmrg <parameter>display</parameter> 8240f8248bfSmrg </term> 8250f8248bfSmrg <listitem> 8260f8248bfSmrg <para> 8270f8248bfSmrg connection to X server 8280f8248bfSmrg </para> 8290f8248bfSmrg </listitem> 8300f8248bfSmrg </varlistentry> 8310f8248bfSmrg <varlistentry> 8320f8248bfSmrg <term> 8330f8248bfSmrg <parameter>device_spec</parameter> 8340f8248bfSmrg </term> 8350f8248bfSmrg <listitem> 8360f8248bfSmrg <para> 8370f8248bfSmrg device to configure, or <symbol>XkbUseCoreKbd</symbol> 8380f8248bfSmrg </para> 8390f8248bfSmrg </listitem> 8400f8248bfSmrg </varlistentry> 8410f8248bfSmrg <varlistentry> 8420f8248bfSmrg <term> 8430f8248bfSmrg <parameter>timeout</parameter> 8440f8248bfSmrg </term> 8450f8248bfSmrg <listitem> 8460f8248bfSmrg <para> 8470f8248bfSmrg initial delay, ms 8480f8248bfSmrg </para> 8490f8248bfSmrg </listitem> 8500f8248bfSmrg </varlistentry> 8510f8248bfSmrg <varlistentry> 8520f8248bfSmrg <term> 8530f8248bfSmrg <parameter>interval</parameter> 8540f8248bfSmrg </term> 8550f8248bfSmrg <listitem> 8560f8248bfSmrg <para> 8570f8248bfSmrg delay between repeats, ms 8580f8248bfSmrg </para> 8590f8248bfSmrg </listitem> 8600f8248bfSmrg </varlistentry> 8610f8248bfSmrg</variablelist> 8620f8248bfSmrg 8630f8248bfSmrg<para> 8640f8248bfSmrg<function>XkbSetAutoRepeatRate</function> 8650f8248bfSmrgsends a request to the X server to configure the 8660f8248bfSmrg<emphasis>AutoRepeat</emphasis> 8670f8248bfSmrgcontrol attributes to the values specified in 8680f8248bfSmrg<parameter>timeout</parameter> 8690f8248bfSmrgand 8700f8248bfSmrg<parameter>interval</parameter>. 8710f8248bfSmrg</para> 8720f8248bfSmrg 8730f8248bfSmrg 8740f8248bfSmrg<para> 8750f8248bfSmrg<function>XkbSetAutoRepeatRate</function> 8760f8248bfSmrgdoes not wait for a reply; it normally returns 8770f8248bfSmrg<symbol>True</symbol>. 8780f8248bfSmrgSpecifying a zero value for either 8790f8248bfSmrg<parameter>timeout</parameter> 8800f8248bfSmrgor 8810f8248bfSmrg<parameter>interval</parameter> 8820f8248bfSmrgcauses the server to generate a 8830f8248bfSmrg<errorname>BadValue</errorname> 8840f8248bfSmrgprotocol error. If a compatible version of the Xkb extension is not available 8850f8248bfSmrgin the server, 8860f8248bfSmrg<function>XkbSetAutoRepeatRate</function> 8870f8248bfSmrgreturns 8880f8248bfSmrg<symbol>False</symbol>. 889e9fcaa8aSmrg</para> 890e9fcaa8aSmrg 891e9fcaa8aSmrg 892e9fcaa8aSmrg</sect2> 893eb411b4bSmrg<sect2 id='The_DetectableAutorepeat_Control'> 894e9fcaa8aSmrg<title>The DetectableAutorepeat Control</title> 895e9fcaa8aSmrg 896e9fcaa8aSmrg<para> 897e9fcaa8aSmrgAuto-repeat is the generation of multiple key events by a keyboard when the 898e9fcaa8aSmrguser presses a key and holds it down. Keyboard hardware and device-dependent X 8990f8248bfSmrgserver software often implement auto-repeat by generating multiple 9000f8248bfSmrg<symbol>KeyPress</symbol> 9010f8248bfSmrgevents with no intervening 9020f8248bfSmrg<symbol>KeyRelease</symbol> 9030f8248bfSmrgevent. The standard behavior of the X server is to generate a 9040f8248bfSmrg<symbol>KeyRelease</symbol> 9050f8248bfSmrgevent for every 9060f8248bfSmrg<symbol>KeyPress</symbol> 9070f8248bfSmrgevent. If the keyboard hardware and device-dependent software of the X server 9080f8248bfSmrgimplement auto-repeat by generating multiple 9090f8248bfSmrg<symbol>KeyPress</symbol> 9100f8248bfSmrgevents, the device-independent part of the X server by default synthetically 9110f8248bfSmrggenerates a 9120f8248bfSmrg<symbol>KeyRelease</symbol> 9130f8248bfSmrgevent after each 9140f8248bfSmrg<symbol>KeyPress</symbol> 9150f8248bfSmrgevent. This provides predictable behavior for X clients, but does not allow 916e9fcaa8aSmrgthose clients to detect the fact that a key is auto-repeating. 917e9fcaa8aSmrg</para> 918e9fcaa8aSmrg 919e9fcaa8aSmrg 920e9fcaa8aSmrg<para> 9210f8248bfSmrgXkb allows clients to request 9220f8248bfSmrg<firstterm>detectable auto-repeat</firstterm>. 9230f8248bfSmrg<indexterm significance="preferred" zone="The_DetectableAutorepeat_Control"> 9240f8248bfSmrg<primary>detectable auto-repeat</primary></indexterm> 9250f8248bfSmrg<indexterm significance="preferred" zone="The_DetectableAutorepeat_Control"> 9260f8248bfSmrg<primary>auto-repeat</primary><secondary>detectable</secondary></indexterm> 9270f8248bfSmrgIf a client requests and the server supports 9280f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis>, 9290f8248bfSmrgXkb generates 9300f8248bfSmrg<symbol>KeyRelease</symbol> 9310f8248bfSmrgevents only when the key is physically released. If 9320f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 9330f8248bfSmrgis not supported or has not been requested, the server synthesizes a 9340f8248bfSmrg<symbol>KeyRelease</symbol> 9350f8248bfSmrgevent for each repeating 9360f8248bfSmrg<symbol>KeyPress</symbol> 9370f8248bfSmrgevent it generates. 938e9fcaa8aSmrg</para> 939e9fcaa8aSmrg 940e9fcaa8aSmrg 941e9fcaa8aSmrg<para> 9420f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis>, 9430f8248bfSmrgunlike the other controls in this chapter, is not contained in the 9440f8248bfSmrg<structname>XkbControlsRec</structname> 9450f8248bfSmrgstructure, nor can it be enabled or disabled via the 9460f8248bfSmrg<emphasis>EnabledControls</emphasis> 9470f8248bfSmrgcontrol. Instead, query and set 9480f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 9490f8248bfSmrgusing 9500f8248bfSmrg<function>XkbGetDetectableAutorepeat</function> 9510f8248bfSmrgand 9520f8248bfSmrg<function>XkbSetDetectableAutorepeat</function>. 953e9fcaa8aSmrg</para> 954e9fcaa8aSmrg 955e9fcaa8aSmrg 956e9fcaa8aSmrg<para> 9570f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 9580f8248bfSmrgis a condition that applies to all keyboard devices for a client’s 959e9fcaa8aSmrgconnection to a given X server; it cannot be selectively set for some devices 960e9fcaa8aSmrgand not for others. For this reason, none of the Xkb library functions 9610f8248bfSmrginvolving 9620f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 9630f8248bfSmrginvolve a device specifier. 9640f8248bfSmrg</para> 9650f8248bfSmrg 9660f8248bfSmrg 9670f8248bfSmrg<para> 9680f8248bfSmrgTo determine whether or not the server supports 9690f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis>, 9700f8248bfSmrguse 9710f8248bfSmrg<function>XkbGetDetectableAutorepeat</function>. 9720f8248bfSmrg</para> 9730f8248bfSmrg 9740f8248bfSmrg<indexterm significance="preferred" zone="XkbGetDetectableAutorepeat"><primary><function>XkbGetDetectableAutorepeat</function></primary></indexterm> 9750f8248bfSmrg<funcsynopsis id="XkbGetDetectableAutorepeat"> 9760f8248bfSmrg <funcprototype> 9770f8248bfSmrg <funcdef>Bool <function>XkbGetDetectableAutorepeat</function></funcdef> 9780f8248bfSmrg<!-- ( 9790f8248bfSmrg<parameter>display, supported_rtrn</parameter> 9800f8248bfSmrg) --> 9810f8248bfSmrg 9820f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 9830f8248bfSmrg <paramdef>Bool *<parameter>supported_rtrn</parameter></paramdef> 9840f8248bfSmrg </funcprototype> 9850f8248bfSmrg</funcsynopsis> 9860f8248bfSmrg<variablelist> 9870f8248bfSmrg <varlistentry> 9880f8248bfSmrg <term> 9890f8248bfSmrg <parameter>display</parameter> 9900f8248bfSmrg </term> 9910f8248bfSmrg <listitem> 9920f8248bfSmrg <para> 9930f8248bfSmrg connection to X server 9940f8248bfSmrg </para> 9950f8248bfSmrg </listitem> 9960f8248bfSmrg </varlistentry> 9970f8248bfSmrg <varlistentry> 9980f8248bfSmrg <term> 9990f8248bfSmrg <parameter>supported_rtrn</parameter> 10000f8248bfSmrg </term> 10010f8248bfSmrg <listitem> 10020f8248bfSmrg <para> 10030f8248bfSmrg backfilled <symbol>True</symbol> if 10040f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 10050f8248bfSmrg supported 10060f8248bfSmrg </para> 10070f8248bfSmrg </listitem> 10080f8248bfSmrg </varlistentry> 10090f8248bfSmrg</variablelist> 10100f8248bfSmrg 10110f8248bfSmrg<para> 10120f8248bfSmrg<function>XkbGetDetectableAutorepeat</function> 10130f8248bfSmrgqueries the server for the current state of 10140f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 10150f8248bfSmrgand waits for a reply. If 10160f8248bfSmrg<parameter>supported_rtrn</parameter> 10170f8248bfSmrgis not 10180f8248bfSmrg<symbol>NULL</symbol>, 10190f8248bfSmrgit backfills supported_rtrn with 10200f8248bfSmrg<symbol>True</symbol> 10210f8248bfSmrgif the server supports 10220f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis>, 10230f8248bfSmrgand 10240f8248bfSmrg<symbol>False</symbol> 10250f8248bfSmrgotherwise. 10260f8248bfSmrg<function>XkbGetDetectableAutorepeat</function> 10270f8248bfSmrgreturns the current state of 10280f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 10290f8248bfSmrgfor the requesting client: 10300f8248bfSmrg<symbol>True</symbol> 10310f8248bfSmrgif 10320f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 10330f8248bfSmrgis set, and 10340f8248bfSmrg<symbol>False</symbol> 10350f8248bfSmrgotherwise. 10360f8248bfSmrg</para> 10370f8248bfSmrg 10380f8248bfSmrg 10390f8248bfSmrg<para> 10400f8248bfSmrgTo set 10410f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis>, 10420f8248bfSmrguse 10430f8248bfSmrg<function>XkbSetDetectableAutorepeat</function>. 10440f8248bfSmrgThis request affects all keyboard activity for the requesting client only; 1045e9fcaa8aSmrgother clients still see the expected nondetectable auto-repeat behavior, unless 1046e9fcaa8aSmrgthey have requested otherwise. 1047e9fcaa8aSmrg</para> 1048e9fcaa8aSmrg 1049e9fcaa8aSmrg 10500f8248bfSmrg<indexterm significance="preferred" zone="XkbSetDetectableAutorepeat"><primary><function>XkbSetDetectableAutorepeat</function></primary></indexterm> 10510f8248bfSmrg<funcsynopsis id="XkbSetDetectableAutorepeat"> 10520f8248bfSmrg <funcprototype> 10530f8248bfSmrg <funcdef>Bool <function>XkbSetDetectableAutorepeat</function></funcdef> 10540f8248bfSmrg<!-- ( 10550f8248bfSmrg<parameter>display, detectable, supported_rtrn</parameter> 10560f8248bfSmrg) --> 10570f8248bfSmrg 10580f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 10590f8248bfSmrg <paramdef>Bool <parameter>detectable</parameter></paramdef> 10600f8248bfSmrg <paramdef>Bool *<parameter>supported_rtrn</parameter></paramdef> 10610f8248bfSmrg </funcprototype> 10620f8248bfSmrg</funcsynopsis> 10630f8248bfSmrg<variablelist> 10640f8248bfSmrg <varlistentry> 10650f8248bfSmrg <term> 10660f8248bfSmrg <parameter>display</parameter> 10670f8248bfSmrg </term> 10680f8248bfSmrg <listitem> 10690f8248bfSmrg <para> 10700f8248bfSmrg connection to X server 10710f8248bfSmrg </para> 10720f8248bfSmrg </listitem> 10730f8248bfSmrg </varlistentry> 10740f8248bfSmrg <varlistentry> 10750f8248bfSmrg <term> 10760f8248bfSmrg <parameter>detectable</parameter> 10770f8248bfSmrg </term> 10780f8248bfSmrg <listitem> 10790f8248bfSmrg <para> 10800f8248bfSmrg <symbol>True</symbol> ⇒ set 10810f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 10820f8248bfSmrg </para> 10830f8248bfSmrg </listitem> 10840f8248bfSmrg </varlistentry> 10850f8248bfSmrg <varlistentry> 10860f8248bfSmrg <term> 10870f8248bfSmrg <parameter>supported_rtrn</parameter> 10880f8248bfSmrg </term> 10890f8248bfSmrg <listitem> 10900f8248bfSmrg <para> 10910f8248bfSmrg backfilled <symbol>True</symbol> if 10920f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 10930f8248bfSmrg supported 10940f8248bfSmrg </para> 10950f8248bfSmrg </listitem> 10960f8248bfSmrg </varlistentry> 10970f8248bfSmrg</variablelist> 10980f8248bfSmrg 10990f8248bfSmrg<para> 11000f8248bfSmrg<function>XkbSetDetectableAutorepeat</function> 11010f8248bfSmrgsends a request to the server to set 11020f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 11030f8248bfSmrgon for the current client if 11040f8248bfSmrg<parameter>detectable</parameter> 11050f8248bfSmrgis 11060f8248bfSmrg<symbol>True</symbol>, 11070f8248bfSmrgand off it 11080f8248bfSmrg<parameter>detectable</parameter> 11090f8248bfSmrgis 11100f8248bfSmrg<symbol>False</symbol>; 11110f8248bfSmrgit then waits for a reply. If 11120f8248bfSmrg<parameter>supported_rtrn</parameter> 11130f8248bfSmrgis not 11140f8248bfSmrg<symbol>NULL</symbol>, 11150f8248bfSmrg<function>XkbSetDetectableAutorepeat</function> 11160f8248bfSmrgbackfills 11170f8248bfSmrg<parameter>supported_rtrn</parameter> 11180f8248bfSmrgwith 11190f8248bfSmrg<symbol>True</symbol> 11200f8248bfSmrgif the server supports 11210f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis>, 11220f8248bfSmrgand 11230f8248bfSmrg<symbol>False</symbol> 11240f8248bfSmrgif it does not. 11250f8248bfSmrg<function>XkbSetDetectableAutorepeat</function> 11260f8248bfSmrgreturns the current state of 11270f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 11280f8248bfSmrgfor the requesting client: 11290f8248bfSmrg<symbol>True</symbol> 11300f8248bfSmrgif 11310f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 11320f8248bfSmrgis set, and 11330f8248bfSmrg<symbol>False</symbol> 11340f8248bfSmrgotherwise. 1135e9fcaa8aSmrg</para> 1136e9fcaa8aSmrg 1137e9fcaa8aSmrg 1138e9fcaa8aSmrg</sect2> 1139e9fcaa8aSmrg</sect1> 1140eb411b4bSmrg<sect1 id='Controls_for_Keyboard_Overlays_Overlay1_and_Overlay2_Controls'> 1141e9fcaa8aSmrg<title>Controls for Keyboard Overlays (Overlay1 and Overlay2 Controls)</title> 1142e9fcaa8aSmrg 1143e9fcaa8aSmrg<para> 1144e9fcaa8aSmrgA keyboard overlay allows some subset of the keyboard to report alternate 1145e9fcaa8aSmrgkeycodes when the overlay is enabled. For example, a keyboard overlay can be 1146e9fcaa8aSmrgused to simulate a numeric or editing keypad on a keyboard that does not 1147e9fcaa8aSmrgactually have one by reusing some portion of the keyboard as an overlay. This 1148e9fcaa8aSmrgtechnique is very common on portable computers and embedded systems with small 1149e9fcaa8aSmrgkeyboards. 1150e9fcaa8aSmrg</para> 1151e9fcaa8aSmrg 1152e9fcaa8aSmrg 1153e9fcaa8aSmrg<para> 11540f8248bfSmrgXkb includes direct support for two keyboard overlays, using the 11550f8248bfSmrg<emphasis>Overlay1</emphasis> 11560f8248bfSmrgand 11570f8248bfSmrg<emphasis>Overlay2</emphasis> 11580f8248bfSmrgcontrols. When 11590f8248bfSmrg<emphasis>Overlay1</emphasis> 11600f8248bfSmrgis enabled, all of the keys that are members of the first keyboard overlay 11610f8248bfSmrggenerate an alternate keycode. When 11620f8248bfSmrg<emphasis>Overlay2</emphasis> 11630f8248bfSmrgis enabled, all of the keys that are members of the second keyboard overlay 1164e9fcaa8aSmrggenerate an alternate keycode. The two overlays are mutually exclusive; any 11650f8248bfSmrgparticular key may be in at most one overlay. 11660f8248bfSmrg<emphasis>Overlay1</emphasis> 11670f8248bfSmrgand 11680f8248bfSmrg<emphasis>Overlay2</emphasis> 11690f8248bfSmrgare boolean controls. As such, you may enable and disable them using either 11700f8248bfSmrgthe 11710f8248bfSmrg<emphasis>EnabledControls</emphasis> 11720f8248bfSmrgcontrol or the 11730f8248bfSmrg<emphasis>AutoReset</emphasis> 11740f8248bfSmrgcontrol discussed in <link linkend="The_EnabledControls_Control">section 10.1.1</link>. 1175e9fcaa8aSmrg</para> 1176e9fcaa8aSmrg 1177e9fcaa8aSmrg 1178e9fcaa8aSmrg<para> 1179e9fcaa8aSmrgTo specify the overlay to which a key belongs and the alternate keycode it 11800f8248bfSmrgshould generate when that overlay is enabled, assign it either the 11810f8248bfSmrg<symbol>XkbKB_Overlay1</symbol> 11820f8248bfSmrgor 11830f8248bfSmrg<symbol>XkbKB_Overlay2</symbol> 11840f8248bfSmrgkey behaviors, as described in <link linkend="Key_Behavior">section 16.2</link>. 1185e9fcaa8aSmrg</para> 1186e9fcaa8aSmrg 1187e9fcaa8aSmrg 1188e9fcaa8aSmrg</sect1> 1189eb411b4bSmrg<sect1 id='Controls_for_Using_the_Mouse_from_the_Keyboard'> 1190e9fcaa8aSmrg<title>Controls for Using the Mouse from the Keyboard</title> 1191e9fcaa8aSmrg 1192e9fcaa8aSmrg<para> 1193e9fcaa8aSmrgUsing Xkb, it is possible to configure the keyboard to allow simulation of the 1194e9fcaa8aSmrgX pointer device. This simulation includes both movement of the pointer itself 1195e9fcaa8aSmrgand press and release events associated with the buttons on the pointer. Two 11960f8248bfSmrgcontrols affect this behavior: the 11970f8248bfSmrg<emphasis>MouseKeys</emphasis> 11980f8248bfSmrgcontrol determines whether or not simulation of the pointer device is active, 11990f8248bfSmrgas well as configuring the default button; the 12000f8248bfSmrg<emphasis>MouseKeysAccel</emphasis> 12010f8248bfSmrgcontrol determines the movement characteristics of the pointer when simulated 1202e9fcaa8aSmrgvia the keyboard. Both of them are boolean controls; as such, you may enable 12030f8248bfSmrgand disable them using either the 12040f8248bfSmrg<emphasis>EnabledControls</emphasis> 12050f8248bfSmrgcontrol or the 12060f8248bfSmrg<emphasis>AutoReset</emphasis> 12070f8248bfSmrgcontrol discussed in <link linkend="The_EnabledControls_Control">section 10.1.1</link>. The individual keys that simulate 1208e9fcaa8aSmrgdifferent aspects of the pointer device are determined by the keyboard mapping, 12090f8248bfSmrgdiscussed in <xref linkend="Xkb_Server_Keyboard_Mapping" />. 1210e9fcaa8aSmrg</para> 1211e9fcaa8aSmrg 1212e9fcaa8aSmrg 1213eb411b4bSmrg<sect2 id='The_MouseKeys_Control'> 1214e9fcaa8aSmrg<title>The MouseKeys Control</title> 1215e9fcaa8aSmrg 1216e9fcaa8aSmrg<para> 12170f8248bfSmrgThe 12180f8248bfSmrg<emphasis>MouseKeys</emphasis> 12190f8248bfSmrgcontrol allows a user to control all the mouse functions from the keyboard. 12200f8248bfSmrgWhen 12210f8248bfSmrg<emphasis>MouseKeys</emphasis> 12220f8248bfSmrgare enabled, all keys with 12230f8248bfSmrg<emphasis>MouseKeys</emphasis> 12240f8248bfSmrgactions bound to them generate core pointer events instead of normal 12250f8248bfSmrg<symbol>KeyPress</symbol> 12260f8248bfSmrgand 12270f8248bfSmrg<symbol>KeyRelease</symbol> 12280f8248bfSmrgevents. 1229e9fcaa8aSmrg</para> 1230e9fcaa8aSmrg 1231e9fcaa8aSmrg 1232e9fcaa8aSmrg<para> 12330f8248bfSmrgThe 12340f8248bfSmrg<emphasis>MouseKeys</emphasis> 12350f8248bfSmrgcontrol has a single attribute, 12360f8248bfSmrg<structfield>mk_dflt_btn</structfield> 12370f8248bfSmrgthat specifies the core button number to be used by mouse keys actions that do 1238e9fcaa8aSmrgnot explicitly specify a button. There is no convenience function for getting 12390f8248bfSmrgor setting the attribute; instead use 12400f8248bfSmrg<function>XkbGetControls</function> 12410f8248bfSmrgand 12420f8248bfSmrg<function>XkbSetControls</function> 12430f8248bfSmrg(see <link linkend="Querying_Controls">section 10.9</link> and <link linkend="Changing_Controls">section 10.10</link>). 12440f8248bfSmrg</para> 12450f8248bfSmrg 12460f8248bfSmrg<note><para> 12470f8248bfSmrg<emphasis>MouseKeys</emphasis> 12480f8248bfSmrgcan also be turned on and off by pressing the key combination necessary to 12490f8248bfSmrgproduce an 12500f8248bfSmrg<keysym>XK_Pointer_EnableKeys</keysym> 12510f8248bfSmrgkeysym. The de facto default standard for this is 12520f8248bfSmrg<keycombo><keycap>Shift</keycap><keycap>Alt</keycap><keycap>NumLock</keycap></keycombo>, 12530f8248bfSmrgbut this may vary depending on the keymap.</para></note> 1254e9fcaa8aSmrg 1255e9fcaa8aSmrg</sect2> 1256eb411b4bSmrg<sect2 id='The_MouseKeysAccel_Control'> 1257e9fcaa8aSmrg<title>The MouseKeysAccel Control</title> 1258e9fcaa8aSmrg 1259e9fcaa8aSmrg<para> 12600f8248bfSmrgWhen the 12610f8248bfSmrg<emphasis>MouseKeysAccel</emphasis> 12620f8248bfSmrgcontrol is enabled, the effect of a key-activated pointer motion action 1263e9fcaa8aSmrgchanges as a key is held down. If the control is disabled, pressing a 12640f8248bfSmrgmouse-pointer key yields one mouse event. When 12650f8248bfSmrg<emphasis>MouseKeysAccel</emphasis> 12660f8248bfSmrgis enabled, mouse movement is defined by an initial distance specified in the 12670f8248bfSmrg<symbol>XkbSA_MovePtr</symbol> 12680f8248bfSmrgaction and the following fields in the 12690f8248bfSmrg<structname>XkbControlsRec</structname> 12700f8248bfSmrgstructure (see <link linkend="The_XkbControlsRec_Structure">section 10.8</link>). 1271e9fcaa8aSmrg</para> 1272e9fcaa8aSmrg 12730f8248bfSmrg<table id='table10.2' frame='topbot'> 1274e9fcaa8aSmrg<title>MouseKeysAccel Fields</title> 1275eb411b4bSmrg<?dbfo keep-together="always" ?> 1276eb411b4bSmrg<tgroup cols='2' align='left' colsep='0' rowsep='0'> 1277eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 1278eb411b4bSmrg<colspec colname='c2' colwidth='2.0*'/> 1279e9fcaa8aSmrg<thead> 1280eb411b4bSmrg<row rowsep='1'> 1281e9fcaa8aSmrg <entry>Field</entry> 1282e9fcaa8aSmrg <entry>Function</entry> 1283e9fcaa8aSmrg</row> 1284e9fcaa8aSmrg</thead> 1285e9fcaa8aSmrg<tbody> 1286eb411b4bSmrg<row> 1287e9fcaa8aSmrg <entry>mk_delay</entry> 1288e9fcaa8aSmrg <entry>Time (ms) between the initial key press and the first repeated 1289e9fcaa8aSmrgmotion event</entry> 1290e9fcaa8aSmrg</row> 1291eb411b4bSmrg<row> 1292e9fcaa8aSmrg <entry>mk_interval</entry> 1293e9fcaa8aSmrg <entry>Time (ms) between repeated motion events</entry> 1294e9fcaa8aSmrg</row> 1295eb411b4bSmrg<row> 1296e9fcaa8aSmrg <entry>mk_time_to_max</entry> 1297e9fcaa8aSmrg <entry>Number of events (count) before the pointer reaches maximum 1298e9fcaa8aSmrgspeed</entry> 1299e9fcaa8aSmrg</row> 1300eb411b4bSmrg<row> 1301e9fcaa8aSmrg <entry>mk_max_speed</entry> 1302e9fcaa8aSmrg <entry>The maximum speed (in pixels per event) the pointer reaches</entry> 1303e9fcaa8aSmrg</row> 1304eb411b4bSmrg<row> 1305e9fcaa8aSmrg <entry>mk_curve</entry> 1306e9fcaa8aSmrg <entry>The ramp used to reach maximum pointer speed</entry> 1307e9fcaa8aSmrg </row> 1308e9fcaa8aSmrg</tbody> 1309e9fcaa8aSmrg</tgroup> 1310e9fcaa8aSmrg</table> 1311e9fcaa8aSmrg 1312e9fcaa8aSmrg<para> 1313e9fcaa8aSmrgThere are no convenience functions to query or change the attributes of the 13140f8248bfSmrg<emphasis>MouseKeysAccel</emphasis> 13150f8248bfSmrgcontrol; instead use 13160f8248bfSmrg<function>XkbGetControls</function> 13170f8248bfSmrgand 13180f8248bfSmrg<function>XkbSetControls</function> 13190f8248bfSmrg(see <link linkend="Querying_Controls">section 10.9</link> and <link linkend="Changing_Controls">section 10.10</link>). 1320e9fcaa8aSmrg</para> 1321e9fcaa8aSmrg 1322e9fcaa8aSmrg 1323e9fcaa8aSmrg<para> 13240f8248bfSmrgThe effects of the attributes of the 13250f8248bfSmrg<emphasis>MouseKeysAccel</emphasis> 13260f8248bfSmrgcontrol depend on whether the 13270f8248bfSmrg<symbol>XkbSA_MovePtr</symbol> 13280f8248bfSmrgaction (see <link linkend="Key_Actions">section 16.1</link>) specifies relative or absolute pointer motion. 1329e9fcaa8aSmrg</para> 1330e9fcaa8aSmrg 1331eb411b4bSmrg<sect3 id='Absolute_Pointer_Motion'> 1332e9fcaa8aSmrg<title>Absolute Pointer Motion</title> 1333e9fcaa8aSmrg 1334e9fcaa8aSmrg<para> 13350f8248bfSmrgIf an 13360f8248bfSmrg<symbol>XkbSA_MovePtr</symbol> 13370f8248bfSmrgaction specifies an absolute position for one of the coordinates but still 1338e9fcaa8aSmrgallows acceleration, all repeated events contain any absolute coordinates 13390f8248bfSmrgspecified in the action. For example, if the 13400f8248bfSmrg<symbol>XkbSA_MovePtr</symbol> 13410f8248bfSmrgaction specifies an absolute position for the X direction, but a relative 1342e9fcaa8aSmrgmotion for the Y direction, the pointer accelerates in the Y direction, but 1343e9fcaa8aSmrgstays at the same X position. 1344e9fcaa8aSmrg</para> 1345e9fcaa8aSmrg 1346e9fcaa8aSmrg 1347e9fcaa8aSmrg</sect3> 1348eb411b4bSmrg<sect3 id='Relative_Pointer_Motion'> 1349e9fcaa8aSmrg<title>Relative Pointer Motion</title> 1350e9fcaa8aSmrg 1351e9fcaa8aSmrg<para> 13520f8248bfSmrgIf the 13530f8248bfSmrg<symbol>XkbSA_MovePtr</symbol> 13540f8248bfSmrgaction specifies relative motion, the initial event always moves the cursor 13550f8248bfSmrgthe distance specified in the action. After 13560f8248bfSmrg<structfield>mk_delay</structfield> 13570f8248bfSmrgmilliseconds, a second motion event is generated, and another occurs every 13580f8248bfSmrg<structfield>mk_interval</structfield> 13590f8248bfSmrgmilliseconds until the user releases the key. 1360e9fcaa8aSmrg</para> 1361e9fcaa8aSmrg 1362e9fcaa8aSmrg 1363e9fcaa8aSmrg<para> 13640f8248bfSmrgBetween the time of the second motion event and 13650f8248bfSmrg<structfield>mk_time_to_max</structfield> 13660f8248bfSmrgintervals, the change in pointer distance per interval increases with each 13670f8248bfSmrginterval. After 13680f8248bfSmrg<structfield>mk_time_to_max</structfield> 13690f8248bfSmrgintervals have elapsed, the change in pointer distance per interval remains 1370e9fcaa8aSmrgthe same and is calculated by multiplying the original distance specified in 13710f8248bfSmrgthe action by 13720f8248bfSmrg<structfield>mk_max_speed</structfield>. 1373e9fcaa8aSmrg</para> 1374e9fcaa8aSmrg 1375e9fcaa8aSmrg 1376e9fcaa8aSmrg<para> 13770f8248bfSmrgFor example, if the 13780f8248bfSmrg<symbol>XkbSA_MovePtr</symbol> 13790f8248bfSmrgaction specifies a relative motion in the X direction of 5, 13800f8248bfSmrg<structfield>mk_delay</structfield> 13810f8248bfSmrg=160, 13820f8248bfSmrg<structfield>mk_interval</structfield> 13830f8248bfSmrg=40, 13840f8248bfSmrg<structfield>mk_time_to_max</structfield> 13850f8248bfSmrg=30, and 13860f8248bfSmrg<structfield>mk_max_speed</structfield> 1387e9fcaa8aSmrg=30, the following happens when the user presses the key: 1388e9fcaa8aSmrg</para> 1389e9fcaa8aSmrg 1390e9fcaa8aSmrg<itemizedlist> 1391e9fcaa8aSmrg<listitem> 1392e9fcaa8aSmrg <para> 1393e9fcaa8aSmrgThe pointer immediately moves 5 pixels in the X direction when the key is 1394e9fcaa8aSmrgpressed. 1395e9fcaa8aSmrg </para> 1396e9fcaa8aSmrg</listitem> 1397e9fcaa8aSmrg<listitem> 1398e9fcaa8aSmrg <para> 13990f8248bfSmrgAfter 160 milliseconds 14000f8248bfSmrg(<structfield>mk_delay</structfield>), 14010f8248bfSmrgand every 40 milliseconds thereafter 14020f8248bfSmrg(<structfield>mk_interval</structfield>), 14030f8248bfSmrgthe pointer moves in the X direction. 1404e9fcaa8aSmrg </para> 1405e9fcaa8aSmrg</listitem> 1406e9fcaa8aSmrg<listitem> 1407e9fcaa8aSmrg <para> 1408e9fcaa8aSmrgThe distance in the X direction increases with each interval until 30 intervals 14090f8248bfSmrg( 14100f8248bfSmrg<structfield>mk_time_to_max</structfield>) 14110f8248bfSmrghave elapsed. 1412e9fcaa8aSmrg </para> 1413e9fcaa8aSmrg</listitem> 1414e9fcaa8aSmrg<listitem> 1415e9fcaa8aSmrg <para> 1416e9fcaa8aSmrgAfter 30 intervals, the pointer stops accelerating, and moves 150 pixels 14170f8248bfSmrg( 14180f8248bfSmrg<structfield>mk_max_speed</structfield> 14190f8248bfSmrg* the original distance) every interval thereafter, until the key is released. 1420e9fcaa8aSmrg </para> 1421e9fcaa8aSmrg</listitem> 1422e9fcaa8aSmrg</itemizedlist> 1423e9fcaa8aSmrg 1424e9fcaa8aSmrg<para> 14250f8248bfSmrgThe increase in pointer difference for each interval is a function of 14260f8248bfSmrg<structfield>mk_curve</structfield>. 14270f8248bfSmrgEvents after the first but before maximum acceleration has been achieved are 1428e9fcaa8aSmrgaccelerated according to the formula: 1429e9fcaa8aSmrg</para> 1430e9fcaa8aSmrg 1431e9fcaa8aSmrg<mediaobject> 14320f8248bfSmrg<imageobject> <imagedata format="SVG" fileref="XKBlib-3.svg"/> 14330f8248bfSmrg</imageobject> 14340f8248bfSmrg</mediaobject> 1435e9fcaa8aSmrg 1436e9fcaa8aSmrg 1437e9fcaa8aSmrg<para> 14380f8248bfSmrgWhere 14390f8248bfSmrg<emphasis>action_delta</emphasis> 14400f8248bfSmrgis the relative motion specified by the 14410f8248bfSmrg<symbol>XkbSA_MovePtr</symbol> 14420f8248bfSmrgaction, 14430f8248bfSmrg<structfield>mk_max_speed</structfield> 14440f8248bfSmrgand 14450f8248bfSmrg<structfield>mk_time_to_max</structfield> 14460f8248bfSmrgare parameters to the 14470f8248bfSmrg<emphasis>MouseKeysAccel</emphasis> 14480f8248bfSmrgcontrol, and the curveFactor is computed using the 14490f8248bfSmrg<emphasis>MouseKeysAccel</emphasis> 14500f8248bfSmrg<structfield>mk_curve</structfield> 14510f8248bfSmrgparameter as follows: 1452e9fcaa8aSmrg</para> 1453e9fcaa8aSmrg 1454e9fcaa8aSmrg<mediaobject> 14550f8248bfSmrg<imageobject> <imagedata format="SVG" fileref="XKBlib-4.svg"/> 14560f8248bfSmrg</imageobject> 14570f8248bfSmrg</mediaobject> 14580f8248bfSmrg 14590f8248bfSmrg 14600f8248bfSmrg<para> 14610f8248bfSmrgWith the result that a 14620f8248bfSmrg<structfield>mk_curve</structfield> 14630f8248bfSmrgof zero causes the distance moved to increase linearly from 14640f8248bfSmrg<emphasis>action_delta</emphasis> 14650f8248bfSmrgto <mediaobject> 14660f8248bfSmrg<imageobject> <imagedata format="SVG" fileref="XKBlib-5.svg"/> 14670f8248bfSmrg</imageobject> 14680f8248bfSmrg</mediaobject>. 14690f8248bfSmrgA negative 14700f8248bfSmrg<structfield>mk_curve</structfield> 14710f8248bfSmrgcauses an initial sharp increase in acceleration that tapers off, and a 1472e9fcaa8aSmrgpositive curve yields a slower initial increase in acceleration followed by a 1473e9fcaa8aSmrgsharp increase as the number of pointer events generated by the action 14740f8248bfSmrgapproaches 14750f8248bfSmrg<structfield>mk_time_to_max</structfield>. 14760f8248bfSmrgThe legal values for 14770f8248bfSmrg<structfield>mk_curve</structfield> 14780f8248bfSmrgare between −1000 and 1000. 1479e9fcaa8aSmrg</para> 1480e9fcaa8aSmrg 1481e9fcaa8aSmrg 1482e9fcaa8aSmrg<para> 14830f8248bfSmrgA distance vs. time graph of the pointer motion is shown in 14840f8248bfSmrg<link linkend="figure10.1">Figure 10.1</link>. 1485e9fcaa8aSmrg</para> 1486e9fcaa8aSmrg 14870f8248bfSmrg<figure id='figure10.1'> 14880f8248bfSmrg <title>MouseKeys Acceleration</title> 14890f8248bfSmrg <mediaobject> 14900f8248bfSmrg <imageobject> <imagedata format="SVG" fileref="XKBlib-6.svg"/> 14910f8248bfSmrg </imageobject> 14920f8248bfSmrg </mediaobject> 14930f8248bfSmrg</figure> 1494e9fcaa8aSmrg 1495e9fcaa8aSmrg<!-- 1496e9fcaa8aSmrg<H5 CLASS="Figure"> 1497e9fcaa8aSmrgMouseKeys Acceleration</H5> 1498e9fcaa8aSmrg--> 1499e9fcaa8aSmrg</sect3> 1500e9fcaa8aSmrg</sect2> 1501e9fcaa8aSmrg</sect1> 1502eb411b4bSmrg<sect1 id='Controls_for_Better_Keyboard_Access_by_Physically_ImpairedPersons'> 1503e9fcaa8aSmrg<title>Controls for Better Keyboard Access by Physically Impaired 1504e9fcaa8aSmrgPersons</title> 1505e9fcaa8aSmrg 1506e9fcaa8aSmrg<para> 1507e9fcaa8aSmrgThe Xkb extension includes several controls specifically aimed at making 1508e9fcaa8aSmrgkeyboard use more effective for physically impaired people. All of these 1509e9fcaa8aSmrgcontrols are boolean controls and may be individually enabled and disabled, as 1510e9fcaa8aSmrgwell as configured to tune their specific behavior. The behavior of these 1511e9fcaa8aSmrgcontrols is based on the AccessDOS package 1512e9fcaa8aSmrg<footnote><para> 1513e9fcaa8aSmrgAccessDOS provides access to the DOS operating system for people with physical 1514e9fcaa8aSmrgimpairments and was developed by the Trace R&D Center at the University of 1515e9fcaa8aSmrgWisconsin. For more information on AccessDOS, contact the Trace R&D Center, 1516e9fcaa8aSmrgWaisman Center and Department of Industrial Engineering, University of 1517e9fcaa8aSmrgWisconsin-Madison WI 53705-2280. Phone: 608-262-6966. e-mail: info@trace.wisc.edu. 1518e9fcaa8aSmrg</para></footnote>. 1519e9fcaa8aSmrg</para> 1520e9fcaa8aSmrg 1521eb411b4bSmrg<sect2 id='The_AccessXKeys_Control'> 1522e9fcaa8aSmrg<title>The AccessXKeys Control</title> 1523e9fcaa8aSmrg 1524e9fcaa8aSmrg<para> 1525e9fcaa8aSmrgEnabling or disabling the keyboard controls through a graphical user interface 1526e9fcaa8aSmrgmay be impossible for people who need to use the controls. For example, a user 15270f8248bfSmrgwho needs 15280f8248bfSmrg<emphasis>SlowKeys</emphasis> 15290f8248bfSmrg(see <link linkend="The_SlowKeys_Control">section 10.6.6</link>) may not even be able to start the graphical application, 15300f8248bfSmrglet alone use it, if 15310f8248bfSmrg<emphasis>SlowKeys</emphasis> 15320f8248bfSmrgis not enabled. To allow easier access to some of the controls, the 15330f8248bfSmrg<emphasis>AccessXKeys</emphasis> 15340f8248bfSmrgcontrol provides a set of special key sequences similar to those available in 1535e9fcaa8aSmrgAccessDOS. 1536e9fcaa8aSmrg</para> 1537e9fcaa8aSmrg 1538e9fcaa8aSmrg 1539e9fcaa8aSmrg<para> 15400f8248bfSmrgWhen the 15410f8248bfSmrg<emphasis>AccessXKeys</emphasis> 15420f8248bfSmrgcontrol is enabled, the user can turn controls on or off from the keyboard by 1543e9fcaa8aSmrgentering the following standard key sequences: 1544e9fcaa8aSmrg</para> 1545e9fcaa8aSmrg 1546e9fcaa8aSmrg<itemizedlist> 1547e9fcaa8aSmrg<listitem> 1548e9fcaa8aSmrg <para> 15490f8248bfSmrgHolding down a <keycap>Shift</keycap> key by itself for eight seconds 15500f8248bfSmrgtoggles the 15510f8248bfSmrg<emphasis>SlowKeys</emphasis> 15520f8248bfSmrgcontrol. 1553e9fcaa8aSmrg </para> 1554e9fcaa8aSmrg</listitem> 1555e9fcaa8aSmrg<listitem> 1556e9fcaa8aSmrg <para> 15570f8248bfSmrgPressing and releasing the left or right 15580f8248bfSmrg<keycap>Shift</keycap> 15590f8248bfSmrgkey five times in a row, without any intervening key events and with less than 1560e9fcaa8aSmrg30 seconds delay between consecutive presses, toggles the state of the 15610f8248bfSmrg<emphasis>StickyKeys</emphasis> 15620f8248bfSmrgcontrol. 1563e9fcaa8aSmrg </para> 1564e9fcaa8aSmrg</listitem> 1565e9fcaa8aSmrg<listitem> 1566e9fcaa8aSmrg <para> 15670f8248bfSmrgSimultaneously operating two or more modifier keys deactivates the 15680f8248bfSmrg<emphasis>StickyKeys</emphasis> 15690f8248bfSmrgcontrol. 1570e9fcaa8aSmrg </para> 1571e9fcaa8aSmrg</listitem> 1572e9fcaa8aSmrg</itemizedlist> 1573e9fcaa8aSmrg 1574e9fcaa8aSmrg<para> 15750f8248bfSmrgWhen the 15760f8248bfSmrg<emphasis>AccessXKeys</emphasis> 15770f8248bfSmrgcontrol is disabled, Xkb does not look for the above special key sequences. 1578e9fcaa8aSmrg</para> 1579e9fcaa8aSmrg 1580e9fcaa8aSmrg 1581e9fcaa8aSmrg<para> 1582e9fcaa8aSmrgSome of these key sequences optionally generate audible feedback of the change 15830f8248bfSmrgin state, as described in <link linkend="The_AccessXFeedback_Control">section 10.6.3</link>, or 15840f8248bfSmrg<symbol>XkbControlsNotify</symbol> 15850f8248bfSmrgevents, described in <link linkend="Tracking_Changes_to_Keyboard_Controls">section 10.11</link>. 1586e9fcaa8aSmrg</para> 1587e9fcaa8aSmrg 1588e9fcaa8aSmrg</sect2> 1589eb411b4bSmrg<sect2 id='The_AccessXTimeout_Control'> 1590e9fcaa8aSmrg<title>The AccessXTimeout Control</title> 1591e9fcaa8aSmrg 1592e9fcaa8aSmrg<para> 15930f8248bfSmrgIn environments where computers are shared, features such as 15940f8248bfSmrg<emphasis>SlowKeys</emphasis> 15950f8248bfSmrgpresent a problem: if 15960f8248bfSmrg<emphasis>SlowKeys</emphasis> 15970f8248bfSmrgis on, the keyboard can appear to be unresponsive because keys are not 1598e9fcaa8aSmrgaccepted until they are held for a certain period of time. To help solve this 15990f8248bfSmrgproblem, Xkb provides an 16000f8248bfSmrg<emphasis>AccessXTimeout</emphasis> 16010f8248bfSmrgcontrol to automatically change the enabled/disabled state of any boolean 16020f8248bfSmrgcontrols and to change the value of the 16030f8248bfSmrg<emphasis>AccessXKeys</emphasis> 16040f8248bfSmrgand 16050f8248bfSmrg<emphasis>AccessXFeedback</emphasis> 16060f8248bfSmrgcontrol attributes if the keyboard is idle for a specified period of time. 16070f8248bfSmrg</para> 16080f8248bfSmrg 16090f8248bfSmrg 16100f8248bfSmrg<para> 16110f8248bfSmrgWhen a timeout as specified by 16120f8248bfSmrg<emphasis>AccessXTimeout</emphasis> 16130f8248bfSmrgoccurs and a control is consequently modified, Xkb generates an 16140f8248bfSmrg<symbol>XkbControlsNotify</symbol> 16150f8248bfSmrgevent. For more information on 16160f8248bfSmrg<symbol>XkbControlsNotify</symbol> 16170f8248bfSmrgevents, refer to <link linkend="Tracking_Changes_to_Keyboard_Controls">section 10.11</link>. 16180f8248bfSmrg</para> 16190f8248bfSmrg 16200f8248bfSmrg 16210f8248bfSmrg<para> 16220f8248bfSmrgUse 16230f8248bfSmrg<function>XkbGetAccessXTimeout</function> 16240f8248bfSmrgto query the current 16250f8248bfSmrg<emphasis>AccessXTimeout</emphasis> 16260f8248bfSmrgoptions for a keyboard device. 16270f8248bfSmrg</para> 16280f8248bfSmrg 16290f8248bfSmrg<indexterm significance="preferred" zone="XkbGetAccessXTimeout"><primary><function>XkbGetAccessXTimeout</function></primary></indexterm> 16300f8248bfSmrg<funcsynopsis id="XkbGetAccessXTimeout"> 16310f8248bfSmrg <funcprototype> 16320f8248bfSmrg <funcdef>Bool <function>XkbGetAccessXTimeout</function></funcdef> 16330f8248bfSmrg<!-- ( 16340f8248bfSmrg<parameter>display</parameter>, 16350f8248bfSmrg<parameter>device_spec</parameter>, 16360f8248bfSmrg<parameter>timeout_rtrn</parameter>, 16370f8248bfSmrg<parameter>ctrls_mask_rtrn</parameter>, 16380f8248bfSmrg<parameter>ctrls_values_rtrn</parameter>, 16390f8248bfSmrg<parameter>options_mask_rtrn, options_values_rtrn</parameter> 16400f8248bfSmrg) --> 16410f8248bfSmrg 16420f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 16430f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 16440f8248bfSmrg <paramdef>unsigned short *<parameter>timeout_rtrn</parameter></paramdef> 16450f8248bfSmrg <paramdef>unsigned int *<parameter>ctrls_mask_rtrn</parameter></paramdef> 16460f8248bfSmrg <paramdef>unsigned int *<parameter>ctrls_values_rtrn</parameter></paramdef> 16470f8248bfSmrg <paramdef>unsigned short *<parameter>opts_mask_rtrn</parameter></paramdef> 16480f8248bfSmrg <paramdef>unsigned short *<parameter>opts_values_rtrn</parameter></paramdef> 16490f8248bfSmrg </funcprototype> 16500f8248bfSmrg</funcsynopsis> 16510f8248bfSmrg<variablelist> 16520f8248bfSmrg <varlistentry> 16530f8248bfSmrg <term> 16540f8248bfSmrg <parameter>display</parameter> 16550f8248bfSmrg </term> 16560f8248bfSmrg <listitem> 16570f8248bfSmrg <para> 16580f8248bfSmrg connection to X server 16590f8248bfSmrg </para> 16600f8248bfSmrg </listitem> 16610f8248bfSmrg </varlistentry> 16620f8248bfSmrg <varlistentry> 16630f8248bfSmrg <term> 16640f8248bfSmrg <parameter>device_spec</parameter> 16650f8248bfSmrg </term> 16660f8248bfSmrg <listitem> 16670f8248bfSmrg <para> 16680f8248bfSmrg device to query, or <symbol>XkbUseCoreKbd</symbol> 16690f8248bfSmrg </para> 16700f8248bfSmrg </listitem> 16710f8248bfSmrg </varlistentry> 16720f8248bfSmrg <varlistentry> 16730f8248bfSmrg <term> 16740f8248bfSmrg <parameter>timeout_rtrn</parameter> 16750f8248bfSmrg </term> 16760f8248bfSmrg <listitem> 16770f8248bfSmrg <para> 16780f8248bfSmrg delay until AccessXTimeout, seconds 16790f8248bfSmrg </para> 16800f8248bfSmrg </listitem> 16810f8248bfSmrg </varlistentry> 16820f8248bfSmrg <varlistentry> 16830f8248bfSmrg <term> 16840f8248bfSmrg <parameter>ctrls_mask_rtrn</parameter> 16850f8248bfSmrg </term> 16860f8248bfSmrg <listitem> 16870f8248bfSmrg <para> 16880f8248bfSmrg backfilled with controls to modify 16890f8248bfSmrg </para> 16900f8248bfSmrg </listitem> 16910f8248bfSmrg </varlistentry> 16920f8248bfSmrg <varlistentry> 16930f8248bfSmrg <term> 16940f8248bfSmrg <parameter>ctrls_values_rtrn</parameter> 16950f8248bfSmrg </term> 16960f8248bfSmrg <listitem> 16970f8248bfSmrg <para> 16980f8248bfSmrg backfilled with on/off status for controls 16990f8248bfSmrg </para> 17000f8248bfSmrg </listitem> 17010f8248bfSmrg </varlistentry> 17020f8248bfSmrg <varlistentry> 17030f8248bfSmrg <term> 17040f8248bfSmrg <parameter>opts_mask_rtrn</parameter> 17050f8248bfSmrg </term> 17060f8248bfSmrg <listitem> 17070f8248bfSmrg <para> 17080f8248bfSmrg backfilled with <structfield>ax_options</structfield> to modify 17090f8248bfSmrg </para> 17100f8248bfSmrg </listitem> 17110f8248bfSmrg </varlistentry> 17120f8248bfSmrg <varlistentry> 17130f8248bfSmrg <term> 17140f8248bfSmrg <parameter>opts_values_rtrn</parameter> 17150f8248bfSmrg </term> 17160f8248bfSmrg <listitem> 17170f8248bfSmrg <para> 17180f8248bfSmrg backfilled with values for <structfield>ax_options</structfield> 17190f8248bfSmrg </para> 17200f8248bfSmrg </listitem> 17210f8248bfSmrg </varlistentry> 17220f8248bfSmrg</variablelist> 17230f8248bfSmrg 17240f8248bfSmrg<para> 17250f8248bfSmrg<function>XkbGetAccessXTimeout</function> 17260f8248bfSmrgsends a request to the X server to obtain the current values for the 17270f8248bfSmrg<emphasis>AccessXTimeout</emphasis> 17280f8248bfSmrgattributes, waits for a reply, and backfills the values into the appropriate 17290f8248bfSmrgarguments. 17300f8248bfSmrgThe parameters 17310f8248bfSmrg<parameter>opts_mask_rtrn</parameter> 17320f8248bfSmrgand 17330f8248bfSmrg<parameter>opts_values_rtrn</parameter> 17340f8248bfSmrgare backfilled with the options to modify and the values for 17350f8248bfSmrg<structfield>ax_options</structfield>, 17360f8248bfSmrgwhich is a field in the 17370f8248bfSmrg<structname>XkbControlsRec</structname> 17380f8248bfSmrgstructure (see <link linkend="The_XkbControlsRec_Structure">section 10.8</link>). 17390f8248bfSmrg<function>XkbGetAccessXTimeout</function> 17400f8248bfSmrgreturns 17410f8248bfSmrg<symbol>True</symbol> 17420f8248bfSmrgif successful; if a compatible version of the Xkb extension is not available 17430f8248bfSmrgin the server, 17440f8248bfSmrg<function>XkbGetAccessXTimeout</function> 17450f8248bfSmrgreturns 17460f8248bfSmrg<symbol>False</symbol>. 17470f8248bfSmrg</para> 17480f8248bfSmrg 17490f8248bfSmrg 17500f8248bfSmrg<para> 17510f8248bfSmrgTo configure the 17520f8248bfSmrg<emphasis>AccessXTimeout</emphasis> 17530f8248bfSmrgoptions for a keyboard device, use 17540f8248bfSmrg<function>XkbSetAccessXTimeout</function>. 17550f8248bfSmrg</para> 17560f8248bfSmrg 17570f8248bfSmrg 17580f8248bfSmrg<indexterm significance="preferred" zone="XkbSetAccessXTimeout"><primary><function>XkbSetAccessXTimeout</function></primary></indexterm> 17590f8248bfSmrg<funcsynopsis id="XkbSetAccessXTimeout"> 17600f8248bfSmrg <funcprototype> 17610f8248bfSmrg <funcdef>Bool <function>XkbSetAccessXTimeout</function></funcdef> 17620f8248bfSmrg<!-- ( 17630f8248bfSmrg<parameter>display</parameter>, 17640f8248bfSmrg<parameter>device_spec, timeout, ctrls_mask, ctrls_values, opts_mask, 17650f8248bfSmrgopts_values</parameter> 17660f8248bfSmrg) --> 17670f8248bfSmrg 17680f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 17690f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 17700f8248bfSmrg <paramdef>unsigned short <parameter>timeout</parameter></paramdef> 17710f8248bfSmrg <paramdef>unsigned int <parameter>ctrls_mask</parameter></paramdef> 17720f8248bfSmrg <paramdef>unsigned int <parameter>ctrls_values</parameter></paramdef> 17730f8248bfSmrg <paramdef>unsigned short <parameter>opts_mask</parameter></paramdef> 17740f8248bfSmrg <paramdef>unsigned short <parameter>opts_values</parameter></paramdef> 17750f8248bfSmrg </funcprototype> 17760f8248bfSmrg</funcsynopsis> 17770f8248bfSmrg<variablelist> 17780f8248bfSmrg <varlistentry> 17790f8248bfSmrg <term> 17800f8248bfSmrg <parameter>display</parameter> 17810f8248bfSmrg </term> 17820f8248bfSmrg <listitem> 17830f8248bfSmrg <para> 17840f8248bfSmrg connection to X server 17850f8248bfSmrg </para> 17860f8248bfSmrg </listitem> 17870f8248bfSmrg </varlistentry> 17880f8248bfSmrg <varlistentry> 17890f8248bfSmrg <term> 17900f8248bfSmrg <parameter>device_spec</parameter> 17910f8248bfSmrg </term> 17920f8248bfSmrg <listitem> 17930f8248bfSmrg <para> 17940f8248bfSmrg device to configure, or <symbol>XkbUseCoreKbd</symbol> 17950f8248bfSmrg </para> 17960f8248bfSmrg </listitem> 17970f8248bfSmrg </varlistentry> 17980f8248bfSmrg <varlistentry> 17990f8248bfSmrg <term> 18000f8248bfSmrg <parameter>timeout</parameter> 18010f8248bfSmrg </term> 18020f8248bfSmrg <listitem> 18030f8248bfSmrg <para> 18040f8248bfSmrg seconds idle until AccessXTimeout occurs 18050f8248bfSmrg </para> 18060f8248bfSmrg </listitem> 18070f8248bfSmrg </varlistentry> 18080f8248bfSmrg <varlistentry> 18090f8248bfSmrg <term> 18100f8248bfSmrg <parameter>ctrls_mask</parameter> 18110f8248bfSmrg </term> 18120f8248bfSmrg <listitem> 18130f8248bfSmrg <para> 18140f8248bfSmrg boolean controls to modify 18150f8248bfSmrg </para> 18160f8248bfSmrg </listitem> 18170f8248bfSmrg </varlistentry> 18180f8248bfSmrg <varlistentry> 18190f8248bfSmrg <term> 18200f8248bfSmrg <parameter>ctrls_values</parameter> 18210f8248bfSmrg </term> 18220f8248bfSmrg <listitem> 18230f8248bfSmrg <para> 18240f8248bfSmrg new bits for controls selected by <parameter>ctrls_mask</parameter> 18250f8248bfSmrg </para> 18260f8248bfSmrg </listitem> 18270f8248bfSmrg </varlistentry> 18280f8248bfSmrg <varlistentry> 18290f8248bfSmrg <term> 18300f8248bfSmrg <parameter>opts_mask</parameter> 18310f8248bfSmrg </term> 18320f8248bfSmrg <listitem> 18330f8248bfSmrg <para> 18340f8248bfSmrg <structfield>ax_options</structfield> to change 18350f8248bfSmrg </para> 18360f8248bfSmrg </listitem> 18370f8248bfSmrg </varlistentry> 18380f8248bfSmrg <varlistentry> 18390f8248bfSmrg <term> 18400f8248bfSmrg <parameter>opts_values</parameter> 18410f8248bfSmrg </term> 18420f8248bfSmrg <listitem> 18430f8248bfSmrg <para> 18440f8248bfSmrg new bits for <structfield>ax_options</structfield> selected by <parameter>opts_mask</parameter> 18450f8248bfSmrg </para> 18460f8248bfSmrg </listitem> 18470f8248bfSmrg </varlistentry> 18480f8248bfSmrg</variablelist> 18490f8248bfSmrg 18500f8248bfSmrg<para> 18510f8248bfSmrg<parameter>timeout</parameter> 18520f8248bfSmrgspecifies the number of seconds the keyboard must be idle before the controls 18530f8248bfSmrgare modified. 18540f8248bfSmrg<parameter>ctrls_mask</parameter> 18550f8248bfSmrgspecifies what controls are to be enabled or disabled, and 18560f8248bfSmrg<parameter>ctrls_values</parameter> 18570f8248bfSmrgspecifies whether those controls are to be enabled or disabled. The bit values 18580f8248bfSmrgcorrespond to those for enabling and disabling boolean controls 18590f8248bfSmrg(see <link linkend="The_EnabledControls_Control">section 10.1.1</link>). The 18600f8248bfSmrg<parameter>opts_mask</parameter> 18610f8248bfSmrgfield specifies which attributes of the 18620f8248bfSmrg<emphasis>AccessXKeys</emphasis> 18630f8248bfSmrgand 18640f8248bfSmrg<emphasis>AccessXFeedback</emphasis> 18650f8248bfSmrgcontrols are to be changed, and 18660f8248bfSmrg<parameter>opts_values</parameter> 18670f8248bfSmrgspecifies the new values for those options. The bit values correspond to those 18680f8248bfSmrgfor the 18690f8248bfSmrg<structfield>ax_options</structfield> 18700f8248bfSmrgfield of an 18710f8248bfSmrg<structname>XkbDescRec</structname> 18720f8248bfSmrg(see <link linkend="The_XkbControlsRec_Structure">section 10.8</link>). 18730f8248bfSmrg</para> 18740f8248bfSmrg 18750f8248bfSmrg 18760f8248bfSmrg<para> 18770f8248bfSmrg<function>XkbSetAccessXTimeout</function> 18780f8248bfSmrgsends a request to configure the 18790f8248bfSmrg<emphasis>AccessXTimeout</emphasis> 18800f8248bfSmrgcontrol to the server. 18810f8248bfSmrgIt does not wait for a reply, and normally returns 18820f8248bfSmrg<symbol>True</symbol>. 18830f8248bfSmrgIf a compatible version of the Xkb extension is not available in the server, 18840f8248bfSmrg<function>XkbSetAccessXTimeout</function> 18850f8248bfSmrgreturns 18860f8248bfSmrg<symbol>False</symbol>. 1887e9fcaa8aSmrg</para> 1888e9fcaa8aSmrg 1889e9fcaa8aSmrg 1890e9fcaa8aSmrg</sect2> 1891eb411b4bSmrg<sect2 id='The_AccessXFeedback_Control'> 1892e9fcaa8aSmrg<title>The AccessXFeedback Control</title> 1893e9fcaa8aSmrg 1894e9fcaa8aSmrg<para> 1895e9fcaa8aSmrgJust as some keyboards can produce keyclicks to indicate when a key is pressed 1896e9fcaa8aSmrgor repeating, Xkb can provide feedback for the controls by using special beep 18970f8248bfSmrgcodes. Use the 18980f8248bfSmrg<emphasis>AccessXFeedback</emphasis> 18990f8248bfSmrgcontrol to configure the specific types of operations that generate feedback. 1900e9fcaa8aSmrg</para> 1901e9fcaa8aSmrg 1902e9fcaa8aSmrg 1903e9fcaa8aSmrg<para> 19040f8248bfSmrgThere is no convenience function for modifying the 19050f8248bfSmrg<emphasis>AccessXFeedback</emphasis> 19060f8248bfSmrgcontrol, although the feedback as a whole can be enabled or disabled just as 19070f8248bfSmrgother boolean controls are (see <link linkend="Controls_that_Enable_and_Disable_Other_Controls">section 10.1</link>). Individual beep codes are turned 19080f8248bfSmrgon or off by modifying the following bits in the 19090f8248bfSmrg<structfield>ax_options</structfield> 19100f8248bfSmrgfield of an 19110f8248bfSmrg<structname>XkbControlsRec</structname> 19120f8248bfSmrgstructure and using 19130f8248bfSmrg<function>XkbSetControls</function> 19140f8248bfSmrg(see <link linkend="Changing_Controls">section 10.10</link>): 1915e9fcaa8aSmrg</para> 1916e9fcaa8aSmrg 19170f8248bfSmrg<table id='table10.3' frame='topbot'> 1918e9fcaa8aSmrg<title>AccessXFeedback Masks</title> 1919eb411b4bSmrg<?dbfo keep-together="always" ?> 1920eb411b4bSmrg<tgroup cols='3' align='left' colsep='0' rowsep='0'> 1921eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 1922eb411b4bSmrg<colspec colname='c2' colwidth='1.0*'/> 1923eb411b4bSmrg<colspec colname='c3' colwidth='1.0*'/> 1924e9fcaa8aSmrg<thead> 1925eb411b4bSmrg<row rowsep='1'> 1926e9fcaa8aSmrg <entry>Action</entry> 1927e9fcaa8aSmrg <entry>Beep Code</entry> 1928e9fcaa8aSmrg <entry>ax_options bit</entry> 1929e9fcaa8aSmrg </row> 1930e9fcaa8aSmrg</thead> 1931e9fcaa8aSmrg<tbody> 1932eb411b4bSmrg<row> 1933e9fcaa8aSmrg <entry>LED turned on</entry> 1934e9fcaa8aSmrg <entry>High-pitched beep</entry> 19350f8248bfSmrg <entry><symbol>XkbAX_IndicatorFBMask</symbol></entry> 1936e9fcaa8aSmrg</row> 1937eb411b4bSmrg<row> 1938e9fcaa8aSmrg <entry>LED turned off</entry> 1939e9fcaa8aSmrg <entry>Low-pitched beep</entry> 19400f8248bfSmrg <entry><symbol>XkbAX_IndicatorFBMask</symbol></entry> 1941e9fcaa8aSmrg</row> 1942eb411b4bSmrg<row> 1943e9fcaa8aSmrg <entry>More than one LED changed state</entry> 1944e9fcaa8aSmrg <entry>Two high-pitched beeps</entry> 19450f8248bfSmrg <entry><symbol>XkbAX_IndicatorFBMask</symbol></entry> 1946e9fcaa8aSmrg</row> 1947eb411b4bSmrg<row> 1948e9fcaa8aSmrg <entry>Control turned on</entry> 1949e9fcaa8aSmrg <entry>Rising tone</entry> 19500f8248bfSmrg <entry><symbol>XkbAX_FeatureFBMask</symbol></entry> 1951e9fcaa8aSmrg</row> 1952eb411b4bSmrg<row> 1953e9fcaa8aSmrg <entry>Control turned off</entry> 1954e9fcaa8aSmrg <entry>Falling tone</entry> 19550f8248bfSmrg <entry><symbol>XkbAX_FeatureFBMask</symbol></entry> 1956e9fcaa8aSmrg</row> 1957eb411b4bSmrg<row> 1958e9fcaa8aSmrg <entry>More than one control changed state</entry> 1959e9fcaa8aSmrg <entry>Two high-pitched beeps</entry> 19600f8248bfSmrg <entry><symbol>XkbAX_FeatureFBMask</symbol></entry> 1961e9fcaa8aSmrg</row> 1962eb411b4bSmrg<row> 1963e9fcaa8aSmrg <entry>SlowKeys and BounceKeys about to be turned on or off</entry> 1964e9fcaa8aSmrg <entry>Three high-pitched beeps</entry> 19650f8248bfSmrg <entry><symbol>XkbAX_SlowWarnFBMask</symbol></entry> 1966e9fcaa8aSmrg</row> 1967eb411b4bSmrg<row> 1968e9fcaa8aSmrg <entry>SlowKeys key pressed</entry> 1969e9fcaa8aSmrg <entry>Medium-pitched beep</entry> 19700f8248bfSmrg <entry><symbol>XkbAX_SKPressFBMask</symbol></entry> 1971e9fcaa8aSmrg</row> 1972eb411b4bSmrg<row> 1973e9fcaa8aSmrg <entry>SlowKeys key accepted</entry> 1974e9fcaa8aSmrg <entry>Medium-pitched beep</entry> 19750f8248bfSmrg <entry><symbol>XkbAX_SKAcceptFBMask</symbol></entry> 1976e9fcaa8aSmrg</row> 1977eb411b4bSmrg<row> 1978e9fcaa8aSmrg <entry>SlowKeys key rejected</entry> 1979e9fcaa8aSmrg <entry>Low-pitched beep</entry> 19800f8248bfSmrg <entry><symbol>XkbAX_SKRejectFBMask</symbol></entry> 1981e9fcaa8aSmrg</row> 1982eb411b4bSmrg<row> 1983e9fcaa8aSmrg <entry>Accepted SlowKeys key released</entry> 1984e9fcaa8aSmrg <entry>Medium-pitched beep</entry> 19850f8248bfSmrg <entry><symbol>XkbAX_SKReleaseFBMask</symbol></entry> 1986e9fcaa8aSmrg</row> 1987eb411b4bSmrg<row> 1988e9fcaa8aSmrg <entry>BounceKeys key rejected</entry> 1989e9fcaa8aSmrg <entry>Low-pitched beep</entry> 19900f8248bfSmrg <entry><symbol>XkbAX_BKRejectFBMask</symbol></entry> 1991e9fcaa8aSmrg</row> 1992eb411b4bSmrg<row> 1993e9fcaa8aSmrg <entry>StickyKeys key latched</entry> 1994e9fcaa8aSmrg <entry>Low-pitched beep followed by high-pitched beep</entry> 19950f8248bfSmrg <entry><symbol>XkbAX_StickyKeysFBMask</symbol></entry> 1996e9fcaa8aSmrg</row> 1997eb411b4bSmrg<row> 1998e9fcaa8aSmrg <entry>StickyKeys key locked</entry> 1999e9fcaa8aSmrg <entry>High-pitched beep</entry> 20000f8248bfSmrg <entry><symbol>XkbAX_StickyKeysFBMask</symbol></entry> 2001e9fcaa8aSmrg</row> 2002eb411b4bSmrg<row> 2003e9fcaa8aSmrg <entry>StickyKeys key unlocked</entry> 2004e9fcaa8aSmrg <entry>Low-pitched beep</entry> 20050f8248bfSmrg <entry><symbol>XkbAX_StickyKeysFBMask</symbol></entry> 2006e9fcaa8aSmrg </row> 2007e9fcaa8aSmrg</tbody> 2008e9fcaa8aSmrg</tgroup> 2009e9fcaa8aSmrg</table> 2010e9fcaa8aSmrg 2011e9fcaa8aSmrg<para> 2012e9fcaa8aSmrgImplementations that cannot generate continuous tones may generate multiple 2013e9fcaa8aSmrgbeeps instead of falling and rising tones; for example, they can generate a 2014e9fcaa8aSmrghigh-pitched beep followed by a low-pitched beep instead of a continuous 2015e9fcaa8aSmrgfalling tone. Other implementations can only ring the bell with one fixed 20160f8248bfSmrgpitch. In these cases, use the 20170f8248bfSmrg<symbol>XkbAX_DumbBellFBMask</symbol> 20180f8248bfSmrgbit of 20190f8248bfSmrg<structfield>ax_options</structfield> 20200f8248bfSmrgto indicate that the bell can only ring with a fixed pitch. 2021e9fcaa8aSmrg</para> 2022e9fcaa8aSmrg 2023e9fcaa8aSmrg 2024e9fcaa8aSmrg<para> 20250f8248bfSmrgWhen any of the above feedbacks occur, Xkb may generate a 20260f8248bfSmrg<symbol>XkbBellNotify</symbol> 20270f8248bfSmrgevent (see <link linkend="Detecting_Bells">section 9.4</link>). 2028e9fcaa8aSmrg</para> 2029e9fcaa8aSmrg 2030e9fcaa8aSmrg 2031e9fcaa8aSmrg</sect2> 2032eb411b4bSmrg<sect2 id='AccessXNotify_Events'> 2033e9fcaa8aSmrg<title>AccessXNotify Events</title> 2034e9fcaa8aSmrg 20350f8248bfSmrg<indexterm significance="preferred" zone="AccessXNotify_Events"> 20360f8248bfSmrg<primary>events</primary><secondary><symbol>XkbAccessXNotify</symbol></secondary></indexterm> 20370f8248bfSmrg<indexterm significance="preferred" zone="AccessXNotify_Events"> 20380f8248bfSmrg<primary><structname>XkbAccessXNotifyEvent</structname></primary></indexterm> 20390f8248bfSmrg 2040e9fcaa8aSmrg<para> 20410f8248bfSmrgThe server can generate 20420f8248bfSmrg<symbol>XkbAccessXNotify</symbol> 20430f8248bfSmrgevents for some of the global keyboard controls. The structure for the 20440f8248bfSmrg<symbol>XkbAccessXNotify</symbol> 20450f8248bfSmrgevent type is as follows: 2046e9fcaa8aSmrg 20470f8248bfSmrg<programlisting> 2048e9fcaa8aSmrgtypedef struct { 20490f8248bfSmrg int type; /* Xkb extension base event code */ 20500f8248bfSmrg unsigned long serial; /* X server serial number for event */ 20510f8248bfSmrg Bool send_event; /* <symbol>True</symbol> ⇒ synthetically generated */ 20520f8248bfSmrg Display * display; /* server connection where event generated */ 20530f8248bfSmrg Time time; /* server time when event generated */ 20540f8248bfSmrg int xkb_type; /* <symbol>XkbAccessXNotify</symbol> */ 20550f8248bfSmrg int device; /* Xkb device ID, will not be <symbol>XkbUseCoreKbd</symbol> */ 20560f8248bfSmrg int detail; /* XkbAXN_* */ 20570f8248bfSmrg KeyCode keycode; /* key of event */ 20580f8248bfSmrg int slowKeysDelay; /* current SlowKeys delay */ 20590f8248bfSmrg int debounceDelay; /* current debounce delay */ 20600f8248bfSmrg} <structname>XkbAccessXNotifyEvent</structname>; 2061e9fcaa8aSmrg</programlisting></para> 2062e9fcaa8aSmrg 2063e9fcaa8aSmrg<para> 20640f8248bfSmrgThe 20650f8248bfSmrg<structfield>detail</structfield> 20660f8248bfSmrgfield describes what AccessX event just occurred and can be any of the values 20670f8248bfSmrgin <link linkend="table10.4">Table 10.4</link>. 2068e9fcaa8aSmrg</para> 2069e9fcaa8aSmrg 20700f8248bfSmrg<table id='table10.4' frame='topbot'> 2071e9fcaa8aSmrg<title>AccessXNotify Events</title> 2072eb411b4bSmrg<?dbfo keep-together="always" ?> 2073eb411b4bSmrg<tgroup cols='2' align='left' colsep='0' rowsep='0'> 2074eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 2075eb411b4bSmrg<colspec colname='c2' colwidth='2.0*'/> 2076e9fcaa8aSmrg<thead> 2077eb411b4bSmrg<row rowsep='1'> 2078e9fcaa8aSmrg <entry>detail</entry> 2079e9fcaa8aSmrg <entry>Reason</entry> 2080e9fcaa8aSmrg</row> 2081e9fcaa8aSmrg</thead> 2082e9fcaa8aSmrg<tbody> 2083eb411b4bSmrg<row> 20840f8248bfSmrg <entry><symbol>XkbAXN_SKPress</symbol></entry> 2085e9fcaa8aSmrg <entry>A key was pressed when SlowKeys was enabled.</entry> 2086e9fcaa8aSmrg</row> 2087eb411b4bSmrg<row> 20880f8248bfSmrg <entry><symbol>XkbAXN_SKAccept</symbol></entry> 2089e9fcaa8aSmrg <entry>A key was accepted (held longer than the SlowKeys delay).</entry> 2090e9fcaa8aSmrg</row> 2091eb411b4bSmrg<row> 20920f8248bfSmrg <entry><symbol>XkbAXN_SKRelease</symbol></entry> 2093e9fcaa8aSmrg <entry>An accepted SlowKeys key was released.</entry> 2094e9fcaa8aSmrg</row> 2095eb411b4bSmrg<row> 20960f8248bfSmrg <entry><symbol>XkbAXN_SKReject</symbol></entry> 2097e9fcaa8aSmrg <entry>A key was rejected (released before the SlowKeys delay 2098e9fcaa8aSmrgexpired).</entry> 2099e9fcaa8aSmrg</row> 2100eb411b4bSmrg<row> 21010f8248bfSmrg <entry><symbol>XkbAXN_BKAccept</symbol></entry> 2102e9fcaa8aSmrg <entry>A key was accepted by BounceKeys.</entry> 2103e9fcaa8aSmrg</row> 2104eb411b4bSmrg<row> 21050f8248bfSmrg <entry><symbol>XkbAXN_BKReject</symbol></entry> 2106e9fcaa8aSmrg <entry>A key was rejected (pressed before the BounceKeys delay 2107e9fcaa8aSmrgexpired).</entry> 2108e9fcaa8aSmrg</row> 2109eb411b4bSmrg<row> 21100f8248bfSmrg <entry><symbol>XkbAXN_AXKWarning</symbol></entry> 2111e9fcaa8aSmrg <entry>AccessXKeys is about to turn on/off StickyKeys or BounceKeys.</entry> 2112e9fcaa8aSmrg </row> 2113e9fcaa8aSmrg</tbody> 2114e9fcaa8aSmrg</tgroup> 2115e9fcaa8aSmrg</table> 2116e9fcaa8aSmrg 2117e9fcaa8aSmrg<para> 21180f8248bfSmrgThe 21190f8248bfSmrg<structfield>keycode</structfield> 21200f8248bfSmrgfield reports the keycode of the key for which the event occurred. If the 21210f8248bfSmrgaction is related to 21220f8248bfSmrg<emphasis>SlowKeys</emphasis>, 21230f8248bfSmrgthe 21240f8248bfSmrg<structfield>slowKeysDelay</structfield> 21250f8248bfSmrgfield contains the current 21260f8248bfSmrg<emphasis>SlowKeys</emphasis> 21270f8248bfSmrgacceptance delay. If the action is related to 21280f8248bfSmrg<emphasis>BounceKeys</emphasis>, 21290f8248bfSmrgthe 21300f8248bfSmrg<structfield>debounceDelay</structfield> 21310f8248bfSmrgfield contains the current 21320f8248bfSmrg<emphasis>BounceKeys</emphasis> 21330f8248bfSmrgdebounce delay. 2134e9fcaa8aSmrg</para> 2135e9fcaa8aSmrg 2136eb411b4bSmrg<sect3 id='Selecting_for_AccessX_Events'> 2137e9fcaa8aSmrg<title>Selecting for AccessX Events</title> 2138e9fcaa8aSmrg 2139e9fcaa8aSmrg<para> 21400f8248bfSmrgTo receive 21410f8248bfSmrg<symbol>XkbAccessXNotify</symbol> 21420f8248bfSmrgevents under all possible conditions, use 21430f8248bfSmrg<function>XkbSelectEvents</function> 21440f8248bfSmrg(see <link linkend="Selecting_Xkb_Events">section 4.3</link>) and pass 21450f8248bfSmrg<symbol>XkbAccessXNotifyMask</symbol> 21460f8248bfSmrgin both 21470f8248bfSmrg<parameter>bits_to_change</parameter> 21480f8248bfSmrgand 21490f8248bfSmrg<parameter>values_for_bits</parameter>. 2150e9fcaa8aSmrg</para> 2151e9fcaa8aSmrg 2152e9fcaa8aSmrg 2153e9fcaa8aSmrg<para> 21540f8248bfSmrgTo receive 21550f8248bfSmrg<symbol>XkbStateNotify</symbol> 21560f8248bfSmrgevents only under certain conditions, use 21570f8248bfSmrg<function>XkbSelectEventDetails</function> 21580f8248bfSmrgusing 21590f8248bfSmrg<symbol>XkbAccessXNotify</symbol> 21600f8248bfSmrgas the 21610f8248bfSmrg<structfield>event_type</structfield> 21620f8248bfSmrgand specifying the desired state changes in 21630f8248bfSmrg<parameter>bits_to_change</parameter> 21640f8248bfSmrgand 21650f8248bfSmrg<parameter>values_for_bits</parameter> 21660f8248bfSmrgusing mask bits from <link linkend="table10.5">Table 10.5</link>. 2167e9fcaa8aSmrg</para> 2168e9fcaa8aSmrg 21690f8248bfSmrg<table id='table10.5' frame='topbot'> 2170e9fcaa8aSmrg<title>AccessXNotify Event Details</title> 2171eb411b4bSmrg<?dbfo keep-together="always" ?> 2172eb411b4bSmrg<tgroup cols='3' align='left' colsep='0' rowsep='0'> 2173eb411b4bSmrg<colspec colname='c1' colwidth='1.5*'/> 2174eb411b4bSmrg<colspec colname='c2' colwidth='1.0*'/> 2175eb411b4bSmrg<colspec colname='c3' colwidth='2.0*'/> 2176e9fcaa8aSmrg<thead> 2177eb411b4bSmrg<row rowsep='1'> 2178e9fcaa8aSmrg <entry>XkbAccessXNotify Event Details</entry> 2179e9fcaa8aSmrg <entry>Value</entry> 2180e9fcaa8aSmrg <entry>Circumstances</entry> 2181e9fcaa8aSmrg </row> 2182e9fcaa8aSmrg</thead> 2183e9fcaa8aSmrg<tbody> 2184eb411b4bSmrg <row> 21850f8248bfSmrg <entry><symbol>XkbAXN_SKPressMask</symbol></entry> 2186e9fcaa8aSmrg <entry>(1<<0)</entry> 2187e9fcaa8aSmrg <entry>Slow key press notification wanted</entry> 2188e9fcaa8aSmrg </row> 2189eb411b4bSmrg <row> 21900f8248bfSmrg <entry><symbol>XkbAXN_SKAcceptMask</symbol></entry> 2191e9fcaa8aSmrg <entry>(1<<1)</entry> 2192e9fcaa8aSmrg <entry>Slow key accept notification wanted</entry> 2193e9fcaa8aSmrg </row> 2194eb411b4bSmrg <row> 21950f8248bfSmrg <entry><symbol>XkbAXN_SKRejectMask</symbol></entry> 2196e9fcaa8aSmrg <entry>(1<<2)</entry> 2197e9fcaa8aSmrg <entry>Slow key reject notification wanted</entry> 2198e9fcaa8aSmrg </row> 2199eb411b4bSmrg <row> 22000f8248bfSmrg <entry><symbol>XkbAXN_SKReleaseMask</symbol></entry> 2201e9fcaa8aSmrg <entry>(1<<3)</entry> 2202e9fcaa8aSmrg <entry>Slow key release notification wanted</entry> 2203e9fcaa8aSmrg </row> 2204eb411b4bSmrg <row> 22050f8248bfSmrg <entry><symbol>XkbAXN_BKAcceptMask</symbol></entry> 2206e9fcaa8aSmrg <entry>(1<<4)</entry> 2207e9fcaa8aSmrg <entry>Bounce key accept notification wanted</entry> 2208e9fcaa8aSmrg </row> 2209eb411b4bSmrg <row> 22100f8248bfSmrg <entry><symbol>XkbAXN_BKRejectMask</symbol></entry> 2211e9fcaa8aSmrg <entry>(1<<5)</entry> 2212e9fcaa8aSmrg <entry>Bounce key reject notification wanted</entry> 2213e9fcaa8aSmrg </row> 2214eb411b4bSmrg <row> 22150f8248bfSmrg <entry><symbol>XkbAXN_AXKWarningMask</symbol></entry> 2216e9fcaa8aSmrg <entry>(1<<6)</entry> 2217e9fcaa8aSmrg <entry>AccessX warning notification wanted</entry> 2218e9fcaa8aSmrg </row> 2219eb411b4bSmrg <row> 2220e9fcaa8aSmrg <entry>XkbAXN_AllEventsMask</entry> 2221e9fcaa8aSmrg <entry>(0x7f)</entry> 2222e9fcaa8aSmrg <entry>All AccessX features notifications wanted</entry> 2223e9fcaa8aSmrg </row> 2224e9fcaa8aSmrg</tbody> 2225e9fcaa8aSmrg</tgroup> 2226e9fcaa8aSmrg</table> 2227e9fcaa8aSmrg 2228e9fcaa8aSmrg</sect3> 2229e9fcaa8aSmrg</sect2> 2230eb411b4bSmrg<sect2 id='StickyKeys_RepeatKeys_and_MouseKeys_Events'> 2231e9fcaa8aSmrg<title>StickyKeys, RepeatKeys, and MouseKeys Events</title> 2232e9fcaa8aSmrg 2233e9fcaa8aSmrg<para> 22340f8248bfSmrgThe 22350f8248bfSmrg<emphasis>StickyKeys</emphasis>, 22360f8248bfSmrg<emphasis>RepeatKeys</emphasis>, 22370f8248bfSmrgand 22380f8248bfSmrg<emphasis>MouseKeys</emphasis> 22390f8248bfSmrgcontrols do not generate specific events. Instead, the latching, unlatching, 22400f8248bfSmrglocking, or unlocking of modifiers using 22410f8248bfSmrg<emphasis>StickyKeys</emphasis> 22420f8248bfSmrggenerates 22430f8248bfSmrg<symbol>XkbStateNotify</symbol> 22440f8248bfSmrgevents as described in <link linkend="Tracking_Keyboard_State">section 5.4</link>. Repeating keys generate normal 22450f8248bfSmrg<symbol>KeyPress</symbol> 22460f8248bfSmrgand 22470f8248bfSmrg<symbol>KeyRelease</symbol> 22480f8248bfSmrgevents, though the auto-repeat can be detected using 22490f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 22500f8248bfSmrg(see <link linkend="The_DetectableAutorepeat_Control">section 10.3.3</link>). Finally, 22510f8248bfSmrg<emphasis>MouseKeys</emphasis> 22520f8248bfSmrggenerates pointer events identical to those of the core pointer device. 2253e9fcaa8aSmrg</para> 2254e9fcaa8aSmrg 2255e9fcaa8aSmrg 2256e9fcaa8aSmrg</sect2> 2257eb411b4bSmrg<sect2 id='The_SlowKeys_Control'> 2258e9fcaa8aSmrg<title>The SlowKeys Control</title> 2259e9fcaa8aSmrg 2260e9fcaa8aSmrg<para> 2261e9fcaa8aSmrgSome users may accidentally bump keys while moving a hand or typing stick 2262e9fcaa8aSmrgtoward the key they want. Usually, the keys that are accidentally bumped are 22630f8248bfSmrgjust hit for a very short period of time. The 22640f8248bfSmrg<emphasis>SlowKeys</emphasis> 22650f8248bfSmrgcontrol helps filter these accidental bumps by telling the server to wait a 22660f8248bfSmrgspecified period, called the 22670f8248bfSmrg<firstterm>SlowKeys acceptance delay</firstterm>, 22680f8248bfSmrgbefore delivering key events. If the key is released before this period 2269e9fcaa8aSmrgelapses, no key events are generated. Users can then bump any number of keys on 2270e9fcaa8aSmrgtheir way to the one they want without accidentally getting those characters. 2271e9fcaa8aSmrgOnce they have reached the key they want, they can then hold the desired key 22720f8248bfSmrglong enough for the computer to accept it. 22730f8248bfSmrg<emphasis>SlowKeys</emphasis> 22740f8248bfSmrgis a boolean control with one configurable attribute. 2275e9fcaa8aSmrg</para> 2276e9fcaa8aSmrg 2277e9fcaa8aSmrg<para> 22780f8248bfSmrgWhen the 22790f8248bfSmrg<emphasis>SlowKeys</emphasis> 22800f8248bfSmrgcontrol is active, the server reports the initial key press, subsequent 2281e9fcaa8aSmrgacceptance or rejection, and release of any key to interested clients by 22820f8248bfSmrgsending an appropriate 22830f8248bfSmrg<emphasis>AccessXNotify</emphasis> 22840f8248bfSmrgevent (see <link linkend="AccessXNotify_Events">section 10.6.4</link>). 22850f8248bfSmrg</para> 22860f8248bfSmrg 22870f8248bfSmrg<para> 22880f8248bfSmrgTo get the 22890f8248bfSmrg<emphasis>SlowKeys</emphasis> 22900f8248bfSmrgacceptance delay for a keyboard device, use 22910f8248bfSmrg<function>XkbGetSlowKeysDelay</function>. 22920f8248bfSmrg</para> 22930f8248bfSmrg 22940f8248bfSmrg<indexterm significance="preferred" zone="XkbGetSlowKeysDelay"><primary><function>XkbGetSlowKeysDelay</function></primary></indexterm> 22950f8248bfSmrg<funcsynopsis id="XkbGetSlowKeysDelay"> 22960f8248bfSmrg <funcprototype> 22970f8248bfSmrg <funcdef>Bool <function>XkbGetSlowKeysDelay</function></funcdef> 22980f8248bfSmrg<!-- ( 22990f8248bfSmrg<parameter>display</parameter>, 23000f8248bfSmrg<parameter>device_spec</parameter>, 23010f8248bfSmrg<parameter>delay_rtrn</parameter> 23020f8248bfSmrg) --> 23030f8248bfSmrg 23040f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 23050f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 23060f8248bfSmrg <paramdef>unsigned int *<parameter>delay_rtrn</parameter></paramdef> 23070f8248bfSmrg </funcprototype> 23080f8248bfSmrg</funcsynopsis> 23090f8248bfSmrg<variablelist> 23100f8248bfSmrg <varlistentry> 23110f8248bfSmrg <term> 23120f8248bfSmrg <parameter>display</parameter> 23130f8248bfSmrg </term> 23140f8248bfSmrg <listitem> 23150f8248bfSmrg <para> 23160f8248bfSmrg connection to X server 23170f8248bfSmrg </para> 23180f8248bfSmrg </listitem> 23190f8248bfSmrg </varlistentry> 23200f8248bfSmrg <varlistentry> 23210f8248bfSmrg <term> 23220f8248bfSmrg <parameter>device_spec</parameter> 23230f8248bfSmrg </term> 23240f8248bfSmrg <listitem> 23250f8248bfSmrg <para> 23260f8248bfSmrg device ID, or <symbol>XkbUseCoreKbd</symbol> 23270f8248bfSmrg </para> 23280f8248bfSmrg </listitem> 23290f8248bfSmrg </varlistentry> 23300f8248bfSmrg <varlistentry> 23310f8248bfSmrg <term> 23320f8248bfSmrg <parameter>delay_rtrn</parameter> 23330f8248bfSmrg </term> 23340f8248bfSmrg <listitem> 23350f8248bfSmrg <para> 23360f8248bfSmrg backfilled with <emphasis>SlowKeys</emphasis> delay, ms 23370f8248bfSmrg </para> 23380f8248bfSmrg </listitem> 23390f8248bfSmrg </varlistentry> 23400f8248bfSmrg</variablelist> 23410f8248bfSmrg 23420f8248bfSmrg<para> 23430f8248bfSmrg<function>XkbGetSlowKeysDelay</function> 23440f8248bfSmrgrequests the attributes of the 23450f8248bfSmrg<emphasis>SlowKeys</emphasis> 23460f8248bfSmrgcontrol from the server, waits for a reply and backfills 23470f8248bfSmrg<parameter>delay_rtrn</parameter> 23480f8248bfSmrgwith the 23490f8248bfSmrg<emphasis>SlowKeys</emphasis> 23500f8248bfSmrgdelay attribute. 23510f8248bfSmrg<function>XkbGetSlowKeysDelay</function> 23520f8248bfSmrgreturns 23530f8248bfSmrg<symbol>True</symbol> 23540f8248bfSmrgif successful; if a compatible version of the Xkb extension is not available 23550f8248bfSmrgin the server, 23560f8248bfSmrg<function>XkbGetSlowKeysDelay</function> 23570f8248bfSmrgreturns 23580f8248bfSmrg<symbol>False</symbol>. 23590f8248bfSmrg</para> 23600f8248bfSmrg 23610f8248bfSmrg 23620f8248bfSmrg<para> 23630f8248bfSmrgTo set the 23640f8248bfSmrg<emphasis>SlowKeys</emphasis> 23650f8248bfSmrgacceptance delay for a keyboard device, use 23660f8248bfSmrg<function>XkbSetSlowKeysDelay</function>. 23670f8248bfSmrg</para> 23680f8248bfSmrg 23690f8248bfSmrg 23700f8248bfSmrg<indexterm significance="preferred" zone="XkbSetSlowKeysDelay"><primary><function>XkbSetSlowKeysDelay</function></primary></indexterm> 23710f8248bfSmrg<funcsynopsis id="XkbSetSlowKeysDelay"> 23720f8248bfSmrg <funcprototype> 23730f8248bfSmrg <funcdef>Bool <function>XkbSetSlowKeysDelay</function></funcdef> 23740f8248bfSmrg<!-- ( 23750f8248bfSmrg<parameter>display</parameter>, 23760f8248bfSmrg<parameter>device_spec</parameter>, 23770f8248bfSmrg<parameter>delay</parameter> 23780f8248bfSmrg) --> 23790f8248bfSmrg 23800f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 23810f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 23820f8248bfSmrg <paramdef>unsigned int <parameter>delay</parameter></paramdef> 23830f8248bfSmrg </funcprototype> 23840f8248bfSmrg</funcsynopsis> 23850f8248bfSmrg<variablelist> 23860f8248bfSmrg <varlistentry> 23870f8248bfSmrg <term> 23880f8248bfSmrg <parameter>display</parameter> 23890f8248bfSmrg </term> 23900f8248bfSmrg <listitem> 23910f8248bfSmrg <para> 23920f8248bfSmrg connection to X server 23930f8248bfSmrg </para> 23940f8248bfSmrg </listitem> 23950f8248bfSmrg </varlistentry> 23960f8248bfSmrg <varlistentry> 23970f8248bfSmrg <term> 23980f8248bfSmrg <parameter>device_spec</parameter> 23990f8248bfSmrg </term> 24000f8248bfSmrg <listitem> 24010f8248bfSmrg <para> 24020f8248bfSmrg device to configure, or <symbol>XkbUseCoreKbd</symbol> 24030f8248bfSmrg </para> 24040f8248bfSmrg </listitem> 24050f8248bfSmrg </varlistentry> 24060f8248bfSmrg <varlistentry> 24070f8248bfSmrg <term> 24080f8248bfSmrg <parameter>delay</parameter> 24090f8248bfSmrg </term> 24100f8248bfSmrg <listitem> 24110f8248bfSmrg <para> 24120f8248bfSmrg <emphasis>SlowKeys</emphasis> delay, ms 24130f8248bfSmrg </para> 24140f8248bfSmrg </listitem> 24150f8248bfSmrg </varlistentry> 24160f8248bfSmrg</variablelist> 24170f8248bfSmrg 24180f8248bfSmrg<para> 24190f8248bfSmrg<function>XkbSetSlowKeysDelay</function> 24200f8248bfSmrgsends a request to configure the 24210f8248bfSmrg<emphasis>SlowKeys</emphasis> 24220f8248bfSmrgcontrol to the server. 24230f8248bfSmrgIt does not wait for a reply, and normally returns 24240f8248bfSmrg<symbol>True</symbol>. 24250f8248bfSmrgSpecifying a value of 24260f8248bfSmrg<literal>0</literal> 24270f8248bfSmrgfor the 24280f8248bfSmrg<parameter>delay</parameter> 24290f8248bfSmrgparameter causes 24300f8248bfSmrg<function>XkbSetSlowKeysDelay</function> 24310f8248bfSmrgto generate a 24320f8248bfSmrg<errorname>BadValue</errorname> 24330f8248bfSmrgprotocol error. If a compatible version of the Xkb extension is not available 24340f8248bfSmrgin the server 24350f8248bfSmrg<function>XkbSetSlowKeysDelay</function> 24360f8248bfSmrgreturns 24370f8248bfSmrg<symbol>False</symbol>. 2438e9fcaa8aSmrg</para> 2439e9fcaa8aSmrg 2440e9fcaa8aSmrg 2441e9fcaa8aSmrg</sect2> 2442eb411b4bSmrg<sect2 id='The_BounceKeys_Control'> 2443e9fcaa8aSmrg<title>The BounceKeys Control</title> 2444e9fcaa8aSmrg 2445e9fcaa8aSmrg<para> 24460f8248bfSmrgSome users may accidentally <quote>bounce</quote> on a key when they release it. 24470f8248bfSmrgThey press it once, then accidentally press it again after they release it. The 24480f8248bfSmrg<emphasis>BounceKeys</emphasis> 24490f8248bfSmrgcontrol temporarily disables a key after it has been pressed, effectively 24500f8248bfSmrg<quote>debouncing</quote> the keyboard. The period of time the key is disabled 24510f8248bfSmrgafter it is released is known as the 24520f8248bfSmrg<firstterm>BounceKeys delay</firstterm>. 24530f8248bfSmrg<emphasis>BounceKeys</emphasis> 24540f8248bfSmrgis a boolean control. 24550f8248bfSmrg</para> 24560f8248bfSmrg 24570f8248bfSmrg 24580f8248bfSmrg<para> 24590f8248bfSmrgWhen the 24600f8248bfSmrg<emphasis>BounceKeys</emphasis> 24610f8248bfSmrgcontrol is active, the server reports acceptance or rejection of any key to 24620f8248bfSmrginterested clients by sending an appropriate 24630f8248bfSmrg<emphasis>AccessXNotify</emphasis> 24640f8248bfSmrgevent (see <link linkend="AccessXNotify_Events">section 10.6.4</link>). 24650f8248bfSmrg</para> 24660f8248bfSmrg 24670f8248bfSmrg 24680f8248bfSmrg<para> 24690f8248bfSmrgUse 24700f8248bfSmrg<function>XkbGetBounceKeysDelay</function> 24710f8248bfSmrgto query the current 24720f8248bfSmrg<emphasis>BounceKeys</emphasis> 24730f8248bfSmrgdelay for a keyboard device. 24740f8248bfSmrg</para> 24750f8248bfSmrg 24760f8248bfSmrg<indexterm significance="preferred" zone="XkbGetBounceKeysDelay"><primary><function>XkbGetBounceKeysDelay</function></primary></indexterm> 24770f8248bfSmrg<funcsynopsis id="XkbGetBounceKeysDelay"> 24780f8248bfSmrg <funcprototype> 24790f8248bfSmrg <funcdef>Bool <function>XkbGetBounceKeysDelay</function></funcdef> 24800f8248bfSmrg<!-- ( 24810f8248bfSmrg<parameter>display</parameter>, 24820f8248bfSmrg<parameter>device_spec</parameter>, 24830f8248bfSmrg<parameter>delay_rtrn</parameter> 24840f8248bfSmrg) --> 24850f8248bfSmrg 24860f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 24870f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 24880f8248bfSmrg <paramdef>unsigned int *<parameter>delay_rtrn</parameter></paramdef> 24890f8248bfSmrg </funcprototype> 24900f8248bfSmrg</funcsynopsis> 24910f8248bfSmrg<variablelist> 24920f8248bfSmrg <varlistentry> 24930f8248bfSmrg <term> 24940f8248bfSmrg <parameter>display</parameter> 24950f8248bfSmrg </term> 24960f8248bfSmrg <listitem> 24970f8248bfSmrg <para> 24980f8248bfSmrg connection to X server 24990f8248bfSmrg </para> 25000f8248bfSmrg </listitem> 25010f8248bfSmrg </varlistentry> 25020f8248bfSmrg <varlistentry> 25030f8248bfSmrg <term> 25040f8248bfSmrg <parameter>device_spec</parameter> 25050f8248bfSmrg </term> 25060f8248bfSmrg <listitem> 25070f8248bfSmrg <para> 25080f8248bfSmrg device ID, or <symbol>XkbUseCoreKbd</symbol> 25090f8248bfSmrg </para> 25100f8248bfSmrg </listitem> 25110f8248bfSmrg </varlistentry> 25120f8248bfSmrg <varlistentry> 25130f8248bfSmrg <term> 25140f8248bfSmrg <parameter>delay_rtrn</parameter> 25150f8248bfSmrg </term> 25160f8248bfSmrg <listitem> 25170f8248bfSmrg <para> 25180f8248bfSmrg backfilled with bounce keys delay, ms 25190f8248bfSmrg </para> 25200f8248bfSmrg </listitem> 25210f8248bfSmrg </varlistentry> 25220f8248bfSmrg</variablelist> 25230f8248bfSmrg 25240f8248bfSmrg<para> 25250f8248bfSmrg<function>XkbGetBounceKeysDelay</function> 25260f8248bfSmrgrequests the attributes of the 25270f8248bfSmrg<emphasis>BounceKeys</emphasis> 25280f8248bfSmrgcontrol from the server, waits for a reply, and backfills 25290f8248bfSmrg<parameter>delay_rtrn</parameter> 25300f8248bfSmrgwith the 25310f8248bfSmrg<emphasis>BounceKeys</emphasis> 25320f8248bfSmrgdelay attribute. 25330f8248bfSmrg<function>XkbGetBounceKeysDelay</function> 25340f8248bfSmrgreturns 25350f8248bfSmrg<symbol>True</symbol> 25360f8248bfSmrgif successful; if a compatible version of the Xkb extension is not available 25370f8248bfSmrgin the server 25380f8248bfSmrg<function>XkbGetSlowKeysDelay</function> 25390f8248bfSmrgreturns 25400f8248bfSmrg<symbol>False</symbol>. 25410f8248bfSmrg</para> 25420f8248bfSmrg 25430f8248bfSmrg 25440f8248bfSmrg<para> 25450f8248bfSmrgTo set the 25460f8248bfSmrg<emphasis>BounceKeys</emphasis> 25470f8248bfSmrgdelay for a keyboard device, use 25480f8248bfSmrg<function>XkbSetBounceKeysDelay</function>. 25490f8248bfSmrg</para> 25500f8248bfSmrg 25510f8248bfSmrg 25520f8248bfSmrg<indexterm significance="preferred" zone="XkbSetBounceKeysDelay"><primary><function>XkbSetBounceKeysDelay</function></primary></indexterm> 25530f8248bfSmrg<funcsynopsis id="XkbSetBounceKeysDelay"> 25540f8248bfSmrg <funcprototype> 25550f8248bfSmrg <funcdef>Bool <function>XkbSetBounceKeysDelay</function></funcdef> 25560f8248bfSmrg<!-- ( 25570f8248bfSmrg<parameter>display</parameter>, 25580f8248bfSmrg<parameter>device_spec</parameter>, 25590f8248bfSmrg<parameter>delay</parameter> 25600f8248bfSmrg) --> 25610f8248bfSmrg 25620f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 25630f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 25640f8248bfSmrg <paramdef>unsigned int <parameter>delay</parameter></paramdef> 25650f8248bfSmrg </funcprototype> 25660f8248bfSmrg</funcsynopsis> 25670f8248bfSmrg<variablelist> 25680f8248bfSmrg <varlistentry> 25690f8248bfSmrg <term> 25700f8248bfSmrg <parameter>display</parameter> 25710f8248bfSmrg </term> 25720f8248bfSmrg <listitem> 25730f8248bfSmrg <para> 25740f8248bfSmrg connection to X server 25750f8248bfSmrg </para> 25760f8248bfSmrg </listitem> 25770f8248bfSmrg </varlistentry> 25780f8248bfSmrg <varlistentry> 25790f8248bfSmrg <term> 25800f8248bfSmrg <parameter>device_spec</parameter> 25810f8248bfSmrg </term> 25820f8248bfSmrg <listitem> 25830f8248bfSmrg <para> 25840f8248bfSmrg device to configure, or <symbol>XkbUseCoreKbd</symbol> 25850f8248bfSmrg </para> 25860f8248bfSmrg </listitem> 25870f8248bfSmrg </varlistentry> 25880f8248bfSmrg <varlistentry> 25890f8248bfSmrg <term> 25900f8248bfSmrg <parameter>delay</parameter> 25910f8248bfSmrg </term> 25920f8248bfSmrg <listitem> 25930f8248bfSmrg <para> 25940f8248bfSmrg bounce keys delay, ms 25950f8248bfSmrg </para> 25960f8248bfSmrg </listitem> 25970f8248bfSmrg </varlistentry> 25980f8248bfSmrg</variablelist> 25990f8248bfSmrg 26000f8248bfSmrg<para> 26010f8248bfSmrg<function>XkbSetBounceKeysDelay</function> 26020f8248bfSmrgsends a request to configure the 26030f8248bfSmrg<emphasis>BounceKeys</emphasis> 26040f8248bfSmrgcontrol to the server. 26050f8248bfSmrgIt does not wait for a reply and normally returns 26060f8248bfSmrg<symbol>True</symbol>. 26070f8248bfSmrgSpecifying a value of 26080f8248bfSmrg<emphasis>zero</emphasis> 26090f8248bfSmrgfor the 26100f8248bfSmrg<parameter>delay</parameter> 26110f8248bfSmrgparameter causes 26120f8248bfSmrg<function>XkbSetBounceKeysDelay</function> 26130f8248bfSmrgto generate a 26140f8248bfSmrg<errorname>BadValue</errorname> 26150f8248bfSmrgprotocol error. If a compatible version of the Xkb extension is not available 26160f8248bfSmrgin the server, 26170f8248bfSmrg<function>XkbSetBounceKeysDelay</function> 26180f8248bfSmrgreturns 26190f8248bfSmrg<symbol>False</symbol>. 2620e9fcaa8aSmrg</para> 2621e9fcaa8aSmrg 2622e9fcaa8aSmrg</sect2> 2623eb411b4bSmrg<sect2 id='The_StickyKeys_Control'> 2624e9fcaa8aSmrg<title>The StickyKeys Control</title> 2625e9fcaa8aSmrg 2626e9fcaa8aSmrg<para> 2627e9fcaa8aSmrgSome people find it difficult or even impossible to press two keys at once. For 2628e9fcaa8aSmrgexample, a one-fingered typist or someone using a mouth stick cannot press the 26290f8248bfSmrg<keycap>Shift</keycap> 26300f8248bfSmrgand 26310f8248bfSmrg<keycap>1</keycap> 26320f8248bfSmrgkeys at the same time. The 26330f8248bfSmrg<emphasis>StickyKeys</emphasis> 26340f8248bfSmrgcontrol solves this problem by changing the behavior of the modifier keys. 26350f8248bfSmrgWith 26360f8248bfSmrg<emphasis>StickyKeys</emphasis>, 26370f8248bfSmrgthe user can first press a modifier, release it, then press another key. For 2638e9fcaa8aSmrgexample, to get an exclamation point on a PC-style keyboard, the user can press 26390f8248bfSmrgthe 26400f8248bfSmrg<keycap>Shift</keycap> 26410f8248bfSmrgkey, release it, and then press the 26420f8248bfSmrg<keycap>1</keycap> 26430f8248bfSmrgkey. 2644e9fcaa8aSmrg</para> 2645e9fcaa8aSmrg 2646e9fcaa8aSmrg 2647e9fcaa8aSmrg<para> 26480f8248bfSmrg<emphasis>StickyKeys</emphasis> 26490f8248bfSmrgalso allows users to lock modifier keys without requiring special locking 26500f8248bfSmrgkeys. When 26510f8248bfSmrg<emphasis>StickyKeys</emphasis> 26520f8248bfSmrgis enabled, a modifier is latched when the user presses it just once. The user 2653e9fcaa8aSmrgcan press a modifier twice in a row to lock it, and then unlock it by pressing 2654e9fcaa8aSmrgit one more time. 2655e9fcaa8aSmrg</para> 2656e9fcaa8aSmrg 2657e9fcaa8aSmrg 2658e9fcaa8aSmrg<para> 2659e9fcaa8aSmrgWhen a modifier is latched, it becomes unlatched when the user presses a 2660e9fcaa8aSmrgnonmodifier key or a pointer button. For instance, to enter the sequence 26610f8248bfSmrg<keycombo> 26620f8248bfSmrg<keycap>Shift</keycap> 26630f8248bfSmrg<keycap>Control</keycap> 26640f8248bfSmrg<keycap>Z</keycap> 26650f8248bfSmrg</keycombo> 26660f8248bfSmrgthe user could press and release the 26670f8248bfSmrg<keycap>Shift</keycap> 26680f8248bfSmrgkey to latch it, then press and release the 26690f8248bfSmrg<keycap>Control</keycap> 26700f8248bfSmrgkey to latch it, and finally press and release the 26710f8248bfSmrg<keycap>Z</keycap> key. Because the 26720f8248bfSmrg<keycap>Control</keycap> 26730f8248bfSmrgkey is a modifier key, pressing it does not unlatch the 26740f8248bfSmrg<keycap>Shift</keycap> 26750f8248bfSmrgkey. Thus, after the user presses the 26760f8248bfSmrg<keycap>Control</keycap> 26770f8248bfSmrgkey, both the 26780f8248bfSmrg<symbol>Shift</symbol> 26790f8248bfSmrgand 26800f8248bfSmrg<symbol>Control</symbol> 26810f8248bfSmrgmodifiers are latched. When the user presses the 26820f8248bfSmrg<keycap>Z</keycap> 26830f8248bfSmrgkey, the effect is as though the user had pressed 26840f8248bfSmrg<keycombo> 26850f8248bfSmrg<keycap>Shift</keycap> 26860f8248bfSmrg<keycap>Control</keycap> 26870f8248bfSmrg<keycap>Z</keycap> 26880f8248bfSmrg</keycombo>. 26890f8248bfSmrgIn addition, because the 26900f8248bfSmrg<keycap>Z</keycap> 26910f8248bfSmrgkey is not a modifier key, the 26920f8248bfSmrg<symbol>Shift</symbol> 26930f8248bfSmrgand 26940f8248bfSmrg<symbol>Control</symbol> 26950f8248bfSmrgmodifiers are unlatched. 2696e9fcaa8aSmrg</para> 2697e9fcaa8aSmrg 2698e9fcaa8aSmrg 2699e9fcaa8aSmrg<para> 2700e9fcaa8aSmrgLocking a modifier key means that the modifier affects any key or pointer 2701e9fcaa8aSmrgbutton the user presses until the user unlocks it or it is unlocked 2702e9fcaa8aSmrgprogrammatically. For example, to enter the sequence ("XKB") on a keyboard 2703e9fcaa8aSmrgwhere ‘(’ is a shifted ‘9’, ‘)’ is a shifted ‘0’, and ‘"’ 27040f8248bfSmrgis a shifted single quote, the user could press and release the 27050f8248bfSmrg<keycap>Shift</keycap> 27060f8248bfSmrgkey twice to lock the 27070f8248bfSmrg<symbol>Shift</symbol> 27080f8248bfSmrgmodifier. Then, when the user presses the 27090f8248bfSmrg<keycap>9</keycap>, 27100f8248bfSmrg<keycap>'</keycap>, 27110f8248bfSmrg<keycap>x</keycap>, 27120f8248bfSmrg<keycap>k</keycap>, 27130f8248bfSmrg<keycap>b</keycap>, 27140f8248bfSmrg<keycap>'</keycap>, 27150f8248bfSmrgand 27160f8248bfSmrg<keycap>0</keycap> 27170f8248bfSmrgkeys in sequence, it generates ("XKB"). To unlock the 27180f8248bfSmrg<symbol>Shift</symbol> 27190f8248bfSmrgmodifier, the user can press and release the 27200f8248bfSmrg<keycap>Shift</keycap> 27210f8248bfSmrgkey. 2722e9fcaa8aSmrg</para> 2723e9fcaa8aSmrg 2724e9fcaa8aSmrg 2725e9fcaa8aSmrg<para> 2726e9fcaa8aSmrg<emphasis>StickyKeys</emphasis> 27270f8248bfSmrgis a boolean control with two separate attributes that may be individually 2728e9fcaa8aSmrgconfigured: one to automatically disable it, and one to control the latching 2729e9fcaa8aSmrgbehavior of modifier keys. 2730e9fcaa8aSmrg</para> 2731e9fcaa8aSmrg 2732eb411b4bSmrg<sect3 id='StickyKeys_Options'> 2733e9fcaa8aSmrg<title>StickyKeys Options</title> 2734e9fcaa8aSmrg 2735e9fcaa8aSmrg<para> 27360f8248bfSmrgThe 27370f8248bfSmrg<emphasis>StickyKeys</emphasis> 27380f8248bfSmrgcontrol has two options that can be accessed via the 27390f8248bfSmrg<structfield>ax_options</structfield> 27400f8248bfSmrgof an 27410f8248bfSmrg<structname>XkbControlsRec</structname> 27420f8248bfSmrgstructure (see <link linkend="The_XkbControlsRec_Structure">section 10.8</link>). The first option, 27430f8248bfSmrg<emphasis>TwoKeys</emphasis>, 27440f8248bfSmrgspecifies whether 27450f8248bfSmrg<emphasis>StickyKeys</emphasis> 27460f8248bfSmrgshould automatically turn off when two keys are pressed at the same time. This 2747e9fcaa8aSmrgfeature is useful for shared computers so people who do not want them do not 27480f8248bfSmrgneed to turn 27490f8248bfSmrg<emphasis>StickyKeys</emphasis> 27500f8248bfSmrgoff if a previous user left 27510f8248bfSmrg<emphasis>StickyKeys</emphasis> 27520f8248bfSmrgon. The second option, 27530f8248bfSmrg<emphasis>LatchToLock</emphasis>, 27540f8248bfSmrgspecifies whether or not 27550f8248bfSmrg<emphasis>StickyKeys</emphasis> 27560f8248bfSmrglocks a modifier when pressed twice in a row. 2757e9fcaa8aSmrg</para> 2758e9fcaa8aSmrg 2759e9fcaa8aSmrg 2760e9fcaa8aSmrg<para> 27610f8248bfSmrgUse 27620f8248bfSmrg<function>XkbGetStickyKeysOptions</function> 27630f8248bfSmrgto query the current 27640f8248bfSmrg<emphasis>StickyKeys</emphasis> 27650f8248bfSmrgattributes for a keyboard device. 27660f8248bfSmrg</para> 27670f8248bfSmrg 27680f8248bfSmrg<indexterm significance="preferred" zone="XkbGetStickyKeysOptions"><primary><function>XkbGetStickyKeysOptions</function></primary></indexterm> 27690f8248bfSmrg<funcsynopsis id="XkbGetStickyKeysOptions"> 27700f8248bfSmrg <funcprototype> 27710f8248bfSmrg <funcdef>Bool <function>XkbGetStickyKeysOptions</function></funcdef> 27720f8248bfSmrg<!-- ( 27730f8248bfSmrg<parameter>display</parameter>, 27740f8248bfSmrg<parameter>device_spec</parameter>, 27750f8248bfSmrg<parameter>options_rtrn</parameter> 27760f8248bfSmrg) --> 27770f8248bfSmrg 27780f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 27790f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 27800f8248bfSmrg <paramdef>unsigned int *<parameter>options_rtrn</parameter></paramdef> 27810f8248bfSmrg </funcprototype> 27820f8248bfSmrg</funcsynopsis> 27830f8248bfSmrg<variablelist> 27840f8248bfSmrg <varlistentry> 27850f8248bfSmrg <term> 27860f8248bfSmrg <parameter>display</parameter> 27870f8248bfSmrg </term> 27880f8248bfSmrg <listitem> 27890f8248bfSmrg <para> 27900f8248bfSmrg connection to X server 27910f8248bfSmrg </para> 27920f8248bfSmrg </listitem> 27930f8248bfSmrg </varlistentry> 27940f8248bfSmrg <varlistentry> 27950f8248bfSmrg <term> 27960f8248bfSmrg <parameter>device_spec</parameter> 27970f8248bfSmrg </term> 27980f8248bfSmrg <listitem> 27990f8248bfSmrg <para> 28000f8248bfSmrg device ID, or <symbol>XkbUseCoreKbd</symbol> 28010f8248bfSmrg </para> 28020f8248bfSmrg </listitem> 28030f8248bfSmrg </varlistentry> 28040f8248bfSmrg <varlistentry> 28050f8248bfSmrg <term> 28060f8248bfSmrg <parameter>options_rtrn</parameter> 28070f8248bfSmrg </term> 28080f8248bfSmrg <listitem> 28090f8248bfSmrg <para> 28100f8248bfSmrg backfilled with StickyKeys option mask 28110f8248bfSmrg </para> 28120f8248bfSmrg </listitem> 28130f8248bfSmrg </varlistentry> 28140f8248bfSmrg</variablelist> 28150f8248bfSmrg 28160f8248bfSmrg<para> 28170f8248bfSmrg<function>XkbGetStickyKeysOptions</function> 28180f8248bfSmrgrequests the attributes of the 28190f8248bfSmrg<emphasis>StickyKeys</emphasis> 28200f8248bfSmrgcontrol from the server, waits for a reply, and backfills 28210f8248bfSmrg<parameter>options_rtrn</parameter> 28220f8248bfSmrgwith a mask indicating whether the individual 28230f8248bfSmrg<emphasis>StickyKeys</emphasis> 28240f8248bfSmrgoptions are on or off. Valid bits in 28250f8248bfSmrg<parameter>options_rtrn</parameter> 28260f8248bfSmrgare: 2827e9fcaa8aSmrg 28280f8248bfSmrg <simplelist type='vert' columns='1'> 28290f8248bfSmrg <member><symbol>XkbAX_TwoKeysMask</symbol></member> 28300f8248bfSmrg <member><symbol>XkbAX_LatchToLockMask</symbol></member> 28310f8248bfSmrg </simplelist> 2832e9fcaa8aSmrg</para> 2833e9fcaa8aSmrg 2834e9fcaa8aSmrg<para> 28350f8248bfSmrg<function>XkbGetStickyKeysOptions</function> 28360f8248bfSmrgreturns 28370f8248bfSmrg<symbol>True</symbol> 28380f8248bfSmrgif successful; if a compatible version of the Xkb extension is not available 28390f8248bfSmrgin the server 28400f8248bfSmrg<function>XkbGetStickyKeysOptions</function> 28410f8248bfSmrgreturns 28420f8248bfSmrg<symbol>False</symbol>. 2843e9fcaa8aSmrg</para> 2844e9fcaa8aSmrg 2845e9fcaa8aSmrg 2846e9fcaa8aSmrg<para> 28470f8248bfSmrgTo set the 28480f8248bfSmrg<emphasis>StickyKeys</emphasis> 28490f8248bfSmrgattributes for a keyboard device, use 28500f8248bfSmrg<function>XkbSetStickyKeysOptions</function>. 28510f8248bfSmrg</para> 28520f8248bfSmrg 28530f8248bfSmrg 28540f8248bfSmrg<indexterm significance="preferred" zone="XkbSetStickyKeysOptions"><primary><function>XkbSetStickyKeysOptions</function></primary></indexterm> 28550f8248bfSmrg<funcsynopsis id="XkbSetStickyKeysOptions"> 28560f8248bfSmrg <funcprototype> 28570f8248bfSmrg <funcdef>Bool <function>XkbSetStickyKeysOptions</function></funcdef> 28580f8248bfSmrg<!-- ( 28590f8248bfSmrg<parameter>display</parameter>, 28600f8248bfSmrg<parameter>device_spec, mask, values</parameter> 28610f8248bfSmrg) --> 28620f8248bfSmrg 28630f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 28640f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 28650f8248bfSmrg <paramdef>unsigned int <parameter>mask</parameter></paramdef> 28660f8248bfSmrg <paramdef>unsigned int <parameter>values</parameter></paramdef> 28670f8248bfSmrg </funcprototype> 28680f8248bfSmrg</funcsynopsis> 28690f8248bfSmrg<variablelist> 28700f8248bfSmrg <varlistentry> 28710f8248bfSmrg <term> 28720f8248bfSmrg <parameter>display</parameter> 28730f8248bfSmrg </term> 28740f8248bfSmrg <listitem> 28750f8248bfSmrg <para> 28760f8248bfSmrg connection to X server 28770f8248bfSmrg </para> 28780f8248bfSmrg </listitem> 28790f8248bfSmrg </varlistentry> 28800f8248bfSmrg <varlistentry> 28810f8248bfSmrg <term> 28820f8248bfSmrg <parameter>device_spec</parameter> 28830f8248bfSmrg </term> 28840f8248bfSmrg <listitem> 28850f8248bfSmrg <para> 28860f8248bfSmrg device to configure, or XkbUseCoreKbd 28870f8248bfSmrg </para> 28880f8248bfSmrg </listitem> 28890f8248bfSmrg </varlistentry> 28900f8248bfSmrg <varlistentry> 28910f8248bfSmrg <term> 28920f8248bfSmrg <parameter>mask</parameter> 28930f8248bfSmrg </term> 28940f8248bfSmrg <listitem> 28950f8248bfSmrg <para> 28960f8248bfSmrg selects StickyKeys attributes to modify 28970f8248bfSmrg </para> 28980f8248bfSmrg </listitem> 28990f8248bfSmrg </varlistentry> 29000f8248bfSmrg <varlistentry> 29010f8248bfSmrg <term> 29020f8248bfSmrg <parameter>values</parameter> 29030f8248bfSmrg </term> 29040f8248bfSmrg <listitem> 29050f8248bfSmrg <para> 29060f8248bfSmrg values for selected attributes 29070f8248bfSmrg </para> 29080f8248bfSmrg </listitem> 29090f8248bfSmrg </varlistentry> 29100f8248bfSmrg</variablelist> 29110f8248bfSmrg 29120f8248bfSmrg<para> 29130f8248bfSmrg<function>XkbSetStickyKeysOptions</function> 29140f8248bfSmrgsends a request to configure the 29150f8248bfSmrg<emphasis>StickyKeys</emphasis> 29160f8248bfSmrgcontrol to the server. 29170f8248bfSmrgIt does not wait for a reply and normally returns 29180f8248bfSmrg<symbol>True</symbol>. 29190f8248bfSmrgThe valid bits to use for both the 29200f8248bfSmrg<parameter>mask</parameter> 29210f8248bfSmrgand 29220f8248bfSmrg<parameter>values</parameter> 29230f8248bfSmrgparameters are: 2924e9fcaa8aSmrg 29250f8248bfSmrg <simplelist type='vert' columns='1'> 29260f8248bfSmrg <member><symbol>XkbAX_TwoKeysMask</symbol></member> 29270f8248bfSmrg <member><symbol>XkbAX_LatchToLockMask</symbol></member> 29280f8248bfSmrg </simplelist> 2929e9fcaa8aSmrg</para> 2930e9fcaa8aSmrg 2931e9fcaa8aSmrg<para> 29320f8248bfSmrgIf a compatible version of the Xkb extension is not available in the server, 29330f8248bfSmrg<function>XkbSetStickyKeysOptions</function> 29340f8248bfSmrgreturns 29350f8248bfSmrg<symbol>False</symbol>. 2936e9fcaa8aSmrg</para> 2937e9fcaa8aSmrg 2938e9fcaa8aSmrg</sect3> 2939e9fcaa8aSmrg</sect2> 2940e9fcaa8aSmrg</sect1> 2941eb411b4bSmrg<sect1 id='Controls_for_General_Keyboard_Mapping'> 2942e9fcaa8aSmrg<title>Controls for General Keyboard Mapping</title> 2943e9fcaa8aSmrg 2944e9fcaa8aSmrg<para> 2945e9fcaa8aSmrgThere are several controls that apply to the keyboard mapping in general. They 2946e9fcaa8aSmrgcontrol handling of out-of-range group indices and how modifiers are processed 2947e9fcaa8aSmrgand consumed in the server. These are: 2948e9fcaa8aSmrg 29490f8248bfSmrg <simplelist type='vert' columns='1'> 29500f8248bfSmrg <member><emphasis>GroupsWrap</emphasis></member> 29510f8248bfSmrg <member><emphasis>IgnoreGroupLock</emphasis></member> 29520f8248bfSmrg <member><emphasis>IgnoreLockMods</emphasis></member> 29530f8248bfSmrg <member><emphasis>InternalMods</emphasis></member> 29540f8248bfSmrg </simplelist> 2955e9fcaa8aSmrg</para> 2956e9fcaa8aSmrg 2957e9fcaa8aSmrg<para> 29580f8248bfSmrg<emphasis>IgnoreGroupLock</emphasis> 29590f8248bfSmrgis a boolean control; the rest are always active. 2960e9fcaa8aSmrg</para> 2961e9fcaa8aSmrg 2962e9fcaa8aSmrg 2963e9fcaa8aSmrg<para> 2964e9fcaa8aSmrgWithout the modifier processing options provided by Xkb, passive grabs set via 29650f8248bfSmrgtranslations in a client (for example, 29660f8248bfSmrg<emphasis>Alt<KeyPress>space</emphasis>) 29670f8248bfSmrgdo not trigger if any modifiers other than those specified by the translation 29680f8248bfSmrgare set. This results in problems in the user interface when either 29690f8248bfSmrg<emphasis>NumLock</emphasis> 29700f8248bfSmrgor a secondary keyboard group is active. The 29710f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 29720f8248bfSmrgand 29730f8248bfSmrg<emphasis>IgnoreGroupLock</emphasis> 29740f8248bfSmrgcontrols make it possible to avoid this behavior without exhaustively 2975e9fcaa8aSmrgspecifying a grab for every possible modifier combination. 2976e9fcaa8aSmrg</para> 2977e9fcaa8aSmrg 2978eb411b4bSmrg<sect2 id='The_GroupsWrap_Control'> 2979e9fcaa8aSmrg<title>The GroupsWrap Control</title> 2980e9fcaa8aSmrg 2981e9fcaa8aSmrg<para> 29820f8248bfSmrgThe 29830f8248bfSmrg<emphasis>GroupsWrap</emphasis> 29840f8248bfSmrgcontrol determines how illegal groups are handled on a global basis. There are 2985e9fcaa8aSmrga number of valid keyboard sequences that can cause the effective group number 2986e9fcaa8aSmrgto go out of range. When this happens, the group must be normalized back to a 29870f8248bfSmrgvalid number. The 29880f8248bfSmrg<emphasis>GroupsWrap</emphasis> 29890f8248bfSmrgcontrol specifies how this is done. 2990e9fcaa8aSmrg</para> 2991e9fcaa8aSmrg 2992e9fcaa8aSmrg 2993e9fcaa8aSmrg<para> 2994e9fcaa8aSmrgWhen dealing with group numbers, all computations are done using the group 2995e9fcaa8aSmrgindex, which is the group number minus one. There are three different 29960f8248bfSmrgalgorithms; the 29970f8248bfSmrg<emphasis>GroupsWrap</emphasis> 29980f8248bfSmrgcontrol specifies which one is used: 2999e9fcaa8aSmrg</para> 3000e9fcaa8aSmrg 3001e9fcaa8aSmrg<itemizedlist> 3002e9fcaa8aSmrg<listitem> 3003e9fcaa8aSmrg <para>XkbRedirectIntoRange</para> 3004e9fcaa8aSmrg <para> 3005e9fcaa8aSmrgAll invalid group numbers are converted to a valid group number by taking the 30060f8248bfSmrglast four bits of the 30070f8248bfSmrg<emphasis>GroupsWrap</emphasis> 30080f8248bfSmrgcontrol and using them as the group index. If the result is still out of 3009e9fcaa8aSmrgrange, Group one is used. 3010e9fcaa8aSmrg </para> 3011e9fcaa8aSmrg</listitem> 3012e9fcaa8aSmrg<listitem> 3013e9fcaa8aSmrg <para> 3014e9fcaa8aSmrgXkbClampIntoRange 3015e9fcaa8aSmrg </para> 3016e9fcaa8aSmrg <para> 3017e9fcaa8aSmrgAll invalid group numbers are converted to the nearest valid group number. 3018e9fcaa8aSmrgGroup numbers larger than the highest supported group number are mapped to the 3019e9fcaa8aSmrghighest supported group; those less than one are mapped to group one. 3020e9fcaa8aSmrg </para> 3021e9fcaa8aSmrg</listitem> 3022e9fcaa8aSmrg<listitem> 3023e9fcaa8aSmrg <para>XkbWrapIntoRange</para> 3024e9fcaa8aSmrg <para> 3025e9fcaa8aSmrgAll invalid group numbers are converted to a valid group number using integer 3026e9fcaa8aSmrgmodulus applied to the group index. 3027e9fcaa8aSmrg </para> 3028e9fcaa8aSmrg</listitem> 3029e9fcaa8aSmrg</itemizedlist> 3030e9fcaa8aSmrg 3031e9fcaa8aSmrg<para> 30320f8248bfSmrgThere are no convenience functions for manipulating the 30330f8248bfSmrg<emphasis>GroupsWrap</emphasis> 30340f8248bfSmrgcontrol. Manipulate the 30350f8248bfSmrg<emphasis>GroupsWrap</emphasis> 30360f8248bfSmrgcontrol via the 30370f8248bfSmrg<structfield>groups_wrap</structfield> 30380f8248bfSmrgfield in the 30390f8248bfSmrg<structname>XkbControlsRec</structname> 30400f8248bfSmrgstructure, then use 30410f8248bfSmrg<function>XkbSetControls</function> 30420f8248bfSmrgand 30430f8248bfSmrg<function>XkbGetControls</function> 30440f8248bfSmrg(see <link linkend="Querying_Controls">section 10.9</link> and <link linkend="Changing_Controls">section 10.10</link>) to query and change this control. 3045e9fcaa8aSmrg</para> 3046e9fcaa8aSmrg 30470f8248bfSmrg<note><para>See also <link linkend="Per_Key_Group_Information">section 15.3.2</link> or a discussion of the related field, 30480f8248bfSmrg<structfield>group_info</structfield>, 30490f8248bfSmrgwhich also normalizes a group under certain circumstances.</para></note> 3050e9fcaa8aSmrg 3051e9fcaa8aSmrg</sect2> 3052eb411b4bSmrg<sect2 id='The_IgnoreLockMods_Control'> 3053e9fcaa8aSmrg<title>The IgnoreLockMods Control</title> 3054e9fcaa8aSmrg 3055e9fcaa8aSmrg<para> 3056e9fcaa8aSmrgThe core protocol does not provide a way to exclude specific modifiers from 3057e9fcaa8aSmrggrab calculations, with the result that locking modifiers sometimes have 3058e9fcaa8aSmrgunanticipated side effects. 3059e9fcaa8aSmrg</para> 3060e9fcaa8aSmrg 3061e9fcaa8aSmrg 3062e9fcaa8aSmrg<para> 30630f8248bfSmrgThe 30640f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 30650f8248bfSmrgcontrol specifies modifiers that should be excluded from grab calculations. 30660f8248bfSmrgThese modifiers are also not reported in any core events except 30670f8248bfSmrg<symbol>KeyPress</symbol> 30680f8248bfSmrgand 30690f8248bfSmrg<symbol>KeyRelease</symbol> 30700f8248bfSmrgevents that do not activate a passive grab and that do not occur while a grab 3071e9fcaa8aSmrgis active. 3072e9fcaa8aSmrg</para> 3073e9fcaa8aSmrg 3074e9fcaa8aSmrg 3075e9fcaa8aSmrg<para> 30760f8248bfSmrgManipulate the 30770f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 30780f8248bfSmrgcontrol via the 30790f8248bfSmrg<structfield>ignore_lock</structfield> 30800f8248bfSmrgfield in the 30810f8248bfSmrg<structname>XkbControlsRec</structname> 30820f8248bfSmrgstructure, then use 30830f8248bfSmrg<function>XkbSetControls</function> 30840f8248bfSmrgand 30850f8248bfSmrg<function>XkbGetControls</function> 30860f8248bfSmrg(see <link linkend="Querying_Controls">section 10.9</link> and <link linkend="Changing_Controls">section 10.10</link>) to query and change this control. Alternatively, 30870f8248bfSmrguse 30880f8248bfSmrg<function>XkbSetIgnoreLockMods</function>. 3089e9fcaa8aSmrg</para> 3090e9fcaa8aSmrg 30910f8248bfSmrg 30920f8248bfSmrg<para> 30930f8248bfSmrgTo set the modifiers that, if locked, are not to be reported in matching events 30940f8248bfSmrgto passive grabs, use 30950f8248bfSmrg<function>XkbSetIgnoreLockMods</function>. 30960f8248bfSmrg</para> 30970f8248bfSmrg 30980f8248bfSmrg<indexterm significance="preferred" zone="XkbSetIgnoreLockMods"><primary><function>XkbSetIgnoreLockMods</function></primary></indexterm> 30990f8248bfSmrg<funcsynopsis id="XkbSetIgnoreLockMods"> 31000f8248bfSmrg <funcprototype> 31010f8248bfSmrg <funcdef>Bool <function>XkbSetIgnoreLockMods</function></funcdef> 31020f8248bfSmrg<!-- ( 31030f8248bfSmrg<parameter>display, device_spec, affect_real, real_values, affect_virtual, 31040f8248bfSmrgvirtual_values</parameter> 31050f8248bfSmrg) --> 31060f8248bfSmrg 31070f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 31080f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 31090f8248bfSmrg <paramdef>unsigned int <parameter>affect_real</parameter></paramdef> 31100f8248bfSmrg <paramdef>unsigned int <parameter>real_values</parameter></paramdef> 31110f8248bfSmrg <paramdef>unsigned int <parameter>affect_virtual</parameter></paramdef> 31120f8248bfSmrg <paramdef>unsigned int <parameter>virtual_values</parameter></paramdef> 31130f8248bfSmrg </funcprototype> 31140f8248bfSmrg</funcsynopsis> 31150f8248bfSmrg<variablelist> 31160f8248bfSmrg <varlistentry> 31170f8248bfSmrg <term> 31180f8248bfSmrg <parameter>display</parameter> 31190f8248bfSmrg </term> 31200f8248bfSmrg <listitem> 31210f8248bfSmrg <para> 31220f8248bfSmrg connection to the X server 31230f8248bfSmrg </para> 31240f8248bfSmrg </listitem> 31250f8248bfSmrg </varlistentry> 31260f8248bfSmrg <varlistentry> 31270f8248bfSmrg <term> 31280f8248bfSmrg <parameter>device_spec</parameter> 31290f8248bfSmrg </term> 31300f8248bfSmrg <listitem> 31310f8248bfSmrg <para> 31320f8248bfSmrg device ID, or <symbol>XkbUseCoreKbd</symbol> 31330f8248bfSmrg </para> 31340f8248bfSmrg </listitem> 31350f8248bfSmrg </varlistentry> 31360f8248bfSmrg <varlistentry> 31370f8248bfSmrg <term> 31380f8248bfSmrg <parameter>affect_real</parameter> 31390f8248bfSmrg </term> 31400f8248bfSmrg <listitem> 31410f8248bfSmrg <para> 31420f8248bfSmrg mask of real modifiers affected by this call 31430f8248bfSmrg </para> 31440f8248bfSmrg </listitem> 31450f8248bfSmrg </varlistentry> 31460f8248bfSmrg <varlistentry> 31470f8248bfSmrg <term> 31480f8248bfSmrg <parameter>real_values</parameter> 31490f8248bfSmrg </term> 31500f8248bfSmrg <listitem> 31510f8248bfSmrg <para> 31520f8248bfSmrg values for affected real modifiers (1⇒set, 0⇒unset) 31530f8248bfSmrg </para> 31540f8248bfSmrg </listitem> 31550f8248bfSmrg </varlistentry> 31560f8248bfSmrg <varlistentry> 31570f8248bfSmrg <term> 31580f8248bfSmrg <parameter>affect_virtual</parameter> 31590f8248bfSmrg </term> 31600f8248bfSmrg <listitem> 31610f8248bfSmrg <para> 31620f8248bfSmrg mask of virtual modifiers affected by this call 31630f8248bfSmrg </para> 31640f8248bfSmrg </listitem> 31650f8248bfSmrg </varlistentry> 31660f8248bfSmrg <varlistentry> 31670f8248bfSmrg <term> 31680f8248bfSmrg <parameter>virtual_values</parameter> 31690f8248bfSmrg </term> 31700f8248bfSmrg <listitem> 31710f8248bfSmrg <para> 31720f8248bfSmrg values for affected virtual modifiers (1⇒set, 0⇒unset) 31730f8248bfSmrg </para> 31740f8248bfSmrg </listitem> 31750f8248bfSmrg </varlistentry> 31760f8248bfSmrg</variablelist> 31770f8248bfSmrg 31780f8248bfSmrg<para> 31790f8248bfSmrg<function>XkbSetIgnoreLockMods</function> 31800f8248bfSmrgsends a request to the server to change the server’s 31810f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 31820f8248bfSmrgcontrol. 31830f8248bfSmrg<parameter>affect_real</parameter> 31840f8248bfSmrgand 31850f8248bfSmrg<parameter>real_values</parameter> 31860f8248bfSmrgare masks of real modifier bits indicating which real modifiers are to be 31870f8248bfSmrgadded and removed from the server’s 31880f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 31890f8248bfSmrgcontrol. Modifiers selected by both 31900f8248bfSmrg<parameter>affect_real</parameter> 31910f8248bfSmrgand 31920f8248bfSmrg<parameter>real_values</parameter> 31930f8248bfSmrgare added to the server’s 31940f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 31950f8248bfSmrgcontrol; those selected by 31960f8248bfSmrg<parameter>affect_real</parameter> 31970f8248bfSmrgbut not by 31980f8248bfSmrg<parameter>real_values</parameter> 31990f8248bfSmrgare removed from the server’s 32000f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 32010f8248bfSmrgcontrol. Valid values for 32020f8248bfSmrg<parameter>affect_real</parameter> 32030f8248bfSmrgand 32040f8248bfSmrg<parameter>real_values</parameter> 32050f8248bfSmrgconsist of any combination of the eight core modifier bits: 32060f8248bfSmrg<symbol>ShiftMask</symbol>, 32070f8248bfSmrg<symbol>LockMask</symbol>, 32080f8248bfSmrg<symbol>ControlMask</symbol>, 32090f8248bfSmrg<symbol>Mod1Mask</symbol> 32100f8248bfSmrg– 32110f8248bfSmrg<symbol>Mod5Mask</symbol>. 32120f8248bfSmrg<parameter>affect_virtual</parameter> 32130f8248bfSmrgand 32140f8248bfSmrg<parameter>virtual_values</parameter> 32150f8248bfSmrgare masks of virtual modifier bits indicating which virtual modifiers are to 32160f8248bfSmrgbe added and removed from the server’s 32170f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 32180f8248bfSmrgcontrol. Modifiers selected by both 32190f8248bfSmrg<parameter>affect_virtual</parameter> 32200f8248bfSmrgand 32210f8248bfSmrg<parameter>virtual_values</parameter> 32220f8248bfSmrgare added to the server’s 32230f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 32240f8248bfSmrgcontrol; those selected by 32250f8248bfSmrg<parameter>affect_virtual</parameter> 32260f8248bfSmrgbut not by 32270f8248bfSmrg<parameter>virtual_values</parameter> 32280f8248bfSmrgare removed from the server’s 32290f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 32300f8248bfSmrgcontrol. 32310f8248bfSmrgSee <link linkend="Virtual_Modifier_Names_and_Masks">section 7.1</link> for a discussion of virtual modifier masks to use in 32320f8248bfSmrg<parameter>affect_virtual</parameter> 32330f8248bfSmrgand 32340f8248bfSmrg<parameter>virtual_values</parameter>. 32350f8248bfSmrg<function>XkbSetIgnoreLockMods</function> 32360f8248bfSmrgdoes not wait for a reply from the server. It returns 32370f8248bfSmrg<symbol>True</symbol> 32380f8248bfSmrgif the request was sent, and 32390f8248bfSmrg<symbol>False</symbol> 32400f8248bfSmrgotherwise. 3241e9fcaa8aSmrg</para> 3242e9fcaa8aSmrg 3243e9fcaa8aSmrg</sect2> 3244eb411b4bSmrg<sect2 id='The_IgnoreGroupLock_Control'> 3245e9fcaa8aSmrg<title>The IgnoreGroupLock Control</title> 3246e9fcaa8aSmrg 3247e9fcaa8aSmrg<para> 32480f8248bfSmrgThe 32490f8248bfSmrg<emphasis>IgnoreGroupLock</emphasis> 32500f8248bfSmrgcontrol is a boolean control with no attributes. If enabled, it specifies that 3251e9fcaa8aSmrgthe locked state of the keyboard group should not be considered when activating 3252e9fcaa8aSmrgpassive grabs. 3253e9fcaa8aSmrg</para> 3254e9fcaa8aSmrg 3255e9fcaa8aSmrg<para> 32560f8248bfSmrgBecause 32570f8248bfSmrg<emphasis>IgnoreGroupLock</emphasis> 32580f8248bfSmrgis a boolean control with no attributes, use the general boolean controls 32590f8248bfSmrgfunctions (see <link linkend="Controls_that_Enable_and_Disable_Other_Controls">section 10.1</link>) to change its state. 3260e9fcaa8aSmrg</para> 3261e9fcaa8aSmrg 3262e9fcaa8aSmrg 3263e9fcaa8aSmrg</sect2> 3264eb411b4bSmrg<sect2 id='The_InternalMods_Control'> 3265e9fcaa8aSmrg<title>The InternalMods Control</title> 3266e9fcaa8aSmrg 3267e9fcaa8aSmrg<para> 3268e9fcaa8aSmrgThe core protocol does not provide any means to prevent a modifier from being 3269e9fcaa8aSmrgreported in events sent to clients; Xkb, however makes this possible via the 32700f8248bfSmrg<emphasis>InternalMods</emphasis> 32710f8248bfSmrgcontrol. It specifies modifiers that should be consumed by the server and not 3272e9fcaa8aSmrgreported to clients. When a key is pressed and a modifier that has its bit set 32730f8248bfSmrgin the 32740f8248bfSmrg<emphasis>InternalMods</emphasis> 32750f8248bfSmrgcontrol is reported to the server, the server uses the modifier when 3276e9fcaa8aSmrgdetermining the actions to apply for the key. The server then clears the bit, 3277e9fcaa8aSmrgso it is not actually reported to the client. In addition, modifiers specified 32780f8248bfSmrgin the 32790f8248bfSmrg<emphasis>InternalMods</emphasis> 32800f8248bfSmrgcontrol are not used to determine grabs and are not used to calculate core 3281e9fcaa8aSmrgprotocol compatibility state. 3282e9fcaa8aSmrg</para> 3283e9fcaa8aSmrg 3284e9fcaa8aSmrg 3285e9fcaa8aSmrg<para> 32860f8248bfSmrgManipulate the 32870f8248bfSmrg<emphasis>InternalMods</emphasis> 32880f8248bfSmrgcontrol via the 32890f8248bfSmrg<structfield>internal</structfield> 32900f8248bfSmrgfield in the 32910f8248bfSmrg<structname>XkbControlsRec</structname> 32920f8248bfSmrgstructure, using 32930f8248bfSmrg<function>XkbSetControls</function> 32940f8248bfSmrgand 32950f8248bfSmrg<function>XkbGetControls</function> 32960f8248bfSmrg(see <link linkend="Querying_Controls">section 10.9</link> 32970f8248bfSmrgand <link linkend="Changing_Controls">section 10.10</link>). Alternatively, use 32980f8248bfSmrg<function>XkbSetServerInternalMods</function>. 3299e9fcaa8aSmrg</para> 3300e9fcaa8aSmrg 3301e9fcaa8aSmrg 3302e9fcaa8aSmrg<para> 3303e9fcaa8aSmrgTo set the modifiers that are consumed by the server before events are 33040f8248bfSmrgdelivered to the client, use 33050f8248bfSmrg<function>XkbSetServerInternalMods</function>. 33060f8248bfSmrg</para> 33070f8248bfSmrg 33080f8248bfSmrg<indexterm significance="preferred" zone="XkbSetServerInternalMods"><primary><function>XkbSetServerInternalMods</function></primary></indexterm> 33090f8248bfSmrg<funcsynopsis id="XkbSetServerInternalMods"> 33100f8248bfSmrg <funcprototype> 33110f8248bfSmrg <funcdef>Bool <function>XkbSetServerInternalMods</function></funcdef> 33120f8248bfSmrg<!-- ( 33130f8248bfSmrg<parameter>display, device_spec, affect_real, real_values, affect_virtual, 33140f8248bfSmrgvirtual_values</parameter> 33150f8248bfSmrg) --> 33160f8248bfSmrg 33170f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 33180f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 33190f8248bfSmrg <paramdef>unsigned int <parameter>affect_real</parameter></paramdef> 33200f8248bfSmrg <paramdef>unsigned int <parameter>real_values</parameter></paramdef> 33210f8248bfSmrg <paramdef>unsigned int <parameter>affect_virtual</parameter></paramdef> 33220f8248bfSmrg <paramdef>unsigned int <parameter>virtual_values</parameter></paramdef> 33230f8248bfSmrg </funcprototype> 33240f8248bfSmrg</funcsynopsis> 33250f8248bfSmrg<variablelist> 33260f8248bfSmrg <varlistentry> 33270f8248bfSmrg <term> 33280f8248bfSmrg <parameter>display</parameter> 33290f8248bfSmrg </term> 33300f8248bfSmrg <listitem> 33310f8248bfSmrg <para> 33320f8248bfSmrg connection to the X server 33330f8248bfSmrg </para> 33340f8248bfSmrg </listitem> 33350f8248bfSmrg </varlistentry> 33360f8248bfSmrg <varlistentry> 33370f8248bfSmrg <term> 33380f8248bfSmrg <parameter>device_spec</parameter> 33390f8248bfSmrg </term> 33400f8248bfSmrg <listitem> 33410f8248bfSmrg <para> 33420f8248bfSmrg ‘device ID, or <symbol>XkbUseCoreKbd</symbol> 33430f8248bfSmrg </para> 33440f8248bfSmrg </listitem> 33450f8248bfSmrg </varlistentry> 33460f8248bfSmrg <varlistentry> 33470f8248bfSmrg <term> 33480f8248bfSmrg <parameter>affect_real</parameter> 33490f8248bfSmrg </term> 33500f8248bfSmrg <listitem> 33510f8248bfSmrg <para> 33520f8248bfSmrg mask of real modifiers affected by this call 33530f8248bfSmrg </para> 33540f8248bfSmrg </listitem> 33550f8248bfSmrg </varlistentry> 33560f8248bfSmrg <varlistentry> 33570f8248bfSmrg <term> 33580f8248bfSmrg <parameter>real_values</parameter> 33590f8248bfSmrg </term> 33600f8248bfSmrg <listitem> 33610f8248bfSmrg <para> 33620f8248bfSmrg values for affected real modifiers (1⇒set, 0⇒unset) 33630f8248bfSmrg </para> 33640f8248bfSmrg </listitem> 33650f8248bfSmrg </varlistentry> 33660f8248bfSmrg <varlistentry> 33670f8248bfSmrg <term> 33680f8248bfSmrg <parameter>affect_virtual</parameter> 33690f8248bfSmrg </term> 33700f8248bfSmrg <listitem> 33710f8248bfSmrg <para> 33720f8248bfSmrg mask of virtual modifiers affected by this call 33730f8248bfSmrg </para> 33740f8248bfSmrg </listitem> 33750f8248bfSmrg </varlistentry> 33760f8248bfSmrg <varlistentry> 33770f8248bfSmrg <term> 33780f8248bfSmrg <parameter>virtual_values</parameter> 33790f8248bfSmrg </term> 33800f8248bfSmrg <listitem> 33810f8248bfSmrg <para> 33820f8248bfSmrg values for affected virtual modifiers (1⇒set, 0⇒unset) 33830f8248bfSmrg </para> 33840f8248bfSmrg </listitem> 33850f8248bfSmrg </varlistentry> 33860f8248bfSmrg</variablelist> 33870f8248bfSmrg 33880f8248bfSmrg<para> 33890f8248bfSmrg<function>XkbSetServerInternalMods</function> 33900f8248bfSmrgsends a request to the server to change the internal modifiers consumed by the 33910f8248bfSmrgserver. 33920f8248bfSmrg<parameter>affect_real</parameter> 33930f8248bfSmrgand 33940f8248bfSmrg<parameter>real_values</parameter> 33950f8248bfSmrgare masks of real modifier bits indicating which real modifiers are to be 3396e9fcaa8aSmrgadded and removed from the server’s internal modifiers control. Modifiers 33970f8248bfSmrgselected by both 33980f8248bfSmrg<parameter>affect_real</parameter> 33990f8248bfSmrgand 34000f8248bfSmrg<parameter>real_values</parameter> 34010f8248bfSmrgare added to the server’s internal modifiers control; those selected by 34020f8248bfSmrg<parameter>affect_real</parameter> 34030f8248bfSmrgbut not by 34040f8248bfSmrg<parameter>real_values</parameter> 34050f8248bfSmrgare removed from the server’s internal modifiers mask. Valid values for 34060f8248bfSmrg<parameter>affect_real</parameter> 34070f8248bfSmrgand 34080f8248bfSmrg<parameter>real_values</parameter> 34090f8248bfSmrgconsist of any combination of the eight core modifier bits: 34100f8248bfSmrg<symbol>ShiftMask</symbol>, 34110f8248bfSmrg<symbol>LockMask</symbol>, 34120f8248bfSmrg<symbol>ControlMask</symbol>, 34130f8248bfSmrg<symbol>Mod1Mask</symbol> 34140f8248bfSmrg– 34150f8248bfSmrg<symbol>Mod5Mask</symbol>. 34160f8248bfSmrg<parameter>affect_virtual</parameter> 34170f8248bfSmrgand 34180f8248bfSmrg<parameter>virtual_values</parameter> 34190f8248bfSmrgare masks of virtual modifier bits indicating which virtual modifiers are to 3420e9fcaa8aSmrgbe added and removed from the server’s internal modifiers control. Modifiers 34210f8248bfSmrgselected by both 34220f8248bfSmrg<parameter>affect_virtual</parameter> 34230f8248bfSmrgand 34240f8248bfSmrg<parameter>virtual_values</parameter> 34250f8248bfSmrgare added to the server’s internal modifiers control; those selected by 34260f8248bfSmrg<parameter>affect_virtual</parameter> 34270f8248bfSmrgbut not by 34280f8248bfSmrg<parameter>virtual_values</parameter> 34290f8248bfSmrgare removed from the server’s internal modifiers control. 34300f8248bfSmrgSee <link linkend="Virtual_Modifier_Names_and_Masks">section 7.1</link> for a discussion of virtual modifier masks to use in 34310f8248bfSmrg<parameter>affect_virtual</parameter> 34320f8248bfSmrgand 34330f8248bfSmrg<parameter>virtual_values</parameter>. 34340f8248bfSmrg<function>XkbSetServerInternalMods</function> 34350f8248bfSmrgdoes not wait for a reply from the server. It returns 34360f8248bfSmrg<symbol>True</symbol> 34370f8248bfSmrgif the request was sent and 34380f8248bfSmrg<symbol>False</symbol> 34390f8248bfSmrgotherwise. 3440e9fcaa8aSmrg</para> 3441e9fcaa8aSmrg 3442e9fcaa8aSmrg 3443e9fcaa8aSmrg</sect2> 3444e9fcaa8aSmrg</sect1> 3445eb411b4bSmrg<sect1 id='The_XkbControlsRec_Structure'> 3446e9fcaa8aSmrg<title>The XkbControlsRec Structure</title> 3447e9fcaa8aSmrg 34480f8248bfSmrg<indexterm significance="preferred" zone="The_XkbControlsRec_Structure"> 34490f8248bfSmrg<primary><structname>XkbControlsRec</structname></primary></indexterm> 34500f8248bfSmrg 3451e9fcaa8aSmrg<para> 3452e9fcaa8aSmrgMany of the individual controls described in sections 10.1 through 10.7 may be 3453e9fcaa8aSmrgmanipulated via convenience functions discussed in those sections. Some of 34540f8248bfSmrgthem, however, have no convenience functions. The 34550f8248bfSmrg<structname>XkbControlsRec</structname> 34560f8248bfSmrgstructure allows the manipulation of one or more of the controls in a single 34570f8248bfSmrgoperation and to track changes to any of them in conjunction with the 34580f8248bfSmrg<function>XkbGetControls</function> 34590f8248bfSmrgand 34600f8248bfSmrg<function>XkbSetControls</function> 34610f8248bfSmrgfunctions. This is the only way to manipulate those controls that have no 3462e9fcaa8aSmrgconvenience functions. 3463e9fcaa8aSmrg</para> 3464e9fcaa8aSmrg 3465e9fcaa8aSmrg 3466e9fcaa8aSmrg<para> 34670f8248bfSmrgThe 34680f8248bfSmrg<structname>XkbControlsRec</structname> 34690f8248bfSmrgstructure is defined as follows: 3470e9fcaa8aSmrg 3471e9fcaa8aSmrg<programlisting> 3472e9fcaa8aSmrg#define XkbMaxLegalKeyCode 255 3473e9fcaa8aSmrg#define XkbPerKeyBitArraySize ((XkbMaxLegalKeyCode+1)/8) 34740f8248bfSmrg 3475e9fcaa8aSmrgtypedef struct { 34760f8248bfSmrg unsigned char mk_dflt_btn; /* default button for 34770f8248bfSmrg keyboard driven mouse */ 34780f8248bfSmrg unsigned char num_groups; /* number of keyboard groups */ 34790f8248bfSmrg unsigned char groups_wrap; /* how to wrap out-of-bounds groups */ 34800f8248bfSmrg XkbModsRec internal; /* defines server internal modifiers */ 34810f8248bfSmrg XkbModsRec ignore_lock; /* modifiers to ignore when 34820f8248bfSmrg checking for grab */ 34830f8248bfSmrg unsigned int enabled_ctrls; /* 1 bit ⇒ corresponding 34840f8248bfSmrg boolean control enabled */ 34850f8248bfSmrg unsigned short repeat_delay; /* ms delay until first repeat */ 34860f8248bfSmrg unsigned short repeat_interval; /* ms delay between repeats */ 34870f8248bfSmrg unsigned short slow_keys_delay; /* ms minimum time key must be 34880f8248bfSmrg down to be ok */ 34890f8248bfSmrg unsigned short debounce_delay; /* ms delay before key reactivated */ 34900f8248bfSmrg unsigned short mk_delay; /* ms delay to second mouse 34910f8248bfSmrg motion event */ 34920f8248bfSmrg unsigned short mk_interval; /* ms delay between repeat mouse 34930f8248bfSmrg events */ 34940f8248bfSmrg unsigned short mk_time_to_max; /* # intervals until constant 34950f8248bfSmrg mouse move */ 34960f8248bfSmrg unsigned short mk_max_speed; /* multiplier for maximum mouse speed */ 34970f8248bfSmrg short mk_curve; /* determines mouse move curve type */ 34980f8248bfSmrg unsigned short ax_options; /* 1 bit ⇒ Access X option enabled */ 34990f8248bfSmrg unsigned short ax_timeout; /* seconds until Access X disabled */ 35000f8248bfSmrg unsigned short axt_opts_mask; /* 1 bit ⇒ options to reset 35010f8248bfSmrg on Access X timeout */ 35020f8248bfSmrg unsigned short axt_opts_values; /* 1 bit ⇒ turn option on, 0⇒ off */ 35030f8248bfSmrg unsigned int axt_ctrls_mask; /* which bits in <structfield>enabled_ctrls</structfield> 35040f8248bfSmrg to modify */ 35050f8248bfSmrg unsigned int axt_ctrls_values; /* values for new bits in 35060f8248bfSmrg <structfield>enabled_ctrls</structfield> */ 35070f8248bfSmrg unsigned char per_key_repeat[XkbPerKeyBitArraySize]; 35080f8248bfSmrg /* per key auto repeat */ 35090f8248bfSmrg} <structname>XkbControlsRec</structname>, *XkbControlsPtr; 3510e9fcaa8aSmrg</programlisting> 3511e9fcaa8aSmrg</para> 3512e9fcaa8aSmrg 3513e9fcaa8aSmrg<para> 35140f8248bfSmrgThe general-purpose functions that work with the 35150f8248bfSmrg<structname>XkbControlsRec</structname> 35160f8248bfSmrgstructure use a mask to specify which controls are to be manipulated. 35170f8248bfSmrg<link linkend="table10.6">Table 10.6</link> 35180f8248bfSmrglists these controls, the masks used to select them in the general 35190f8248bfSmrgfunction calls 35200f8248bfSmrg(<structfield>which</structfield> 35210f8248bfSmrgparameter), and the data fields in the 35220f8248bfSmrg<structname>XkbControlsRec</structname> 35230f8248bfSmrgstructure that comprise each of the individual controls. Also listed are the 3524e9fcaa8aSmrgbit used to turn boolean controls on and off and the section where each control 3525e9fcaa8aSmrgis described in more detail. 3526e9fcaa8aSmrg</para> 3527e9fcaa8aSmrg 35280f8248bfSmrg<table id='table10.6' frame='topbot'> 3529e9fcaa8aSmrg<title>Xkb Controls</title> 3530eb411b4bSmrg<?dbfo keep-together="auto" ?> 3531eb411b4bSmrg<tgroup cols='5' align='left' colsep='0' rowsep='0'> 3532eb411b4bSmrg<colspec colname='c1' colwidth='2.0*'/> 3533eb411b4bSmrg<colspec colname='c2' colwidth='3.1*'/> 3534eb411b4bSmrg<colspec colname='c3' colwidth='2.2*'/> 3535eb411b4bSmrg<colspec colname='c4' colwidth='2.6*'/> 3536eb411b4bSmrg<colspec colname='c5' colwidth='1.0*'/> 3537e9fcaa8aSmrg<thead> 3538eb411b4bSmrg<row rowsep='1'> 3539e9fcaa8aSmrg <entry>Control</entry> 3540e9fcaa8aSmrg <entry>Control Selection Mask (which parameter)</entry> 3541e9fcaa8aSmrg <entry>Relevant XkbControlsRec Data Fields</entry> 3542e9fcaa8aSmrg <entry>Boolean Control enabled_ctrls bit</entry> 3543e9fcaa8aSmrg <entry>Section</entry> 3544e9fcaa8aSmrg </row> 3545e9fcaa8aSmrg</thead> 3546e9fcaa8aSmrg<tbody> 3547eb411b4bSmrg <row> 3548e9fcaa8aSmrg <entry>AccessXFeedback</entry> 35490f8248bfSmrg <entry><symbol>XkbAccessXFeedbackMask</symbol></entry> 3550e9fcaa8aSmrg <entry>ax_options: XkbAX_*FBMask</entry> 3551eb411b4bSmrg <entry>XkbAccessXFeedback­Mask</entry> 35520f8248bfSmrg <entry><link linkend="The_AccessXFeedback_Control">10.6.3</link></entry> 3553e9fcaa8aSmrg </row> 3554eb411b4bSmrg <row> 3555e9fcaa8aSmrg <entry>AccessXKeys</entry> 3556e9fcaa8aSmrg <entry></entry> 3557e9fcaa8aSmrg <entry></entry> 3558eb411b4bSmrg <entry>XkbAccessXKeys­Mask</entry> 35590f8248bfSmrg <entry><link linkend="The_AccessXKeys_Control">10.6.1</link></entry> 3560e9fcaa8aSmrg </row> 3561eb411b4bSmrg <row> 3562e9fcaa8aSmrg <entry>AccessXTimeout</entry> 35630f8248bfSmrg <entry><symbol>XkbAccessXTimeoutMask</symbol></entry> 3564e9fcaa8aSmrg <entry> 3565e9fcaa8aSmrg <para>ax_timeout</para> 3566e9fcaa8aSmrg <para>axt_opts_mask</para> 3567e9fcaa8aSmrg <para>axt_opts_values</para> 3568e9fcaa8aSmrg <para>axt_ctrls_mask</para> 3569e9fcaa8aSmrg <para>axt_ctrls_values</para> 3570e9fcaa8aSmrg </entry> 3571eb411b4bSmrg <entry>XkbAccessXTimeout­Mask</entry> 35720f8248bfSmrg <entry><link linkend="The_AccessXTimeout_Control">10.6.2</link></entry> 3573e9fcaa8aSmrg </row> 3574eb411b4bSmrg <row> 3575e9fcaa8aSmrg <entry>AudibleBell</entry> 3576e9fcaa8aSmrg <entry></entry> 3577e9fcaa8aSmrg <entry></entry> 35780f8248bfSmrg <entry><symbol>XkbAudibleBellMask</symbol></entry> 35790f8248bfSmrg <entry><link linkend="Audible_Bells">9.2</link></entry> 3580e9fcaa8aSmrg </row> 3581eb411b4bSmrg <row> 3582e9fcaa8aSmrg <entry>AutoReset</entry> 3583e9fcaa8aSmrg <entry></entry> 3584e9fcaa8aSmrg <entry></entry> 3585e9fcaa8aSmrg <entry></entry> 35860f8248bfSmrg <entry><link linkend="The_AutoReset_Control">10.1.2</link></entry> 3587e9fcaa8aSmrg </row> 3588eb411b4bSmrg <row> 3589e9fcaa8aSmrg <entry>BounceKeys</entry> 35900f8248bfSmrg <entry><symbol>XkbBounceKeysMask</symbol></entry> 3591e9fcaa8aSmrg <entry>debounce_delay</entry> 35920f8248bfSmrg <entry><symbol>XkbBounceKeysMask</symbol></entry> 35930f8248bfSmrg <entry><link linkend="The_BounceKeys_Control">10.6.7</link></entry> 3594e9fcaa8aSmrg </row> 3595eb411b4bSmrg <row> 3596e9fcaa8aSmrg <entry>Detectable-Autorepeat</entry> 3597e9fcaa8aSmrg <entry></entry> 3598e9fcaa8aSmrg <entry></entry> 3599e9fcaa8aSmrg <entry></entry> 36000f8248bfSmrg <entry><link linkend="The_DetectableAutorepeat_Control">10.3.3</link></entry> 3601e9fcaa8aSmrg </row> 3602eb411b4bSmrg <row> 3603e9fcaa8aSmrg <entry>EnabledControls</entry> 36040f8248bfSmrg <entry><symbol>XkbControlsEnabledMask</symbol></entry> 3605e9fcaa8aSmrg <entry>enabled_ctrls</entry> 3606e9fcaa8aSmrg <entry><emphasis>Non-Boolean Control</emphasis></entry> 36070f8248bfSmrg <entry><link linkend="The_EnabledControls_Control">10.1.1</link></entry> 3608e9fcaa8aSmrg </row> 3609eb411b4bSmrg <row> 3610e9fcaa8aSmrg <entry>GroupsWrap</entry> 36110f8248bfSmrg <entry><symbol>XkbGroupsWrapMask</symbol></entry> 3612e9fcaa8aSmrg <entry>groups_wrap</entry> 3613e9fcaa8aSmrg <entry><emphasis>Non-Boolean Control</emphasis></entry> 36140f8248bfSmrg <entry><link linkend="The_GroupsWrap_Control">10.7.1</link></entry> 3615e9fcaa8aSmrg </row> 3616eb411b4bSmrg <row> 3617e9fcaa8aSmrg <entry>IgnoreGroupLock</entry> 3618e9fcaa8aSmrg <entry></entry> 3619e9fcaa8aSmrg <entry></entry> 3620eb411b4bSmrg <entry>XkbIgnoreGroupLock­Mask</entry> 36210f8248bfSmrg <entry><link linkend="The_IgnoreGroupLock_Control">10.7.3</link></entry> 3622e9fcaa8aSmrg </row> 3623eb411b4bSmrg <row> 3624e9fcaa8aSmrg <entry>IgnoreLockMods</entry> 36250f8248bfSmrg <entry><symbol>XkbIgnoreLockModsMask</symbol></entry> 3626e9fcaa8aSmrg <entry>ignore_lock</entry> 3627e9fcaa8aSmrg <entry><emphasis>Non-Boolean Control</emphasis></entry> 36280f8248bfSmrg <entry><link linkend="Keyboard_State_Description">5.1</link></entry> 3629e9fcaa8aSmrg </row> 3630eb411b4bSmrg <row> 3631e9fcaa8aSmrg <entry>InternalMods</entry> 36320f8248bfSmrg <entry><symbol>XkbInternalModsMask</symbol></entry> 3633e9fcaa8aSmrg <entry>internal</entry> 3634e9fcaa8aSmrg <entry><emphasis>Non-Boolean Control</emphasis></entry> 36350f8248bfSmrg <entry><link linkend="Keyboard_State_Description">5.1</link></entry> 3636e9fcaa8aSmrg </row> 3637eb411b4bSmrg <row> 3638e9fcaa8aSmrg <entry>MouseKeys</entry> 36390f8248bfSmrg <entry><symbol>XkbMouseKeysMask</symbol></entry> 3640e9fcaa8aSmrg <entry>mk_dflt_btn</entry> 36410f8248bfSmrg <entry><symbol>XkbMouseKeysMask</symbol></entry> 36420f8248bfSmrg <entry><link linkend="The_MouseKeys_Control">10.5.1</link></entry> 3643e9fcaa8aSmrg </row> 3644eb411b4bSmrg <row> 3645e9fcaa8aSmrg <entry>MouseKeysAccel</entry> 36460f8248bfSmrg <entry><symbol>XkbMouseKeysAccelMask</symbol></entry> 3647e9fcaa8aSmrg <entry> 3648e9fcaa8aSmrg <para>mk_delay</para> 3649e9fcaa8aSmrg <para>mk_interval</para> 3650e9fcaa8aSmrg <para>mk_time_to_max</para> 3651e9fcaa8aSmrg <para>mk_max_speed</para> 3652e9fcaa8aSmrg <para>mk_curve</para> 3653e9fcaa8aSmrg </entry> 3654eb411b4bSmrg <entry>XkbMouseKeysAccel­Mask</entry> 36550f8248bfSmrg <entry><link linkend="The_MouseKeysAccel_Control">10.5.2</link></entry> 3656e9fcaa8aSmrg </row> 3657eb411b4bSmrg <row> 3658e9fcaa8aSmrg <entry>Overlay1</entry> 3659e9fcaa8aSmrg <entry></entry> 3660e9fcaa8aSmrg <entry></entry> 36610f8248bfSmrg <entry><symbol>XkbOverlay1Mask</symbol></entry> 36620f8248bfSmrg <entry><link linkend="Controls_for_Keyboard_Overlays_Overlay1_and_Overlay2_Controls">10.4</link></entry> 3663e9fcaa8aSmrg </row> 3664eb411b4bSmrg <row> 3665e9fcaa8aSmrg <entry>Overlay2</entry> 3666e9fcaa8aSmrg <entry></entry> 3667e9fcaa8aSmrg <entry></entry> 36680f8248bfSmrg <entry><symbol>XkbOverlay2Mask</symbol></entry> 36690f8248bfSmrg <entry><link linkend="Controls_for_Keyboard_Overlays_Overlay1_and_Overlay2_Controls">10.4</link></entry> 3670e9fcaa8aSmrg </row> 3671eb411b4bSmrg <row> 3672e9fcaa8aSmrg <entry>PerKeyRepeat</entry> 36730f8248bfSmrg <entry><symbol>XkbPerKeyRepeatMask</symbol></entry> 3674e9fcaa8aSmrg <entry>per_key_repeat</entry> 3675e9fcaa8aSmrg <entry><emphasis>Non-Boolean Control</emphasis></entry> 36760f8248bfSmrg <entry><link linkend="The_PerKeyRepeat_Control">10.3.1</link></entry> 3677e9fcaa8aSmrg </row> 3678eb411b4bSmrg <row> 3679e9fcaa8aSmrg <entry>RepeatKeys</entry> 36800f8248bfSmrg <entry><symbol>XkbRepeatKeysMask</symbol></entry> 3681e9fcaa8aSmrg <entry> 3682e9fcaa8aSmrg <para>repeat_delay</para> 3683e9fcaa8aSmrg <para>repeat_interval</para> 3684e9fcaa8aSmrg </entry> 36850f8248bfSmrg <entry><symbol>XkbRepeatKeysMask</symbol></entry> 36860f8248bfSmrg <entry><link linkend="Controls_for_Repeat_Key_Behavior">10.3</link></entry> 3687e9fcaa8aSmrg </row> 3688eb411b4bSmrg <row> 3689e9fcaa8aSmrg <entry>SlowKeys</entry> 36900f8248bfSmrg <entry><symbol>XkbSlowKeysMask</symbol></entry> 3691e9fcaa8aSmrg <entry>slow_keys_delay</entry> 36920f8248bfSmrg <entry><symbol>XkbSlowKeysMask</symbol></entry> 36930f8248bfSmrg <entry><link linkend="The_SlowKeys_Control">10.6.6</link></entry> 3694e9fcaa8aSmrg </row> 3695eb411b4bSmrg <row> 3696e9fcaa8aSmrg <entry>StickyKeys</entry> 36970f8248bfSmrg <entry><symbol>XkbStickyKeysMask</symbol></entry> 3698e9fcaa8aSmrg <entry> 3699e9fcaa8aSmrg <para>ax_options:</para> 3700eb411b4bSmrg <para>XkbAX_Two­KeysMask</para> 3701eb411b4bSmrg <para>XkbAX_Latch­ToLockMask</para> 3702e9fcaa8aSmrg </entry> 37030f8248bfSmrg <entry><symbol>XkbStickyKeysMask</symbol></entry> 37040f8248bfSmrg <entry><link linkend="The_StickyKeys_Control">10.6.8</link></entry> 3705e9fcaa8aSmrg </row> 3706e9fcaa8aSmrg</tbody> 3707e9fcaa8aSmrg</tgroup> 3708e9fcaa8aSmrg</table> 3709e9fcaa8aSmrg 3710e9fcaa8aSmrg<para> 37110f8248bfSmrg<link linkend="table10.7">Table 10.7</link> 37120f8248bfSmrgshows the actual values for the individual mask bits used to select 3713e9fcaa8aSmrgcontrols for modification and to enable and disable the control. Note that the 3714e9fcaa8aSmrgsame mask bit is used to specify general modifications to the parameters used 37150f8248bfSmrgto configure the control 37160f8248bfSmrg(<structfield>which</structfield>), 37170f8248bfSmrgand to enable and disable the control 37180f8248bfSmrg(<structfield>enabled_ctrls</structfield>). 37190f8248bfSmrgThe anomalies in the table (no <quote>ok</quote> in column) are for controls that have no 3720e9fcaa8aSmrgconfigurable attributes; and for controls that are not boolean controls and 3721e9fcaa8aSmrgtherefore cannot be enabled or disabled. 3722e9fcaa8aSmrg</para> 3723e9fcaa8aSmrg 37240f8248bfSmrg<table id='table10.7' frame='topbot'> 3725e9fcaa8aSmrg<title>Controls Mask Bits</title> 3726eb411b4bSmrg<?dbfo keep-together="always" ?> 3727eb411b4bSmrg<tgroup cols='4' align='left' colsep='0' rowsep='0'> 3728eb411b4bSmrg<colspec colname='c1' colwidth='2.6*'/> 3729eb411b4bSmrg<colspec colname='c2' colwidth='2.0*'/> 3730eb411b4bSmrg<colspec colname='c3' colwidth='1.3*'/> 3731eb411b4bSmrg<colspec colname='c4' colwidth='2.0*'/> 3732e9fcaa8aSmrg<thead> 3733eb411b4bSmrg<row rowsep='1'> 3734e9fcaa8aSmrg <entry>Mask Bit</entry> 3735e9fcaa8aSmrg <entry>which or changed_ctrls</entry> 3736e9fcaa8aSmrg <entry>enabled_ctrls</entry> 3737e9fcaa8aSmrg <entry>Value</entry> 3738e9fcaa8aSmrg</row> 3739e9fcaa8aSmrg</thead> 3740e9fcaa8aSmrg<tbody> 3741eb411b4bSmrg<row> 37420f8248bfSmrg <entry><symbol>XkbRepeatKeysMask</symbol></entry> 3743e9fcaa8aSmrg <entry>ok</entry> 3744e9fcaa8aSmrg <entry>ok</entry> 3745e9fcaa8aSmrg <entry>(1L<<0)</entry> 3746e9fcaa8aSmrg </row> 3747eb411b4bSmrg <row> 37480f8248bfSmrg <entry><symbol>XkbSlowKeysMask</symbol></entry> 3749e9fcaa8aSmrg <entry>ok</entry> 3750e9fcaa8aSmrg <entry>ok</entry> 3751e9fcaa8aSmrg <entry>(1L<<1)</entry> 3752e9fcaa8aSmrg </row> 3753eb411b4bSmrg <row> 37540f8248bfSmrg <entry><symbol>XkbBounceKeysMask</symbol></entry> 3755e9fcaa8aSmrg <entry>ok</entry> 3756e9fcaa8aSmrg <entry>ok</entry> 3757e9fcaa8aSmrg <entry>(1L<<2)</entry> 3758e9fcaa8aSmrg </row> 3759eb411b4bSmrg <row> 37600f8248bfSmrg <entry><symbol>XkbStickyKeysMask</symbol></entry> 3761e9fcaa8aSmrg <entry>ok</entry> 3762e9fcaa8aSmrg <entry>ok</entry> 3763e9fcaa8aSmrg <entry>(1L<<3)</entry> 3764e9fcaa8aSmrg </row> 3765eb411b4bSmrg <row> 37660f8248bfSmrg <entry><symbol>XkbMouseKeysMask</symbol></entry> 3767e9fcaa8aSmrg <entry>ok</entry> 3768e9fcaa8aSmrg <entry>ok</entry> 3769e9fcaa8aSmrg <entry>(1L<<4)</entry> 3770e9fcaa8aSmrg </row> 3771eb411b4bSmrg <row> 37720f8248bfSmrg <entry><symbol>XkbMouseKeysAccelMask</symbol></entry> 3773e9fcaa8aSmrg <entry>ok</entry> 3774e9fcaa8aSmrg <entry>ok</entry> 3775e9fcaa8aSmrg <entry>(1L<<5)</entry> 3776e9fcaa8aSmrg </row> 3777eb411b4bSmrg <row> 37780f8248bfSmrg <entry><symbol>XkbAccessXKeysMask</symbol></entry> 3779e9fcaa8aSmrg <entry>ok</entry> 3780e9fcaa8aSmrg <entry>ok</entry> 3781e9fcaa8aSmrg <entry>(1L<<6)</entry> 3782e9fcaa8aSmrg </row> 3783eb411b4bSmrg <row> 37840f8248bfSmrg <entry><symbol>XkbAccessXTimeoutMask</symbol></entry> 3785e9fcaa8aSmrg <entry>ok</entry> 3786e9fcaa8aSmrg <entry>ok</entry> 3787e9fcaa8aSmrg <entry>(1L<<7)</entry> 3788e9fcaa8aSmrg </row> 3789eb411b4bSmrg <row> 37900f8248bfSmrg <entry><symbol>XkbAccessXFeedbackMask</symbol></entry> 3791e9fcaa8aSmrg <entry>ok</entry> 3792e9fcaa8aSmrg <entry>ok</entry> 3793e9fcaa8aSmrg <entry>(1L<<8)</entry> 3794e9fcaa8aSmrg </row> 3795eb411b4bSmrg <row> 37960f8248bfSmrg <entry><symbol>XkbAudibleBellMask</symbol></entry> 3797e9fcaa8aSmrg <entry></entry> 3798e9fcaa8aSmrg <entry>ok</entry> 3799e9fcaa8aSmrg <entry>(1L<<9)</entry> 3800e9fcaa8aSmrg </row> 3801eb411b4bSmrg <row> 38020f8248bfSmrg <entry><symbol>XkbOverlay1Mask</symbol></entry> 3803e9fcaa8aSmrg <entry></entry> 3804e9fcaa8aSmrg <entry>ok</entry> 3805e9fcaa8aSmrg <entry>(1L<<10)</entry> 3806e9fcaa8aSmrg </row> 3807eb411b4bSmrg <row> 38080f8248bfSmrg <entry><symbol>XkbOverlay2Mask</symbol></entry> 3809e9fcaa8aSmrg <entry></entry> 3810e9fcaa8aSmrg <entry>ok</entry> 3811e9fcaa8aSmrg <entry>(1L<<11)</entry> 3812e9fcaa8aSmrg </row> 3813eb411b4bSmrg <row> 38140f8248bfSmrg <entry><symbol>XkbIgnoreGroupLockMask</symbol></entry> 3815e9fcaa8aSmrg <entry></entry> 3816e9fcaa8aSmrg <entry>ok</entry> 3817e9fcaa8aSmrg <entry>(1L<<12)</entry> 3818e9fcaa8aSmrg</row> 3819eb411b4bSmrg<row> 38200f8248bfSmrg <entry><symbol>XkbGroupsWrapMask</symbol></entry> 3821e9fcaa8aSmrg <entry>ok</entry> 3822e9fcaa8aSmrg <entry></entry> 3823e9fcaa8aSmrg <entry>(1L<<27)</entry> 3824e9fcaa8aSmrg</row> 3825eb411b4bSmrg<row> 38260f8248bfSmrg <entry><symbol>XkbInternalModsMask</symbol></entry> 3827e9fcaa8aSmrg <entry>ok</entry> 3828e9fcaa8aSmrg <entry></entry> 3829e9fcaa8aSmrg <entry>(1L<<28)</entry> 3830e9fcaa8aSmrg</row> 3831eb411b4bSmrg<row> 38320f8248bfSmrg <entry><symbol>XkbIgnoreLockModsMask</symbol></entry> 3833e9fcaa8aSmrg <entry>ok</entry> 3834e9fcaa8aSmrg <entry></entry> 3835e9fcaa8aSmrg <entry>(1L<<29)</entry> 3836e9fcaa8aSmrg</row> 3837eb411b4bSmrg<row> 38380f8248bfSmrg <entry><symbol>XkbPerKeyRepeatMask</symbol></entry> 3839e9fcaa8aSmrg <entry>ok</entry> 3840e9fcaa8aSmrg <entry></entry> 3841e9fcaa8aSmrg <entry>(1L<<30)</entry> 3842e9fcaa8aSmrg</row> 3843eb411b4bSmrg<row> 38440f8248bfSmrg <entry><symbol>XkbControlsEnabledMask</symbol></entry> 3845e9fcaa8aSmrg <entry>ok</entry> 3846e9fcaa8aSmrg <entry></entry> 3847e9fcaa8aSmrg <entry>(1L<<31)</entry> 3848e9fcaa8aSmrg</row> 3849eb411b4bSmrg<row> 38500f8248bfSmrg <entry><symbol>XkbAccessXOptionsMask</symbol></entry> 3851e9fcaa8aSmrg <entry>ok</entry> 3852e9fcaa8aSmrg <entry>ok</entry> 3853e9fcaa8aSmrg <entry>(XkbStickyKeysMask | XkbAccessXFeedbackMask)</entry> 3854e9fcaa8aSmrg </row> 3855eb411b4bSmrg <row> 38560f8248bfSmrg <entry><symbol>XkbAllBooleanCtrlsMask</symbol></entry> 3857e9fcaa8aSmrg <entry></entry> 3858e9fcaa8aSmrg <entry>ok</entry> 3859e9fcaa8aSmrg <entry>(0x00001FFF) </entry> 3860e9fcaa8aSmrg </row> 3861eb411b4bSmrg <row> 38620f8248bfSmrg <entry><symbol>XkbAllControlsMask</symbol></entry> 3863e9fcaa8aSmrg <entry>ok</entry> 3864e9fcaa8aSmrg <entry></entry> 3865e9fcaa8aSmrg <entry>(0xF8001FFF)</entry> 3866e9fcaa8aSmrg </row> 3867e9fcaa8aSmrg</tbody> 3868e9fcaa8aSmrg</tgroup> 3869e9fcaa8aSmrg</table> 3870e9fcaa8aSmrg 3871e9fcaa8aSmrg<para> 38720f8248bfSmrgThe individual fields of the 38730f8248bfSmrg<structname>XkbControlsRec</structname> 38740f8248bfSmrgstructure are defined as follows. 3875e9fcaa8aSmrg</para> 3876e9fcaa8aSmrg 3877e9fcaa8aSmrg<sect2> 3878e9fcaa8aSmrg<title/> 3879e9fcaa8aSmrg<sect3 id='mk_dflt_btn'> 3880e9fcaa8aSmrg<title>mk_dflt_btn</title> 3881e9fcaa8aSmrg 3882e9fcaa8aSmrg<para> 38830f8248bfSmrg<structfield>mk_dflt_btn</structfield> is an attribute of the 38840f8248bfSmrg<emphasis>MouseKeys</emphasis> 38850f8248bfSmrgcontrol 38860f8248bfSmrg(see <link linkend="Controls_for_Using_the_Mouse_from_the_Keyboard">section 10.5</link>). It 38870f8248bfSmrgspecifies the mouse button number to use for keyboard simulated mouse button 38880f8248bfSmrgoperations. Its value should be one of the core symbols 38890f8248bfSmrg<symbol>Button1</symbol> 38900f8248bfSmrg– 38910f8248bfSmrg<symbol>Button5</symbol>. 3892e9fcaa8aSmrg</para> 3893e9fcaa8aSmrg 3894e9fcaa8aSmrg 3895e9fcaa8aSmrg</sect3> 3896e9fcaa8aSmrg<sect3 id='num_groups'> 3897e9fcaa8aSmrg<title>num_groups</title> 3898e9fcaa8aSmrg 3899e9fcaa8aSmrg<para> 39000f8248bfSmrg<structfield>num_groups</structfield> 39010f8248bfSmrgis not a part of any control, but is reported in the 39020f8248bfSmrg<structname>XkbControlsRec</structname> 39030f8248bfSmrgstructure whenever any of its components are fetched from the server. It 3904e9fcaa8aSmrgreports the number of groups the particular keyboard configuration uses and is 3905e9fcaa8aSmrgcomputed automatically by the server whenever the keyboard mapping changes. 3906e9fcaa8aSmrg</para> 3907e9fcaa8aSmrg 3908e9fcaa8aSmrg 3909e9fcaa8aSmrg</sect3> 3910e9fcaa8aSmrg<sect3 id='groups_wrap'> 3911e9fcaa8aSmrg<title>groups_wrap</title> 3912e9fcaa8aSmrg 3913e9fcaa8aSmrg<para> 39140f8248bfSmrg<structfield>groups_wrap</structfield> 39150f8248bfSmrgis an attribute of the 39160f8248bfSmrg<emphasis>GroupsWrap</emphasis> 39170f8248bfSmrgcontrol (see <link linkend="The_GroupsWrap_Control">section 10.7.1</link>). It specifies the handling of illegal groups on a 39180f8248bfSmrgglobal basis. Valid values for 39190f8248bfSmrg<structfield>groups_wrap</structfield> 39200f8248bfSmrgare shown in <link linkend="table10.8">Table 10.8</link>. 3921e9fcaa8aSmrg</para> 3922e9fcaa8aSmrg 39230f8248bfSmrg<table id='table10.8' frame='topbot'> 3924e9fcaa8aSmrg<title>GroupsWrap options (groups_wrap field)</title> 3925eb411b4bSmrg<?dbfo keep-together="always" ?> 3926eb411b4bSmrg<tgroup cols='2' align='left' colsep='0' rowsep='0'> 3927eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 3928eb411b4bSmrg<colspec colname='c2' colwidth='1.0*'/> 3929e9fcaa8aSmrg<thead> 3930eb411b4bSmrg<row rowsep='1'> 3931e9fcaa8aSmrg <entry>groups_wrap symbolic name</entry> 3932e9fcaa8aSmrg <entry>value</entry> 3933e9fcaa8aSmrg </row> 3934e9fcaa8aSmrg</thead> 3935e9fcaa8aSmrg<tbody> 3936eb411b4bSmrg <row> 39370f8248bfSmrg <entry><symbol>XkbWrapIntoRange</symbol></entry> 3938e9fcaa8aSmrg <entry>(0x00)</entry> 3939e9fcaa8aSmrg </row> 3940eb411b4bSmrg <row> 39410f8248bfSmrg <entry><symbol>XkbClampIntoRange</symbol></entry> 3942e9fcaa8aSmrg <entry>(0x40)</entry> 3943e9fcaa8aSmrg </row> 3944eb411b4bSmrg <row> 39450f8248bfSmrg <entry><symbol>XkbRedirectIntoRange</symbol></entry> 3946e9fcaa8aSmrg <entry>(0x80)</entry> 3947e9fcaa8aSmrg </row> 3948e9fcaa8aSmrg</tbody> 3949e9fcaa8aSmrg</tgroup> 3950e9fcaa8aSmrg</table> 3951e9fcaa8aSmrg 3952e9fcaa8aSmrg<para> 39530f8248bfSmrgWhen 39540f8248bfSmrg<structfield>groups_wrap</structfield> 39550f8248bfSmrgis set to 39560f8248bfSmrg<symbol>XkbRedirectIntoRange</symbol>, 39570f8248bfSmrgits four low-order bits specify the index of the group to use. 3958e9fcaa8aSmrg</para> 3959e9fcaa8aSmrg 3960e9fcaa8aSmrg 3961e9fcaa8aSmrg</sect3> 3962e9fcaa8aSmrg<sect3 id='internal'> 3963e9fcaa8aSmrg<title>internal</title> 3964e9fcaa8aSmrg 3965e9fcaa8aSmrg<para> 39660f8248bfSmrg<structfield>internal</structfield> 39670f8248bfSmrgis an attribute of the 39680f8248bfSmrg<emphasis>InternalMods</emphasis> 39690f8248bfSmrgcontrol (see <link linkend="The_InternalMods_Control">section 10.7.4</link>). It specifies modifiers to be consumed in the 3970e9fcaa8aSmrgserver and not passed on to clients when events are reported. Valid values 39710f8248bfSmrgconsist of any combination of the eight core modifier bits: 39720f8248bfSmrg<symbol>ShiftMask</symbol>, 39730f8248bfSmrg<symbol>LockMask</symbol>, 39740f8248bfSmrg<symbol>ControlMask</symbol>, 39750f8248bfSmrg<symbol>Mod1Mask</symbol> 39760f8248bfSmrg– 39770f8248bfSmrg<symbol>Mod5Mask</symbol>. 3978e9fcaa8aSmrg</para> 3979e9fcaa8aSmrg 3980e9fcaa8aSmrg 3981e9fcaa8aSmrg</sect3> 3982e9fcaa8aSmrg<sect3 id='ignore_lock'> 3983e9fcaa8aSmrg<title>ignore_lock</title> 3984e9fcaa8aSmrg 3985e9fcaa8aSmrg<para> 39860f8248bfSmrg<structfield>ignore_lock</structfield> 39870f8248bfSmrgis an attribute of the 39880f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 39890f8248bfSmrgcontrol (see <link linkend="The_IgnoreLockMods_Control">section 10.7.2</link>). It specifies modifiers to be ignored in grab 3990e9fcaa8aSmrgcalculations. Valid values consist of any combination of the eight core 39910f8248bfSmrgmodifier bits: 39920f8248bfSmrg<symbol>ShiftMask</symbol>, 39930f8248bfSmrg<symbol>LockMask</symbol>, 39940f8248bfSmrg<symbol>ControlMask</symbol>, 39950f8248bfSmrg<symbol>Mod1Mask</symbol> 39960f8248bfSmrg– 39970f8248bfSmrg<symbol>Mod5Mask</symbol>. 3998e9fcaa8aSmrg</para> 3999e9fcaa8aSmrg 4000e9fcaa8aSmrg 4001e9fcaa8aSmrg</sect3> 4002e9fcaa8aSmrg<sect3 id='enabled_ctrls'> 4003e9fcaa8aSmrg<title>enabled_ctrls</title> 4004e9fcaa8aSmrg 4005e9fcaa8aSmrg<para> 40060f8248bfSmrg<structfield>enabled_ctrls</structfield> 40070f8248bfSmrgis an attribute of the 40080f8248bfSmrg<emphasis>EnabledControls</emphasis> 40090f8248bfSmrgcontrol (see <link linkend="The_EnabledControls_Control">section 10.1.1</link>). It contains one bit per boolean control. Each 4010e9fcaa8aSmrgbit determines whether the corresponding control is enabled or disabled; a one 4011e9fcaa8aSmrgbit means the control is enabled. The mask bits used to enable these controls 40120f8248bfSmrgare listed in <link linkend="table10.7">Table 10.7</link>, 40130f8248bfSmrgusing only those masks with <quote>ok</quote> in the 40140f8248bfSmrg<structfield>enabled_ctrls</structfield> 40150f8248bfSmrgcolumn. 4016e9fcaa8aSmrg</para> 4017e9fcaa8aSmrg 4018e9fcaa8aSmrg 4019e9fcaa8aSmrg</sect3> 4020e9fcaa8aSmrg<sect3 id='repeat_delay_and_repeat_interval'> 4021e9fcaa8aSmrg<title>repeat_delay and repeat_interval</title> 4022e9fcaa8aSmrg 4023e9fcaa8aSmrg<para> 40240f8248bfSmrg<structfield>repeat_delay</structfield> 40250f8248bfSmrgand 40260f8248bfSmrg<structfield>repeat_interval</structfield> 40270f8248bfSmrgare attributes of the 40280f8248bfSmrg<emphasis>RepeatKeys</emphasis> 40290f8248bfSmrgcontrol (see <link linkend="The_RepeatKeys_Control">section 10.3.2</link>). 40300f8248bfSmrg<structfield>repeat_delay</structfield> 40310f8248bfSmrgis the initial delay before a key begins repeating, in milliseconds; 40320f8248bfSmrg<structfield>repeat_interval</structfield> 40330f8248bfSmrgis the delay between subsequent key events, in milliseconds. 4034e9fcaa8aSmrg</para> 4035e9fcaa8aSmrg 4036e9fcaa8aSmrg 4037e9fcaa8aSmrg</sect3> 4038e9fcaa8aSmrg<sect3 id='slow_keys_delay'> 4039e9fcaa8aSmrg<title>slow_keys_delay</title> 4040e9fcaa8aSmrg 4041e9fcaa8aSmrg<para> 40420f8248bfSmrg<structfield>slow_keys_delay</structfield> 40430f8248bfSmrgis an attribute of the 40440f8248bfSmrg<emphasis>SlowKeys</emphasis> 40450f8248bfSmrgcontrol (see <link linkend="The_SlowKeys_Control">section 10.6.6</link>). Its value specifies the 40460f8248bfSmrg<emphasis>SlowKeys</emphasis> 40470f8248bfSmrgacceptance delay period in milliseconds before a key press is accepted by the 4048e9fcaa8aSmrgserver. 4049e9fcaa8aSmrg</para> 4050e9fcaa8aSmrg 4051e9fcaa8aSmrg 4052e9fcaa8aSmrg</sect3> 4053e9fcaa8aSmrg<sect3 id='debounce_delay'> 4054e9fcaa8aSmrg<title>debounce_delay</title> 4055e9fcaa8aSmrg 4056e9fcaa8aSmrg<para> 40570f8248bfSmrg<structfield>debounce_delay</structfield> 40580f8248bfSmrgis an attribute of the 40590f8248bfSmrg<emphasis>BounceKeys</emphasis> 40600f8248bfSmrgcontrol (see <link linkend="The_BounceKeys_Control">section 10.6.7</link>). Its value specifies the 40610f8248bfSmrg<emphasis>BounceKeys</emphasis> 40620f8248bfSmrgdelay period in milliseconds for which the key is disabled after having been 4063e9fcaa8aSmrgpressed before another press of the same key is accepted by the server. 4064e9fcaa8aSmrg</para> 4065e9fcaa8aSmrg 4066e9fcaa8aSmrg 4067e9fcaa8aSmrg</sect3> 4068e9fcaa8aSmrg<sect3 id='mk_delay_mk_interval_mk_time_to_max_mk_max_speed_and_mk_curve'> 4069e9fcaa8aSmrg<title>mk_delay, mk_interval, mk_time_to_max, mk_max_speed, and mk_curve</title> 4070e9fcaa8aSmrg 4071e9fcaa8aSmrg<para> 40720f8248bfSmrg<structfield>mk_delay</structfield>, 40730f8248bfSmrg<structfield>mk_interval</structfield>, 40740f8248bfSmrg<structfield>mk_time_to_max</structfield>, 40750f8248bfSmrg<structfield>mk_max_speed</structfield>, 40760f8248bfSmrgand 40770f8248bfSmrg<structfield>mk_curve</structfield> 40780f8248bfSmrgare attributes of the 40790f8248bfSmrg<emphasis>MouseKeysAccel</emphasis> 40800f8248bfSmrgcontrol. Refer to <link linkend="The_MouseKeysAccel_Control">section 10.5.2</link> for a description of these fields and the 4081e9fcaa8aSmrgunits involved. 4082e9fcaa8aSmrg</para> 4083e9fcaa8aSmrg 4084e9fcaa8aSmrg 4085e9fcaa8aSmrg</sect3> 4086e9fcaa8aSmrg<sect3 id='ax_options'> 4087e9fcaa8aSmrg<title>ax_options</title> 4088e9fcaa8aSmrg 4089e9fcaa8aSmrg<para> 40900f8248bfSmrgThe 40910f8248bfSmrg<structfield>ax_options</structfield> 40920f8248bfSmrgfield contains attributes used to configure two different controls, the 40930f8248bfSmrg<emphasis>StickyKeys</emphasis> 40940f8248bfSmrgcontrol (see <link linkend="The_StickyKeys_Control">section 10.6.8</link>) and the 40950f8248bfSmrg<emphasis>AccessXFeedback</emphasis> 40960f8248bfSmrgcontrol (see <link linkend="The_AccessXFeedback_Control">section 10.6.3</link>). The 40970f8248bfSmrg<structfield>ax_options</structfield> 40980f8248bfSmrgfield is a bitmask and may include any combination of the bits defined in 40990f8248bfSmrg<link linkend="table10.9">Table 10.9</link>. 4100e9fcaa8aSmrg</para> 4101e9fcaa8aSmrg 41020f8248bfSmrg<table id='table10.9' frame='topbot'> 4103e9fcaa8aSmrg<title>Access X Enable/Disable Bits (ax_options field)</title> 4104eb411b4bSmrg<?dbfo keep-together="always" ?> 4105eb411b4bSmrg<tgroup cols='3' align='left' colsep='0' rowsep='0'> 4106eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 4107eb411b4bSmrg<colspec colname='c2' colwidth='1.3*'/> 4108eb411b4bSmrg<colspec colname='c3' colwidth='0.7*'/> 4109e9fcaa8aSmrg<thead> 4110eb411b4bSmrg<row rowsep='1'> 4111e9fcaa8aSmrg <entry>Access X Control</entry> 4112e9fcaa8aSmrg <entry>ax_options bit</entry> 4113e9fcaa8aSmrg <entry>value</entry> 4114e9fcaa8aSmrg </row> 4115e9fcaa8aSmrg</thead> 4116e9fcaa8aSmrg<tbody> 4117eb411b4bSmrg <row> 4118e9fcaa8aSmrg <entry>AccessXFeedback</entry> 41190f8248bfSmrg <entry><symbol>XkbAX_SKPressFBMask</symbol></entry> 4120e9fcaa8aSmrg <entry>(1L<<0)</entry> 4121e9fcaa8aSmrg </row> 4122eb411b4bSmrg <row> 4123e9fcaa8aSmrg <entry></entry> 41240f8248bfSmrg <entry><symbol>XkbAX_SKAcceptFBMask</symbol></entry> 4125e9fcaa8aSmrg <entry>(1L << 1)</entry> 4126e9fcaa8aSmrg </row> 4127eb411b4bSmrg <row> 4128e9fcaa8aSmrg <entry></entry> 41290f8248bfSmrg <entry><symbol>XkbAX_FeatureFBMask</symbol></entry> 4130e9fcaa8aSmrg <entry>(1L << 2)</entry> 4131e9fcaa8aSmrg </row> 4132eb411b4bSmrg <row> 4133e9fcaa8aSmrg <entry></entry> 41340f8248bfSmrg <entry><symbol>XkbAX_SlowWarnFBMask</symbol></entry> 4135e9fcaa8aSmrg <entry>(1L << 3)</entry> 4136e9fcaa8aSmrg </row> 4137eb411b4bSmrg <row> 4138e9fcaa8aSmrg <entry></entry> 41390f8248bfSmrg <entry><symbol>XkbAX_IndicatorFBMask</symbol></entry> 4140e9fcaa8aSmrg <entry>(1L << 4)</entry> 4141e9fcaa8aSmrg </row> 4142eb411b4bSmrg <row> 4143e9fcaa8aSmrg <entry></entry> 41440f8248bfSmrg <entry><symbol>XkbAX_StickyKeysFBMask</symbol></entry> 4145e9fcaa8aSmrg <entry>(1L << 5)</entry> 4146e9fcaa8aSmrg </row> 4147eb411b4bSmrg <row> 4148e9fcaa8aSmrg <entry></entry> 41490f8248bfSmrg <entry><symbol>XkbAX_SKReleaseFBMask</symbol></entry> 4150e9fcaa8aSmrg <entry>(1L << 8)</entry> 4151e9fcaa8aSmrg </row> 4152eb411b4bSmrg <row> 4153e9fcaa8aSmrg <entry></entry> 41540f8248bfSmrg <entry><symbol>XkbAX_SKRejectFBMask</symbol></entry> 4155e9fcaa8aSmrg <entry>(1L << 9)</entry> 4156e9fcaa8aSmrg </row> 4157eb411b4bSmrg <row> 4158e9fcaa8aSmrg <entry></entry> 41590f8248bfSmrg <entry><symbol>XkbAX_BKRejectFBMask</symbol></entry> 4160e9fcaa8aSmrg <entry>(1L << 10)</entry> 4161e9fcaa8aSmrg </row> 4162eb411b4bSmrg <row> 4163e9fcaa8aSmrg <entry></entry> 41640f8248bfSmrg <entry><symbol>XkbAX_DumbBellFBMask</symbol></entry> 4165e9fcaa8aSmrg <entry>(1L << 11)</entry> 4166e9fcaa8aSmrg </row> 4167eb411b4bSmrg <row> 4168e9fcaa8aSmrg <entry>StickyKeys</entry> 41690f8248bfSmrg <entry><symbol>XkbAX_TwoKeysMask</symbol></entry> 4170e9fcaa8aSmrg <entry>(1L << 6)</entry> 4171e9fcaa8aSmrg </row> 4172eb411b4bSmrg <row> 4173e9fcaa8aSmrg <entry></entry> 41740f8248bfSmrg <entry><symbol>XkbAX_LatchToLockMask</symbol></entry> 4175e9fcaa8aSmrg <entry>(1L << 7)</entry> 4176e9fcaa8aSmrg </row> 4177eb411b4bSmrg <row> 4178e9fcaa8aSmrg <entry></entry> 41790f8248bfSmrg <entry><symbol>XkbAX_AllOptionsMask</symbol></entry> 4180e9fcaa8aSmrg <entry>(0xFFF)</entry> 4181e9fcaa8aSmrg </row> 4182e9fcaa8aSmrg</tbody> 4183e9fcaa8aSmrg</tgroup> 4184e9fcaa8aSmrg</table> 4185e9fcaa8aSmrg 4186e9fcaa8aSmrg<para> 4187e9fcaa8aSmrgThe fields pertaining to each control are relevant only when the control is 41880f8248bfSmrgenabled 41890f8248bfSmrg(<symbol>XkbAccessXFeedbackMask</symbol> 41900f8248bfSmrgor 41910f8248bfSmrg<symbol>XkbStickyKeysMask</symbol> 41920f8248bfSmrgbit is turned on in the 41930f8248bfSmrg<structfield>enabled_ctrls</structfield> 41940f8248bfSmrgfield). 4195e9fcaa8aSmrg</para> 4196e9fcaa8aSmrg 4197e9fcaa8aSmrg 4198e9fcaa8aSmrg<para> 41990f8248bfSmrgXkb provides a set of convenience macros for working with the 42000f8248bfSmrg<structfield>ax_options</structfield> 42010f8248bfSmrgfield of an 42020f8248bfSmrg<structname>XkbControlsRec</structname> 42030f8248bfSmrgstructure: 4204e9fcaa8aSmrg 42050f8248bfSmrg<programlisting> 42060f8248bfSmrg#define <symbol>XkbAX_NeedOption</symbol>(c,w) ((c)->ax_options & (w)) 4207e9fcaa8aSmrg</programlisting></para> 4208e9fcaa8aSmrg 4209e9fcaa8aSmrg<para> 42100f8248bfSmrgThe 42110f8248bfSmrg<symbol>XkbAX_NeedOption</symbol> 42120f8248bfSmrgmacro is useful for determining whether a particular AccessX option is enabled 42130f8248bfSmrgor not. It accepts a pointer to an 42140f8248bfSmrg<structname>XkbControlsRec</structname> 42150f8248bfSmrgstructure and a valid mask bit from 42160f8248bfSmrg<link linkend="table10.9">Table 10.9</link>. 42170f8248bfSmrgIf the specified mask bit in the 42180f8248bfSmrg<structfield>ax_options</structfield> 42190f8248bfSmrgfield of the controls structure is set, the macro returns the mask bit. 4220e9fcaa8aSmrgOtherwise, it returns zero. Thus, 4221e9fcaa8aSmrg 42220f8248bfSmrg<programlisting> 42230f8248bfSmrg XkbAX_NeedOption(ctlrec, XkbAX_LatchToLockMask) 42240f8248bfSmrg</programlisting> 4225e9fcaa8aSmrg 4226e9fcaa8aSmrgis nonzero if the latch to lock transition for latching keys is enabled, and 42270f8248bfSmrgzero if it is disabled. Note that 42280f8248bfSmrg<symbol>XkbAX_NeedOption</symbol> 42290f8248bfSmrgonly determines whether or not the particular capability is configured to 42300f8248bfSmrgoperate; the 42310f8248bfSmrg<symbol>XkbAccessXFeedbackMask</symbol> 42320f8248bfSmrgbit must also be turned on in 42330f8248bfSmrg<structfield>enabled_ctrls</structfield> 42340f8248bfSmrgfor the capability to actually be functioning. 4235e9fcaa8aSmrg</para> 4236e9fcaa8aSmrg 4237e9fcaa8aSmrg<para><programlisting> 42380f8248bfSmrg#define <symbol>XkbAX_AnyFeedback</symbol>(c) \ 42390f8248bfSmrg ((c)->enabled_ctrls & XkbAccessXFeedbackMask) 4240e9fcaa8aSmrg</programlisting></para> 4241e9fcaa8aSmrg 4242e9fcaa8aSmrg<para> 42430f8248bfSmrgThe 42440f8248bfSmrg<symbol>XkbAX_AnyFeedback</symbol> 42450f8248bfSmrgmacro accepts a pointer to an 42460f8248bfSmrg<structname>XkbControlsRec</structname> 42470f8248bfSmrgstructure and tells whether the 42480f8248bfSmrg<emphasis>AccessXFeedback</emphasis> 42490f8248bfSmrgcontrol is enabled or not. If the 42500f8248bfSmrg<emphasis>AccessXFeedback</emphasis> 42510f8248bfSmrgcontrol is enabled, the macro returns 42520f8248bfSmrg<symbol>XkbAccessXFeedbackMask</symbol>. 42530f8248bfSmrgOtherwise, it returns zero. 4254e9fcaa8aSmrg</para> 4255e9fcaa8aSmrg 4256e9fcaa8aSmrg<para><programlisting> 42570f8248bfSmrg#define <symbol>XkbAX_NeedFeedback</symbol>(c,w) \ 42580f8248bfSmrg (XkbAX_AnyFeedback(c) && XkbAX_NeedOption(c,w)) 4259e9fcaa8aSmrg</programlisting></para> 4260e9fcaa8aSmrg 4261e9fcaa8aSmrg<para> 42620f8248bfSmrgThe 42630f8248bfSmrg<symbol>XkbAX_NeedFeedback</symbol> 42640f8248bfSmrgmacro is useful for determining if both the 42650f8248bfSmrg<emphasis>AccessXFeedback</emphasis> 42660f8248bfSmrgcontrol and a particular AccessX feedback option are enabled. The macro 42670f8248bfSmrgaccepts a pointer to an 42680f8248bfSmrg<structname>XkbControlsRec</structname> 42690f8248bfSmrgstructure and a feedback option from the table above. If both the 42700f8248bfSmrg<emphasis>AccessXFeedback</emphasis> 42710f8248bfSmrgcontrol and the specified feedback option are enabled, the macro returns 42720f8248bfSmrg<symbol>True</symbol>. 42730f8248bfSmrgOtherwise it returns 42740f8248bfSmrg<symbol>False</symbol>. 4275e9fcaa8aSmrg</para> 4276e9fcaa8aSmrg 4277e9fcaa8aSmrg 4278e9fcaa8aSmrg</sect3> 4279e9fcaa8aSmrg<sect3 4280e9fcaa8aSmrgid='ax_timeout_axt_opts_mask_axt_opts_values_axt_ctrls_mask_and_axt_ctrls_values'> 4281e9fcaa8aSmrg<title>ax_timeout, axt_opts_mask, axt_opts_values, axt_ctrls_mask, and axt_ctrls_values</title> 4282e9fcaa8aSmrg 4283e9fcaa8aSmrg<para> 42840f8248bfSmrg<structfield>ax_timeout</structfield>, 42850f8248bfSmrg<structfield>axt_opts_mask</structfield>, 42860f8248bfSmrg<structfield>axt_opts_values</structfield>, 42870f8248bfSmrg<structfield>axt_ctrls_mask</structfield>, 42880f8248bfSmrgand 42890f8248bfSmrg<structfield>axt_ctrls_values</structfield> 42900f8248bfSmrgare attributes of the 42910f8248bfSmrg<emphasis>AccessXTimeout</emphasis> 42920f8248bfSmrgcontrol. Refer to <link linkend="The_AccessXTimeout_Control">section 10.6.2</link> for a description of these fields and the 4293e9fcaa8aSmrgunits involved. 4294e9fcaa8aSmrg</para> 4295e9fcaa8aSmrg 4296e9fcaa8aSmrg 4297e9fcaa8aSmrg</sect3> 4298e9fcaa8aSmrg<sect3 id='per_key_repeat'> 4299e9fcaa8aSmrg<title>per_key_repeat</title> 4300e9fcaa8aSmrg 4301e9fcaa8aSmrg<para> 43020f8248bfSmrgThe 43030f8248bfSmrg<structfield>per_key_repeat</structfield> 43040f8248bfSmrgfield mirrors the 43050f8248bfSmrg<structfield>auto_repeats</structfield> 43060f8248bfSmrgfield of the core protocol 43070f8248bfSmrg<structname>XKeyboardState</structname> 43080f8248bfSmrgstructure: changing the 43090f8248bfSmrg<structfield>auto_repeats</structfield> 43100f8248bfSmrgfield automatically changes 43110f8248bfSmrg<structfield>per_key_repeat</structfield> 43120f8248bfSmrgand vice versa. It is provided for convenience and to reduce protocol traffic. 4313e9fcaa8aSmrgFor example, to obtain the individual repeat key behavior as well as the repeat 43140f8248bfSmrgdelay and rate, use 43150f8248bfSmrg<function>XkbGetControls</function>. 43160f8248bfSmrgIf the 43170f8248bfSmrg<structfield>per_key_repeat</structfield> 43180f8248bfSmrgwere not in this structure, you would have to call both 43190f8248bfSmrg<function>XGetKeyboardControl</function> 43200f8248bfSmrgand 43210f8248bfSmrg<function>XkbGetControls</function> 43220f8248bfSmrgto get this information. The bits correspond to keycodes. The first seven keys 43230f8248bfSmrg(keycodes 1–7) are indicated in 43240f8248bfSmrg<structfield>per_key_repeat</structfield>[0], 43250f8248bfSmrgwith bit position 0 (low order) corresponding to the fictitious keycode 0. 4326e9fcaa8aSmrgFollowing array elements correspond to 8 keycodes per element. A 1 bit 4327e9fcaa8aSmrgindicates that the key is a repeating key. 4328e9fcaa8aSmrg</para> 4329e9fcaa8aSmrg 4330e9fcaa8aSmrg 4331e9fcaa8aSmrg</sect3> 4332e9fcaa8aSmrg</sect2> 4333e9fcaa8aSmrg</sect1> 4334eb411b4bSmrg<sect1 id='Querying_Controls'> 4335e9fcaa8aSmrg<title>Querying Controls</title> 4336e9fcaa8aSmrg 4337e9fcaa8aSmrg<para> 43380f8248bfSmrgUse 43390f8248bfSmrg<function>XkbGetControls</function> 43400f8248bfSmrgto find the current state of Xkb server controls. 43410f8248bfSmrg</para> 43420f8248bfSmrg 43430f8248bfSmrg<indexterm significance="preferred" zone="XkbGetControls"><primary><function>XkbGetControls</function></primary></indexterm> 43440f8248bfSmrg<funcsynopsis id="XkbGetControls"> 43450f8248bfSmrg <funcprototype> 43460f8248bfSmrg <funcdef>Status <function>XkbGetControls</function></funcdef> 43470f8248bfSmrg<!-- ( 43480f8248bfSmrg<parameter>display, which, xkb)</parameter> --> 43490f8248bfSmrg 43500f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 43510f8248bfSmrg <paramdef>unsigned long <parameter>which</parameter></paramdef> 43520f8248bfSmrg <paramdef>XkbDescPtr <parameter>xkb</parameter></paramdef> 43530f8248bfSmrg </funcprototype> 43540f8248bfSmrg</funcsynopsis> 43550f8248bfSmrg<variablelist> 43560f8248bfSmrg <varlistentry> 43570f8248bfSmrg <term> 43580f8248bfSmrg <parameter>display</parameter> 43590f8248bfSmrg </term> 43600f8248bfSmrg <listitem> 43610f8248bfSmrg <para> 43620f8248bfSmrg connection to X server 43630f8248bfSmrg </para> 43640f8248bfSmrg </listitem> 43650f8248bfSmrg </varlistentry> 43660f8248bfSmrg <varlistentry> 43670f8248bfSmrg <term> 43680f8248bfSmrg <parameter>which</parameter> 43690f8248bfSmrg </term> 43700f8248bfSmrg <listitem> 43710f8248bfSmrg <para> 43720f8248bfSmrg mask of controls requested 43730f8248bfSmrg </para> 43740f8248bfSmrg </listitem> 43750f8248bfSmrg </varlistentry> 43760f8248bfSmrg <varlistentry> 43770f8248bfSmrg <term> 43780f8248bfSmrg <parameter>xkb</parameter> 43790f8248bfSmrg </term> 43800f8248bfSmrg <listitem> 43810f8248bfSmrg <para> 43820f8248bfSmrg keyboard description for controls information 43830f8248bfSmrg </para> 43840f8248bfSmrg </listitem> 43850f8248bfSmrg </varlistentry> 43860f8248bfSmrg</variablelist> 43870f8248bfSmrg 43880f8248bfSmrg<para> 43890f8248bfSmrg<function>XkbGetControls</function> 43900f8248bfSmrgqueries the server for the requested control information, waits for a reply, 4391e9fcaa8aSmrgand then copies the server’s values for the requested information into the 43920f8248bfSmrg<structfield>ctrls</structfield> 43930f8248bfSmrgstructure of the 43940f8248bfSmrg<parameter>xkb</parameter> 43950f8248bfSmrgargument. Only those components specified by the 43960f8248bfSmrg<parameter>which</parameter> 43970f8248bfSmrgparameter are copied. Valid values for 43980f8248bfSmrg<parameter>which</parameter> 43990f8248bfSmrgare any combination of the masks listed in 44000f8248bfSmrg<link linkend="table10.7">Table 10.7</link> that have <quote>ok</quote> in the 44010f8248bfSmrg<parameter>which</parameter> 44020f8248bfSmrgcolumn. 4403e9fcaa8aSmrg</para> 4404e9fcaa8aSmrg 4405e9fcaa8aSmrg 4406e9fcaa8aSmrg<para> 44070f8248bfSmrgIf 44080f8248bfSmrg<parameter>xkb</parameter>-><structfield>ctrls</structfield> 44090f8248bfSmrgis 44100f8248bfSmrg<symbol>NULL</symbol>, 44110f8248bfSmrg<function>XkbGetControls</function> 44120f8248bfSmrgallocates and initializes it before obtaining the values specified by 44130f8248bfSmrg<parameter>which</parameter>. 44140f8248bfSmrgIf 44150f8248bfSmrg<parameter>xkb</parameter>-><structfield>ctrls</structfield> 44160f8248bfSmrgis not 44170f8248bfSmrg<symbol>NULL</symbol>, 44180f8248bfSmrg<function>XkbGetControls</function> 44190f8248bfSmrgmodifies only those portions of 44200f8248bfSmrg<parameter>xkb</parameter>-><structfield>ctrls</structfield> 44210f8248bfSmrgcorresponding to the values specified by 44220f8248bfSmrg<parameter>which</parameter>. 4423e9fcaa8aSmrg</para> 4424e9fcaa8aSmrg 4425e9fcaa8aSmrg 4426e9fcaa8aSmrg<para> 44270f8248bfSmrg<function>XkbGetControls</function> 44280f8248bfSmrgreturns 44290f8248bfSmrg<symbol>Success</symbol> 44300f8248bfSmrgif successful; otherwise, it returns 44310f8248bfSmrg<errorname>BadAlloc</errorname> 44320f8248bfSmrgif it cannot obtain sufficient storage, 44330f8248bfSmrg<errorname>BadMatch</errorname> 44340f8248bfSmrgif 44350f8248bfSmrg<parameter>xkb</parameter> 44360f8248bfSmrgis 44370f8248bfSmrg<symbol>NULL</symbol> 44380f8248bfSmrgor 44390f8248bfSmrg<parameter>which</parameter> 44400f8248bfSmrgis empty, or 44410f8248bfSmrg<errorname>BadImplementation</errorname>. 4442e9fcaa8aSmrg</para> 4443e9fcaa8aSmrg 4444e9fcaa8aSmrg 4445e9fcaa8aSmrg<para> 44460f8248bfSmrgTo free the 44470f8248bfSmrg<structfield>ctrls</structfield> 44480f8248bfSmrgmember of a keyboard description, use 44490f8248bfSmrg<function>XkbFreeControls</function> 44500f8248bfSmrg(see <link linkend="Allocating_and_Freeing_an_XkbControlsRec">section 10.12</link>) 4451e9fcaa8aSmrg</para> 4452e9fcaa8aSmrg 4453e9fcaa8aSmrg 4454e9fcaa8aSmrg<para> 44550f8248bfSmrgThe 44560f8248bfSmrg<structfield>num_groups</structfield> 44570f8248bfSmrgfield in the 44580f8248bfSmrg<structfield>ctrls</structfield> 44590f8248bfSmrgstructure is always filled in by 44600f8248bfSmrg<function>XkbGetControls</function>, 44610f8248bfSmrgregardless of which bits are selected by 44620f8248bfSmrg<parameter>which</parameter>. 4463e9fcaa8aSmrg</para> 4464e9fcaa8aSmrg 4465e9fcaa8aSmrg 44660f8248bfSmrg</sect1> 44670f8248bfSmrg<sect1 id='Changing_Controls'> 44680f8248bfSmrg<title>Changing Controls</title> 44690f8248bfSmrg 4470e9fcaa8aSmrg<para> 44710f8248bfSmrgThere are two ways to make changes to controls: either change a local copy 44720f8248bfSmrgkeyboard description and call 44730f8248bfSmrg<function>XkbSetControls</function>, 44740f8248bfSmrgor, to reduce network traffic, use an 44750f8248bfSmrg<structname>XkbControlsChangesRec</structname> 44760f8248bfSmrgstructure and call 44770f8248bfSmrg<function>XkbChangeControls</function>. 44780f8248bfSmrg</para> 44790f8248bfSmrg 44800f8248bfSmrg 44810f8248bfSmrg<para> 44820f8248bfSmrgTo change the state of one or more controls, first modify the 44830f8248bfSmrg<structfield>ctrls</structfield> 44840f8248bfSmrgstructure in a local copy of the keyboard description and then use 44850f8248bfSmrg<function>XkbSetControls</function> 44860f8248bfSmrgto copy those changes to the X server. 44870f8248bfSmrg</para> 44880f8248bfSmrg 44890f8248bfSmrg<indexterm significance="preferred" zone="XkbSetControls"><primary><function>XkbSetControls</function></primary></indexterm> 44900f8248bfSmrg<funcsynopsis id="XkbSetControls"> 44910f8248bfSmrg <funcprototype> 44920f8248bfSmrg <funcdef>Bool <function>XkbSetControls</function></funcdef> 44930f8248bfSmrg<!-- ( 44940f8248bfSmrg<parameter>display, which, xkb)</parameter> --> 44950f8248bfSmrg 44960f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 44970f8248bfSmrg <paramdef>unsigned long <parameter>which</parameter></paramdef> 44980f8248bfSmrg <paramdef>XkbDescPtr <parameter>xkb</parameter></paramdef> 44990f8248bfSmrg </funcprototype> 45000f8248bfSmrg</funcsynopsis> 45010f8248bfSmrg<variablelist> 45020f8248bfSmrg <varlistentry> 45030f8248bfSmrg <term> 45040f8248bfSmrg <parameter>display</parameter> 45050f8248bfSmrg </term> 45060f8248bfSmrg <listitem> 45070f8248bfSmrg <para> 45080f8248bfSmrg connection to X server 45090f8248bfSmrg </para> 45100f8248bfSmrg </listitem> 45110f8248bfSmrg </varlistentry> 45120f8248bfSmrg <varlistentry> 45130f8248bfSmrg <term> 45140f8248bfSmrg <parameter>which</parameter> 45150f8248bfSmrg </term> 45160f8248bfSmrg <listitem> 45170f8248bfSmrg <para> 45180f8248bfSmrg mask of controls to change 45190f8248bfSmrg </para> 45200f8248bfSmrg </listitem> 45210f8248bfSmrg </varlistentry> 45220f8248bfSmrg <varlistentry> 45230f8248bfSmrg <term> 45240f8248bfSmrg <parameter>xkb</parameter> 45250f8248bfSmrg </term> 45260f8248bfSmrg <listitem> 45270f8248bfSmrg <para> 45280f8248bfSmrg <structfield>ctrls</structfield> field contains new values to be set 45290f8248bfSmrg </para> 45300f8248bfSmrg </listitem> 45310f8248bfSmrg </varlistentry> 45320f8248bfSmrg</variablelist> 45330f8248bfSmrg 45340f8248bfSmrg<para> 45350f8248bfSmrgFor each bit that is set in the 45360f8248bfSmrg<parameter>which</parameter> 45370f8248bfSmrgparameter, 45380f8248bfSmrg<function>XkbSetControls</function> 45390f8248bfSmrgsends the corresponding values from the 45400f8248bfSmrg<parameter>xkb</parameter>-><structfield>ctrls</structfield> 45410f8248bfSmrgfield to the server. Valid values for 45420f8248bfSmrg<parameter>which</parameter> 45430f8248bfSmrgare any combination of the masks listed in 45440f8248bfSmrg<link linkend="table10.7">Table 10.7</link> that have <quote>ok</quote> in the 45450f8248bfSmrg<parameter>which</parameter> 45460f8248bfSmrgcolumn. 45470f8248bfSmrg</para> 45480f8248bfSmrg 45490f8248bfSmrg 45500f8248bfSmrg<para> 45510f8248bfSmrgIf 45520f8248bfSmrg<parameter>xkb</parameter>-><structfield>ctrls</structfield> 45530f8248bfSmrgis 45540f8248bfSmrg<symbol>NULL</symbol>, 45550f8248bfSmrgthe server does not support a compatible version of Xkb, or the Xkb extension 45560f8248bfSmrghas not been properly initialized, 45570f8248bfSmrg<function>XkbSetControls</function> 45580f8248bfSmrgreturns 45590f8248bfSmrg<symbol>False</symbol>. 45600f8248bfSmrgOtherwise, it sends the request to the X server and returns 45610f8248bfSmrg<symbol>True</symbol>. 45620f8248bfSmrg</para> 45630f8248bfSmrg 45640f8248bfSmrg 45650f8248bfSmrg<para> 45660f8248bfSmrgNote that changes to attributes of controls in the 45670f8248bfSmrg<structname>XkbControlsRec</structname> 45680f8248bfSmrgstructure are apparent only when the associated control is enabled, although 4569e9fcaa8aSmrgthe corresponding values are still updated in the X server. For example, the 45700f8248bfSmrg<structfield>repeat_delay</structfield> 45710f8248bfSmrgand 45720f8248bfSmrg<structfield>repeat_interval</structfield> 45730f8248bfSmrgfields are ignored unless the 45740f8248bfSmrg<emphasis>RepeatKeys</emphasis> 45750f8248bfSmrgcontrol is enabled (that is, the X server’s equivalent of 45760f8248bfSmrg<structfield>xkb->ctrls</structfield> 45770f8248bfSmrghas 45780f8248bfSmrg<symbol>XkbRepeatKeysMask</symbol> 45790f8248bfSmrgset in 45800f8248bfSmrg<structfield>enabled_ctrls</structfield>). 45810f8248bfSmrgIt is permissible to modify the attributes of a control in one call to 45820f8248bfSmrgXkbSetControls and enable the control in a subsequent call. See <link linkend="The_EnabledControls_Control">section 10.1.1</link> 4583e9fcaa8aSmrgfor more information on enabling and disabling controls. 4584e9fcaa8aSmrg</para> 4585e9fcaa8aSmrg 4586e9fcaa8aSmrg 4587e9fcaa8aSmrg<para> 45880f8248bfSmrgNote that the 45890f8248bfSmrg<structfield>enabled_ctrls</structfield> 45900f8248bfSmrgfield is itself a control — the 45910f8248bfSmrg<emphasis>EnabledControls</emphasis> 45920f8248bfSmrgcontrol. As such, to set a specific configuration of enabled and disabled 45930f8248bfSmrgboolean controls, you must set 45940f8248bfSmrg<structfield>enabled_ctrls</structfield> 45950f8248bfSmrgto the appropriate bits to enable only the controls you want and disable all 45960f8248bfSmrgothers, then specify the 45970f8248bfSmrg<symbol>XkbControlsEnabledMask</symbol> 45980f8248bfSmrgin a call to 45990f8248bfSmrg<function>XkbSetControls</function>. 46000f8248bfSmrgBecause this is somewhat awkward if all you want to do is enable and disable 4601e9fcaa8aSmrgcontrols, and not modify any of their attributes, a convenience function is 46020f8248bfSmrgalso provided for this purpose 46030f8248bfSmrg(<function>XkbChangeEnabledControls</function>, 46040f8248bfSmrg<link linkend="The_EnabledControls_Control">section 10.1.1</link>). 4605e9fcaa8aSmrg</para> 4606e9fcaa8aSmrg 4607e9fcaa8aSmrg 4608eb411b4bSmrg<sect2 id='The_XkbControlsChangesRec_Structure'> 4609e9fcaa8aSmrg<title>The XkbControlsChangesRec Structure</title> 4610e9fcaa8aSmrg 46110f8248bfSmrg<indexterm significance="preferred" zone="The_XkbControlsChangesRec_Structure"> 46120f8248bfSmrg<primary><structname>XkbControlsChangesRec</structname></primary></indexterm> 46130f8248bfSmrg 4614e9fcaa8aSmrg<para> 46150f8248bfSmrgThe 46160f8248bfSmrg<structname>XkbControlsChangesRec</structname> 46170f8248bfSmrgstructure allows applications to track modifications to an 46180f8248bfSmrg<structname>XkbControlsRec</structname> 46190f8248bfSmrgstructure and thereby reduce the amount of traffic sent to the server. The 46200f8248bfSmrgsame 46210f8248bfSmrg<structname>XkbControlsChangesRec</structname> 46220f8248bfSmrgstructure may be used in several successive modifications to the same 46230f8248bfSmrg<structname>XkbControlsRec</structname> 46240f8248bfSmrgstructure, then subsequently used to cause all of the changes, and only the 46250f8248bfSmrgchanges, to be propagated to the server. The 46260f8248bfSmrg<structname>XkbControlsChangesRec</structname> 46270f8248bfSmrgstructure is defined as follows: 4628e9fcaa8aSmrg 46290f8248bfSmrg<programlisting> 4630e9fcaa8aSmrgtypedef struct _XkbControlsChanges { 46310f8248bfSmrg unsigned int changed_ctrls; /* bits indicating changed 46320f8248bfSmrg control data */ 46330f8248bfSmrg unsigned int enabled_ctrls_changes; /* bits indicating 46340f8248bfSmrg enabled/disabled controls */ 46350f8248bfSmrg Bool num_groups_changed; /* <symbol>True</symbol> if number of keyboard 46360f8248bfSmrg groups changed */ 46370f8248bfSmrg} <structname>XkbControlsChangesRec</structname>, *XkbControlsChangesPtr; 4638e9fcaa8aSmrg</programlisting></para> 4639e9fcaa8aSmrg 4640e9fcaa8aSmrg<para> 46410f8248bfSmrgThe 46420f8248bfSmrg<structfield>changed_ctrls</structfield> 46430f8248bfSmrgfield is a mask specifying which logical sets of data in the controls 46440f8248bfSmrgstructure have been modified. In this context, modified means 46450f8248bfSmrg<emphasis>set</emphasis>, 46460f8248bfSmrgthat is, if a value is set to the same value it previously contained, it has 46470f8248bfSmrgstill been modified, and is noted as changed. Valid values for 46480f8248bfSmrg<structfield>changed_ctrls</structfield> 46490f8248bfSmrgare any combination of the masks listed in 46500f8248bfSmrg<link linkend="table10.7">Table 10.7</link> that have <quote>ok</quote> in the 46510f8248bfSmrg<structfield>changed_ctrls</structfield> 46520f8248bfSmrgcolumn. Setting a bit implies the corresponding data fields from the 46530f8248bfSmrg<quote>Relevant XkbControlsRec Data Fields</quote> column in 46540f8248bfSmrg<link linkend="table10.6">Table 10.6</link> have been modified. The 46550f8248bfSmrg<structfield>enabled_ctrls_changes</structfield> 46560f8248bfSmrgfield specifies which bits in the 46570f8248bfSmrg<structfield>enabled_ctrls</structfield> 46580f8248bfSmrgfield have changed. If the number of keyboard groups has changed, the 46590f8248bfSmrg<structfield>num_groups_changed</structfield> 46600f8248bfSmrgfield is set to <symbol>True</symbol>. 4661e9fcaa8aSmrg</para> 4662e9fcaa8aSmrg 4663e9fcaa8aSmrg 4664e9fcaa8aSmrg<para> 4665e9fcaa8aSmrgIf you have an Xkb description with controls that have been modified and an 46660f8248bfSmrg<structname>XkbControlsChangesRec</structname> 46670f8248bfSmrgthat describes the changes that have been made, the 46680f8248bfSmrg<function>XkbChangeControls</function> 46690f8248bfSmrgfunction provides a flexible method for updating the controls in a server to 4670e9fcaa8aSmrgmatch those in the changed keyboard description. 4671e9fcaa8aSmrg</para> 4672e9fcaa8aSmrg 46730f8248bfSmrg<indexterm significance="preferred" zone="XkbChangeControls"><primary><function>XkbChangeControls</function></primary></indexterm> 46740f8248bfSmrg<funcsynopsis id="XkbChangeControls"> 46750f8248bfSmrg <funcprototype> 46760f8248bfSmrg <funcdef>Bool <function>XkbChangeControls</function></funcdef> 46770f8248bfSmrg<!-- ( 46780f8248bfSmrg<parameter>dpy, xkb, changes</parameter> 46790f8248bfSmrg) --> 46800f8248bfSmrg 46810f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 46820f8248bfSmrg <paramdef>XkbDescPtr <parameter>xkb</parameter></paramdef> 46830f8248bfSmrg <paramdef>XkbControlsChangesPtr <parameter>changes</parameter></paramdef> 46840f8248bfSmrg </funcprototype> 46850f8248bfSmrg</funcsynopsis> 46860f8248bfSmrg<variablelist> 46870f8248bfSmrg <varlistentry> 46880f8248bfSmrg <term> 46890f8248bfSmrg <parameter>dpy</parameter> 46900f8248bfSmrg </term> 46910f8248bfSmrg <listitem> 46920f8248bfSmrg <para> 46930f8248bfSmrg connection to X server 46940f8248bfSmrg </para> 46950f8248bfSmrg </listitem> 46960f8248bfSmrg </varlistentry> 46970f8248bfSmrg <varlistentry> 46980f8248bfSmrg <term> 46990f8248bfSmrg <parameter>xkb</parameter> 47000f8248bfSmrg </term> 47010f8248bfSmrg <listitem> 47020f8248bfSmrg <para> 47030f8248bfSmrg keyboard description with changed <structfield>xkb->ctrls</structfield> 47040f8248bfSmrg </para> 47050f8248bfSmrg </listitem> 47060f8248bfSmrg </varlistentry> 47070f8248bfSmrg <varlistentry> 47080f8248bfSmrg <term> 47090f8248bfSmrg <parameter>changes</parameter> 47100f8248bfSmrg </term> 47110f8248bfSmrg <listitem> 47120f8248bfSmrg <para> 47130f8248bfSmrg which parts of <structfield>xkb->ctrls</structfield> have changed 47140f8248bfSmrg </para> 47150f8248bfSmrg </listitem> 47160f8248bfSmrg </varlistentry> 47170f8248bfSmrg</variablelist> 47180f8248bfSmrg 47190f8248bfSmrg<para> 47200f8248bfSmrg<function>XkbChangeControls</function> 47210f8248bfSmrgcopies any controls fields specified by 47220f8248bfSmrg<parameter>changes</parameter> 47230f8248bfSmrgfrom the keyboard description controls structure, 47240f8248bfSmrg<parameter>xkb</parameter>-><structfield>ctrls</structfield>, 47250f8248bfSmrgto the server specified by 47260f8248bfSmrg<parameter>dpy</parameter>. 4727e9fcaa8aSmrg</para> 4728e9fcaa8aSmrg 4729e9fcaa8aSmrg 4730e9fcaa8aSmrg</sect2> 4731e9fcaa8aSmrg</sect1> 4732eb411b4bSmrg<sect1 id='Tracking_Changes_to_Keyboard_Controls'> 4733e9fcaa8aSmrg<title>Tracking Changes to Keyboard Controls</title> 4734e9fcaa8aSmrg 47350f8248bfSmrg<indexterm significance="preferred" zone="Tracking_Changes_to_Keyboard_Controls"> 47360f8248bfSmrg<primary>events</primary><secondary><symbol>XkbControlsNotify</symbol></secondary></indexterm> 47370f8248bfSmrg<indexterm significance="preferred" zone="Tracking_Changes_to_Keyboard_Controls"> 47380f8248bfSmrg<primary><structname>XkbControlsNotifyEvent</structname></primary></indexterm> 47390f8248bfSmrg 4740e9fcaa8aSmrg<para> 4741e9fcaa8aSmrgWhenever a field in the controls structure changes in the server’s keyboard 47420f8248bfSmrgdescription, the server sends an 47430f8248bfSmrg<symbol>XkbControlsNotify</symbol> 47440f8248bfSmrgevent to all interested clients.To receive 47450f8248bfSmrg<symbol>XkbControlsNotify</symbol> 47460f8248bfSmrgevents under all possible conditions, use 47470f8248bfSmrg<function>XkbSelectEvents</function> 47480f8248bfSmrg(see <link linkend="Selecting_Xkb_Events">section 4.3</link>) and pass 47490f8248bfSmrg<symbol>XkbControlsNotifyMask</symbol> 47500f8248bfSmrgin both 47510f8248bfSmrg<parameter>bits_to_change</parameter> 47520f8248bfSmrgand 47530f8248bfSmrg<parameter>values_for_bits</parameter>. 4754e9fcaa8aSmrg</para> 4755e9fcaa8aSmrg 4756e9fcaa8aSmrg 4757e9fcaa8aSmrg<para> 47580f8248bfSmrgTo receive 47590f8248bfSmrg<symbol>XkbControlsNotify</symbol> 47600f8248bfSmrgevents only under certain conditions, use 47610f8248bfSmrg<function>XkbSelectEventDetails</function> 47620f8248bfSmrgusing 47630f8248bfSmrg<symbol>XkbControlsNotify</symbol> 47640f8248bfSmrgas the 47650f8248bfSmrg<structfield>event_type</structfield> 47660f8248bfSmrgand specifying the desired state changes in 47670f8248bfSmrg<parameter>bits_to_change</parameter> 47680f8248bfSmrgand 47690f8248bfSmrg<parameter>values_for_bits</parameter> 47700f8248bfSmrgusing mask bits from <link linkend="table10.7">Table 10.7</link>. 4771e9fcaa8aSmrg</para> 4772e9fcaa8aSmrg 4773e9fcaa8aSmrg 4774e9fcaa8aSmrg<para> 47750f8248bfSmrgThe structure for the 47760f8248bfSmrg<symbol>XkbControlsNotify</symbol> 47770f8248bfSmrgevent is defined as follows: 4778e9fcaa8aSmrg 47790f8248bfSmrg<programlisting> 4780e9fcaa8aSmrgtypedef struct { 47810f8248bfSmrg int type; /* Xkb extension base event code */ 47820f8248bfSmrg unsigned long serial; /* X server serial number for event */ 47830f8248bfSmrg Bool send_event; /* <symbol>True</symbol> ⇒ synthetically generated */ 47840f8248bfSmrg Display * display; /* server connection where event generated */ 47850f8248bfSmrg Time time; /* server time when event generated */ 47860f8248bfSmrg int xkb_type; /* <symbol>XkbCompatMapNotify</symbol> */ 47870f8248bfSmrg int device; /* Xkb device ID, 47880f8248bfSmrg will not be <symbol>XkbUseCoreKbd</symbol> */ 47890f8248bfSmrg unsigned int changed_ctrls; /* bits indicating which controls 47900f8248bfSmrg data have changed */ 47910f8248bfSmrg unsigned int enabled_ctrls; /* controls currently enabled in server */ 47920f8248bfSmrg unsigned int enabled_ctrl_changes; /* bits indicating 47930f8248bfSmrg enabled/disabled controls */ 47940f8248bfSmrg int num_groups; /* current number of keyboard groups */ 47950f8248bfSmrg KeyCode keycode; /* != 0 ⇒ keycode of key causing change */ 47960f8248bfSmrg char event_type; /* Type of event causing change */ 47970f8248bfSmrg char req_major; /* major event code of event causing change */ 47980f8248bfSmrg char req_minor; /* minor event code of event causing change */ 47990f8248bfSmrg} <structname>XkbControlsNotifyEvent</structname>; 4800e9fcaa8aSmrg</programlisting></para> 4801e9fcaa8aSmrg 4802e9fcaa8aSmrg<para> 48030f8248bfSmrgThe 48040f8248bfSmrg<structfield>changed_ctrls</structfield> 48050f8248bfSmrgfield specifies the controls components that have changed and consists of bits 48060f8248bfSmrgtaken from the masks defined in 48070f8248bfSmrg<link linkend="table10.7">Table 10.7</link> with <quote>ok</quote> in the 48080f8248bfSmrg<structfield>changed_ctrls</structfield> 48090f8248bfSmrgcolumn. 4810e9fcaa8aSmrg</para> 4811e9fcaa8aSmrg 4812e9fcaa8aSmrg 4813e9fcaa8aSmrg<para> 48140f8248bfSmrgThe controls currently enabled in the server are reported in the 48150f8248bfSmrg<structfield>enabled_ctrls</structfield> 48160f8248bfSmrgfield. If any controls were just enabled or disabled (that is, the contents of 48170f8248bfSmrgthe 48180f8248bfSmrg<structfield>enabled_ctrls</structfield> 48190f8248bfSmrgfield changed), they are flagged in the 48200f8248bfSmrg<structfield>enabled_ctrl_changes</structfield> 48210f8248bfSmrgfield. The valid bits for these fields are the masks listed in 48220f8248bfSmrg<link linkend="table10.7">Table 10.7</link> with 48230f8248bfSmrg<quote>ok</quote> in the 48240f8248bfSmrg<structfield>enabled_ctrls</structfield> 48250f8248bfSmrgcolumn. The 48260f8248bfSmrg<structfield>num_groups</structfield> 48270f8248bfSmrgfield reports the number of groups bound to the key belonging to the most 4828e9fcaa8aSmrgnumber of groups and is automatically updated when the keyboard mapping changes. 4829e9fcaa8aSmrg</para> 4830e9fcaa8aSmrg 4831e9fcaa8aSmrg 4832e9fcaa8aSmrg<para> 48330f8248bfSmrgIf the change was caused by a request from a client, the 48340f8248bfSmrg<structfield>keycode</structfield> 48350f8248bfSmrgand 48360f8248bfSmrg<structfield>event_type</structfield> 48370f8248bfSmrgfields are set to 48380f8248bfSmrg<emphasis>zero</emphasis> 48390f8248bfSmrgand the 48400f8248bfSmrg<structfield>req_major</structfield> 48410f8248bfSmrgand 48420f8248bfSmrg<structfield>req_minor</structfield> 48430f8248bfSmrgfields identify the request. The 48440f8248bfSmrg<structfield>req_major</structfield> 48450f8248bfSmrgvalue is the same as the major extension opcode. Otherwise, 48460f8248bfSmrg<structfield>event_type</structfield> 48470f8248bfSmrgis set to the type of event that caused the change (one of 48480f8248bfSmrg<symbol>KeyPress</symbol>, 48490f8248bfSmrg<symbol>KeyRelease</symbol>, 48500f8248bfSmrg<symbol>DeviceKeyPress</symbol>, 48510f8248bfSmrg<symbol>DeviceKeyRelease</symbol>, 48520f8248bfSmrg<symbol>ButtonPress</symbol> 48530f8248bfSmrgor 48540f8248bfSmrg<symbol>ButtonRelease</symbol>), 48550f8248bfSmrgand 48560f8248bfSmrg<structfield>req_major</structfield> 48570f8248bfSmrgand 48580f8248bfSmrg<structfield>req_minor</structfield> 48590f8248bfSmrgare undefined. If 48600f8248bfSmrg<structfield>event_type</structfield> 48610f8248bfSmrgis 48620f8248bfSmrg<symbol>KeyPress</symbol>, 48630f8248bfSmrg<symbol>KeyRelease</symbol>, 48640f8248bfSmrg<symbol>DeviceKeyPress</symbol>, 48650f8248bfSmrgor 48660f8248bfSmrg<symbol>DeviceKeyRelease</symbol>, 48670f8248bfSmrgthe 48680f8248bfSmrg<structfield>keycode</structfield> 48690f8248bfSmrgfield is set to the key that caused the change. If 48700f8248bfSmrg<structfield>event_type</structfield> 48710f8248bfSmrgis 48720f8248bfSmrg<symbol>ButtonPress</symbol> 48730f8248bfSmrgor 48740f8248bfSmrg<symbol>ButtonRelease</symbol>, 48750f8248bfSmrg<structfield>keycode</structfield> 48760f8248bfSmrgcontains the button number. 48770f8248bfSmrg</para> 48780f8248bfSmrg 48790f8248bfSmrg 48800f8248bfSmrg<para> 48810f8248bfSmrgWhen a client receives an 48820f8248bfSmrg<symbol>XkbControlsNotify</symbol> 48830f8248bfSmrgevent, it can note the changes in a changes structure using 48840f8248bfSmrg<function>XkbNoteControlsChanges</function>. 48850f8248bfSmrg</para> 48860f8248bfSmrg 48870f8248bfSmrg<indexterm significance="preferred" zone="XkbNoteControlsChanges"><primary><function>XkbNoteControlsChanges</function></primary></indexterm> 48880f8248bfSmrg<funcsynopsis id="XkbNoteControlsChanges"> 48890f8248bfSmrg <funcprototype> 48900f8248bfSmrg <funcdef>void <function>XkbNoteControlsChanges</function></funcdef> 48910f8248bfSmrg<!-- ( 48920f8248bfSmrg<parameter>changes</parameter>, 48930f8248bfSmrg<parameter>new</parameter>, 48940f8248bfSmrg<parameter>wanted</parameter> 48950f8248bfSmrg) --> 48960f8248bfSmrg 48970f8248bfSmrg <paramdef>XkbControlsChangesPtr <parameter>changes</parameter></paramdef> 48980f8248bfSmrg <paramdef>XkbControlsNotifyEvent *<parameter>new</parameter></paramdef> 48990f8248bfSmrg <paramdef>unsigned int <parameter>wanted</parameter></paramdef> 49000f8248bfSmrg </funcprototype> 49010f8248bfSmrg</funcsynopsis> 49020f8248bfSmrg<variablelist> 49030f8248bfSmrg <varlistentry> 49040f8248bfSmrg <term> 49050f8248bfSmrg <parameter>changes</parameter> 49060f8248bfSmrg </term> 49070f8248bfSmrg <listitem> 49080f8248bfSmrg <para> 49090f8248bfSmrg records changes indicated by new 49100f8248bfSmrg </para> 49110f8248bfSmrg </listitem> 49120f8248bfSmrg </varlistentry> 49130f8248bfSmrg <varlistentry> 49140f8248bfSmrg <term> 49150f8248bfSmrg <parameter>new</parameter> 49160f8248bfSmrg </term> 49170f8248bfSmrg <listitem> 49180f8248bfSmrg <para> 49190f8248bfSmrg tells which things have changed 49200f8248bfSmrg </para> 49210f8248bfSmrg </listitem> 49220f8248bfSmrg </varlistentry> 49230f8248bfSmrg <varlistentry> 49240f8248bfSmrg <term> 49250f8248bfSmrg <parameter>wanted</parameter> 49260f8248bfSmrg </term> 49270f8248bfSmrg <listitem> 49280f8248bfSmrg <para> 49290f8248bfSmrg tells which parts of new to record in changes 49300f8248bfSmrg </para> 49310f8248bfSmrg </listitem> 49320f8248bfSmrg </varlistentry> 49330f8248bfSmrg</variablelist> 49340f8248bfSmrg 49350f8248bfSmrg<para> 49360f8248bfSmrgThe 49370f8248bfSmrg<parameter>wanted</parameter> 49380f8248bfSmrgparameter is a bitwise inclusive OR of bits taken from the set of masks 49390f8248bfSmrgspecified in <link linkend="table10.7">Table 10.7</link> with <quote>ok</quote> 49400f8248bfSmrgin the 49410f8248bfSmrg<structfield>changed_ctrls</structfield> 49420f8248bfSmrgcolumn. 49430f8248bfSmrg<function>XkbNoteControlsChanges</function> 49440f8248bfSmrgcopies any changes reported in 49450f8248bfSmrg<parameter>new</parameter> 49460f8248bfSmrgand specified in 49470f8248bfSmrg<parameter>wanted</parameter> 49480f8248bfSmrginto the changes record specified by 49490f8248bfSmrg<parameter>changes</parameter>. 49500f8248bfSmrg</para> 49510f8248bfSmrg 49520f8248bfSmrg 49530f8248bfSmrg<para> 49540f8248bfSmrgUse 49550f8248bfSmrg<function>XkbGetControlsChanges</function> 49560f8248bfSmrgto update a local copy of a keyboard description with the changes previously 49570f8248bfSmrgnoted by one or more calls to 49580f8248bfSmrg<function>XkbNoteControlsChanges</function>. 49590f8248bfSmrg</para> 49600f8248bfSmrg 49610f8248bfSmrg 49620f8248bfSmrg<indexterm significance="preferred" zone="XkbGetControlsChanges"><primary><function>XkbGetControlsChanges</function></primary></indexterm> 49630f8248bfSmrg<funcsynopsis id="XkbGetControlsChanges"> 49640f8248bfSmrg <funcprototype> 49650f8248bfSmrg <funcdef>Status <function>XkbGetControlsChanges</function></funcdef> 49660f8248bfSmrg<!-- ( 49670f8248bfSmrg<parameter>dpy</parameter>, 49680f8248bfSmrg<parameter>xkb</parameter>, 49690f8248bfSmrg<parameter>changes</parameter> 49700f8248bfSmrg) --> 49710f8248bfSmrg 49720f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 49730f8248bfSmrg <paramdef>XkbDescPtr <parameter>xkb</parameter></paramdef> 49740f8248bfSmrg <paramdef>XkbNameChangesPtr <parameter>changes</parameter></paramdef> 49750f8248bfSmrg </funcprototype> 49760f8248bfSmrg</funcsynopsis> 49770f8248bfSmrg<variablelist> 49780f8248bfSmrg <varlistentry> 49790f8248bfSmrg <term> 49800f8248bfSmrg <parameter>dpy</parameter> 49810f8248bfSmrg </term> 49820f8248bfSmrg <listitem> 49830f8248bfSmrg <para> 49840f8248bfSmrg connection to X server 49850f8248bfSmrg </para> 49860f8248bfSmrg </listitem> 49870f8248bfSmrg </varlistentry> 49880f8248bfSmrg <varlistentry> 49890f8248bfSmrg <term> 49900f8248bfSmrg <parameter>xkb</parameter> 49910f8248bfSmrg </term> 49920f8248bfSmrg <listitem> 49930f8248bfSmrg <para> 49940f8248bfSmrg <structfield>xkb->ctrls</structfield> will be updated 49950f8248bfSmrg </para> 49960f8248bfSmrg </listitem> 49970f8248bfSmrg </varlistentry> 49980f8248bfSmrg <varlistentry> 49990f8248bfSmrg <term> 50000f8248bfSmrg <parameter>changes</parameter> 50010f8248bfSmrg </term> 50020f8248bfSmrg <listitem> 50030f8248bfSmrg <para> 50040f8248bfSmrg indicates which parts of <structfield>xkb->ctrls</structfield> to update 50050f8248bfSmrg </para> 50060f8248bfSmrg </listitem> 50070f8248bfSmrg </varlistentry> 50080f8248bfSmrg</variablelist> 50090f8248bfSmrg 50100f8248bfSmrg<para> 50110f8248bfSmrg<function>XkbGetControlsChanges</function> 50120f8248bfSmrgexamines the 50130f8248bfSmrg<parameter>changes</parameter> 50140f8248bfSmrgparameter, queries the server for the necessary information, and copies the 50150f8248bfSmrgresults into the 50160f8248bfSmrg<parameter>xkb</parameter>-><structfield>ctrls</structfield> 50170f8248bfSmrgkeyboard description. If the 50180f8248bfSmrg<structfield>ctrls</structfield> 50190f8248bfSmrgfield of 50200f8248bfSmrg<parameter>xkb</parameter> 50210f8248bfSmrgis 50220f8248bfSmrg<symbol>NULL</symbol>, 50230f8248bfSmrg<function>XkbGetControlsChanges</function> 50240f8248bfSmrgallocates and initializes it. To free the 50250f8248bfSmrg<structfield>ctrls</structfield> 50260f8248bfSmrgfield, use 50270f8248bfSmrg<function>XkbFreeControls</function> 50280f8248bfSmrg(see <link linkend="Allocating_and_Freeing_an_XkbControlsRec">section 10.12</link>). 50290f8248bfSmrg</para> 50300f8248bfSmrg 50310f8248bfSmrg 50320f8248bfSmrg<para> 50330f8248bfSmrg<function>XkbGetControlsChanges</function> 50340f8248bfSmrgreturns 50350f8248bfSmrg<symbol>Success</symbol> 50360f8248bfSmrgif successful and can generate 50370f8248bfSmrg<errorname>BadAlloc</errorname>, 50380f8248bfSmrg<errorname>BadImplementation</errorname>, 50390f8248bfSmrgand 50400f8248bfSmrg<errorname>BadMatch</errorname> 50410f8248bfSmrgerrors. 5042e9fcaa8aSmrg</para> 5043e9fcaa8aSmrg 5044e9fcaa8aSmrg 5045e9fcaa8aSmrg</sect1> 5046eb411b4bSmrg<sect1 id='Allocating_and_Freeing_an_XkbControlsRec'> 5047e9fcaa8aSmrg<title>Allocating and Freeing an XkbControlsRec</title> 5048e9fcaa8aSmrg 5049e9fcaa8aSmrg<para> 50500f8248bfSmrgThe need to allocate an 50510f8248bfSmrg<structname>XkbControlsRec</structname> 50520f8248bfSmrgstructure seldom arises; Xkb creates one when an application calls 50530f8248bfSmrg<function>XkbGetControls</function> 50540f8248bfSmrgor a related function. For those situations where there is not an 50550f8248bfSmrg<structname>XkbControlsRec</structname> 50560f8248bfSmrgstructure allocated in the 50570f8248bfSmrg<structname>XkbDescRec</structname>, 50580f8248bfSmrgallocate one by calling 50590f8248bfSmrg<function>XkbAllocControls</function>. 50600f8248bfSmrg</para> 50610f8248bfSmrg 50620f8248bfSmrg<indexterm significance="preferred" zone="XkbAllocControls"><primary><function>XkbAllocControls</function></primary></indexterm> 50630f8248bfSmrg<funcsynopsis id="XkbAllocControls"> 50640f8248bfSmrg <funcprototype> 50650f8248bfSmrg <funcdef>Status <function>XkbAllocControls</function></funcdef> 50660f8248bfSmrg<!-- ( 50670f8248bfSmrg<parameter>xkb, which</parameter> 50680f8248bfSmrg) --> 50690f8248bfSmrg 50700f8248bfSmrg <paramdef>XkbDescPtr <parameter>xkb</parameter></paramdef> 50710f8248bfSmrg <paramdef>unsigned int <parameter>which</parameter></paramdef> 50720f8248bfSmrg </funcprototype> 50730f8248bfSmrg</funcsynopsis> 50740f8248bfSmrg<variablelist> 50750f8248bfSmrg <varlistentry> 50760f8248bfSmrg <term> 50770f8248bfSmrg <parameter>xkb</parameter> 50780f8248bfSmrg </term> 50790f8248bfSmrg <listitem> 50800f8248bfSmrg <para> 50810f8248bfSmrg Xkb description in which to allocate ctrls rec 50820f8248bfSmrg </para> 50830f8248bfSmrg </listitem> 50840f8248bfSmrg </varlistentry> 50850f8248bfSmrg <varlistentry> 50860f8248bfSmrg <term> 50870f8248bfSmrg <parameter>which</parameter> 50880f8248bfSmrg </term> 50890f8248bfSmrg <listitem> 50900f8248bfSmrg <para> 50910f8248bfSmrg mask of components of <structfield>ctrls</structfield> to allocate 50920f8248bfSmrg </para> 50930f8248bfSmrg </listitem> 50940f8248bfSmrg </varlistentry> 50950f8248bfSmrg</variablelist> 50960f8248bfSmrg 50970f8248bfSmrg<para> 50980f8248bfSmrg<function>XkbAllocControls</function> 50990f8248bfSmrgallocates the 51000f8248bfSmrg<structfield>ctrls</structfield> 51010f8248bfSmrgfield of the 51020f8248bfSmrg<parameter>xkb</parameter> 51030f8248bfSmrgparameter, initializes all fields to zero, and returns 51040f8248bfSmrg<symbol>Success</symbol>. 51050f8248bfSmrgIf the 51060f8248bfSmrg<structfield>ctrls</structfield> 51070f8248bfSmrgfield is not 51080f8248bfSmrg<symbol>NULL</symbol>, 51090f8248bfSmrg<function>XkbAllocControls</function> 51100f8248bfSmrgsimply returns 51110f8248bfSmrg<symbol>Success</symbol>. 51120f8248bfSmrgIf 51130f8248bfSmrg<parameter>xkb</parameter> 51140f8248bfSmrgis 51150f8248bfSmrg<symbol>NULL</symbol>, 51160f8248bfSmrg<function>XkbAllocControls</function> 51170f8248bfSmrgreports a 51180f8248bfSmrg<errorname>BadMatch</errorname> 51190f8248bfSmrgerror. If the 51200f8248bfSmrg<structfield>ctrls</structfield> 51210f8248bfSmrgfield could not be allocated, it reports a 51220f8248bfSmrg<errorname>BadAlloc</errorname> 51230f8248bfSmrgerror. 51240f8248bfSmrg</para> 51250f8248bfSmrg 51260f8248bfSmrg 51270f8248bfSmrg<para> 51280f8248bfSmrgThe 51290f8248bfSmrg<parameter>which</parameter> 51300f8248bfSmrgmask specifies the individual fields of the 51310f8248bfSmrg<structfield>ctrls</structfield> 51320f8248bfSmrgstructure to be allocated and can contain any of the valid masks defined in 51330f8248bfSmrg<link linkend="table10.7">Table 10.7</link>. 51340f8248bfSmrgBecause none of the currently existing controls have any structures 5135e9fcaa8aSmrgassociated with them, which is currently of little practical value in this call. 5136e9fcaa8aSmrg</para> 5137e9fcaa8aSmrg 5138e9fcaa8aSmrg 5139e9fcaa8aSmrg<para> 51400f8248bfSmrgTo free memory used by the 51410f8248bfSmrg<structfield>ctrls</structfield> 51420f8248bfSmrgmember of an 51430f8248bfSmrg<structname>XkbDescRec</structname> 51440f8248bfSmrgstructure, use 51450f8248bfSmrg<function>XkbFreeControls</function>: 51460f8248bfSmrg</para> 51470f8248bfSmrg 51480f8248bfSmrg 51490f8248bfSmrg<indexterm significance="preferred" zone="XkbFreeControls"><primary><function>XkbFreeControls</function></primary></indexterm> 51500f8248bfSmrg<funcsynopsis id="XkbFreeControls"> 51510f8248bfSmrg <funcprototype> 51520f8248bfSmrg <funcdef>void <function>XkbFreeControls</function></funcdef> 51530f8248bfSmrg<!-- ( 51540f8248bfSmrg<parameter>xkb, which, free_all</parameter> 51550f8248bfSmrg) --> 51560f8248bfSmrg 51570f8248bfSmrg <paramdef>XkbDescPtr <parameter>xkb</parameter></paramdef> 51580f8248bfSmrg <paramdef>unsigned int <parameter>which</parameter></paramdef> 51590f8248bfSmrg <paramdef>Bool <parameter>free_all</parameter></paramdef> 51600f8248bfSmrg </funcprototype> 51610f8248bfSmrg</funcsynopsis> 51620f8248bfSmrg<variablelist> 51630f8248bfSmrg <varlistentry> 51640f8248bfSmrg <term> 51650f8248bfSmrg <parameter>xkb</parameter> 51660f8248bfSmrg </term> 51670f8248bfSmrg <listitem> 51680f8248bfSmrg <para> 51690f8248bfSmrg Xkb description in which to free controls components 51700f8248bfSmrg </para> 51710f8248bfSmrg </listitem> 51720f8248bfSmrg </varlistentry> 51730f8248bfSmrg <varlistentry> 51740f8248bfSmrg <term> 51750f8248bfSmrg <parameter>which</parameter> 51760f8248bfSmrg </term> 51770f8248bfSmrg <listitem> 51780f8248bfSmrg <para> 51790f8248bfSmrg mask of components of <structfield>ctrls</structfield> to free 51800f8248bfSmrg </para> 51810f8248bfSmrg </listitem> 51820f8248bfSmrg </varlistentry> 51830f8248bfSmrg <varlistentry> 51840f8248bfSmrg <term> 51850f8248bfSmrg <parameter>free_all</parameter> 51860f8248bfSmrg </term> 51870f8248bfSmrg <listitem> 51880f8248bfSmrg <para> 51890f8248bfSmrg <symbol>True</symbol> ⇒ free everything + ctrls itself 51900f8248bfSmrg </para> 51910f8248bfSmrg </listitem> 51920f8248bfSmrg </varlistentry> 51930f8248bfSmrg</variablelist> 51940f8248bfSmrg 51950f8248bfSmrg<para> 51960f8248bfSmrg<function>XkbFreeControls</function> 51970f8248bfSmrgfrees the specified components of the 51980f8248bfSmrg<structfield>ctrls</structfield> 51990f8248bfSmrgfield in the 52000f8248bfSmrg<parameter>xkb</parameter> 52010f8248bfSmrgkeyboard description and sets the corresponding structure component values to 52020f8248bfSmrg<symbol>NULL</symbol> 52030f8248bfSmrgor 52040f8248bfSmrg<emphasis>zero</emphasis>. 52050f8248bfSmrgThe 52060f8248bfSmrg<parameter>which</parameter> 52070f8248bfSmrgmask specifies the fields of 52080f8248bfSmrg<structfield>ctrls</structfield> 52090f8248bfSmrgto be freed and can contain any of the controls components specified in 52100f8248bfSmrg<link linkend="table10.7">Table 10.7</link>. 52110f8248bfSmrg</para> 52120f8248bfSmrg 52130f8248bfSmrg 52140f8248bfSmrg<para> 52150f8248bfSmrgIf 52160f8248bfSmrg<parameter>free_all</parameter> 52170f8248bfSmrgis 52180f8248bfSmrg<symbol>True</symbol>, 52190f8248bfSmrg<function>XkbFreeControls</function> 52200f8248bfSmrgfrees every non- 52210f8248bfSmrg<symbol>NULL</symbol> 52220f8248bfSmrgstructure component in the controls, frees the 52230f8248bfSmrg<structname>XkbControlsRec</structname> 52240f8248bfSmrgstructure referenced by the 52250f8248bfSmrg<structfield>ctrls</structfield> 52260f8248bfSmrgmember of 52270f8248bfSmrg<parameter>xkb</parameter>, 52280f8248bfSmrgand sets 52290f8248bfSmrg<structfield>ctrls</structfield> 52300f8248bfSmrgto 52310f8248bfSmrg<symbol>NULL</symbol>. 5232e9fcaa8aSmrg</para> 5233e9fcaa8aSmrg 5234e9fcaa8aSmrg</sect1> 5235eb411b4bSmrg<sect1 id='The_Miscellaneous_Per_client_Controls'> 5236e9fcaa8aSmrg<title>The Miscellaneous Per-client Controls</title> 5237e9fcaa8aSmrg 5238e9fcaa8aSmrg<para> 5239e9fcaa8aSmrgYou can configure the boolean per-client controls which affect the state 52400f8248bfSmrgreported in button and key events. See 52410f8248bfSmrg<olink targetdoc='xkbproto' targetptr='Setting_a_Passive_Grab_for_an_XKB_State'>section 12.1.1</olink>, 52420f8248bfSmrg<olink targetdoc='xkbproto' targetptr='Effects_of_XKB_on_Core_Protocol_Events'>12.3</olink>, 52430f8248bfSmrg<olink targetdoc='xkbproto' targetptr='Sending_Events_to_Clients'>12.5</olink>, 52440f8248bfSmrgand 52450f8248bfSmrg<olink targetdoc='xkbproto' targetptr='Querying_and_Changing_Per_Client_Flags'>16.3.11</olink> 52460f8248bfSmrgof the 52470f8248bfSmrg<olink targetdoc='xkbproto' targetptr='xkbproto'><citetitle>XKB Protocol specification</citetitle></olink> 52480f8248bfSmrgfor more details. 52490f8248bfSmrg</para> 52500f8248bfSmrg 52510f8248bfSmrg 52520f8248bfSmrg<para> 52530f8248bfSmrgTo get the current values of the 52540f8248bfSmrg<emphasis>per-client</emphasis> 52550f8248bfSmrgcontrols, use 52560f8248bfSmrg<function>XkbGetPerClientControls</function>. 52570f8248bfSmrg</para> 52580f8248bfSmrg 52590f8248bfSmrg<indexterm significance="preferred" zone="XkbGetPerClientControls"><primary><function>XkbGetPerClientControls</function></primary></indexterm> 52600f8248bfSmrg<funcsynopsis id="XkbGetPerClientControls"> 52610f8248bfSmrg <funcprototype> 52620f8248bfSmrg <funcdef>Bool <function>XkbGetPerClientControls</function></funcdef> 52630f8248bfSmrg<!-- ( 52640f8248bfSmrg<parameter>dpy</parameter>, 52650f8248bfSmrg<parameter>ctrls</parameter> 52660f8248bfSmrg) --> 52670f8248bfSmrg 52680f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 52690f8248bfSmrg <paramdef>unsigned int *<parameter>ctrls</parameter></paramdef> 52700f8248bfSmrg </funcprototype> 52710f8248bfSmrg</funcsynopsis> 52720f8248bfSmrg<variablelist> 52730f8248bfSmrg <varlistentry> 52740f8248bfSmrg <term> 52750f8248bfSmrg <parameter>dpy</parameter> 52760f8248bfSmrg </term> 52770f8248bfSmrg <listitem> 52780f8248bfSmrg <para> 52790f8248bfSmrg connection to X server 52800f8248bfSmrg </para> 52810f8248bfSmrg </listitem> 52820f8248bfSmrg </varlistentry> 52830f8248bfSmrg <varlistentry> 52840f8248bfSmrg <term> 52850f8248bfSmrg <parameter>ctrls</parameter> 52860f8248bfSmrg </term> 52870f8248bfSmrg <listitem> 52880f8248bfSmrg <para> 52890f8248bfSmrg 1 bit ⇒ corresponding control is on 52900f8248bfSmrg </para> 52910f8248bfSmrg </listitem> 52920f8248bfSmrg </varlistentry> 52930f8248bfSmrg</variablelist> 52940f8248bfSmrg 52950f8248bfSmrg<para> 52960f8248bfSmrg<function>XkbGetPerClientControls</function> 52970f8248bfSmrgbackfills 52980f8248bfSmrg<parameter>ctrls</parameter> 52990f8248bfSmrgwith the 53000f8248bfSmrg<emphasis>per-client</emphasis> 53010f8248bfSmrgcontrol attributes for this particular client. It returns 53020f8248bfSmrg<symbol>True</symbol> 53030f8248bfSmrgif successful, and 53040f8248bfSmrg<symbol>False</symbol> 53050f8248bfSmrgotherwise. 53060f8248bfSmrg</para> 53070f8248bfSmrg 53080f8248bfSmrg 53090f8248bfSmrg<para> 53100f8248bfSmrgTo change the current values of the 53110f8248bfSmrg<emphasis>per-client</emphasis> 53120f8248bfSmrgcontrol attributes, use 53130f8248bfSmrg<function>XkbSetPerClientControls</function>. 53140f8248bfSmrg</para> 53150f8248bfSmrg 53160f8248bfSmrg 53170f8248bfSmrg<indexterm significance="preferred" zone="XkbSetPerClientControls"><primary><function>XkbSetPerClientControls</function></primary></indexterm> 53180f8248bfSmrg<funcsynopsis id="XkbSetPerClientControls"> 53190f8248bfSmrg <funcprototype> 53200f8248bfSmrg <funcdef>Bool <function>XkbSetPerClientControls</function></funcdef> 53210f8248bfSmrg<!-- ( 53220f8248bfSmrg<parameter>dpy</parameter>, 53230f8248bfSmrg<parameter>ctrls</parameter> 53240f8248bfSmrg) --> 53250f8248bfSmrg 53260f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 53270f8248bfSmrg <paramdef>unsigned int <parameter>change</parameter></paramdef> 53280f8248bfSmrg <paramdef>unsigned int *<parameter>value</parameter></paramdef> 53290f8248bfSmrg </funcprototype> 53300f8248bfSmrg</funcsynopsis> 53310f8248bfSmrg<variablelist> 53320f8248bfSmrg <varlistentry> 53330f8248bfSmrg <term> 53340f8248bfSmrg <parameter>dpy</parameter> 53350f8248bfSmrg </term> 53360f8248bfSmrg <listitem> 53370f8248bfSmrg <para> 53380f8248bfSmrg connection to X server 53390f8248bfSmrg </para> 53400f8248bfSmrg </listitem> 53410f8248bfSmrg </varlistentry> 53420f8248bfSmrg <varlistentry> 53430f8248bfSmrg <term> 53440f8248bfSmrg <parameter>change</parameter> 53450f8248bfSmrg </term> 53460f8248bfSmrg <listitem> 53470f8248bfSmrg <para> 53480f8248bfSmrg 1 bit ⇒ change control 53490f8248bfSmrg </para> 53500f8248bfSmrg </listitem> 53510f8248bfSmrg </varlistentry> 53520f8248bfSmrg <varlistentry> 53530f8248bfSmrg <term> 53540f8248bfSmrg <parameter>value</parameter> 53550f8248bfSmrg </term> 53560f8248bfSmrg <listitem> 53570f8248bfSmrg <para> 53580f8248bfSmrg 1 bit ⇒ control on 53590f8248bfSmrg </para> 53600f8248bfSmrg </listitem> 53610f8248bfSmrg </varlistentry> 53620f8248bfSmrg</variablelist> 53630f8248bfSmrg 53640f8248bfSmrg<para> 53650f8248bfSmrg<function>XkbSetPerClientControls</function> 53660f8248bfSmrgchanges the per-client values for the controls selected by 53670f8248bfSmrg<parameter>change</parameter> to the corresponding value in 53680f8248bfSmrg<parameter>value</parameter>. Legal values for 53690f8248bfSmrg<parameter>change</parameter> and <parameter>value</parameter> 5370e9fcaa8aSmrgare: XkbPCF_GrabsUseXKBStateMask, XkbPCF_LookupStateWhenGrabbed, and 5371e9fcaa8aSmrgXkbPCF_SendEventUsesXKBState. More than one control may be changed at one time 5372e9fcaa8aSmrgby OR-ing the values together. XkbSetPerClientControls backfills value with the 53730f8248bfSmrg<emphasis>per-client</emphasis> 53740f8248bfSmrgcontrol attributes for this particular client. 53750f8248bfSmrgIt returns 53760f8248bfSmrg<symbol>True</symbol> 53770f8248bfSmrgif successful, and 53780f8248bfSmrg<symbol>False</symbol> 53790f8248bfSmrgotherwise. 5380e9fcaa8aSmrg</para> 5381e9fcaa8aSmrg 5382e9fcaa8aSmrg</sect1> 5383e9fcaa8aSmrg</chapter> 5384