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<para> 1621cbfda780SmrgThere are no convenience functions in Xkb for manipulating this control. The 16220f8248bfSmrg<emphasis>AccessXTimeout</emphasis> 1623cbfda780Smrgcontrol settings are carried in the 1624cbfda780Smrg<structfield>ax_timeout</structfield>, 1625cbfda780Smrg<structfield>axt_opts_mask</structfield>, 1626cbfda780Smrg<structfield>axt_opts_values</structfield>, 1627cbfda780Smrg<structfield>axt_ctrls_mask</structfield>, 16280f8248bfSmrgand 1629cbfda780Smrg<structfield>axt_ctrls_values</structfield> 1630cbfda780Smrgfields of an 16310f8248bfSmrg<structname>XkbControlsRec</structname> 1632cbfda780Smrgstructure, discussed in <link linkend="The_XkbControlsRec_Structure">section 10.8</link>. 16330f8248bfSmrg</para> 16340f8248bfSmrg 16350f8248bfSmrg 1636e9fcaa8aSmrg 1637e9fcaa8aSmrg</sect2> 1638eb411b4bSmrg<sect2 id='The_AccessXFeedback_Control'> 1639e9fcaa8aSmrg<title>The AccessXFeedback Control</title> 1640e9fcaa8aSmrg 1641e9fcaa8aSmrg<para> 1642e9fcaa8aSmrgJust as some keyboards can produce keyclicks to indicate when a key is pressed 1643e9fcaa8aSmrgor repeating, Xkb can provide feedback for the controls by using special beep 16440f8248bfSmrgcodes. Use the 16450f8248bfSmrg<emphasis>AccessXFeedback</emphasis> 16460f8248bfSmrgcontrol to configure the specific types of operations that generate feedback. 1647e9fcaa8aSmrg</para> 1648e9fcaa8aSmrg 1649e9fcaa8aSmrg 1650e9fcaa8aSmrg<para> 16510f8248bfSmrgThere is no convenience function for modifying the 16520f8248bfSmrg<emphasis>AccessXFeedback</emphasis> 16530f8248bfSmrgcontrol, although the feedback as a whole can be enabled or disabled just as 16540f8248bfSmrgother boolean controls are (see <link linkend="Controls_that_Enable_and_Disable_Other_Controls">section 10.1</link>). Individual beep codes are turned 16550f8248bfSmrgon or off by modifying the following bits in the 16560f8248bfSmrg<structfield>ax_options</structfield> 16570f8248bfSmrgfield of an 16580f8248bfSmrg<structname>XkbControlsRec</structname> 16590f8248bfSmrgstructure and using 16600f8248bfSmrg<function>XkbSetControls</function> 16610f8248bfSmrg(see <link linkend="Changing_Controls">section 10.10</link>): 1662e9fcaa8aSmrg</para> 1663e9fcaa8aSmrg 16640f8248bfSmrg<table id='table10.3' frame='topbot'> 1665e9fcaa8aSmrg<title>AccessXFeedback Masks</title> 1666eb411b4bSmrg<?dbfo keep-together="always" ?> 1667eb411b4bSmrg<tgroup cols='3' align='left' colsep='0' rowsep='0'> 1668eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 1669eb411b4bSmrg<colspec colname='c2' colwidth='1.0*'/> 1670eb411b4bSmrg<colspec colname='c3' colwidth='1.0*'/> 1671e9fcaa8aSmrg<thead> 1672eb411b4bSmrg<row rowsep='1'> 1673e9fcaa8aSmrg <entry>Action</entry> 1674e9fcaa8aSmrg <entry>Beep Code</entry> 1675e9fcaa8aSmrg <entry>ax_options bit</entry> 1676e9fcaa8aSmrg </row> 1677e9fcaa8aSmrg</thead> 1678e9fcaa8aSmrg<tbody> 1679eb411b4bSmrg<row> 1680e9fcaa8aSmrg <entry>LED turned on</entry> 1681e9fcaa8aSmrg <entry>High-pitched beep</entry> 16820f8248bfSmrg <entry><symbol>XkbAX_IndicatorFBMask</symbol></entry> 1683e9fcaa8aSmrg</row> 1684eb411b4bSmrg<row> 1685e9fcaa8aSmrg <entry>LED turned off</entry> 1686e9fcaa8aSmrg <entry>Low-pitched beep</entry> 16870f8248bfSmrg <entry><symbol>XkbAX_IndicatorFBMask</symbol></entry> 1688e9fcaa8aSmrg</row> 1689eb411b4bSmrg<row> 1690e9fcaa8aSmrg <entry>More than one LED changed state</entry> 1691e9fcaa8aSmrg <entry>Two high-pitched beeps</entry> 16920f8248bfSmrg <entry><symbol>XkbAX_IndicatorFBMask</symbol></entry> 1693e9fcaa8aSmrg</row> 1694eb411b4bSmrg<row> 1695e9fcaa8aSmrg <entry>Control turned on</entry> 1696e9fcaa8aSmrg <entry>Rising tone</entry> 16970f8248bfSmrg <entry><symbol>XkbAX_FeatureFBMask</symbol></entry> 1698e9fcaa8aSmrg</row> 1699eb411b4bSmrg<row> 1700e9fcaa8aSmrg <entry>Control turned off</entry> 1701e9fcaa8aSmrg <entry>Falling tone</entry> 17020f8248bfSmrg <entry><symbol>XkbAX_FeatureFBMask</symbol></entry> 1703e9fcaa8aSmrg</row> 1704eb411b4bSmrg<row> 1705e9fcaa8aSmrg <entry>More than one control changed state</entry> 1706e9fcaa8aSmrg <entry>Two high-pitched beeps</entry> 17070f8248bfSmrg <entry><symbol>XkbAX_FeatureFBMask</symbol></entry> 1708e9fcaa8aSmrg</row> 1709eb411b4bSmrg<row> 1710e9fcaa8aSmrg <entry>SlowKeys and BounceKeys about to be turned on or off</entry> 1711e9fcaa8aSmrg <entry>Three high-pitched beeps</entry> 17120f8248bfSmrg <entry><symbol>XkbAX_SlowWarnFBMask</symbol></entry> 1713e9fcaa8aSmrg</row> 1714eb411b4bSmrg<row> 1715e9fcaa8aSmrg <entry>SlowKeys key pressed</entry> 1716e9fcaa8aSmrg <entry>Medium-pitched beep</entry> 17170f8248bfSmrg <entry><symbol>XkbAX_SKPressFBMask</symbol></entry> 1718e9fcaa8aSmrg</row> 1719eb411b4bSmrg<row> 1720e9fcaa8aSmrg <entry>SlowKeys key accepted</entry> 1721e9fcaa8aSmrg <entry>Medium-pitched beep</entry> 17220f8248bfSmrg <entry><symbol>XkbAX_SKAcceptFBMask</symbol></entry> 1723e9fcaa8aSmrg</row> 1724eb411b4bSmrg<row> 1725e9fcaa8aSmrg <entry>SlowKeys key rejected</entry> 1726e9fcaa8aSmrg <entry>Low-pitched beep</entry> 17270f8248bfSmrg <entry><symbol>XkbAX_SKRejectFBMask</symbol></entry> 1728e9fcaa8aSmrg</row> 1729eb411b4bSmrg<row> 1730e9fcaa8aSmrg <entry>Accepted SlowKeys key released</entry> 1731e9fcaa8aSmrg <entry>Medium-pitched beep</entry> 17320f8248bfSmrg <entry><symbol>XkbAX_SKReleaseFBMask</symbol></entry> 1733e9fcaa8aSmrg</row> 1734eb411b4bSmrg<row> 1735e9fcaa8aSmrg <entry>BounceKeys key rejected</entry> 1736e9fcaa8aSmrg <entry>Low-pitched beep</entry> 17370f8248bfSmrg <entry><symbol>XkbAX_BKRejectFBMask</symbol></entry> 1738e9fcaa8aSmrg</row> 1739eb411b4bSmrg<row> 1740e9fcaa8aSmrg <entry>StickyKeys key latched</entry> 1741e9fcaa8aSmrg <entry>Low-pitched beep followed by high-pitched beep</entry> 17420f8248bfSmrg <entry><symbol>XkbAX_StickyKeysFBMask</symbol></entry> 1743e9fcaa8aSmrg</row> 1744eb411b4bSmrg<row> 1745e9fcaa8aSmrg <entry>StickyKeys key locked</entry> 1746e9fcaa8aSmrg <entry>High-pitched beep</entry> 17470f8248bfSmrg <entry><symbol>XkbAX_StickyKeysFBMask</symbol></entry> 1748e9fcaa8aSmrg</row> 1749eb411b4bSmrg<row> 1750e9fcaa8aSmrg <entry>StickyKeys key unlocked</entry> 1751e9fcaa8aSmrg <entry>Low-pitched beep</entry> 17520f8248bfSmrg <entry><symbol>XkbAX_StickyKeysFBMask</symbol></entry> 1753e9fcaa8aSmrg </row> 1754e9fcaa8aSmrg</tbody> 1755e9fcaa8aSmrg</tgroup> 1756e9fcaa8aSmrg</table> 1757e9fcaa8aSmrg 1758e9fcaa8aSmrg<para> 1759e9fcaa8aSmrgImplementations that cannot generate continuous tones may generate multiple 1760e9fcaa8aSmrgbeeps instead of falling and rising tones; for example, they can generate a 1761e9fcaa8aSmrghigh-pitched beep followed by a low-pitched beep instead of a continuous 1762e9fcaa8aSmrgfalling tone. Other implementations can only ring the bell with one fixed 17630f8248bfSmrgpitch. In these cases, use the 17640f8248bfSmrg<symbol>XkbAX_DumbBellFBMask</symbol> 17650f8248bfSmrgbit of 17660f8248bfSmrg<structfield>ax_options</structfield> 17670f8248bfSmrgto indicate that the bell can only ring with a fixed pitch. 1768e9fcaa8aSmrg</para> 1769e9fcaa8aSmrg 1770e9fcaa8aSmrg 1771e9fcaa8aSmrg<para> 17720f8248bfSmrgWhen any of the above feedbacks occur, Xkb may generate a 17730f8248bfSmrg<symbol>XkbBellNotify</symbol> 17740f8248bfSmrgevent (see <link linkend="Detecting_Bells">section 9.4</link>). 1775e9fcaa8aSmrg</para> 1776e9fcaa8aSmrg 1777e9fcaa8aSmrg 1778e9fcaa8aSmrg</sect2> 1779eb411b4bSmrg<sect2 id='AccessXNotify_Events'> 1780e9fcaa8aSmrg<title>AccessXNotify Events</title> 1781e9fcaa8aSmrg 17820f8248bfSmrg<indexterm significance="preferred" zone="AccessXNotify_Events"> 17830f8248bfSmrg<primary>events</primary><secondary><symbol>XkbAccessXNotify</symbol></secondary></indexterm> 17840f8248bfSmrg<indexterm significance="preferred" zone="AccessXNotify_Events"> 17850f8248bfSmrg<primary><structname>XkbAccessXNotifyEvent</structname></primary></indexterm> 17860f8248bfSmrg 1787e9fcaa8aSmrg<para> 17880f8248bfSmrgThe server can generate 17890f8248bfSmrg<symbol>XkbAccessXNotify</symbol> 17900f8248bfSmrgevents for some of the global keyboard controls. The structure for the 17910f8248bfSmrg<symbol>XkbAccessXNotify</symbol> 17920f8248bfSmrgevent type is as follows: 1793e9fcaa8aSmrg 17940f8248bfSmrg<programlisting> 1795e9fcaa8aSmrgtypedef struct { 17960f8248bfSmrg int type; /* Xkb extension base event code */ 17970f8248bfSmrg unsigned long serial; /* X server serial number for event */ 17980f8248bfSmrg Bool send_event; /* <symbol>True</symbol> ⇒ synthetically generated */ 17990f8248bfSmrg Display * display; /* server connection where event generated */ 18000f8248bfSmrg Time time; /* server time when event generated */ 18010f8248bfSmrg int xkb_type; /* <symbol>XkbAccessXNotify</symbol> */ 18020f8248bfSmrg int device; /* Xkb device ID, will not be <symbol>XkbUseCoreKbd</symbol> */ 18030f8248bfSmrg int detail; /* XkbAXN_* */ 18040f8248bfSmrg KeyCode keycode; /* key of event */ 18050f8248bfSmrg int slowKeysDelay; /* current SlowKeys delay */ 18060f8248bfSmrg int debounceDelay; /* current debounce delay */ 18070f8248bfSmrg} <structname>XkbAccessXNotifyEvent</structname>; 1808e9fcaa8aSmrg</programlisting></para> 1809e9fcaa8aSmrg 1810e9fcaa8aSmrg<para> 18110f8248bfSmrgThe 18120f8248bfSmrg<structfield>detail</structfield> 18130f8248bfSmrgfield describes what AccessX event just occurred and can be any of the values 18140f8248bfSmrgin <link linkend="table10.4">Table 10.4</link>. 1815e9fcaa8aSmrg</para> 1816e9fcaa8aSmrg 18170f8248bfSmrg<table id='table10.4' frame='topbot'> 1818e9fcaa8aSmrg<title>AccessXNotify Events</title> 1819eb411b4bSmrg<?dbfo keep-together="always" ?> 1820eb411b4bSmrg<tgroup cols='2' align='left' colsep='0' rowsep='0'> 1821eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 1822eb411b4bSmrg<colspec colname='c2' colwidth='2.0*'/> 1823e9fcaa8aSmrg<thead> 1824eb411b4bSmrg<row rowsep='1'> 1825e9fcaa8aSmrg <entry>detail</entry> 1826e9fcaa8aSmrg <entry>Reason</entry> 1827e9fcaa8aSmrg</row> 1828e9fcaa8aSmrg</thead> 1829e9fcaa8aSmrg<tbody> 1830eb411b4bSmrg<row> 18310f8248bfSmrg <entry><symbol>XkbAXN_SKPress</symbol></entry> 1832e9fcaa8aSmrg <entry>A key was pressed when SlowKeys was enabled.</entry> 1833e9fcaa8aSmrg</row> 1834eb411b4bSmrg<row> 18350f8248bfSmrg <entry><symbol>XkbAXN_SKAccept</symbol></entry> 1836e9fcaa8aSmrg <entry>A key was accepted (held longer than the SlowKeys delay).</entry> 1837e9fcaa8aSmrg</row> 1838eb411b4bSmrg<row> 18390f8248bfSmrg <entry><symbol>XkbAXN_SKRelease</symbol></entry> 1840e9fcaa8aSmrg <entry>An accepted SlowKeys key was released.</entry> 1841e9fcaa8aSmrg</row> 1842eb411b4bSmrg<row> 18430f8248bfSmrg <entry><symbol>XkbAXN_SKReject</symbol></entry> 1844e9fcaa8aSmrg <entry>A key was rejected (released before the SlowKeys delay 1845e9fcaa8aSmrgexpired).</entry> 1846e9fcaa8aSmrg</row> 1847eb411b4bSmrg<row> 18480f8248bfSmrg <entry><symbol>XkbAXN_BKAccept</symbol></entry> 1849e9fcaa8aSmrg <entry>A key was accepted by BounceKeys.</entry> 1850e9fcaa8aSmrg</row> 1851eb411b4bSmrg<row> 18520f8248bfSmrg <entry><symbol>XkbAXN_BKReject</symbol></entry> 1853e9fcaa8aSmrg <entry>A key was rejected (pressed before the BounceKeys delay 1854e9fcaa8aSmrgexpired).</entry> 1855e9fcaa8aSmrg</row> 1856eb411b4bSmrg<row> 18570f8248bfSmrg <entry><symbol>XkbAXN_AXKWarning</symbol></entry> 1858e9fcaa8aSmrg <entry>AccessXKeys is about to turn on/off StickyKeys or BounceKeys.</entry> 1859e9fcaa8aSmrg </row> 1860e9fcaa8aSmrg</tbody> 1861e9fcaa8aSmrg</tgroup> 1862e9fcaa8aSmrg</table> 1863e9fcaa8aSmrg 1864e9fcaa8aSmrg<para> 18650f8248bfSmrgThe 18660f8248bfSmrg<structfield>keycode</structfield> 18670f8248bfSmrgfield reports the keycode of the key for which the event occurred. If the 18680f8248bfSmrgaction is related to 18690f8248bfSmrg<emphasis>SlowKeys</emphasis>, 18700f8248bfSmrgthe 18710f8248bfSmrg<structfield>slowKeysDelay</structfield> 18720f8248bfSmrgfield contains the current 18730f8248bfSmrg<emphasis>SlowKeys</emphasis> 18740f8248bfSmrgacceptance delay. If the action is related to 18750f8248bfSmrg<emphasis>BounceKeys</emphasis>, 18760f8248bfSmrgthe 18770f8248bfSmrg<structfield>debounceDelay</structfield> 18780f8248bfSmrgfield contains the current 18790f8248bfSmrg<emphasis>BounceKeys</emphasis> 18800f8248bfSmrgdebounce delay. 1881e9fcaa8aSmrg</para> 1882e9fcaa8aSmrg 1883eb411b4bSmrg<sect3 id='Selecting_for_AccessX_Events'> 1884e9fcaa8aSmrg<title>Selecting for AccessX Events</title> 1885e9fcaa8aSmrg 1886e9fcaa8aSmrg<para> 18870f8248bfSmrgTo receive 18880f8248bfSmrg<symbol>XkbAccessXNotify</symbol> 18890f8248bfSmrgevents under all possible conditions, use 18900f8248bfSmrg<function>XkbSelectEvents</function> 18910f8248bfSmrg(see <link linkend="Selecting_Xkb_Events">section 4.3</link>) and pass 18920f8248bfSmrg<symbol>XkbAccessXNotifyMask</symbol> 18930f8248bfSmrgin both 18940f8248bfSmrg<parameter>bits_to_change</parameter> 18950f8248bfSmrgand 18960f8248bfSmrg<parameter>values_for_bits</parameter>. 1897e9fcaa8aSmrg</para> 1898e9fcaa8aSmrg 1899e9fcaa8aSmrg 1900e9fcaa8aSmrg<para> 19010f8248bfSmrgTo receive 19020f8248bfSmrg<symbol>XkbStateNotify</symbol> 19030f8248bfSmrgevents only under certain conditions, use 19040f8248bfSmrg<function>XkbSelectEventDetails</function> 19050f8248bfSmrgusing 19060f8248bfSmrg<symbol>XkbAccessXNotify</symbol> 19070f8248bfSmrgas the 19080f8248bfSmrg<structfield>event_type</structfield> 19090f8248bfSmrgand specifying the desired state changes in 19100f8248bfSmrg<parameter>bits_to_change</parameter> 19110f8248bfSmrgand 19120f8248bfSmrg<parameter>values_for_bits</parameter> 19130f8248bfSmrgusing mask bits from <link linkend="table10.5">Table 10.5</link>. 1914e9fcaa8aSmrg</para> 1915e9fcaa8aSmrg 19160f8248bfSmrg<table id='table10.5' frame='topbot'> 1917e9fcaa8aSmrg<title>AccessXNotify Event Details</title> 1918eb411b4bSmrg<?dbfo keep-together="always" ?> 1919eb411b4bSmrg<tgroup cols='3' align='left' colsep='0' rowsep='0'> 1920eb411b4bSmrg<colspec colname='c1' colwidth='1.5*'/> 1921eb411b4bSmrg<colspec colname='c2' colwidth='1.0*'/> 1922eb411b4bSmrg<colspec colname='c3' colwidth='2.0*'/> 1923e9fcaa8aSmrg<thead> 1924eb411b4bSmrg<row rowsep='1'> 1925e9fcaa8aSmrg <entry>XkbAccessXNotify Event Details</entry> 1926e9fcaa8aSmrg <entry>Value</entry> 1927e9fcaa8aSmrg <entry>Circumstances</entry> 1928e9fcaa8aSmrg </row> 1929e9fcaa8aSmrg</thead> 1930e9fcaa8aSmrg<tbody> 1931eb411b4bSmrg <row> 19320f8248bfSmrg <entry><symbol>XkbAXN_SKPressMask</symbol></entry> 1933e9fcaa8aSmrg <entry>(1<<0)</entry> 1934e9fcaa8aSmrg <entry>Slow key press notification wanted</entry> 1935e9fcaa8aSmrg </row> 1936eb411b4bSmrg <row> 19370f8248bfSmrg <entry><symbol>XkbAXN_SKAcceptMask</symbol></entry> 1938e9fcaa8aSmrg <entry>(1<<1)</entry> 1939e9fcaa8aSmrg <entry>Slow key accept notification wanted</entry> 1940e9fcaa8aSmrg </row> 1941eb411b4bSmrg <row> 19420f8248bfSmrg <entry><symbol>XkbAXN_SKRejectMask</symbol></entry> 1943e9fcaa8aSmrg <entry>(1<<2)</entry> 1944e9fcaa8aSmrg <entry>Slow key reject notification wanted</entry> 1945e9fcaa8aSmrg </row> 1946eb411b4bSmrg <row> 19470f8248bfSmrg <entry><symbol>XkbAXN_SKReleaseMask</symbol></entry> 1948e9fcaa8aSmrg <entry>(1<<3)</entry> 1949e9fcaa8aSmrg <entry>Slow key release notification wanted</entry> 1950e9fcaa8aSmrg </row> 1951eb411b4bSmrg <row> 19520f8248bfSmrg <entry><symbol>XkbAXN_BKAcceptMask</symbol></entry> 1953e9fcaa8aSmrg <entry>(1<<4)</entry> 1954e9fcaa8aSmrg <entry>Bounce key accept notification wanted</entry> 1955e9fcaa8aSmrg </row> 1956eb411b4bSmrg <row> 19570f8248bfSmrg <entry><symbol>XkbAXN_BKRejectMask</symbol></entry> 1958e9fcaa8aSmrg <entry>(1<<5)</entry> 1959e9fcaa8aSmrg <entry>Bounce key reject notification wanted</entry> 1960e9fcaa8aSmrg </row> 1961eb411b4bSmrg <row> 19620f8248bfSmrg <entry><symbol>XkbAXN_AXKWarningMask</symbol></entry> 1963e9fcaa8aSmrg <entry>(1<<6)</entry> 1964e9fcaa8aSmrg <entry>AccessX warning notification wanted</entry> 1965e9fcaa8aSmrg </row> 1966eb411b4bSmrg <row> 1967e9fcaa8aSmrg <entry>XkbAXN_AllEventsMask</entry> 1968e9fcaa8aSmrg <entry>(0x7f)</entry> 1969e9fcaa8aSmrg <entry>All AccessX features notifications wanted</entry> 1970e9fcaa8aSmrg </row> 1971e9fcaa8aSmrg</tbody> 1972e9fcaa8aSmrg</tgroup> 1973e9fcaa8aSmrg</table> 1974e9fcaa8aSmrg 1975e9fcaa8aSmrg</sect3> 1976e9fcaa8aSmrg</sect2> 1977eb411b4bSmrg<sect2 id='StickyKeys_RepeatKeys_and_MouseKeys_Events'> 1978e9fcaa8aSmrg<title>StickyKeys, RepeatKeys, and MouseKeys Events</title> 1979e9fcaa8aSmrg 1980e9fcaa8aSmrg<para> 19810f8248bfSmrgThe 19820f8248bfSmrg<emphasis>StickyKeys</emphasis>, 19830f8248bfSmrg<emphasis>RepeatKeys</emphasis>, 19840f8248bfSmrgand 19850f8248bfSmrg<emphasis>MouseKeys</emphasis> 19860f8248bfSmrgcontrols do not generate specific events. Instead, the latching, unlatching, 19870f8248bfSmrglocking, or unlocking of modifiers using 19880f8248bfSmrg<emphasis>StickyKeys</emphasis> 19890f8248bfSmrggenerates 19900f8248bfSmrg<symbol>XkbStateNotify</symbol> 19910f8248bfSmrgevents as described in <link linkend="Tracking_Keyboard_State">section 5.4</link>. Repeating keys generate normal 19920f8248bfSmrg<symbol>KeyPress</symbol> 19930f8248bfSmrgand 19940f8248bfSmrg<symbol>KeyRelease</symbol> 19950f8248bfSmrgevents, though the auto-repeat can be detected using 19960f8248bfSmrg<emphasis>DetectableAutorepeat</emphasis> 19970f8248bfSmrg(see <link linkend="The_DetectableAutorepeat_Control">section 10.3.3</link>). Finally, 19980f8248bfSmrg<emphasis>MouseKeys</emphasis> 19990f8248bfSmrggenerates pointer events identical to those of the core pointer device. 2000e9fcaa8aSmrg</para> 2001e9fcaa8aSmrg 2002e9fcaa8aSmrg 2003e9fcaa8aSmrg</sect2> 2004eb411b4bSmrg<sect2 id='The_SlowKeys_Control'> 2005e9fcaa8aSmrg<title>The SlowKeys Control</title> 2006e9fcaa8aSmrg 2007e9fcaa8aSmrg<para> 2008e9fcaa8aSmrgSome users may accidentally bump keys while moving a hand or typing stick 2009e9fcaa8aSmrgtoward the key they want. Usually, the keys that are accidentally bumped are 20100f8248bfSmrgjust hit for a very short period of time. The 20110f8248bfSmrg<emphasis>SlowKeys</emphasis> 20120f8248bfSmrgcontrol helps filter these accidental bumps by telling the server to wait a 20130f8248bfSmrgspecified period, called the 20140f8248bfSmrg<firstterm>SlowKeys acceptance delay</firstterm>, 20150f8248bfSmrgbefore delivering key events. If the key is released before this period 2016e9fcaa8aSmrgelapses, no key events are generated. Users can then bump any number of keys on 2017e9fcaa8aSmrgtheir way to the one they want without accidentally getting those characters. 2018e9fcaa8aSmrgOnce they have reached the key they want, they can then hold the desired key 20190f8248bfSmrglong enough for the computer to accept it. 20200f8248bfSmrg<emphasis>SlowKeys</emphasis> 20210f8248bfSmrgis a boolean control with one configurable attribute. 2022e9fcaa8aSmrg</para> 2023e9fcaa8aSmrg 2024e9fcaa8aSmrg<para> 20250f8248bfSmrgWhen the 20260f8248bfSmrg<emphasis>SlowKeys</emphasis> 20270f8248bfSmrgcontrol is active, the server reports the initial key press, subsequent 2028e9fcaa8aSmrgacceptance or rejection, and release of any key to interested clients by 20290f8248bfSmrgsending an appropriate 20300f8248bfSmrg<emphasis>AccessXNotify</emphasis> 20310f8248bfSmrgevent (see <link linkend="AccessXNotify_Events">section 10.6.4</link>). 20320f8248bfSmrg</para> 20330f8248bfSmrg 20340f8248bfSmrg<para> 2035cbfda780SmrgThere are no convenience functions in Xkb for manipulating this control. The 20360f8248bfSmrg<emphasis>SlowKeys</emphasis> 2037cbfda780Smrgcontrol settings are carried in the 2038cbfda780Smrg<structfield>slow_keys_delay</structfield> 2039cbfda780Smrgfield of an 2040cbfda780Smrg<structname>XkbControlsRec</structname> 2041cbfda780Smrgstructure, discussed in <link linkend="The_XkbControlsRec_Structure">section 10.8</link>. 20420f8248bfSmrg</para> 20430f8248bfSmrg 2044cbfda780Smrg</sect2> 2045cbfda780Smrg<sect2 id='The_BounceKeys_Control'> 2046cbfda780Smrg<title>The BounceKeys Control</title> 20470f8248bfSmrg 20480f8248bfSmrg<para> 2049cbfda780SmrgSome users may accidentally <quote>bounce</quote> on a key when they release it. 2050cbfda780SmrgThey press it once, then accidentally press it again after they release it. The 2051cbfda780Smrg<emphasis>BounceKeys</emphasis> 2052cbfda780Smrgcontrol temporarily disables a key after it has been pressed, effectively 2053cbfda780Smrg<quote>debouncing</quote> the keyboard. The period of time the key is disabled 2054cbfda780Smrgafter it is released is known as the 2055cbfda780Smrg<firstterm>BounceKeys delay</firstterm>. 2056cbfda780Smrg<emphasis>BounceKeys</emphasis> 2057cbfda780Smrgis a boolean control. 20580f8248bfSmrg</para> 20590f8248bfSmrg 20600f8248bfSmrg 20610f8248bfSmrg<para> 2062cbfda780SmrgWhen the 2063cbfda780Smrg<emphasis>BounceKeys</emphasis> 2064cbfda780Smrgcontrol is active, the server reports acceptance or rejection of any key to 2065cbfda780Smrginterested clients by sending an appropriate 2066cbfda780Smrg<emphasis>AccessXNotify</emphasis> 2067cbfda780Smrgevent (see <link linkend="AccessXNotify_Events">section 10.6.4</link>). 20680f8248bfSmrg</para> 20690f8248bfSmrg 20700f8248bfSmrg 20710f8248bfSmrg<para> 2072cbfda780SmrgThere are no convenience functions in Xkb for manipulating this control. The 20730f8248bfSmrg<emphasis>BounceKeys</emphasis> 2074cbfda780Smrgcontrol settings are carried in the 2075cbfda780Smrg<structfield>debounce_delay</structfield> 2076cbfda780Smrgfield of an 2077cbfda780Smrg<structname>XkbControlsRec</structname> 2078cbfda780Smrgstructure, discussed in <link linkend="The_XkbControlsRec_Structure">section 10.8</link>. 2079e9fcaa8aSmrg</para> 2080e9fcaa8aSmrg 2081e9fcaa8aSmrg</sect2> 2082eb411b4bSmrg<sect2 id='The_StickyKeys_Control'> 2083e9fcaa8aSmrg<title>The StickyKeys Control</title> 2084e9fcaa8aSmrg 2085e9fcaa8aSmrg<para> 2086e9fcaa8aSmrgSome people find it difficult or even impossible to press two keys at once. For 2087e9fcaa8aSmrgexample, a one-fingered typist or someone using a mouth stick cannot press the 20880f8248bfSmrg<keycap>Shift</keycap> 20890f8248bfSmrgand 20900f8248bfSmrg<keycap>1</keycap> 20910f8248bfSmrgkeys at the same time. The 20920f8248bfSmrg<emphasis>StickyKeys</emphasis> 20930f8248bfSmrgcontrol solves this problem by changing the behavior of the modifier keys. 20940f8248bfSmrgWith 20950f8248bfSmrg<emphasis>StickyKeys</emphasis>, 20960f8248bfSmrgthe user can first press a modifier, release it, then press another key. For 2097e9fcaa8aSmrgexample, to get an exclamation point on a PC-style keyboard, the user can press 20980f8248bfSmrgthe 20990f8248bfSmrg<keycap>Shift</keycap> 21000f8248bfSmrgkey, release it, and then press the 21010f8248bfSmrg<keycap>1</keycap> 21020f8248bfSmrgkey. 2103e9fcaa8aSmrg</para> 2104e9fcaa8aSmrg 2105e9fcaa8aSmrg 2106e9fcaa8aSmrg<para> 21070f8248bfSmrg<emphasis>StickyKeys</emphasis> 21080f8248bfSmrgalso allows users to lock modifier keys without requiring special locking 21090f8248bfSmrgkeys. When 21100f8248bfSmrg<emphasis>StickyKeys</emphasis> 21110f8248bfSmrgis enabled, a modifier is latched when the user presses it just once. The user 2112e9fcaa8aSmrgcan press a modifier twice in a row to lock it, and then unlock it by pressing 2113e9fcaa8aSmrgit one more time. 2114e9fcaa8aSmrg</para> 2115e9fcaa8aSmrg 2116e9fcaa8aSmrg 2117e9fcaa8aSmrg<para> 2118e9fcaa8aSmrgWhen a modifier is latched, it becomes unlatched when the user presses a 2119e9fcaa8aSmrgnonmodifier key or a pointer button. For instance, to enter the sequence 21200f8248bfSmrg<keycombo> 21210f8248bfSmrg<keycap>Shift</keycap> 21220f8248bfSmrg<keycap>Control</keycap> 21230f8248bfSmrg<keycap>Z</keycap> 21240f8248bfSmrg</keycombo> 21250f8248bfSmrgthe user could press and release the 21260f8248bfSmrg<keycap>Shift</keycap> 21270f8248bfSmrgkey to latch it, then press and release the 21280f8248bfSmrg<keycap>Control</keycap> 21290f8248bfSmrgkey to latch it, and finally press and release the 21300f8248bfSmrg<keycap>Z</keycap> key. Because the 21310f8248bfSmrg<keycap>Control</keycap> 21320f8248bfSmrgkey is a modifier key, pressing it does not unlatch the 21330f8248bfSmrg<keycap>Shift</keycap> 21340f8248bfSmrgkey. Thus, after the user presses the 21350f8248bfSmrg<keycap>Control</keycap> 21360f8248bfSmrgkey, both the 21370f8248bfSmrg<symbol>Shift</symbol> 21380f8248bfSmrgand 21390f8248bfSmrg<symbol>Control</symbol> 21400f8248bfSmrgmodifiers are latched. When the user presses the 21410f8248bfSmrg<keycap>Z</keycap> 21420f8248bfSmrgkey, the effect is as though the user had pressed 21430f8248bfSmrg<keycombo> 21440f8248bfSmrg<keycap>Shift</keycap> 21450f8248bfSmrg<keycap>Control</keycap> 21460f8248bfSmrg<keycap>Z</keycap> 21470f8248bfSmrg</keycombo>. 21480f8248bfSmrgIn addition, because the 21490f8248bfSmrg<keycap>Z</keycap> 21500f8248bfSmrgkey is not a modifier key, the 21510f8248bfSmrg<symbol>Shift</symbol> 21520f8248bfSmrgand 21530f8248bfSmrg<symbol>Control</symbol> 21540f8248bfSmrgmodifiers are unlatched. 2155e9fcaa8aSmrg</para> 2156e9fcaa8aSmrg 2157e9fcaa8aSmrg 2158e9fcaa8aSmrg<para> 2159e9fcaa8aSmrgLocking a modifier key means that the modifier affects any key or pointer 2160e9fcaa8aSmrgbutton the user presses until the user unlocks it or it is unlocked 2161e9fcaa8aSmrgprogrammatically. For example, to enter the sequence ("XKB") on a keyboard 2162e9fcaa8aSmrgwhere ‘(’ is a shifted ‘9’, ‘)’ is a shifted ‘0’, and ‘"’ 21630f8248bfSmrgis a shifted single quote, the user could press and release the 21640f8248bfSmrg<keycap>Shift</keycap> 21650f8248bfSmrgkey twice to lock the 21660f8248bfSmrg<symbol>Shift</symbol> 21670f8248bfSmrgmodifier. Then, when the user presses the 21680f8248bfSmrg<keycap>9</keycap>, 21690f8248bfSmrg<keycap>'</keycap>, 21700f8248bfSmrg<keycap>x</keycap>, 21710f8248bfSmrg<keycap>k</keycap>, 21720f8248bfSmrg<keycap>b</keycap>, 21730f8248bfSmrg<keycap>'</keycap>, 21740f8248bfSmrgand 21750f8248bfSmrg<keycap>0</keycap> 21760f8248bfSmrgkeys in sequence, it generates ("XKB"). To unlock the 21770f8248bfSmrg<symbol>Shift</symbol> 21780f8248bfSmrgmodifier, the user can press and release the 21790f8248bfSmrg<keycap>Shift</keycap> 21800f8248bfSmrgkey. 2181e9fcaa8aSmrg</para> 2182e9fcaa8aSmrg 2183e9fcaa8aSmrg 2184e9fcaa8aSmrg<para> 2185e9fcaa8aSmrg<emphasis>StickyKeys</emphasis> 21860f8248bfSmrgis a boolean control with two separate attributes that may be individually 2187e9fcaa8aSmrgconfigured: one to automatically disable it, and one to control the latching 2188e9fcaa8aSmrgbehavior of modifier keys. 2189e9fcaa8aSmrg</para> 2190e9fcaa8aSmrg 2191eb411b4bSmrg<sect3 id='StickyKeys_Options'> 2192e9fcaa8aSmrg<title>StickyKeys Options</title> 2193e9fcaa8aSmrg 2194e9fcaa8aSmrg<para> 21950f8248bfSmrgThe 21960f8248bfSmrg<emphasis>StickyKeys</emphasis> 21970f8248bfSmrgcontrol has two options that can be accessed via the 21980f8248bfSmrg<structfield>ax_options</structfield> 21990f8248bfSmrgof an 22000f8248bfSmrg<structname>XkbControlsRec</structname> 22010f8248bfSmrgstructure (see <link linkend="The_XkbControlsRec_Structure">section 10.8</link>). The first option, 22020f8248bfSmrg<emphasis>TwoKeys</emphasis>, 22030f8248bfSmrgspecifies whether 22040f8248bfSmrg<emphasis>StickyKeys</emphasis> 22050f8248bfSmrgshould automatically turn off when two keys are pressed at the same time. This 2206e9fcaa8aSmrgfeature is useful for shared computers so people who do not want them do not 22070f8248bfSmrgneed to turn 22080f8248bfSmrg<emphasis>StickyKeys</emphasis> 22090f8248bfSmrgoff if a previous user left 22100f8248bfSmrg<emphasis>StickyKeys</emphasis> 22110f8248bfSmrgon. The second option, 22120f8248bfSmrg<emphasis>LatchToLock</emphasis>, 22130f8248bfSmrgspecifies whether or not 22140f8248bfSmrg<emphasis>StickyKeys</emphasis> 22150f8248bfSmrglocks a modifier when pressed twice in a row. 2216e9fcaa8aSmrg</para> 2217e9fcaa8aSmrg 22180f8248bfSmrg<para> 2219cbfda780SmrgThere are no convenience functions in Xkb for manipulating this control. The 22200f8248bfSmrg<emphasis>StickyKeys</emphasis> 2221cbfda780Smrgcontrol settings are carried in the 2222cbfda780Smrg<structfield>ax_options</structfield> 2223cbfda780Smrgfield of an 2224cbfda780Smrg<structname>XkbControlsRec</structname> 2225cbfda780Smrgstructure, discussed in <link linkend="The_XkbControlsRec_Structure">section 10.8</link>. 2226e9fcaa8aSmrg</para> 2227e9fcaa8aSmrg 2228e9fcaa8aSmrg</sect3> 2229e9fcaa8aSmrg</sect2> 2230e9fcaa8aSmrg</sect1> 2231eb411b4bSmrg<sect1 id='Controls_for_General_Keyboard_Mapping'> 2232e9fcaa8aSmrg<title>Controls for General Keyboard Mapping</title> 2233e9fcaa8aSmrg 2234e9fcaa8aSmrg<para> 2235e9fcaa8aSmrgThere are several controls that apply to the keyboard mapping in general. They 2236e9fcaa8aSmrgcontrol handling of out-of-range group indices and how modifiers are processed 2237e9fcaa8aSmrgand consumed in the server. These are: 2238e9fcaa8aSmrg 22390f8248bfSmrg <simplelist type='vert' columns='1'> 22400f8248bfSmrg <member><emphasis>GroupsWrap</emphasis></member> 22410f8248bfSmrg <member><emphasis>IgnoreGroupLock</emphasis></member> 22420f8248bfSmrg <member><emphasis>IgnoreLockMods</emphasis></member> 22430f8248bfSmrg <member><emphasis>InternalMods</emphasis></member> 22440f8248bfSmrg </simplelist> 2245e9fcaa8aSmrg</para> 2246e9fcaa8aSmrg 2247e9fcaa8aSmrg<para> 22480f8248bfSmrg<emphasis>IgnoreGroupLock</emphasis> 22490f8248bfSmrgis a boolean control; the rest are always active. 2250e9fcaa8aSmrg</para> 2251e9fcaa8aSmrg 2252e9fcaa8aSmrg 2253e9fcaa8aSmrg<para> 2254e9fcaa8aSmrgWithout the modifier processing options provided by Xkb, passive grabs set via 22550f8248bfSmrgtranslations in a client (for example, 22560f8248bfSmrg<emphasis>Alt<KeyPress>space</emphasis>) 22570f8248bfSmrgdo not trigger if any modifiers other than those specified by the translation 22580f8248bfSmrgare set. This results in problems in the user interface when either 22590f8248bfSmrg<emphasis>NumLock</emphasis> 22600f8248bfSmrgor a secondary keyboard group is active. The 22610f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 22620f8248bfSmrgand 22630f8248bfSmrg<emphasis>IgnoreGroupLock</emphasis> 22640f8248bfSmrgcontrols make it possible to avoid this behavior without exhaustively 2265e9fcaa8aSmrgspecifying a grab for every possible modifier combination. 2266e9fcaa8aSmrg</para> 2267e9fcaa8aSmrg 2268eb411b4bSmrg<sect2 id='The_GroupsWrap_Control'> 2269e9fcaa8aSmrg<title>The GroupsWrap Control</title> 2270e9fcaa8aSmrg 2271e9fcaa8aSmrg<para> 22720f8248bfSmrgThe 22730f8248bfSmrg<emphasis>GroupsWrap</emphasis> 22740f8248bfSmrgcontrol determines how illegal groups are handled on a global basis. There are 2275e9fcaa8aSmrga number of valid keyboard sequences that can cause the effective group number 2276e9fcaa8aSmrgto go out of range. When this happens, the group must be normalized back to a 22770f8248bfSmrgvalid number. The 22780f8248bfSmrg<emphasis>GroupsWrap</emphasis> 22790f8248bfSmrgcontrol specifies how this is done. 2280e9fcaa8aSmrg</para> 2281e9fcaa8aSmrg 2282e9fcaa8aSmrg 2283e9fcaa8aSmrg<para> 2284e9fcaa8aSmrgWhen dealing with group numbers, all computations are done using the group 2285e9fcaa8aSmrgindex, which is the group number minus one. There are three different 22860f8248bfSmrgalgorithms; the 22870f8248bfSmrg<emphasis>GroupsWrap</emphasis> 22880f8248bfSmrgcontrol specifies which one is used: 2289e9fcaa8aSmrg</para> 2290e9fcaa8aSmrg 2291e9fcaa8aSmrg<itemizedlist> 2292e9fcaa8aSmrg<listitem> 2293e9fcaa8aSmrg <para>XkbRedirectIntoRange</para> 2294e9fcaa8aSmrg <para> 2295e9fcaa8aSmrgAll invalid group numbers are converted to a valid group number by taking the 22960f8248bfSmrglast four bits of the 22970f8248bfSmrg<emphasis>GroupsWrap</emphasis> 22980f8248bfSmrgcontrol and using them as the group index. If the result is still out of 2299e9fcaa8aSmrgrange, Group one is used. 2300e9fcaa8aSmrg </para> 2301e9fcaa8aSmrg</listitem> 2302e9fcaa8aSmrg<listitem> 2303e9fcaa8aSmrg <para> 2304e9fcaa8aSmrgXkbClampIntoRange 2305e9fcaa8aSmrg </para> 2306e9fcaa8aSmrg <para> 2307e9fcaa8aSmrgAll invalid group numbers are converted to the nearest valid group number. 2308e9fcaa8aSmrgGroup numbers larger than the highest supported group number are mapped to the 2309e9fcaa8aSmrghighest supported group; those less than one are mapped to group one. 2310e9fcaa8aSmrg </para> 2311e9fcaa8aSmrg</listitem> 2312e9fcaa8aSmrg<listitem> 2313e9fcaa8aSmrg <para>XkbWrapIntoRange</para> 2314e9fcaa8aSmrg <para> 2315e9fcaa8aSmrgAll invalid group numbers are converted to a valid group number using integer 2316e9fcaa8aSmrgmodulus applied to the group index. 2317e9fcaa8aSmrg </para> 2318e9fcaa8aSmrg</listitem> 2319e9fcaa8aSmrg</itemizedlist> 2320e9fcaa8aSmrg 2321e9fcaa8aSmrg<para> 23220f8248bfSmrgThere are no convenience functions for manipulating the 23230f8248bfSmrg<emphasis>GroupsWrap</emphasis> 23240f8248bfSmrgcontrol. Manipulate the 23250f8248bfSmrg<emphasis>GroupsWrap</emphasis> 23260f8248bfSmrgcontrol via the 23270f8248bfSmrg<structfield>groups_wrap</structfield> 23280f8248bfSmrgfield in the 23290f8248bfSmrg<structname>XkbControlsRec</structname> 23300f8248bfSmrgstructure, then use 23310f8248bfSmrg<function>XkbSetControls</function> 23320f8248bfSmrgand 23330f8248bfSmrg<function>XkbGetControls</function> 23340f8248bfSmrg(see <link linkend="Querying_Controls">section 10.9</link> and <link linkend="Changing_Controls">section 10.10</link>) to query and change this control. 2335e9fcaa8aSmrg</para> 2336e9fcaa8aSmrg 23370f8248bfSmrg<note><para>See also <link linkend="Per_Key_Group_Information">section 15.3.2</link> or a discussion of the related field, 23380f8248bfSmrg<structfield>group_info</structfield>, 23390f8248bfSmrgwhich also normalizes a group under certain circumstances.</para></note> 2340e9fcaa8aSmrg 2341e9fcaa8aSmrg</sect2> 2342eb411b4bSmrg<sect2 id='The_IgnoreLockMods_Control'> 2343e9fcaa8aSmrg<title>The IgnoreLockMods Control</title> 2344e9fcaa8aSmrg 2345e9fcaa8aSmrg<para> 2346e9fcaa8aSmrgThe core protocol does not provide a way to exclude specific modifiers from 2347e9fcaa8aSmrggrab calculations, with the result that locking modifiers sometimes have 2348e9fcaa8aSmrgunanticipated side effects. 2349e9fcaa8aSmrg</para> 2350e9fcaa8aSmrg 2351e9fcaa8aSmrg 2352e9fcaa8aSmrg<para> 23530f8248bfSmrgThe 23540f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 23550f8248bfSmrgcontrol specifies modifiers that should be excluded from grab calculations. 23560f8248bfSmrgThese modifiers are also not reported in any core events except 23570f8248bfSmrg<symbol>KeyPress</symbol> 23580f8248bfSmrgand 23590f8248bfSmrg<symbol>KeyRelease</symbol> 23600f8248bfSmrgevents that do not activate a passive grab and that do not occur while a grab 2361e9fcaa8aSmrgis active. 2362e9fcaa8aSmrg</para> 2363e9fcaa8aSmrg 2364e9fcaa8aSmrg 2365e9fcaa8aSmrg<para> 23660f8248bfSmrgManipulate the 23670f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 23680f8248bfSmrgcontrol via the 23690f8248bfSmrg<structfield>ignore_lock</structfield> 23700f8248bfSmrgfield in the 23710f8248bfSmrg<structname>XkbControlsRec</structname> 23720f8248bfSmrgstructure, then use 23730f8248bfSmrg<function>XkbSetControls</function> 23740f8248bfSmrgand 23750f8248bfSmrg<function>XkbGetControls</function> 23760f8248bfSmrg(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, 23770f8248bfSmrguse 23780f8248bfSmrg<function>XkbSetIgnoreLockMods</function>. 2379e9fcaa8aSmrg</para> 2380e9fcaa8aSmrg 23810f8248bfSmrg 23820f8248bfSmrg<para> 23830f8248bfSmrgTo set the modifiers that, if locked, are not to be reported in matching events 23840f8248bfSmrgto passive grabs, use 23850f8248bfSmrg<function>XkbSetIgnoreLockMods</function>. 23860f8248bfSmrg</para> 23870f8248bfSmrg 23880f8248bfSmrg<indexterm significance="preferred" zone="XkbSetIgnoreLockMods"><primary><function>XkbSetIgnoreLockMods</function></primary></indexterm> 23890f8248bfSmrg<funcsynopsis id="XkbSetIgnoreLockMods"> 23900f8248bfSmrg <funcprototype> 23910f8248bfSmrg <funcdef>Bool <function>XkbSetIgnoreLockMods</function></funcdef> 23920f8248bfSmrg<!-- ( 23930f8248bfSmrg<parameter>display, device_spec, affect_real, real_values, affect_virtual, 23940f8248bfSmrgvirtual_values</parameter> 23950f8248bfSmrg) --> 23960f8248bfSmrg 23970f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 23980f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 23990f8248bfSmrg <paramdef>unsigned int <parameter>affect_real</parameter></paramdef> 24000f8248bfSmrg <paramdef>unsigned int <parameter>real_values</parameter></paramdef> 24010f8248bfSmrg <paramdef>unsigned int <parameter>affect_virtual</parameter></paramdef> 24020f8248bfSmrg <paramdef>unsigned int <parameter>virtual_values</parameter></paramdef> 24030f8248bfSmrg </funcprototype> 24040f8248bfSmrg</funcsynopsis> 24050f8248bfSmrg<variablelist> 24060f8248bfSmrg <varlistentry> 24070f8248bfSmrg <term> 24080f8248bfSmrg <parameter>display</parameter> 24090f8248bfSmrg </term> 24100f8248bfSmrg <listitem> 24110f8248bfSmrg <para> 24120f8248bfSmrg connection to the X server 24130f8248bfSmrg </para> 24140f8248bfSmrg </listitem> 24150f8248bfSmrg </varlistentry> 24160f8248bfSmrg <varlistentry> 24170f8248bfSmrg <term> 24180f8248bfSmrg <parameter>device_spec</parameter> 24190f8248bfSmrg </term> 24200f8248bfSmrg <listitem> 24210f8248bfSmrg <para> 24220f8248bfSmrg device ID, or <symbol>XkbUseCoreKbd</symbol> 24230f8248bfSmrg </para> 24240f8248bfSmrg </listitem> 24250f8248bfSmrg </varlistentry> 24260f8248bfSmrg <varlistentry> 24270f8248bfSmrg <term> 24280f8248bfSmrg <parameter>affect_real</parameter> 24290f8248bfSmrg </term> 24300f8248bfSmrg <listitem> 24310f8248bfSmrg <para> 24320f8248bfSmrg mask of real modifiers affected by this call 24330f8248bfSmrg </para> 24340f8248bfSmrg </listitem> 24350f8248bfSmrg </varlistentry> 24360f8248bfSmrg <varlistentry> 24370f8248bfSmrg <term> 24380f8248bfSmrg <parameter>real_values</parameter> 24390f8248bfSmrg </term> 24400f8248bfSmrg <listitem> 24410f8248bfSmrg <para> 24420f8248bfSmrg values for affected real modifiers (1⇒set, 0⇒unset) 24430f8248bfSmrg </para> 24440f8248bfSmrg </listitem> 24450f8248bfSmrg </varlistentry> 24460f8248bfSmrg <varlistentry> 24470f8248bfSmrg <term> 24480f8248bfSmrg <parameter>affect_virtual</parameter> 24490f8248bfSmrg </term> 24500f8248bfSmrg <listitem> 24510f8248bfSmrg <para> 24520f8248bfSmrg mask of virtual modifiers affected by this call 24530f8248bfSmrg </para> 24540f8248bfSmrg </listitem> 24550f8248bfSmrg </varlistentry> 24560f8248bfSmrg <varlistentry> 24570f8248bfSmrg <term> 24580f8248bfSmrg <parameter>virtual_values</parameter> 24590f8248bfSmrg </term> 24600f8248bfSmrg <listitem> 24610f8248bfSmrg <para> 24620f8248bfSmrg values for affected virtual modifiers (1⇒set, 0⇒unset) 24630f8248bfSmrg </para> 24640f8248bfSmrg </listitem> 24650f8248bfSmrg </varlistentry> 24660f8248bfSmrg</variablelist> 24670f8248bfSmrg 24680f8248bfSmrg<para> 24690f8248bfSmrg<function>XkbSetIgnoreLockMods</function> 24700f8248bfSmrgsends a request to the server to change the server’s 24710f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 24720f8248bfSmrgcontrol. 24730f8248bfSmrg<parameter>affect_real</parameter> 24740f8248bfSmrgand 24750f8248bfSmrg<parameter>real_values</parameter> 24760f8248bfSmrgare masks of real modifier bits indicating which real modifiers are to be 24770f8248bfSmrgadded and removed from the server’s 24780f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 24790f8248bfSmrgcontrol. Modifiers selected by both 24800f8248bfSmrg<parameter>affect_real</parameter> 24810f8248bfSmrgand 24820f8248bfSmrg<parameter>real_values</parameter> 24830f8248bfSmrgare added to the server’s 24840f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 24850f8248bfSmrgcontrol; those selected by 24860f8248bfSmrg<parameter>affect_real</parameter> 24870f8248bfSmrgbut not by 24880f8248bfSmrg<parameter>real_values</parameter> 24890f8248bfSmrgare removed from the server’s 24900f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 24910f8248bfSmrgcontrol. Valid values for 24920f8248bfSmrg<parameter>affect_real</parameter> 24930f8248bfSmrgand 24940f8248bfSmrg<parameter>real_values</parameter> 24950f8248bfSmrgconsist of any combination of the eight core modifier bits: 24960f8248bfSmrg<symbol>ShiftMask</symbol>, 24970f8248bfSmrg<symbol>LockMask</symbol>, 24980f8248bfSmrg<symbol>ControlMask</symbol>, 24990f8248bfSmrg<symbol>Mod1Mask</symbol> 25000f8248bfSmrg– 25010f8248bfSmrg<symbol>Mod5Mask</symbol>. 25020f8248bfSmrg<parameter>affect_virtual</parameter> 25030f8248bfSmrgand 25040f8248bfSmrg<parameter>virtual_values</parameter> 25050f8248bfSmrgare masks of virtual modifier bits indicating which virtual modifiers are to 25060f8248bfSmrgbe added and removed from the server’s 25070f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 25080f8248bfSmrgcontrol. Modifiers selected by both 25090f8248bfSmrg<parameter>affect_virtual</parameter> 25100f8248bfSmrgand 25110f8248bfSmrg<parameter>virtual_values</parameter> 25120f8248bfSmrgare added to the server’s 25130f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 25140f8248bfSmrgcontrol; those selected by 25150f8248bfSmrg<parameter>affect_virtual</parameter> 25160f8248bfSmrgbut not by 25170f8248bfSmrg<parameter>virtual_values</parameter> 25180f8248bfSmrgare removed from the server’s 25190f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 25200f8248bfSmrgcontrol. 25210f8248bfSmrgSee <link linkend="Virtual_Modifier_Names_and_Masks">section 7.1</link> for a discussion of virtual modifier masks to use in 25220f8248bfSmrg<parameter>affect_virtual</parameter> 25230f8248bfSmrgand 25240f8248bfSmrg<parameter>virtual_values</parameter>. 25250f8248bfSmrg<function>XkbSetIgnoreLockMods</function> 25260f8248bfSmrgdoes not wait for a reply from the server. It returns 25270f8248bfSmrg<symbol>True</symbol> 25280f8248bfSmrgif the request was sent, and 25290f8248bfSmrg<symbol>False</symbol> 25300f8248bfSmrgotherwise. 2531e9fcaa8aSmrg</para> 2532e9fcaa8aSmrg 2533e9fcaa8aSmrg</sect2> 2534eb411b4bSmrg<sect2 id='The_IgnoreGroupLock_Control'> 2535e9fcaa8aSmrg<title>The IgnoreGroupLock Control</title> 2536e9fcaa8aSmrg 2537e9fcaa8aSmrg<para> 25380f8248bfSmrgThe 25390f8248bfSmrg<emphasis>IgnoreGroupLock</emphasis> 25400f8248bfSmrgcontrol is a boolean control with no attributes. If enabled, it specifies that 2541e9fcaa8aSmrgthe locked state of the keyboard group should not be considered when activating 2542e9fcaa8aSmrgpassive grabs. 2543e9fcaa8aSmrg</para> 2544e9fcaa8aSmrg 2545e9fcaa8aSmrg<para> 25460f8248bfSmrgBecause 25470f8248bfSmrg<emphasis>IgnoreGroupLock</emphasis> 25480f8248bfSmrgis a boolean control with no attributes, use the general boolean controls 25490f8248bfSmrgfunctions (see <link linkend="Controls_that_Enable_and_Disable_Other_Controls">section 10.1</link>) to change its state. 2550e9fcaa8aSmrg</para> 2551e9fcaa8aSmrg 2552e9fcaa8aSmrg 2553e9fcaa8aSmrg</sect2> 2554eb411b4bSmrg<sect2 id='The_InternalMods_Control'> 2555e9fcaa8aSmrg<title>The InternalMods Control</title> 2556e9fcaa8aSmrg 2557e9fcaa8aSmrg<para> 2558e9fcaa8aSmrgThe core protocol does not provide any means to prevent a modifier from being 2559e9fcaa8aSmrgreported in events sent to clients; Xkb, however makes this possible via the 25600f8248bfSmrg<emphasis>InternalMods</emphasis> 25610f8248bfSmrgcontrol. It specifies modifiers that should be consumed by the server and not 2562e9fcaa8aSmrgreported to clients. When a key is pressed and a modifier that has its bit set 25630f8248bfSmrgin the 25640f8248bfSmrg<emphasis>InternalMods</emphasis> 25650f8248bfSmrgcontrol is reported to the server, the server uses the modifier when 2566e9fcaa8aSmrgdetermining the actions to apply for the key. The server then clears the bit, 2567e9fcaa8aSmrgso it is not actually reported to the client. In addition, modifiers specified 25680f8248bfSmrgin the 25690f8248bfSmrg<emphasis>InternalMods</emphasis> 25700f8248bfSmrgcontrol are not used to determine grabs and are not used to calculate core 2571e9fcaa8aSmrgprotocol compatibility state. 2572e9fcaa8aSmrg</para> 2573e9fcaa8aSmrg 2574e9fcaa8aSmrg 2575e9fcaa8aSmrg<para> 25760f8248bfSmrgManipulate the 25770f8248bfSmrg<emphasis>InternalMods</emphasis> 25780f8248bfSmrgcontrol via the 25790f8248bfSmrg<structfield>internal</structfield> 25800f8248bfSmrgfield in the 25810f8248bfSmrg<structname>XkbControlsRec</structname> 25820f8248bfSmrgstructure, using 25830f8248bfSmrg<function>XkbSetControls</function> 25840f8248bfSmrgand 25850f8248bfSmrg<function>XkbGetControls</function> 25860f8248bfSmrg(see <link linkend="Querying_Controls">section 10.9</link> 25870f8248bfSmrgand <link linkend="Changing_Controls">section 10.10</link>). Alternatively, use 25880f8248bfSmrg<function>XkbSetServerInternalMods</function>. 2589e9fcaa8aSmrg</para> 2590e9fcaa8aSmrg 2591e9fcaa8aSmrg 2592e9fcaa8aSmrg<para> 2593e9fcaa8aSmrgTo set the modifiers that are consumed by the server before events are 25940f8248bfSmrgdelivered to the client, use 25950f8248bfSmrg<function>XkbSetServerInternalMods</function>. 25960f8248bfSmrg</para> 25970f8248bfSmrg 25980f8248bfSmrg<indexterm significance="preferred" zone="XkbSetServerInternalMods"><primary><function>XkbSetServerInternalMods</function></primary></indexterm> 25990f8248bfSmrg<funcsynopsis id="XkbSetServerInternalMods"> 26000f8248bfSmrg <funcprototype> 26010f8248bfSmrg <funcdef>Bool <function>XkbSetServerInternalMods</function></funcdef> 26020f8248bfSmrg<!-- ( 26030f8248bfSmrg<parameter>display, device_spec, affect_real, real_values, affect_virtual, 26040f8248bfSmrgvirtual_values</parameter> 26050f8248bfSmrg) --> 26060f8248bfSmrg 26070f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 26080f8248bfSmrg <paramdef>unsigned int <parameter>device_spec</parameter></paramdef> 26090f8248bfSmrg <paramdef>unsigned int <parameter>affect_real</parameter></paramdef> 26100f8248bfSmrg <paramdef>unsigned int <parameter>real_values</parameter></paramdef> 26110f8248bfSmrg <paramdef>unsigned int <parameter>affect_virtual</parameter></paramdef> 26120f8248bfSmrg <paramdef>unsigned int <parameter>virtual_values</parameter></paramdef> 26130f8248bfSmrg </funcprototype> 26140f8248bfSmrg</funcsynopsis> 26150f8248bfSmrg<variablelist> 26160f8248bfSmrg <varlistentry> 26170f8248bfSmrg <term> 26180f8248bfSmrg <parameter>display</parameter> 26190f8248bfSmrg </term> 26200f8248bfSmrg <listitem> 26210f8248bfSmrg <para> 26220f8248bfSmrg connection to the X server 26230f8248bfSmrg </para> 26240f8248bfSmrg </listitem> 26250f8248bfSmrg </varlistentry> 26260f8248bfSmrg <varlistentry> 26270f8248bfSmrg <term> 26280f8248bfSmrg <parameter>device_spec</parameter> 26290f8248bfSmrg </term> 26300f8248bfSmrg <listitem> 26310f8248bfSmrg <para> 26320f8248bfSmrg ‘device ID, or <symbol>XkbUseCoreKbd</symbol> 26330f8248bfSmrg </para> 26340f8248bfSmrg </listitem> 26350f8248bfSmrg </varlistentry> 26360f8248bfSmrg <varlistentry> 26370f8248bfSmrg <term> 26380f8248bfSmrg <parameter>affect_real</parameter> 26390f8248bfSmrg </term> 26400f8248bfSmrg <listitem> 26410f8248bfSmrg <para> 26420f8248bfSmrg mask of real modifiers affected by this call 26430f8248bfSmrg </para> 26440f8248bfSmrg </listitem> 26450f8248bfSmrg </varlistentry> 26460f8248bfSmrg <varlistentry> 26470f8248bfSmrg <term> 26480f8248bfSmrg <parameter>real_values</parameter> 26490f8248bfSmrg </term> 26500f8248bfSmrg <listitem> 26510f8248bfSmrg <para> 26520f8248bfSmrg values for affected real modifiers (1⇒set, 0⇒unset) 26530f8248bfSmrg </para> 26540f8248bfSmrg </listitem> 26550f8248bfSmrg </varlistentry> 26560f8248bfSmrg <varlistentry> 26570f8248bfSmrg <term> 26580f8248bfSmrg <parameter>affect_virtual</parameter> 26590f8248bfSmrg </term> 26600f8248bfSmrg <listitem> 26610f8248bfSmrg <para> 26620f8248bfSmrg mask of virtual modifiers affected by this call 26630f8248bfSmrg </para> 26640f8248bfSmrg </listitem> 26650f8248bfSmrg </varlistentry> 26660f8248bfSmrg <varlistentry> 26670f8248bfSmrg <term> 26680f8248bfSmrg <parameter>virtual_values</parameter> 26690f8248bfSmrg </term> 26700f8248bfSmrg <listitem> 26710f8248bfSmrg <para> 26720f8248bfSmrg values for affected virtual modifiers (1⇒set, 0⇒unset) 26730f8248bfSmrg </para> 26740f8248bfSmrg </listitem> 26750f8248bfSmrg </varlistentry> 26760f8248bfSmrg</variablelist> 26770f8248bfSmrg 26780f8248bfSmrg<para> 26790f8248bfSmrg<function>XkbSetServerInternalMods</function> 26800f8248bfSmrgsends a request to the server to change the internal modifiers consumed by the 26810f8248bfSmrgserver. 26820f8248bfSmrg<parameter>affect_real</parameter> 26830f8248bfSmrgand 26840f8248bfSmrg<parameter>real_values</parameter> 26850f8248bfSmrgare masks of real modifier bits indicating which real modifiers are to be 2686e9fcaa8aSmrgadded and removed from the server’s internal modifiers control. Modifiers 26870f8248bfSmrgselected by both 26880f8248bfSmrg<parameter>affect_real</parameter> 26890f8248bfSmrgand 26900f8248bfSmrg<parameter>real_values</parameter> 26910f8248bfSmrgare added to the server’s internal modifiers control; those selected by 26920f8248bfSmrg<parameter>affect_real</parameter> 26930f8248bfSmrgbut not by 26940f8248bfSmrg<parameter>real_values</parameter> 26950f8248bfSmrgare removed from the server’s internal modifiers mask. Valid values for 26960f8248bfSmrg<parameter>affect_real</parameter> 26970f8248bfSmrgand 26980f8248bfSmrg<parameter>real_values</parameter> 26990f8248bfSmrgconsist of any combination of the eight core modifier bits: 27000f8248bfSmrg<symbol>ShiftMask</symbol>, 27010f8248bfSmrg<symbol>LockMask</symbol>, 27020f8248bfSmrg<symbol>ControlMask</symbol>, 27030f8248bfSmrg<symbol>Mod1Mask</symbol> 27040f8248bfSmrg– 27050f8248bfSmrg<symbol>Mod5Mask</symbol>. 27060f8248bfSmrg<parameter>affect_virtual</parameter> 27070f8248bfSmrgand 27080f8248bfSmrg<parameter>virtual_values</parameter> 27090f8248bfSmrgare masks of virtual modifier bits indicating which virtual modifiers are to 2710e9fcaa8aSmrgbe added and removed from the server’s internal modifiers control. Modifiers 27110f8248bfSmrgselected by both 27120f8248bfSmrg<parameter>affect_virtual</parameter> 27130f8248bfSmrgand 27140f8248bfSmrg<parameter>virtual_values</parameter> 27150f8248bfSmrgare added to the server’s internal modifiers control; those selected by 27160f8248bfSmrg<parameter>affect_virtual</parameter> 27170f8248bfSmrgbut not by 27180f8248bfSmrg<parameter>virtual_values</parameter> 27190f8248bfSmrgare removed from the server’s internal modifiers control. 27200f8248bfSmrgSee <link linkend="Virtual_Modifier_Names_and_Masks">section 7.1</link> for a discussion of virtual modifier masks to use in 27210f8248bfSmrg<parameter>affect_virtual</parameter> 27220f8248bfSmrgand 27230f8248bfSmrg<parameter>virtual_values</parameter>. 27240f8248bfSmrg<function>XkbSetServerInternalMods</function> 27250f8248bfSmrgdoes not wait for a reply from the server. It returns 27260f8248bfSmrg<symbol>True</symbol> 27270f8248bfSmrgif the request was sent and 27280f8248bfSmrg<symbol>False</symbol> 27290f8248bfSmrgotherwise. 2730e9fcaa8aSmrg</para> 2731e9fcaa8aSmrg 2732e9fcaa8aSmrg 2733e9fcaa8aSmrg</sect2> 2734e9fcaa8aSmrg</sect1> 2735eb411b4bSmrg<sect1 id='The_XkbControlsRec_Structure'> 2736e9fcaa8aSmrg<title>The XkbControlsRec Structure</title> 2737e9fcaa8aSmrg 27380f8248bfSmrg<indexterm significance="preferred" zone="The_XkbControlsRec_Structure"> 27390f8248bfSmrg<primary><structname>XkbControlsRec</structname></primary></indexterm> 27400f8248bfSmrg 2741e9fcaa8aSmrg<para> 2742e9fcaa8aSmrgMany of the individual controls described in sections 10.1 through 10.7 may be 2743e9fcaa8aSmrgmanipulated via convenience functions discussed in those sections. Some of 27440f8248bfSmrgthem, however, have no convenience functions. The 27450f8248bfSmrg<structname>XkbControlsRec</structname> 27460f8248bfSmrgstructure allows the manipulation of one or more of the controls in a single 27470f8248bfSmrgoperation and to track changes to any of them in conjunction with the 27480f8248bfSmrg<function>XkbGetControls</function> 27490f8248bfSmrgand 27500f8248bfSmrg<function>XkbSetControls</function> 27510f8248bfSmrgfunctions. This is the only way to manipulate those controls that have no 2752e9fcaa8aSmrgconvenience functions. 2753e9fcaa8aSmrg</para> 2754e9fcaa8aSmrg 2755e9fcaa8aSmrg 2756e9fcaa8aSmrg<para> 27570f8248bfSmrgThe 27580f8248bfSmrg<structname>XkbControlsRec</structname> 27590f8248bfSmrgstructure is defined as follows: 2760e9fcaa8aSmrg 2761e9fcaa8aSmrg<programlisting> 2762e9fcaa8aSmrg#define XkbMaxLegalKeyCode 255 2763e9fcaa8aSmrg#define XkbPerKeyBitArraySize ((XkbMaxLegalKeyCode+1)/8) 27640f8248bfSmrg 2765e9fcaa8aSmrgtypedef struct { 27660f8248bfSmrg unsigned char mk_dflt_btn; /* default button for 27670f8248bfSmrg keyboard driven mouse */ 27680f8248bfSmrg unsigned char num_groups; /* number of keyboard groups */ 27690f8248bfSmrg unsigned char groups_wrap; /* how to wrap out-of-bounds groups */ 27700f8248bfSmrg XkbModsRec internal; /* defines server internal modifiers */ 27710f8248bfSmrg XkbModsRec ignore_lock; /* modifiers to ignore when 27720f8248bfSmrg checking for grab */ 27730f8248bfSmrg unsigned int enabled_ctrls; /* 1 bit ⇒ corresponding 27740f8248bfSmrg boolean control enabled */ 27750f8248bfSmrg unsigned short repeat_delay; /* ms delay until first repeat */ 27760f8248bfSmrg unsigned short repeat_interval; /* ms delay between repeats */ 27770f8248bfSmrg unsigned short slow_keys_delay; /* ms minimum time key must be 27780f8248bfSmrg down to be ok */ 27790f8248bfSmrg unsigned short debounce_delay; /* ms delay before key reactivated */ 27800f8248bfSmrg unsigned short mk_delay; /* ms delay to second mouse 27810f8248bfSmrg motion event */ 27820f8248bfSmrg unsigned short mk_interval; /* ms delay between repeat mouse 27830f8248bfSmrg events */ 27840f8248bfSmrg unsigned short mk_time_to_max; /* # intervals until constant 27850f8248bfSmrg mouse move */ 27860f8248bfSmrg unsigned short mk_max_speed; /* multiplier for maximum mouse speed */ 27870f8248bfSmrg short mk_curve; /* determines mouse move curve type */ 27880f8248bfSmrg unsigned short ax_options; /* 1 bit ⇒ Access X option enabled */ 27890f8248bfSmrg unsigned short ax_timeout; /* seconds until Access X disabled */ 27900f8248bfSmrg unsigned short axt_opts_mask; /* 1 bit ⇒ options to reset 27910f8248bfSmrg on Access X timeout */ 27920f8248bfSmrg unsigned short axt_opts_values; /* 1 bit ⇒ turn option on, 0⇒ off */ 27930f8248bfSmrg unsigned int axt_ctrls_mask; /* which bits in <structfield>enabled_ctrls</structfield> 27940f8248bfSmrg to modify */ 27950f8248bfSmrg unsigned int axt_ctrls_values; /* values for new bits in 27960f8248bfSmrg <structfield>enabled_ctrls</structfield> */ 27970f8248bfSmrg unsigned char per_key_repeat[XkbPerKeyBitArraySize]; 27980f8248bfSmrg /* per key auto repeat */ 27990f8248bfSmrg} <structname>XkbControlsRec</structname>, *XkbControlsPtr; 2800e9fcaa8aSmrg</programlisting> 2801e9fcaa8aSmrg</para> 2802e9fcaa8aSmrg 2803e9fcaa8aSmrg<para> 28040f8248bfSmrgThe general-purpose functions that work with the 28050f8248bfSmrg<structname>XkbControlsRec</structname> 28060f8248bfSmrgstructure use a mask to specify which controls are to be manipulated. 28070f8248bfSmrg<link linkend="table10.6">Table 10.6</link> 28080f8248bfSmrglists these controls, the masks used to select them in the general 28090f8248bfSmrgfunction calls 28100f8248bfSmrg(<structfield>which</structfield> 28110f8248bfSmrgparameter), and the data fields in the 28120f8248bfSmrg<structname>XkbControlsRec</structname> 28130f8248bfSmrgstructure that comprise each of the individual controls. Also listed are the 2814e9fcaa8aSmrgbit used to turn boolean controls on and off and the section where each control 2815e9fcaa8aSmrgis described in more detail. 2816e9fcaa8aSmrg</para> 2817e9fcaa8aSmrg 28180f8248bfSmrg<table id='table10.6' frame='topbot'> 2819e9fcaa8aSmrg<title>Xkb Controls</title> 2820eb411b4bSmrg<?dbfo keep-together="auto" ?> 2821eb411b4bSmrg<tgroup cols='5' align='left' colsep='0' rowsep='0'> 2822eb411b4bSmrg<colspec colname='c1' colwidth='2.0*'/> 2823eb411b4bSmrg<colspec colname='c2' colwidth='3.1*'/> 2824eb411b4bSmrg<colspec colname='c3' colwidth='2.2*'/> 2825eb411b4bSmrg<colspec colname='c4' colwidth='2.6*'/> 2826eb411b4bSmrg<colspec colname='c5' colwidth='1.0*'/> 2827e9fcaa8aSmrg<thead> 2828eb411b4bSmrg<row rowsep='1'> 2829e9fcaa8aSmrg <entry>Control</entry> 2830e9fcaa8aSmrg <entry>Control Selection Mask (which parameter)</entry> 2831e9fcaa8aSmrg <entry>Relevant XkbControlsRec Data Fields</entry> 2832e9fcaa8aSmrg <entry>Boolean Control enabled_ctrls bit</entry> 2833e9fcaa8aSmrg <entry>Section</entry> 2834e9fcaa8aSmrg </row> 2835e9fcaa8aSmrg</thead> 2836e9fcaa8aSmrg<tbody> 2837eb411b4bSmrg <row> 2838e9fcaa8aSmrg <entry>AccessXFeedback</entry> 28390f8248bfSmrg <entry><symbol>XkbAccessXFeedbackMask</symbol></entry> 2840e9fcaa8aSmrg <entry>ax_options: XkbAX_*FBMask</entry> 2841eb411b4bSmrg <entry>XkbAccessXFeedback­Mask</entry> 28420f8248bfSmrg <entry><link linkend="The_AccessXFeedback_Control">10.6.3</link></entry> 2843e9fcaa8aSmrg </row> 2844eb411b4bSmrg <row> 2845e9fcaa8aSmrg <entry>AccessXKeys</entry> 2846e9fcaa8aSmrg <entry></entry> 2847e9fcaa8aSmrg <entry></entry> 2848eb411b4bSmrg <entry>XkbAccessXKeys­Mask</entry> 28490f8248bfSmrg <entry><link linkend="The_AccessXKeys_Control">10.6.1</link></entry> 2850e9fcaa8aSmrg </row> 2851eb411b4bSmrg <row> 2852e9fcaa8aSmrg <entry>AccessXTimeout</entry> 28530f8248bfSmrg <entry><symbol>XkbAccessXTimeoutMask</symbol></entry> 2854e9fcaa8aSmrg <entry> 2855e9fcaa8aSmrg <para>ax_timeout</para> 2856e9fcaa8aSmrg <para>axt_opts_mask</para> 2857e9fcaa8aSmrg <para>axt_opts_values</para> 2858e9fcaa8aSmrg <para>axt_ctrls_mask</para> 2859e9fcaa8aSmrg <para>axt_ctrls_values</para> 2860e9fcaa8aSmrg </entry> 2861eb411b4bSmrg <entry>XkbAccessXTimeout­Mask</entry> 28620f8248bfSmrg <entry><link linkend="The_AccessXTimeout_Control">10.6.2</link></entry> 2863e9fcaa8aSmrg </row> 2864eb411b4bSmrg <row> 2865e9fcaa8aSmrg <entry>AudibleBell</entry> 2866e9fcaa8aSmrg <entry></entry> 2867e9fcaa8aSmrg <entry></entry> 28680f8248bfSmrg <entry><symbol>XkbAudibleBellMask</symbol></entry> 28690f8248bfSmrg <entry><link linkend="Audible_Bells">9.2</link></entry> 2870e9fcaa8aSmrg </row> 2871eb411b4bSmrg <row> 2872e9fcaa8aSmrg <entry>AutoReset</entry> 2873e9fcaa8aSmrg <entry></entry> 2874e9fcaa8aSmrg <entry></entry> 2875e9fcaa8aSmrg <entry></entry> 28760f8248bfSmrg <entry><link linkend="The_AutoReset_Control">10.1.2</link></entry> 2877e9fcaa8aSmrg </row> 2878eb411b4bSmrg <row> 2879e9fcaa8aSmrg <entry>BounceKeys</entry> 28800f8248bfSmrg <entry><symbol>XkbBounceKeysMask</symbol></entry> 2881e9fcaa8aSmrg <entry>debounce_delay</entry> 28820f8248bfSmrg <entry><symbol>XkbBounceKeysMask</symbol></entry> 28830f8248bfSmrg <entry><link linkend="The_BounceKeys_Control">10.6.7</link></entry> 2884e9fcaa8aSmrg </row> 2885eb411b4bSmrg <row> 2886e9fcaa8aSmrg <entry>Detectable-Autorepeat</entry> 2887e9fcaa8aSmrg <entry></entry> 2888e9fcaa8aSmrg <entry></entry> 2889e9fcaa8aSmrg <entry></entry> 28900f8248bfSmrg <entry><link linkend="The_DetectableAutorepeat_Control">10.3.3</link></entry> 2891e9fcaa8aSmrg </row> 2892eb411b4bSmrg <row> 2893e9fcaa8aSmrg <entry>EnabledControls</entry> 28940f8248bfSmrg <entry><symbol>XkbControlsEnabledMask</symbol></entry> 2895e9fcaa8aSmrg <entry>enabled_ctrls</entry> 2896e9fcaa8aSmrg <entry><emphasis>Non-Boolean Control</emphasis></entry> 28970f8248bfSmrg <entry><link linkend="The_EnabledControls_Control">10.1.1</link></entry> 2898e9fcaa8aSmrg </row> 2899eb411b4bSmrg <row> 2900e9fcaa8aSmrg <entry>GroupsWrap</entry> 29010f8248bfSmrg <entry><symbol>XkbGroupsWrapMask</symbol></entry> 2902e9fcaa8aSmrg <entry>groups_wrap</entry> 2903e9fcaa8aSmrg <entry><emphasis>Non-Boolean Control</emphasis></entry> 29040f8248bfSmrg <entry><link linkend="The_GroupsWrap_Control">10.7.1</link></entry> 2905e9fcaa8aSmrg </row> 2906eb411b4bSmrg <row> 2907e9fcaa8aSmrg <entry>IgnoreGroupLock</entry> 2908e9fcaa8aSmrg <entry></entry> 2909e9fcaa8aSmrg <entry></entry> 2910eb411b4bSmrg <entry>XkbIgnoreGroupLock­Mask</entry> 29110f8248bfSmrg <entry><link linkend="The_IgnoreGroupLock_Control">10.7.3</link></entry> 2912e9fcaa8aSmrg </row> 2913eb411b4bSmrg <row> 2914e9fcaa8aSmrg <entry>IgnoreLockMods</entry> 29150f8248bfSmrg <entry><symbol>XkbIgnoreLockModsMask</symbol></entry> 2916e9fcaa8aSmrg <entry>ignore_lock</entry> 2917e9fcaa8aSmrg <entry><emphasis>Non-Boolean Control</emphasis></entry> 29180f8248bfSmrg <entry><link linkend="Keyboard_State_Description">5.1</link></entry> 2919e9fcaa8aSmrg </row> 2920eb411b4bSmrg <row> 2921e9fcaa8aSmrg <entry>InternalMods</entry> 29220f8248bfSmrg <entry><symbol>XkbInternalModsMask</symbol></entry> 2923e9fcaa8aSmrg <entry>internal</entry> 2924e9fcaa8aSmrg <entry><emphasis>Non-Boolean Control</emphasis></entry> 29250f8248bfSmrg <entry><link linkend="Keyboard_State_Description">5.1</link></entry> 2926e9fcaa8aSmrg </row> 2927eb411b4bSmrg <row> 2928e9fcaa8aSmrg <entry>MouseKeys</entry> 29290f8248bfSmrg <entry><symbol>XkbMouseKeysMask</symbol></entry> 2930e9fcaa8aSmrg <entry>mk_dflt_btn</entry> 29310f8248bfSmrg <entry><symbol>XkbMouseKeysMask</symbol></entry> 29320f8248bfSmrg <entry><link linkend="The_MouseKeys_Control">10.5.1</link></entry> 2933e9fcaa8aSmrg </row> 2934eb411b4bSmrg <row> 2935e9fcaa8aSmrg <entry>MouseKeysAccel</entry> 29360f8248bfSmrg <entry><symbol>XkbMouseKeysAccelMask</symbol></entry> 2937e9fcaa8aSmrg <entry> 2938e9fcaa8aSmrg <para>mk_delay</para> 2939e9fcaa8aSmrg <para>mk_interval</para> 2940e9fcaa8aSmrg <para>mk_time_to_max</para> 2941e9fcaa8aSmrg <para>mk_max_speed</para> 2942e9fcaa8aSmrg <para>mk_curve</para> 2943e9fcaa8aSmrg </entry> 2944eb411b4bSmrg <entry>XkbMouseKeysAccel­Mask</entry> 29450f8248bfSmrg <entry><link linkend="The_MouseKeysAccel_Control">10.5.2</link></entry> 2946e9fcaa8aSmrg </row> 2947eb411b4bSmrg <row> 2948e9fcaa8aSmrg <entry>Overlay1</entry> 2949e9fcaa8aSmrg <entry></entry> 2950e9fcaa8aSmrg <entry></entry> 29510f8248bfSmrg <entry><symbol>XkbOverlay1Mask</symbol></entry> 29520f8248bfSmrg <entry><link linkend="Controls_for_Keyboard_Overlays_Overlay1_and_Overlay2_Controls">10.4</link></entry> 2953e9fcaa8aSmrg </row> 2954eb411b4bSmrg <row> 2955e9fcaa8aSmrg <entry>Overlay2</entry> 2956e9fcaa8aSmrg <entry></entry> 2957e9fcaa8aSmrg <entry></entry> 29580f8248bfSmrg <entry><symbol>XkbOverlay2Mask</symbol></entry> 29590f8248bfSmrg <entry><link linkend="Controls_for_Keyboard_Overlays_Overlay1_and_Overlay2_Controls">10.4</link></entry> 2960e9fcaa8aSmrg </row> 2961eb411b4bSmrg <row> 2962e9fcaa8aSmrg <entry>PerKeyRepeat</entry> 29630f8248bfSmrg <entry><symbol>XkbPerKeyRepeatMask</symbol></entry> 2964e9fcaa8aSmrg <entry>per_key_repeat</entry> 2965e9fcaa8aSmrg <entry><emphasis>Non-Boolean Control</emphasis></entry> 29660f8248bfSmrg <entry><link linkend="The_PerKeyRepeat_Control">10.3.1</link></entry> 2967e9fcaa8aSmrg </row> 2968eb411b4bSmrg <row> 2969e9fcaa8aSmrg <entry>RepeatKeys</entry> 29700f8248bfSmrg <entry><symbol>XkbRepeatKeysMask</symbol></entry> 2971e9fcaa8aSmrg <entry> 2972e9fcaa8aSmrg <para>repeat_delay</para> 2973e9fcaa8aSmrg <para>repeat_interval</para> 2974e9fcaa8aSmrg </entry> 29750f8248bfSmrg <entry><symbol>XkbRepeatKeysMask</symbol></entry> 29760f8248bfSmrg <entry><link linkend="Controls_for_Repeat_Key_Behavior">10.3</link></entry> 2977e9fcaa8aSmrg </row> 2978eb411b4bSmrg <row> 2979e9fcaa8aSmrg <entry>SlowKeys</entry> 29800f8248bfSmrg <entry><symbol>XkbSlowKeysMask</symbol></entry> 2981e9fcaa8aSmrg <entry>slow_keys_delay</entry> 29820f8248bfSmrg <entry><symbol>XkbSlowKeysMask</symbol></entry> 29830f8248bfSmrg <entry><link linkend="The_SlowKeys_Control">10.6.6</link></entry> 2984e9fcaa8aSmrg </row> 2985eb411b4bSmrg <row> 2986e9fcaa8aSmrg <entry>StickyKeys</entry> 29870f8248bfSmrg <entry><symbol>XkbStickyKeysMask</symbol></entry> 2988e9fcaa8aSmrg <entry> 2989e9fcaa8aSmrg <para>ax_options:</para> 2990eb411b4bSmrg <para>XkbAX_Two­KeysMask</para> 2991eb411b4bSmrg <para>XkbAX_Latch­ToLockMask</para> 2992e9fcaa8aSmrg </entry> 29930f8248bfSmrg <entry><symbol>XkbStickyKeysMask</symbol></entry> 29940f8248bfSmrg <entry><link linkend="The_StickyKeys_Control">10.6.8</link></entry> 2995e9fcaa8aSmrg </row> 2996e9fcaa8aSmrg</tbody> 2997e9fcaa8aSmrg</tgroup> 2998e9fcaa8aSmrg</table> 2999e9fcaa8aSmrg 3000e9fcaa8aSmrg<para> 30010f8248bfSmrg<link linkend="table10.7">Table 10.7</link> 30020f8248bfSmrgshows the actual values for the individual mask bits used to select 3003e9fcaa8aSmrgcontrols for modification and to enable and disable the control. Note that the 3004e9fcaa8aSmrgsame mask bit is used to specify general modifications to the parameters used 30050f8248bfSmrgto configure the control 30060f8248bfSmrg(<structfield>which</structfield>), 30070f8248bfSmrgand to enable and disable the control 30080f8248bfSmrg(<structfield>enabled_ctrls</structfield>). 30090f8248bfSmrgThe anomalies in the table (no <quote>ok</quote> in column) are for controls that have no 3010e9fcaa8aSmrgconfigurable attributes; and for controls that are not boolean controls and 3011e9fcaa8aSmrgtherefore cannot be enabled or disabled. 3012e9fcaa8aSmrg</para> 3013e9fcaa8aSmrg 30140f8248bfSmrg<table id='table10.7' frame='topbot'> 3015e9fcaa8aSmrg<title>Controls Mask Bits</title> 3016eb411b4bSmrg<?dbfo keep-together="always" ?> 3017eb411b4bSmrg<tgroup cols='4' align='left' colsep='0' rowsep='0'> 3018eb411b4bSmrg<colspec colname='c1' colwidth='2.6*'/> 3019eb411b4bSmrg<colspec colname='c2' colwidth='2.0*'/> 3020eb411b4bSmrg<colspec colname='c3' colwidth='1.3*'/> 3021eb411b4bSmrg<colspec colname='c4' colwidth='2.0*'/> 3022e9fcaa8aSmrg<thead> 3023eb411b4bSmrg<row rowsep='1'> 3024e9fcaa8aSmrg <entry>Mask Bit</entry> 3025e9fcaa8aSmrg <entry>which or changed_ctrls</entry> 3026e9fcaa8aSmrg <entry>enabled_ctrls</entry> 3027e9fcaa8aSmrg <entry>Value</entry> 3028e9fcaa8aSmrg</row> 3029e9fcaa8aSmrg</thead> 3030e9fcaa8aSmrg<tbody> 3031eb411b4bSmrg<row> 30320f8248bfSmrg <entry><symbol>XkbRepeatKeysMask</symbol></entry> 3033e9fcaa8aSmrg <entry>ok</entry> 3034e9fcaa8aSmrg <entry>ok</entry> 3035e9fcaa8aSmrg <entry>(1L<<0)</entry> 3036e9fcaa8aSmrg </row> 3037eb411b4bSmrg <row> 30380f8248bfSmrg <entry><symbol>XkbSlowKeysMask</symbol></entry> 3039e9fcaa8aSmrg <entry>ok</entry> 3040e9fcaa8aSmrg <entry>ok</entry> 3041e9fcaa8aSmrg <entry>(1L<<1)</entry> 3042e9fcaa8aSmrg </row> 3043eb411b4bSmrg <row> 30440f8248bfSmrg <entry><symbol>XkbBounceKeysMask</symbol></entry> 3045e9fcaa8aSmrg <entry>ok</entry> 3046e9fcaa8aSmrg <entry>ok</entry> 3047e9fcaa8aSmrg <entry>(1L<<2)</entry> 3048e9fcaa8aSmrg </row> 3049eb411b4bSmrg <row> 30500f8248bfSmrg <entry><symbol>XkbStickyKeysMask</symbol></entry> 3051e9fcaa8aSmrg <entry>ok</entry> 3052e9fcaa8aSmrg <entry>ok</entry> 3053e9fcaa8aSmrg <entry>(1L<<3)</entry> 3054e9fcaa8aSmrg </row> 3055eb411b4bSmrg <row> 30560f8248bfSmrg <entry><symbol>XkbMouseKeysMask</symbol></entry> 3057e9fcaa8aSmrg <entry>ok</entry> 3058e9fcaa8aSmrg <entry>ok</entry> 3059e9fcaa8aSmrg <entry>(1L<<4)</entry> 3060e9fcaa8aSmrg </row> 3061eb411b4bSmrg <row> 30620f8248bfSmrg <entry><symbol>XkbMouseKeysAccelMask</symbol></entry> 3063e9fcaa8aSmrg <entry>ok</entry> 3064e9fcaa8aSmrg <entry>ok</entry> 3065e9fcaa8aSmrg <entry>(1L<<5)</entry> 3066e9fcaa8aSmrg </row> 3067eb411b4bSmrg <row> 30680f8248bfSmrg <entry><symbol>XkbAccessXKeysMask</symbol></entry> 3069e9fcaa8aSmrg <entry>ok</entry> 3070e9fcaa8aSmrg <entry>ok</entry> 3071e9fcaa8aSmrg <entry>(1L<<6)</entry> 3072e9fcaa8aSmrg </row> 3073eb411b4bSmrg <row> 30740f8248bfSmrg <entry><symbol>XkbAccessXTimeoutMask</symbol></entry> 3075e9fcaa8aSmrg <entry>ok</entry> 3076e9fcaa8aSmrg <entry>ok</entry> 3077e9fcaa8aSmrg <entry>(1L<<7)</entry> 3078e9fcaa8aSmrg </row> 3079eb411b4bSmrg <row> 30800f8248bfSmrg <entry><symbol>XkbAccessXFeedbackMask</symbol></entry> 3081e9fcaa8aSmrg <entry>ok</entry> 3082e9fcaa8aSmrg <entry>ok</entry> 3083e9fcaa8aSmrg <entry>(1L<<8)</entry> 3084e9fcaa8aSmrg </row> 3085eb411b4bSmrg <row> 30860f8248bfSmrg <entry><symbol>XkbAudibleBellMask</symbol></entry> 3087e9fcaa8aSmrg <entry></entry> 3088e9fcaa8aSmrg <entry>ok</entry> 3089e9fcaa8aSmrg <entry>(1L<<9)</entry> 3090e9fcaa8aSmrg </row> 3091eb411b4bSmrg <row> 30920f8248bfSmrg <entry><symbol>XkbOverlay1Mask</symbol></entry> 3093e9fcaa8aSmrg <entry></entry> 3094e9fcaa8aSmrg <entry>ok</entry> 3095e9fcaa8aSmrg <entry>(1L<<10)</entry> 3096e9fcaa8aSmrg </row> 3097eb411b4bSmrg <row> 30980f8248bfSmrg <entry><symbol>XkbOverlay2Mask</symbol></entry> 3099e9fcaa8aSmrg <entry></entry> 3100e9fcaa8aSmrg <entry>ok</entry> 3101e9fcaa8aSmrg <entry>(1L<<11)</entry> 3102e9fcaa8aSmrg </row> 3103eb411b4bSmrg <row> 31040f8248bfSmrg <entry><symbol>XkbIgnoreGroupLockMask</symbol></entry> 3105e9fcaa8aSmrg <entry></entry> 3106e9fcaa8aSmrg <entry>ok</entry> 3107e9fcaa8aSmrg <entry>(1L<<12)</entry> 3108e9fcaa8aSmrg</row> 3109eb411b4bSmrg<row> 31100f8248bfSmrg <entry><symbol>XkbGroupsWrapMask</symbol></entry> 3111e9fcaa8aSmrg <entry>ok</entry> 3112e9fcaa8aSmrg <entry></entry> 3113e9fcaa8aSmrg <entry>(1L<<27)</entry> 3114e9fcaa8aSmrg</row> 3115eb411b4bSmrg<row> 31160f8248bfSmrg <entry><symbol>XkbInternalModsMask</symbol></entry> 3117e9fcaa8aSmrg <entry>ok</entry> 3118e9fcaa8aSmrg <entry></entry> 3119e9fcaa8aSmrg <entry>(1L<<28)</entry> 3120e9fcaa8aSmrg</row> 3121eb411b4bSmrg<row> 31220f8248bfSmrg <entry><symbol>XkbIgnoreLockModsMask</symbol></entry> 3123e9fcaa8aSmrg <entry>ok</entry> 3124e9fcaa8aSmrg <entry></entry> 3125e9fcaa8aSmrg <entry>(1L<<29)</entry> 3126e9fcaa8aSmrg</row> 3127eb411b4bSmrg<row> 31280f8248bfSmrg <entry><symbol>XkbPerKeyRepeatMask</symbol></entry> 3129e9fcaa8aSmrg <entry>ok</entry> 3130e9fcaa8aSmrg <entry></entry> 3131e9fcaa8aSmrg <entry>(1L<<30)</entry> 3132e9fcaa8aSmrg</row> 3133eb411b4bSmrg<row> 31340f8248bfSmrg <entry><symbol>XkbControlsEnabledMask</symbol></entry> 3135e9fcaa8aSmrg <entry>ok</entry> 3136e9fcaa8aSmrg <entry></entry> 3137e9fcaa8aSmrg <entry>(1L<<31)</entry> 3138e9fcaa8aSmrg</row> 3139eb411b4bSmrg<row> 31400f8248bfSmrg <entry><symbol>XkbAccessXOptionsMask</symbol></entry> 3141e9fcaa8aSmrg <entry>ok</entry> 3142e9fcaa8aSmrg <entry>ok</entry> 3143e9fcaa8aSmrg <entry>(XkbStickyKeysMask | XkbAccessXFeedbackMask)</entry> 3144e9fcaa8aSmrg </row> 3145eb411b4bSmrg <row> 31460f8248bfSmrg <entry><symbol>XkbAllBooleanCtrlsMask</symbol></entry> 3147e9fcaa8aSmrg <entry></entry> 3148e9fcaa8aSmrg <entry>ok</entry> 3149e9fcaa8aSmrg <entry>(0x00001FFF) </entry> 3150e9fcaa8aSmrg </row> 3151eb411b4bSmrg <row> 31520f8248bfSmrg <entry><symbol>XkbAllControlsMask</symbol></entry> 3153e9fcaa8aSmrg <entry>ok</entry> 3154e9fcaa8aSmrg <entry></entry> 3155e9fcaa8aSmrg <entry>(0xF8001FFF)</entry> 3156e9fcaa8aSmrg </row> 3157e9fcaa8aSmrg</tbody> 3158e9fcaa8aSmrg</tgroup> 3159e9fcaa8aSmrg</table> 3160e9fcaa8aSmrg 3161e9fcaa8aSmrg<para> 31620f8248bfSmrgThe individual fields of the 31630f8248bfSmrg<structname>XkbControlsRec</structname> 31640f8248bfSmrgstructure are defined as follows. 3165e9fcaa8aSmrg</para> 3166e9fcaa8aSmrg 3167e9fcaa8aSmrg<sect2> 3168e9fcaa8aSmrg<title/> 3169e9fcaa8aSmrg<sect3 id='mk_dflt_btn'> 3170e9fcaa8aSmrg<title>mk_dflt_btn</title> 3171e9fcaa8aSmrg 3172e9fcaa8aSmrg<para> 31730f8248bfSmrg<structfield>mk_dflt_btn</structfield> is an attribute of the 31740f8248bfSmrg<emphasis>MouseKeys</emphasis> 31750f8248bfSmrgcontrol 31760f8248bfSmrg(see <link linkend="Controls_for_Using_the_Mouse_from_the_Keyboard">section 10.5</link>). It 31770f8248bfSmrgspecifies the mouse button number to use for keyboard simulated mouse button 31780f8248bfSmrgoperations. Its value should be one of the core symbols 31790f8248bfSmrg<symbol>Button1</symbol> 31800f8248bfSmrg– 31810f8248bfSmrg<symbol>Button5</symbol>. 3182e9fcaa8aSmrg</para> 3183e9fcaa8aSmrg 3184e9fcaa8aSmrg 3185e9fcaa8aSmrg</sect3> 3186e9fcaa8aSmrg<sect3 id='num_groups'> 3187e9fcaa8aSmrg<title>num_groups</title> 3188e9fcaa8aSmrg 3189e9fcaa8aSmrg<para> 31900f8248bfSmrg<structfield>num_groups</structfield> 31910f8248bfSmrgis not a part of any control, but is reported in the 31920f8248bfSmrg<structname>XkbControlsRec</structname> 31930f8248bfSmrgstructure whenever any of its components are fetched from the server. It 3194e9fcaa8aSmrgreports the number of groups the particular keyboard configuration uses and is 3195e9fcaa8aSmrgcomputed automatically by the server whenever the keyboard mapping changes. 3196e9fcaa8aSmrg</para> 3197e9fcaa8aSmrg 3198e9fcaa8aSmrg 3199e9fcaa8aSmrg</sect3> 3200e9fcaa8aSmrg<sect3 id='groups_wrap'> 3201e9fcaa8aSmrg<title>groups_wrap</title> 3202e9fcaa8aSmrg 3203e9fcaa8aSmrg<para> 32040f8248bfSmrg<structfield>groups_wrap</structfield> 32050f8248bfSmrgis an attribute of the 32060f8248bfSmrg<emphasis>GroupsWrap</emphasis> 32070f8248bfSmrgcontrol (see <link linkend="The_GroupsWrap_Control">section 10.7.1</link>). It specifies the handling of illegal groups on a 32080f8248bfSmrgglobal basis. Valid values for 32090f8248bfSmrg<structfield>groups_wrap</structfield> 32100f8248bfSmrgare shown in <link linkend="table10.8">Table 10.8</link>. 3211e9fcaa8aSmrg</para> 3212e9fcaa8aSmrg 32130f8248bfSmrg<table id='table10.8' frame='topbot'> 3214e9fcaa8aSmrg<title>GroupsWrap options (groups_wrap field)</title> 3215eb411b4bSmrg<?dbfo keep-together="always" ?> 3216eb411b4bSmrg<tgroup cols='2' align='left' colsep='0' rowsep='0'> 3217eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 3218eb411b4bSmrg<colspec colname='c2' colwidth='1.0*'/> 3219e9fcaa8aSmrg<thead> 3220eb411b4bSmrg<row rowsep='1'> 3221e9fcaa8aSmrg <entry>groups_wrap symbolic name</entry> 3222e9fcaa8aSmrg <entry>value</entry> 3223e9fcaa8aSmrg </row> 3224e9fcaa8aSmrg</thead> 3225e9fcaa8aSmrg<tbody> 3226eb411b4bSmrg <row> 32270f8248bfSmrg <entry><symbol>XkbWrapIntoRange</symbol></entry> 3228e9fcaa8aSmrg <entry>(0x00)</entry> 3229e9fcaa8aSmrg </row> 3230eb411b4bSmrg <row> 32310f8248bfSmrg <entry><symbol>XkbClampIntoRange</symbol></entry> 3232e9fcaa8aSmrg <entry>(0x40)</entry> 3233e9fcaa8aSmrg </row> 3234eb411b4bSmrg <row> 32350f8248bfSmrg <entry><symbol>XkbRedirectIntoRange</symbol></entry> 3236e9fcaa8aSmrg <entry>(0x80)</entry> 3237e9fcaa8aSmrg </row> 3238e9fcaa8aSmrg</tbody> 3239e9fcaa8aSmrg</tgroup> 3240e9fcaa8aSmrg</table> 3241e9fcaa8aSmrg 3242e9fcaa8aSmrg<para> 32430f8248bfSmrgWhen 32440f8248bfSmrg<structfield>groups_wrap</structfield> 32450f8248bfSmrgis set to 32460f8248bfSmrg<symbol>XkbRedirectIntoRange</symbol>, 32470f8248bfSmrgits four low-order bits specify the index of the group to use. 3248e9fcaa8aSmrg</para> 3249e9fcaa8aSmrg 3250e9fcaa8aSmrg 3251e9fcaa8aSmrg</sect3> 3252e9fcaa8aSmrg<sect3 id='internal'> 3253e9fcaa8aSmrg<title>internal</title> 3254e9fcaa8aSmrg 3255e9fcaa8aSmrg<para> 32560f8248bfSmrg<structfield>internal</structfield> 32570f8248bfSmrgis an attribute of the 32580f8248bfSmrg<emphasis>InternalMods</emphasis> 32590f8248bfSmrgcontrol (see <link linkend="The_InternalMods_Control">section 10.7.4</link>). It specifies modifiers to be consumed in the 3260e9fcaa8aSmrgserver and not passed on to clients when events are reported. Valid values 32610f8248bfSmrgconsist of any combination of the eight core modifier bits: 32620f8248bfSmrg<symbol>ShiftMask</symbol>, 32630f8248bfSmrg<symbol>LockMask</symbol>, 32640f8248bfSmrg<symbol>ControlMask</symbol>, 32650f8248bfSmrg<symbol>Mod1Mask</symbol> 32660f8248bfSmrg– 32670f8248bfSmrg<symbol>Mod5Mask</symbol>. 3268e9fcaa8aSmrg</para> 3269e9fcaa8aSmrg 3270e9fcaa8aSmrg 3271e9fcaa8aSmrg</sect3> 3272e9fcaa8aSmrg<sect3 id='ignore_lock'> 3273e9fcaa8aSmrg<title>ignore_lock</title> 3274e9fcaa8aSmrg 3275e9fcaa8aSmrg<para> 32760f8248bfSmrg<structfield>ignore_lock</structfield> 32770f8248bfSmrgis an attribute of the 32780f8248bfSmrg<emphasis>IgnoreLockMods</emphasis> 32790f8248bfSmrgcontrol (see <link linkend="The_IgnoreLockMods_Control">section 10.7.2</link>). It specifies modifiers to be ignored in grab 3280e9fcaa8aSmrgcalculations. Valid values consist of any combination of the eight core 32810f8248bfSmrgmodifier bits: 32820f8248bfSmrg<symbol>ShiftMask</symbol>, 32830f8248bfSmrg<symbol>LockMask</symbol>, 32840f8248bfSmrg<symbol>ControlMask</symbol>, 32850f8248bfSmrg<symbol>Mod1Mask</symbol> 32860f8248bfSmrg– 32870f8248bfSmrg<symbol>Mod5Mask</symbol>. 3288e9fcaa8aSmrg</para> 3289e9fcaa8aSmrg 3290e9fcaa8aSmrg 3291e9fcaa8aSmrg</sect3> 3292e9fcaa8aSmrg<sect3 id='enabled_ctrls'> 3293e9fcaa8aSmrg<title>enabled_ctrls</title> 3294e9fcaa8aSmrg 3295e9fcaa8aSmrg<para> 32960f8248bfSmrg<structfield>enabled_ctrls</structfield> 32970f8248bfSmrgis an attribute of the 32980f8248bfSmrg<emphasis>EnabledControls</emphasis> 32990f8248bfSmrgcontrol (see <link linkend="The_EnabledControls_Control">section 10.1.1</link>). It contains one bit per boolean control. Each 3300e9fcaa8aSmrgbit determines whether the corresponding control is enabled or disabled; a one 3301e9fcaa8aSmrgbit means the control is enabled. The mask bits used to enable these controls 33020f8248bfSmrgare listed in <link linkend="table10.7">Table 10.7</link>, 33030f8248bfSmrgusing only those masks with <quote>ok</quote> in the 33040f8248bfSmrg<structfield>enabled_ctrls</structfield> 33050f8248bfSmrgcolumn. 3306e9fcaa8aSmrg</para> 3307e9fcaa8aSmrg 3308e9fcaa8aSmrg 3309e9fcaa8aSmrg</sect3> 3310e9fcaa8aSmrg<sect3 id='repeat_delay_and_repeat_interval'> 3311e9fcaa8aSmrg<title>repeat_delay and repeat_interval</title> 3312e9fcaa8aSmrg 3313e9fcaa8aSmrg<para> 33140f8248bfSmrg<structfield>repeat_delay</structfield> 33150f8248bfSmrgand 33160f8248bfSmrg<structfield>repeat_interval</structfield> 33170f8248bfSmrgare attributes of the 33180f8248bfSmrg<emphasis>RepeatKeys</emphasis> 33190f8248bfSmrgcontrol (see <link linkend="The_RepeatKeys_Control">section 10.3.2</link>). 33200f8248bfSmrg<structfield>repeat_delay</structfield> 33210f8248bfSmrgis the initial delay before a key begins repeating, in milliseconds; 33220f8248bfSmrg<structfield>repeat_interval</structfield> 33230f8248bfSmrgis the delay between subsequent key events, in milliseconds. 3324e9fcaa8aSmrg</para> 3325e9fcaa8aSmrg 3326e9fcaa8aSmrg 3327e9fcaa8aSmrg</sect3> 3328e9fcaa8aSmrg<sect3 id='slow_keys_delay'> 3329e9fcaa8aSmrg<title>slow_keys_delay</title> 3330e9fcaa8aSmrg 3331e9fcaa8aSmrg<para> 33320f8248bfSmrg<structfield>slow_keys_delay</structfield> 33330f8248bfSmrgis an attribute of the 33340f8248bfSmrg<emphasis>SlowKeys</emphasis> 33350f8248bfSmrgcontrol (see <link linkend="The_SlowKeys_Control">section 10.6.6</link>). Its value specifies the 33360f8248bfSmrg<emphasis>SlowKeys</emphasis> 33370f8248bfSmrgacceptance delay period in milliseconds before a key press is accepted by the 3338e9fcaa8aSmrgserver. 3339e9fcaa8aSmrg</para> 3340e9fcaa8aSmrg 3341e9fcaa8aSmrg 3342e9fcaa8aSmrg</sect3> 3343e9fcaa8aSmrg<sect3 id='debounce_delay'> 3344e9fcaa8aSmrg<title>debounce_delay</title> 3345e9fcaa8aSmrg 3346e9fcaa8aSmrg<para> 33470f8248bfSmrg<structfield>debounce_delay</structfield> 33480f8248bfSmrgis an attribute of the 33490f8248bfSmrg<emphasis>BounceKeys</emphasis> 33500f8248bfSmrgcontrol (see <link linkend="The_BounceKeys_Control">section 10.6.7</link>). Its value specifies the 33510f8248bfSmrg<emphasis>BounceKeys</emphasis> 33520f8248bfSmrgdelay period in milliseconds for which the key is disabled after having been 3353e9fcaa8aSmrgpressed before another press of the same key is accepted by the server. 3354e9fcaa8aSmrg</para> 3355e9fcaa8aSmrg 3356e9fcaa8aSmrg 3357e9fcaa8aSmrg</sect3> 3358e9fcaa8aSmrg<sect3 id='mk_delay_mk_interval_mk_time_to_max_mk_max_speed_and_mk_curve'> 3359e9fcaa8aSmrg<title>mk_delay, mk_interval, mk_time_to_max, mk_max_speed, and mk_curve</title> 3360e9fcaa8aSmrg 3361e9fcaa8aSmrg<para> 33620f8248bfSmrg<structfield>mk_delay</structfield>, 33630f8248bfSmrg<structfield>mk_interval</structfield>, 33640f8248bfSmrg<structfield>mk_time_to_max</structfield>, 33650f8248bfSmrg<structfield>mk_max_speed</structfield>, 33660f8248bfSmrgand 33670f8248bfSmrg<structfield>mk_curve</structfield> 33680f8248bfSmrgare attributes of the 33690f8248bfSmrg<emphasis>MouseKeysAccel</emphasis> 33700f8248bfSmrgcontrol. Refer to <link linkend="The_MouseKeysAccel_Control">section 10.5.2</link> for a description of these fields and the 3371e9fcaa8aSmrgunits involved. 3372e9fcaa8aSmrg</para> 3373e9fcaa8aSmrg 3374e9fcaa8aSmrg 3375e9fcaa8aSmrg</sect3> 3376e9fcaa8aSmrg<sect3 id='ax_options'> 3377e9fcaa8aSmrg<title>ax_options</title> 3378e9fcaa8aSmrg 3379e9fcaa8aSmrg<para> 33800f8248bfSmrgThe 33810f8248bfSmrg<structfield>ax_options</structfield> 33820f8248bfSmrgfield contains attributes used to configure two different controls, the 33830f8248bfSmrg<emphasis>StickyKeys</emphasis> 33840f8248bfSmrgcontrol (see <link linkend="The_StickyKeys_Control">section 10.6.8</link>) and the 33850f8248bfSmrg<emphasis>AccessXFeedback</emphasis> 33860f8248bfSmrgcontrol (see <link linkend="The_AccessXFeedback_Control">section 10.6.3</link>). The 33870f8248bfSmrg<structfield>ax_options</structfield> 33880f8248bfSmrgfield is a bitmask and may include any combination of the bits defined in 33890f8248bfSmrg<link linkend="table10.9">Table 10.9</link>. 3390e9fcaa8aSmrg</para> 3391e9fcaa8aSmrg 33920f8248bfSmrg<table id='table10.9' frame='topbot'> 3393e9fcaa8aSmrg<title>Access X Enable/Disable Bits (ax_options field)</title> 3394eb411b4bSmrg<?dbfo keep-together="always" ?> 3395eb411b4bSmrg<tgroup cols='3' align='left' colsep='0' rowsep='0'> 3396eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 3397eb411b4bSmrg<colspec colname='c2' colwidth='1.3*'/> 3398eb411b4bSmrg<colspec colname='c3' colwidth='0.7*'/> 3399e9fcaa8aSmrg<thead> 3400eb411b4bSmrg<row rowsep='1'> 3401e9fcaa8aSmrg <entry>Access X Control</entry> 3402e9fcaa8aSmrg <entry>ax_options bit</entry> 3403e9fcaa8aSmrg <entry>value</entry> 3404e9fcaa8aSmrg </row> 3405e9fcaa8aSmrg</thead> 3406e9fcaa8aSmrg<tbody> 3407eb411b4bSmrg <row> 3408e9fcaa8aSmrg <entry>AccessXFeedback</entry> 34090f8248bfSmrg <entry><symbol>XkbAX_SKPressFBMask</symbol></entry> 3410e9fcaa8aSmrg <entry>(1L<<0)</entry> 3411e9fcaa8aSmrg </row> 3412eb411b4bSmrg <row> 3413e9fcaa8aSmrg <entry></entry> 34140f8248bfSmrg <entry><symbol>XkbAX_SKAcceptFBMask</symbol></entry> 3415e9fcaa8aSmrg <entry>(1L << 1)</entry> 3416e9fcaa8aSmrg </row> 3417eb411b4bSmrg <row> 3418e9fcaa8aSmrg <entry></entry> 34190f8248bfSmrg <entry><symbol>XkbAX_FeatureFBMask</symbol></entry> 3420e9fcaa8aSmrg <entry>(1L << 2)</entry> 3421e9fcaa8aSmrg </row> 3422eb411b4bSmrg <row> 3423e9fcaa8aSmrg <entry></entry> 34240f8248bfSmrg <entry><symbol>XkbAX_SlowWarnFBMask</symbol></entry> 3425e9fcaa8aSmrg <entry>(1L << 3)</entry> 3426e9fcaa8aSmrg </row> 3427eb411b4bSmrg <row> 3428e9fcaa8aSmrg <entry></entry> 34290f8248bfSmrg <entry><symbol>XkbAX_IndicatorFBMask</symbol></entry> 3430e9fcaa8aSmrg <entry>(1L << 4)</entry> 3431e9fcaa8aSmrg </row> 3432eb411b4bSmrg <row> 3433e9fcaa8aSmrg <entry></entry> 34340f8248bfSmrg <entry><symbol>XkbAX_StickyKeysFBMask</symbol></entry> 3435e9fcaa8aSmrg <entry>(1L << 5)</entry> 3436e9fcaa8aSmrg </row> 3437eb411b4bSmrg <row> 3438e9fcaa8aSmrg <entry></entry> 34390f8248bfSmrg <entry><symbol>XkbAX_SKReleaseFBMask</symbol></entry> 3440e9fcaa8aSmrg <entry>(1L << 8)</entry> 3441e9fcaa8aSmrg </row> 3442eb411b4bSmrg <row> 3443e9fcaa8aSmrg <entry></entry> 34440f8248bfSmrg <entry><symbol>XkbAX_SKRejectFBMask</symbol></entry> 3445e9fcaa8aSmrg <entry>(1L << 9)</entry> 3446e9fcaa8aSmrg </row> 3447eb411b4bSmrg <row> 3448e9fcaa8aSmrg <entry></entry> 34490f8248bfSmrg <entry><symbol>XkbAX_BKRejectFBMask</symbol></entry> 3450e9fcaa8aSmrg <entry>(1L << 10)</entry> 3451e9fcaa8aSmrg </row> 3452eb411b4bSmrg <row> 3453e9fcaa8aSmrg <entry></entry> 34540f8248bfSmrg <entry><symbol>XkbAX_DumbBellFBMask</symbol></entry> 3455e9fcaa8aSmrg <entry>(1L << 11)</entry> 3456e9fcaa8aSmrg </row> 3457eb411b4bSmrg <row> 3458e9fcaa8aSmrg <entry>StickyKeys</entry> 34590f8248bfSmrg <entry><symbol>XkbAX_TwoKeysMask</symbol></entry> 3460e9fcaa8aSmrg <entry>(1L << 6)</entry> 3461e9fcaa8aSmrg </row> 3462eb411b4bSmrg <row> 3463e9fcaa8aSmrg <entry></entry> 34640f8248bfSmrg <entry><symbol>XkbAX_LatchToLockMask</symbol></entry> 3465e9fcaa8aSmrg <entry>(1L << 7)</entry> 3466e9fcaa8aSmrg </row> 3467eb411b4bSmrg <row> 3468e9fcaa8aSmrg <entry></entry> 34690f8248bfSmrg <entry><symbol>XkbAX_AllOptionsMask</symbol></entry> 3470e9fcaa8aSmrg <entry>(0xFFF)</entry> 3471e9fcaa8aSmrg </row> 3472e9fcaa8aSmrg</tbody> 3473e9fcaa8aSmrg</tgroup> 3474e9fcaa8aSmrg</table> 3475e9fcaa8aSmrg 3476e9fcaa8aSmrg<para> 3477e9fcaa8aSmrgThe fields pertaining to each control are relevant only when the control is 34780f8248bfSmrgenabled 34790f8248bfSmrg(<symbol>XkbAccessXFeedbackMask</symbol> 34800f8248bfSmrgor 34810f8248bfSmrg<symbol>XkbStickyKeysMask</symbol> 34820f8248bfSmrgbit is turned on in the 34830f8248bfSmrg<structfield>enabled_ctrls</structfield> 34840f8248bfSmrgfield). 3485e9fcaa8aSmrg</para> 3486e9fcaa8aSmrg 3487e9fcaa8aSmrg 3488e9fcaa8aSmrg<para> 34890f8248bfSmrgXkb provides a set of convenience macros for working with the 34900f8248bfSmrg<structfield>ax_options</structfield> 34910f8248bfSmrgfield of an 34920f8248bfSmrg<structname>XkbControlsRec</structname> 34930f8248bfSmrgstructure: 3494e9fcaa8aSmrg 34950f8248bfSmrg<programlisting> 34960f8248bfSmrg#define <symbol>XkbAX_NeedOption</symbol>(c,w) ((c)->ax_options & (w)) 3497e9fcaa8aSmrg</programlisting></para> 3498e9fcaa8aSmrg 3499e9fcaa8aSmrg<para> 35000f8248bfSmrgThe 35010f8248bfSmrg<symbol>XkbAX_NeedOption</symbol> 35020f8248bfSmrgmacro is useful for determining whether a particular AccessX option is enabled 35030f8248bfSmrgor not. It accepts a pointer to an 35040f8248bfSmrg<structname>XkbControlsRec</structname> 35050f8248bfSmrgstructure and a valid mask bit from 35060f8248bfSmrg<link linkend="table10.9">Table 10.9</link>. 35070f8248bfSmrgIf the specified mask bit in the 35080f8248bfSmrg<structfield>ax_options</structfield> 35090f8248bfSmrgfield of the controls structure is set, the macro returns the mask bit. 3510e9fcaa8aSmrgOtherwise, it returns zero. Thus, 3511e9fcaa8aSmrg 35120f8248bfSmrg<programlisting> 35130f8248bfSmrg XkbAX_NeedOption(ctlrec, XkbAX_LatchToLockMask) 35140f8248bfSmrg</programlisting> 3515e9fcaa8aSmrg 3516e9fcaa8aSmrgis nonzero if the latch to lock transition for latching keys is enabled, and 35170f8248bfSmrgzero if it is disabled. Note that 35180f8248bfSmrg<symbol>XkbAX_NeedOption</symbol> 35190f8248bfSmrgonly determines whether or not the particular capability is configured to 35200f8248bfSmrgoperate; the 35210f8248bfSmrg<symbol>XkbAccessXFeedbackMask</symbol> 35220f8248bfSmrgbit must also be turned on in 35230f8248bfSmrg<structfield>enabled_ctrls</structfield> 35240f8248bfSmrgfor the capability to actually be functioning. 3525e9fcaa8aSmrg</para> 3526e9fcaa8aSmrg 3527e9fcaa8aSmrg<para><programlisting> 35280f8248bfSmrg#define <symbol>XkbAX_AnyFeedback</symbol>(c) \ 35290f8248bfSmrg ((c)->enabled_ctrls & XkbAccessXFeedbackMask) 3530e9fcaa8aSmrg</programlisting></para> 3531e9fcaa8aSmrg 3532e9fcaa8aSmrg<para> 35330f8248bfSmrgThe 35340f8248bfSmrg<symbol>XkbAX_AnyFeedback</symbol> 35350f8248bfSmrgmacro accepts a pointer to an 35360f8248bfSmrg<structname>XkbControlsRec</structname> 35370f8248bfSmrgstructure and tells whether the 35380f8248bfSmrg<emphasis>AccessXFeedback</emphasis> 35390f8248bfSmrgcontrol is enabled or not. If the 35400f8248bfSmrg<emphasis>AccessXFeedback</emphasis> 35410f8248bfSmrgcontrol is enabled, the macro returns 35420f8248bfSmrg<symbol>XkbAccessXFeedbackMask</symbol>. 35430f8248bfSmrgOtherwise, it returns zero. 3544e9fcaa8aSmrg</para> 3545e9fcaa8aSmrg 3546e9fcaa8aSmrg<para><programlisting> 35470f8248bfSmrg#define <symbol>XkbAX_NeedFeedback</symbol>(c,w) \ 35480f8248bfSmrg (XkbAX_AnyFeedback(c) && XkbAX_NeedOption(c,w)) 3549e9fcaa8aSmrg</programlisting></para> 3550e9fcaa8aSmrg 3551e9fcaa8aSmrg<para> 35520f8248bfSmrgThe 35530f8248bfSmrg<symbol>XkbAX_NeedFeedback</symbol> 35540f8248bfSmrgmacro is useful for determining if both the 35550f8248bfSmrg<emphasis>AccessXFeedback</emphasis> 35560f8248bfSmrgcontrol and a particular AccessX feedback option are enabled. The macro 35570f8248bfSmrgaccepts a pointer to an 35580f8248bfSmrg<structname>XkbControlsRec</structname> 35590f8248bfSmrgstructure and a feedback option from the table above. If both the 35600f8248bfSmrg<emphasis>AccessXFeedback</emphasis> 35610f8248bfSmrgcontrol and the specified feedback option are enabled, the macro returns 35620f8248bfSmrg<symbol>True</symbol>. 35630f8248bfSmrgOtherwise it returns 35640f8248bfSmrg<symbol>False</symbol>. 3565e9fcaa8aSmrg</para> 3566e9fcaa8aSmrg 3567e9fcaa8aSmrg 3568e9fcaa8aSmrg</sect3> 3569e9fcaa8aSmrg<sect3 3570e9fcaa8aSmrgid='ax_timeout_axt_opts_mask_axt_opts_values_axt_ctrls_mask_and_axt_ctrls_values'> 3571e9fcaa8aSmrg<title>ax_timeout, axt_opts_mask, axt_opts_values, axt_ctrls_mask, and axt_ctrls_values</title> 3572e9fcaa8aSmrg 3573e9fcaa8aSmrg<para> 35740f8248bfSmrg<structfield>ax_timeout</structfield>, 35750f8248bfSmrg<structfield>axt_opts_mask</structfield>, 35760f8248bfSmrg<structfield>axt_opts_values</structfield>, 35770f8248bfSmrg<structfield>axt_ctrls_mask</structfield>, 35780f8248bfSmrgand 35790f8248bfSmrg<structfield>axt_ctrls_values</structfield> 35800f8248bfSmrgare attributes of the 35810f8248bfSmrg<emphasis>AccessXTimeout</emphasis> 35820f8248bfSmrgcontrol. Refer to <link linkend="The_AccessXTimeout_Control">section 10.6.2</link> for a description of these fields and the 3583e9fcaa8aSmrgunits involved. 3584e9fcaa8aSmrg</para> 3585e9fcaa8aSmrg 3586e9fcaa8aSmrg 3587e9fcaa8aSmrg</sect3> 3588e9fcaa8aSmrg<sect3 id='per_key_repeat'> 3589e9fcaa8aSmrg<title>per_key_repeat</title> 3590e9fcaa8aSmrg 3591e9fcaa8aSmrg<para> 35920f8248bfSmrgThe 35930f8248bfSmrg<structfield>per_key_repeat</structfield> 35940f8248bfSmrgfield mirrors the 35950f8248bfSmrg<structfield>auto_repeats</structfield> 35960f8248bfSmrgfield of the core protocol 35970f8248bfSmrg<structname>XKeyboardState</structname> 35980f8248bfSmrgstructure: changing the 35990f8248bfSmrg<structfield>auto_repeats</structfield> 36000f8248bfSmrgfield automatically changes 36010f8248bfSmrg<structfield>per_key_repeat</structfield> 36020f8248bfSmrgand vice versa. It is provided for convenience and to reduce protocol traffic. 3603e9fcaa8aSmrgFor example, to obtain the individual repeat key behavior as well as the repeat 36040f8248bfSmrgdelay and rate, use 36050f8248bfSmrg<function>XkbGetControls</function>. 36060f8248bfSmrgIf the 36070f8248bfSmrg<structfield>per_key_repeat</structfield> 36080f8248bfSmrgwere not in this structure, you would have to call both 36090f8248bfSmrg<function>XGetKeyboardControl</function> 36100f8248bfSmrgand 36110f8248bfSmrg<function>XkbGetControls</function> 36120f8248bfSmrgto get this information. The bits correspond to keycodes. The first seven keys 36130f8248bfSmrg(keycodes 1–7) are indicated in 36140f8248bfSmrg<structfield>per_key_repeat</structfield>[0], 36150f8248bfSmrgwith bit position 0 (low order) corresponding to the fictitious keycode 0. 3616e9fcaa8aSmrgFollowing array elements correspond to 8 keycodes per element. A 1 bit 3617e9fcaa8aSmrgindicates that the key is a repeating key. 3618e9fcaa8aSmrg</para> 3619e9fcaa8aSmrg 3620e9fcaa8aSmrg 3621e9fcaa8aSmrg</sect3> 3622e9fcaa8aSmrg</sect2> 3623e9fcaa8aSmrg</sect1> 3624eb411b4bSmrg<sect1 id='Querying_Controls'> 3625e9fcaa8aSmrg<title>Querying Controls</title> 3626e9fcaa8aSmrg 3627e9fcaa8aSmrg<para> 36280f8248bfSmrgUse 36290f8248bfSmrg<function>XkbGetControls</function> 36300f8248bfSmrgto find the current state of Xkb server controls. 36310f8248bfSmrg</para> 36320f8248bfSmrg 36330f8248bfSmrg<indexterm significance="preferred" zone="XkbGetControls"><primary><function>XkbGetControls</function></primary></indexterm> 36340f8248bfSmrg<funcsynopsis id="XkbGetControls"> 36350f8248bfSmrg <funcprototype> 36360f8248bfSmrg <funcdef>Status <function>XkbGetControls</function></funcdef> 36370f8248bfSmrg<!-- ( 36380f8248bfSmrg<parameter>display, which, xkb)</parameter> --> 36390f8248bfSmrg 36400f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 36410f8248bfSmrg <paramdef>unsigned long <parameter>which</parameter></paramdef> 36420f8248bfSmrg <paramdef>XkbDescPtr <parameter>xkb</parameter></paramdef> 36430f8248bfSmrg </funcprototype> 36440f8248bfSmrg</funcsynopsis> 36450f8248bfSmrg<variablelist> 36460f8248bfSmrg <varlistentry> 36470f8248bfSmrg <term> 36480f8248bfSmrg <parameter>display</parameter> 36490f8248bfSmrg </term> 36500f8248bfSmrg <listitem> 36510f8248bfSmrg <para> 36520f8248bfSmrg connection to X server 36530f8248bfSmrg </para> 36540f8248bfSmrg </listitem> 36550f8248bfSmrg </varlistentry> 36560f8248bfSmrg <varlistentry> 36570f8248bfSmrg <term> 36580f8248bfSmrg <parameter>which</parameter> 36590f8248bfSmrg </term> 36600f8248bfSmrg <listitem> 36610f8248bfSmrg <para> 36620f8248bfSmrg mask of controls requested 36630f8248bfSmrg </para> 36640f8248bfSmrg </listitem> 36650f8248bfSmrg </varlistentry> 36660f8248bfSmrg <varlistentry> 36670f8248bfSmrg <term> 36680f8248bfSmrg <parameter>xkb</parameter> 36690f8248bfSmrg </term> 36700f8248bfSmrg <listitem> 36710f8248bfSmrg <para> 36720f8248bfSmrg keyboard description for controls information 36730f8248bfSmrg </para> 36740f8248bfSmrg </listitem> 36750f8248bfSmrg </varlistentry> 36760f8248bfSmrg</variablelist> 36770f8248bfSmrg 36780f8248bfSmrg<para> 36790f8248bfSmrg<function>XkbGetControls</function> 36800f8248bfSmrgqueries the server for the requested control information, waits for a reply, 3681e9fcaa8aSmrgand then copies the server’s values for the requested information into the 36820f8248bfSmrg<structfield>ctrls</structfield> 36830f8248bfSmrgstructure of the 36840f8248bfSmrg<parameter>xkb</parameter> 36850f8248bfSmrgargument. Only those components specified by the 36860f8248bfSmrg<parameter>which</parameter> 36870f8248bfSmrgparameter are copied. Valid values for 36880f8248bfSmrg<parameter>which</parameter> 36890f8248bfSmrgare any combination of the masks listed in 36900f8248bfSmrg<link linkend="table10.7">Table 10.7</link> that have <quote>ok</quote> in the 36910f8248bfSmrg<parameter>which</parameter> 36920f8248bfSmrgcolumn. 3693e9fcaa8aSmrg</para> 3694e9fcaa8aSmrg 3695e9fcaa8aSmrg 3696e9fcaa8aSmrg<para> 36970f8248bfSmrgIf 36980f8248bfSmrg<parameter>xkb</parameter>-><structfield>ctrls</structfield> 36990f8248bfSmrgis 37000f8248bfSmrg<symbol>NULL</symbol>, 37010f8248bfSmrg<function>XkbGetControls</function> 37020f8248bfSmrgallocates and initializes it before obtaining the values specified by 37030f8248bfSmrg<parameter>which</parameter>. 37040f8248bfSmrgIf 37050f8248bfSmrg<parameter>xkb</parameter>-><structfield>ctrls</structfield> 37060f8248bfSmrgis not 37070f8248bfSmrg<symbol>NULL</symbol>, 37080f8248bfSmrg<function>XkbGetControls</function> 37090f8248bfSmrgmodifies only those portions of 37100f8248bfSmrg<parameter>xkb</parameter>-><structfield>ctrls</structfield> 37110f8248bfSmrgcorresponding to the values specified by 37120f8248bfSmrg<parameter>which</parameter>. 3713e9fcaa8aSmrg</para> 3714e9fcaa8aSmrg 3715e9fcaa8aSmrg 3716e9fcaa8aSmrg<para> 37170f8248bfSmrg<function>XkbGetControls</function> 37180f8248bfSmrgreturns 37190f8248bfSmrg<symbol>Success</symbol> 37200f8248bfSmrgif successful; otherwise, it returns 37210f8248bfSmrg<errorname>BadAlloc</errorname> 37220f8248bfSmrgif it cannot obtain sufficient storage, 37230f8248bfSmrg<errorname>BadMatch</errorname> 37240f8248bfSmrgif 37250f8248bfSmrg<parameter>xkb</parameter> 37260f8248bfSmrgis 37270f8248bfSmrg<symbol>NULL</symbol> 37280f8248bfSmrgor 37290f8248bfSmrg<parameter>which</parameter> 37300f8248bfSmrgis empty, or 37310f8248bfSmrg<errorname>BadImplementation</errorname>. 3732e9fcaa8aSmrg</para> 3733e9fcaa8aSmrg 3734e9fcaa8aSmrg 3735e9fcaa8aSmrg<para> 37360f8248bfSmrgTo free the 37370f8248bfSmrg<structfield>ctrls</structfield> 37380f8248bfSmrgmember of a keyboard description, use 37390f8248bfSmrg<function>XkbFreeControls</function> 37400f8248bfSmrg(see <link linkend="Allocating_and_Freeing_an_XkbControlsRec">section 10.12</link>) 3741e9fcaa8aSmrg</para> 3742e9fcaa8aSmrg 3743e9fcaa8aSmrg 3744e9fcaa8aSmrg<para> 37450f8248bfSmrgThe 37460f8248bfSmrg<structfield>num_groups</structfield> 37470f8248bfSmrgfield in the 37480f8248bfSmrg<structfield>ctrls</structfield> 37490f8248bfSmrgstructure is always filled in by 37500f8248bfSmrg<function>XkbGetControls</function>, 37510f8248bfSmrgregardless of which bits are selected by 37520f8248bfSmrg<parameter>which</parameter>. 3753e9fcaa8aSmrg</para> 3754e9fcaa8aSmrg 3755e9fcaa8aSmrg 37560f8248bfSmrg</sect1> 37570f8248bfSmrg<sect1 id='Changing_Controls'> 37580f8248bfSmrg<title>Changing Controls</title> 37590f8248bfSmrg 3760e9fcaa8aSmrg<para> 37610f8248bfSmrgThere are two ways to make changes to controls: either change a local copy 37620f8248bfSmrgkeyboard description and call 37630f8248bfSmrg<function>XkbSetControls</function>, 37640f8248bfSmrgor, to reduce network traffic, use an 37650f8248bfSmrg<structname>XkbControlsChangesRec</structname> 37660f8248bfSmrgstructure and call 37670f8248bfSmrg<function>XkbChangeControls</function>. 37680f8248bfSmrg</para> 37690f8248bfSmrg 37700f8248bfSmrg 37710f8248bfSmrg<para> 37720f8248bfSmrgTo change the state of one or more controls, first modify the 37730f8248bfSmrg<structfield>ctrls</structfield> 37740f8248bfSmrgstructure in a local copy of the keyboard description and then use 37750f8248bfSmrg<function>XkbSetControls</function> 37760f8248bfSmrgto copy those changes to the X server. 37770f8248bfSmrg</para> 37780f8248bfSmrg 37790f8248bfSmrg<indexterm significance="preferred" zone="XkbSetControls"><primary><function>XkbSetControls</function></primary></indexterm> 37800f8248bfSmrg<funcsynopsis id="XkbSetControls"> 37810f8248bfSmrg <funcprototype> 37820f8248bfSmrg <funcdef>Bool <function>XkbSetControls</function></funcdef> 37830f8248bfSmrg<!-- ( 37840f8248bfSmrg<parameter>display, which, xkb)</parameter> --> 37850f8248bfSmrg 37860f8248bfSmrg <paramdef>Display *<parameter>display</parameter></paramdef> 37870f8248bfSmrg <paramdef>unsigned long <parameter>which</parameter></paramdef> 37880f8248bfSmrg <paramdef>XkbDescPtr <parameter>xkb</parameter></paramdef> 37890f8248bfSmrg </funcprototype> 37900f8248bfSmrg</funcsynopsis> 37910f8248bfSmrg<variablelist> 37920f8248bfSmrg <varlistentry> 37930f8248bfSmrg <term> 37940f8248bfSmrg <parameter>display</parameter> 37950f8248bfSmrg </term> 37960f8248bfSmrg <listitem> 37970f8248bfSmrg <para> 37980f8248bfSmrg connection to X server 37990f8248bfSmrg </para> 38000f8248bfSmrg </listitem> 38010f8248bfSmrg </varlistentry> 38020f8248bfSmrg <varlistentry> 38030f8248bfSmrg <term> 38040f8248bfSmrg <parameter>which</parameter> 38050f8248bfSmrg </term> 38060f8248bfSmrg <listitem> 38070f8248bfSmrg <para> 38080f8248bfSmrg mask of controls to change 38090f8248bfSmrg </para> 38100f8248bfSmrg </listitem> 38110f8248bfSmrg </varlistentry> 38120f8248bfSmrg <varlistentry> 38130f8248bfSmrg <term> 38140f8248bfSmrg <parameter>xkb</parameter> 38150f8248bfSmrg </term> 38160f8248bfSmrg <listitem> 38170f8248bfSmrg <para> 38180f8248bfSmrg <structfield>ctrls</structfield> field contains new values to be set 38190f8248bfSmrg </para> 38200f8248bfSmrg </listitem> 38210f8248bfSmrg </varlistentry> 38220f8248bfSmrg</variablelist> 38230f8248bfSmrg 38240f8248bfSmrg<para> 38250f8248bfSmrgFor each bit that is set in the 38260f8248bfSmrg<parameter>which</parameter> 38270f8248bfSmrgparameter, 38280f8248bfSmrg<function>XkbSetControls</function> 38290f8248bfSmrgsends the corresponding values from the 38300f8248bfSmrg<parameter>xkb</parameter>-><structfield>ctrls</structfield> 38310f8248bfSmrgfield to the server. Valid values for 38320f8248bfSmrg<parameter>which</parameter> 38330f8248bfSmrgare any combination of the masks listed in 38340f8248bfSmrg<link linkend="table10.7">Table 10.7</link> that have <quote>ok</quote> in the 38350f8248bfSmrg<parameter>which</parameter> 38360f8248bfSmrgcolumn. 38370f8248bfSmrg</para> 38380f8248bfSmrg 38390f8248bfSmrg 38400f8248bfSmrg<para> 38410f8248bfSmrgIf 38420f8248bfSmrg<parameter>xkb</parameter>-><structfield>ctrls</structfield> 38430f8248bfSmrgis 38440f8248bfSmrg<symbol>NULL</symbol>, 38450f8248bfSmrgthe server does not support a compatible version of Xkb, or the Xkb extension 38460f8248bfSmrghas not been properly initialized, 38470f8248bfSmrg<function>XkbSetControls</function> 38480f8248bfSmrgreturns 38490f8248bfSmrg<symbol>False</symbol>. 38500f8248bfSmrgOtherwise, it sends the request to the X server and returns 38510f8248bfSmrg<symbol>True</symbol>. 38520f8248bfSmrg</para> 38530f8248bfSmrg 38540f8248bfSmrg 38550f8248bfSmrg<para> 38560f8248bfSmrgNote that changes to attributes of controls in the 38570f8248bfSmrg<structname>XkbControlsRec</structname> 38580f8248bfSmrgstructure are apparent only when the associated control is enabled, although 3859e9fcaa8aSmrgthe corresponding values are still updated in the X server. For example, the 38600f8248bfSmrg<structfield>repeat_delay</structfield> 38610f8248bfSmrgand 38620f8248bfSmrg<structfield>repeat_interval</structfield> 38630f8248bfSmrgfields are ignored unless the 38640f8248bfSmrg<emphasis>RepeatKeys</emphasis> 38650f8248bfSmrgcontrol is enabled (that is, the X server’s equivalent of 38660f8248bfSmrg<structfield>xkb->ctrls</structfield> 38670f8248bfSmrghas 38680f8248bfSmrg<symbol>XkbRepeatKeysMask</symbol> 38690f8248bfSmrgset in 38700f8248bfSmrg<structfield>enabled_ctrls</structfield>). 38710f8248bfSmrgIt is permissible to modify the attributes of a control in one call to 38720f8248bfSmrgXkbSetControls and enable the control in a subsequent call. See <link linkend="The_EnabledControls_Control">section 10.1.1</link> 3873e9fcaa8aSmrgfor more information on enabling and disabling controls. 3874e9fcaa8aSmrg</para> 3875e9fcaa8aSmrg 3876e9fcaa8aSmrg 3877e9fcaa8aSmrg<para> 38780f8248bfSmrgNote that the 38790f8248bfSmrg<structfield>enabled_ctrls</structfield> 38800f8248bfSmrgfield is itself a control — the 38810f8248bfSmrg<emphasis>EnabledControls</emphasis> 38820f8248bfSmrgcontrol. As such, to set a specific configuration of enabled and disabled 38830f8248bfSmrgboolean controls, you must set 38840f8248bfSmrg<structfield>enabled_ctrls</structfield> 38850f8248bfSmrgto the appropriate bits to enable only the controls you want and disable all 38860f8248bfSmrgothers, then specify the 38870f8248bfSmrg<symbol>XkbControlsEnabledMask</symbol> 38880f8248bfSmrgin a call to 38890f8248bfSmrg<function>XkbSetControls</function>. 38900f8248bfSmrgBecause this is somewhat awkward if all you want to do is enable and disable 3891e9fcaa8aSmrgcontrols, and not modify any of their attributes, a convenience function is 38920f8248bfSmrgalso provided for this purpose 38930f8248bfSmrg(<function>XkbChangeEnabledControls</function>, 38940f8248bfSmrg<link linkend="The_EnabledControls_Control">section 10.1.1</link>). 3895e9fcaa8aSmrg</para> 3896e9fcaa8aSmrg 3897e9fcaa8aSmrg 3898eb411b4bSmrg<sect2 id='The_XkbControlsChangesRec_Structure'> 3899e9fcaa8aSmrg<title>The XkbControlsChangesRec Structure</title> 3900e9fcaa8aSmrg 39010f8248bfSmrg<indexterm significance="preferred" zone="The_XkbControlsChangesRec_Structure"> 39020f8248bfSmrg<primary><structname>XkbControlsChangesRec</structname></primary></indexterm> 39030f8248bfSmrg 3904e9fcaa8aSmrg<para> 39050f8248bfSmrgThe 39060f8248bfSmrg<structname>XkbControlsChangesRec</structname> 39070f8248bfSmrgstructure allows applications to track modifications to an 39080f8248bfSmrg<structname>XkbControlsRec</structname> 39090f8248bfSmrgstructure and thereby reduce the amount of traffic sent to the server. The 39100f8248bfSmrgsame 39110f8248bfSmrg<structname>XkbControlsChangesRec</structname> 39120f8248bfSmrgstructure may be used in several successive modifications to the same 39130f8248bfSmrg<structname>XkbControlsRec</structname> 39140f8248bfSmrgstructure, then subsequently used to cause all of the changes, and only the 39150f8248bfSmrgchanges, to be propagated to the server. The 39160f8248bfSmrg<structname>XkbControlsChangesRec</structname> 39170f8248bfSmrgstructure is defined as follows: 3918e9fcaa8aSmrg 39190f8248bfSmrg<programlisting> 3920e9fcaa8aSmrgtypedef struct _XkbControlsChanges { 39210f8248bfSmrg unsigned int changed_ctrls; /* bits indicating changed 39220f8248bfSmrg control data */ 39230f8248bfSmrg unsigned int enabled_ctrls_changes; /* bits indicating 39240f8248bfSmrg enabled/disabled controls */ 39250f8248bfSmrg Bool num_groups_changed; /* <symbol>True</symbol> if number of keyboard 39260f8248bfSmrg groups changed */ 39270f8248bfSmrg} <structname>XkbControlsChangesRec</structname>, *XkbControlsChangesPtr; 3928e9fcaa8aSmrg</programlisting></para> 3929e9fcaa8aSmrg 3930e9fcaa8aSmrg<para> 39310f8248bfSmrgThe 39320f8248bfSmrg<structfield>changed_ctrls</structfield> 39330f8248bfSmrgfield is a mask specifying which logical sets of data in the controls 39340f8248bfSmrgstructure have been modified. In this context, modified means 39350f8248bfSmrg<emphasis>set</emphasis>, 39360f8248bfSmrgthat is, if a value is set to the same value it previously contained, it has 39370f8248bfSmrgstill been modified, and is noted as changed. Valid values for 39380f8248bfSmrg<structfield>changed_ctrls</structfield> 39390f8248bfSmrgare any combination of the masks listed in 39400f8248bfSmrg<link linkend="table10.7">Table 10.7</link> that have <quote>ok</quote> in the 39410f8248bfSmrg<structfield>changed_ctrls</structfield> 39420f8248bfSmrgcolumn. Setting a bit implies the corresponding data fields from the 39430f8248bfSmrg<quote>Relevant XkbControlsRec Data Fields</quote> column in 39440f8248bfSmrg<link linkend="table10.6">Table 10.6</link> have been modified. The 39450f8248bfSmrg<structfield>enabled_ctrls_changes</structfield> 39460f8248bfSmrgfield specifies which bits in the 39470f8248bfSmrg<structfield>enabled_ctrls</structfield> 39480f8248bfSmrgfield have changed. If the number of keyboard groups has changed, the 39490f8248bfSmrg<structfield>num_groups_changed</structfield> 39500f8248bfSmrgfield is set to <symbol>True</symbol>. 3951e9fcaa8aSmrg</para> 3952e9fcaa8aSmrg 3953e9fcaa8aSmrg 3954e9fcaa8aSmrg<para> 3955e9fcaa8aSmrgIf you have an Xkb description with controls that have been modified and an 39560f8248bfSmrg<structname>XkbControlsChangesRec</structname> 39570f8248bfSmrgthat describes the changes that have been made, the 39580f8248bfSmrg<function>XkbChangeControls</function> 39590f8248bfSmrgfunction provides a flexible method for updating the controls in a server to 3960e9fcaa8aSmrgmatch those in the changed keyboard description. 3961e9fcaa8aSmrg</para> 3962e9fcaa8aSmrg 39630f8248bfSmrg<indexterm significance="preferred" zone="XkbChangeControls"><primary><function>XkbChangeControls</function></primary></indexterm> 39640f8248bfSmrg<funcsynopsis id="XkbChangeControls"> 39650f8248bfSmrg <funcprototype> 39660f8248bfSmrg <funcdef>Bool <function>XkbChangeControls</function></funcdef> 39670f8248bfSmrg<!-- ( 39680f8248bfSmrg<parameter>dpy, xkb, changes</parameter> 39690f8248bfSmrg) --> 39700f8248bfSmrg 39710f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 39720f8248bfSmrg <paramdef>XkbDescPtr <parameter>xkb</parameter></paramdef> 39730f8248bfSmrg <paramdef>XkbControlsChangesPtr <parameter>changes</parameter></paramdef> 39740f8248bfSmrg </funcprototype> 39750f8248bfSmrg</funcsynopsis> 39760f8248bfSmrg<variablelist> 39770f8248bfSmrg <varlistentry> 39780f8248bfSmrg <term> 39790f8248bfSmrg <parameter>dpy</parameter> 39800f8248bfSmrg </term> 39810f8248bfSmrg <listitem> 39820f8248bfSmrg <para> 39830f8248bfSmrg connection to X server 39840f8248bfSmrg </para> 39850f8248bfSmrg </listitem> 39860f8248bfSmrg </varlistentry> 39870f8248bfSmrg <varlistentry> 39880f8248bfSmrg <term> 39890f8248bfSmrg <parameter>xkb</parameter> 39900f8248bfSmrg </term> 39910f8248bfSmrg <listitem> 39920f8248bfSmrg <para> 39930f8248bfSmrg keyboard description with changed <structfield>xkb->ctrls</structfield> 39940f8248bfSmrg </para> 39950f8248bfSmrg </listitem> 39960f8248bfSmrg </varlistentry> 39970f8248bfSmrg <varlistentry> 39980f8248bfSmrg <term> 39990f8248bfSmrg <parameter>changes</parameter> 40000f8248bfSmrg </term> 40010f8248bfSmrg <listitem> 40020f8248bfSmrg <para> 40030f8248bfSmrg which parts of <structfield>xkb->ctrls</structfield> have changed 40040f8248bfSmrg </para> 40050f8248bfSmrg </listitem> 40060f8248bfSmrg </varlistentry> 40070f8248bfSmrg</variablelist> 40080f8248bfSmrg 40090f8248bfSmrg<para> 40100f8248bfSmrg<function>XkbChangeControls</function> 40110f8248bfSmrgcopies any controls fields specified by 40120f8248bfSmrg<parameter>changes</parameter> 40130f8248bfSmrgfrom the keyboard description controls structure, 40140f8248bfSmrg<parameter>xkb</parameter>-><structfield>ctrls</structfield>, 40150f8248bfSmrgto the server specified by 40160f8248bfSmrg<parameter>dpy</parameter>. 4017e9fcaa8aSmrg</para> 4018e9fcaa8aSmrg 4019e9fcaa8aSmrg 4020e9fcaa8aSmrg</sect2> 4021e9fcaa8aSmrg</sect1> 4022eb411b4bSmrg<sect1 id='Tracking_Changes_to_Keyboard_Controls'> 4023e9fcaa8aSmrg<title>Tracking Changes to Keyboard Controls</title> 4024e9fcaa8aSmrg 40250f8248bfSmrg<indexterm significance="preferred" zone="Tracking_Changes_to_Keyboard_Controls"> 40260f8248bfSmrg<primary>events</primary><secondary><symbol>XkbControlsNotify</symbol></secondary></indexterm> 40270f8248bfSmrg<indexterm significance="preferred" zone="Tracking_Changes_to_Keyboard_Controls"> 40280f8248bfSmrg<primary><structname>XkbControlsNotifyEvent</structname></primary></indexterm> 40290f8248bfSmrg 4030e9fcaa8aSmrg<para> 4031e9fcaa8aSmrgWhenever a field in the controls structure changes in the server’s keyboard 40320f8248bfSmrgdescription, the server sends an 40330f8248bfSmrg<symbol>XkbControlsNotify</symbol> 40340f8248bfSmrgevent to all interested clients.To receive 40350f8248bfSmrg<symbol>XkbControlsNotify</symbol> 40360f8248bfSmrgevents under all possible conditions, use 40370f8248bfSmrg<function>XkbSelectEvents</function> 40380f8248bfSmrg(see <link linkend="Selecting_Xkb_Events">section 4.3</link>) and pass 40390f8248bfSmrg<symbol>XkbControlsNotifyMask</symbol> 40400f8248bfSmrgin both 40410f8248bfSmrg<parameter>bits_to_change</parameter> 40420f8248bfSmrgand 40430f8248bfSmrg<parameter>values_for_bits</parameter>. 4044e9fcaa8aSmrg</para> 4045e9fcaa8aSmrg 4046e9fcaa8aSmrg 4047e9fcaa8aSmrg<para> 40480f8248bfSmrgTo receive 40490f8248bfSmrg<symbol>XkbControlsNotify</symbol> 40500f8248bfSmrgevents only under certain conditions, use 40510f8248bfSmrg<function>XkbSelectEventDetails</function> 40520f8248bfSmrgusing 40530f8248bfSmrg<symbol>XkbControlsNotify</symbol> 40540f8248bfSmrgas the 40550f8248bfSmrg<structfield>event_type</structfield> 40560f8248bfSmrgand specifying the desired state changes in 40570f8248bfSmrg<parameter>bits_to_change</parameter> 40580f8248bfSmrgand 40590f8248bfSmrg<parameter>values_for_bits</parameter> 40600f8248bfSmrgusing mask bits from <link linkend="table10.7">Table 10.7</link>. 4061e9fcaa8aSmrg</para> 4062e9fcaa8aSmrg 4063e9fcaa8aSmrg 4064e9fcaa8aSmrg<para> 40650f8248bfSmrgThe structure for the 40660f8248bfSmrg<symbol>XkbControlsNotify</symbol> 40670f8248bfSmrgevent is defined as follows: 4068e9fcaa8aSmrg 40690f8248bfSmrg<programlisting> 4070e9fcaa8aSmrgtypedef struct { 40710f8248bfSmrg int type; /* Xkb extension base event code */ 40720f8248bfSmrg unsigned long serial; /* X server serial number for event */ 40730f8248bfSmrg Bool send_event; /* <symbol>True</symbol> ⇒ synthetically generated */ 40740f8248bfSmrg Display * display; /* server connection where event generated */ 40750f8248bfSmrg Time time; /* server time when event generated */ 40760f8248bfSmrg int xkb_type; /* <symbol>XkbCompatMapNotify</symbol> */ 40770f8248bfSmrg int device; /* Xkb device ID, 40780f8248bfSmrg will not be <symbol>XkbUseCoreKbd</symbol> */ 40790f8248bfSmrg unsigned int changed_ctrls; /* bits indicating which controls 40800f8248bfSmrg data have changed */ 40810f8248bfSmrg unsigned int enabled_ctrls; /* controls currently enabled in server */ 40820f8248bfSmrg unsigned int enabled_ctrl_changes; /* bits indicating 40830f8248bfSmrg enabled/disabled controls */ 40840f8248bfSmrg int num_groups; /* current number of keyboard groups */ 40850f8248bfSmrg KeyCode keycode; /* != 0 ⇒ keycode of key causing change */ 40860f8248bfSmrg char event_type; /* Type of event causing change */ 40870f8248bfSmrg char req_major; /* major event code of event causing change */ 40880f8248bfSmrg char req_minor; /* minor event code of event causing change */ 40890f8248bfSmrg} <structname>XkbControlsNotifyEvent</structname>; 4090e9fcaa8aSmrg</programlisting></para> 4091e9fcaa8aSmrg 4092e9fcaa8aSmrg<para> 40930f8248bfSmrgThe 40940f8248bfSmrg<structfield>changed_ctrls</structfield> 40950f8248bfSmrgfield specifies the controls components that have changed and consists of bits 40960f8248bfSmrgtaken from the masks defined in 40970f8248bfSmrg<link linkend="table10.7">Table 10.7</link> with <quote>ok</quote> in the 40980f8248bfSmrg<structfield>changed_ctrls</structfield> 40990f8248bfSmrgcolumn. 4100e9fcaa8aSmrg</para> 4101e9fcaa8aSmrg 4102e9fcaa8aSmrg 4103e9fcaa8aSmrg<para> 41040f8248bfSmrgThe controls currently enabled in the server are reported in the 41050f8248bfSmrg<structfield>enabled_ctrls</structfield> 41060f8248bfSmrgfield. If any controls were just enabled or disabled (that is, the contents of 41070f8248bfSmrgthe 41080f8248bfSmrg<structfield>enabled_ctrls</structfield> 41090f8248bfSmrgfield changed), they are flagged in the 41100f8248bfSmrg<structfield>enabled_ctrl_changes</structfield> 41110f8248bfSmrgfield. The valid bits for these fields are the masks listed in 41120f8248bfSmrg<link linkend="table10.7">Table 10.7</link> with 41130f8248bfSmrg<quote>ok</quote> in the 41140f8248bfSmrg<structfield>enabled_ctrls</structfield> 41150f8248bfSmrgcolumn. The 41160f8248bfSmrg<structfield>num_groups</structfield> 41170f8248bfSmrgfield reports the number of groups bound to the key belonging to the most 4118e9fcaa8aSmrgnumber of groups and is automatically updated when the keyboard mapping changes. 4119e9fcaa8aSmrg</para> 4120e9fcaa8aSmrg 4121e9fcaa8aSmrg 4122e9fcaa8aSmrg<para> 41230f8248bfSmrgIf the change was caused by a request from a client, the 41240f8248bfSmrg<structfield>keycode</structfield> 41250f8248bfSmrgand 41260f8248bfSmrg<structfield>event_type</structfield> 41270f8248bfSmrgfields are set to 41280f8248bfSmrg<emphasis>zero</emphasis> 41290f8248bfSmrgand the 41300f8248bfSmrg<structfield>req_major</structfield> 41310f8248bfSmrgand 41320f8248bfSmrg<structfield>req_minor</structfield> 41330f8248bfSmrgfields identify the request. The 41340f8248bfSmrg<structfield>req_major</structfield> 41350f8248bfSmrgvalue is the same as the major extension opcode. Otherwise, 41360f8248bfSmrg<structfield>event_type</structfield> 41370f8248bfSmrgis set to the type of event that caused the change (one of 41380f8248bfSmrg<symbol>KeyPress</symbol>, 41390f8248bfSmrg<symbol>KeyRelease</symbol>, 41400f8248bfSmrg<symbol>DeviceKeyPress</symbol>, 41410f8248bfSmrg<symbol>DeviceKeyRelease</symbol>, 41420f8248bfSmrg<symbol>ButtonPress</symbol> 41430f8248bfSmrgor 41440f8248bfSmrg<symbol>ButtonRelease</symbol>), 41450f8248bfSmrgand 41460f8248bfSmrg<structfield>req_major</structfield> 41470f8248bfSmrgand 41480f8248bfSmrg<structfield>req_minor</structfield> 41490f8248bfSmrgare undefined. If 41500f8248bfSmrg<structfield>event_type</structfield> 41510f8248bfSmrgis 41520f8248bfSmrg<symbol>KeyPress</symbol>, 41530f8248bfSmrg<symbol>KeyRelease</symbol>, 41540f8248bfSmrg<symbol>DeviceKeyPress</symbol>, 41550f8248bfSmrgor 41560f8248bfSmrg<symbol>DeviceKeyRelease</symbol>, 41570f8248bfSmrgthe 41580f8248bfSmrg<structfield>keycode</structfield> 41590f8248bfSmrgfield is set to the key that caused the change. If 41600f8248bfSmrg<structfield>event_type</structfield> 41610f8248bfSmrgis 41620f8248bfSmrg<symbol>ButtonPress</symbol> 41630f8248bfSmrgor 41640f8248bfSmrg<symbol>ButtonRelease</symbol>, 41650f8248bfSmrg<structfield>keycode</structfield> 41660f8248bfSmrgcontains the button number. 41670f8248bfSmrg</para> 41680f8248bfSmrg 41690f8248bfSmrg 41700f8248bfSmrg<para> 41710f8248bfSmrgWhen a client receives an 41720f8248bfSmrg<symbol>XkbControlsNotify</symbol> 41730f8248bfSmrgevent, it can note the changes in a changes structure using 41740f8248bfSmrg<function>XkbNoteControlsChanges</function>. 41750f8248bfSmrg</para> 41760f8248bfSmrg 41770f8248bfSmrg<indexterm significance="preferred" zone="XkbNoteControlsChanges"><primary><function>XkbNoteControlsChanges</function></primary></indexterm> 41780f8248bfSmrg<funcsynopsis id="XkbNoteControlsChanges"> 41790f8248bfSmrg <funcprototype> 41800f8248bfSmrg <funcdef>void <function>XkbNoteControlsChanges</function></funcdef> 41810f8248bfSmrg<!-- ( 41820f8248bfSmrg<parameter>changes</parameter>, 41830f8248bfSmrg<parameter>new</parameter>, 41840f8248bfSmrg<parameter>wanted</parameter> 41850f8248bfSmrg) --> 41860f8248bfSmrg 41870f8248bfSmrg <paramdef>XkbControlsChangesPtr <parameter>changes</parameter></paramdef> 41880f8248bfSmrg <paramdef>XkbControlsNotifyEvent *<parameter>new</parameter></paramdef> 41890f8248bfSmrg <paramdef>unsigned int <parameter>wanted</parameter></paramdef> 41900f8248bfSmrg </funcprototype> 41910f8248bfSmrg</funcsynopsis> 41920f8248bfSmrg<variablelist> 41930f8248bfSmrg <varlistentry> 41940f8248bfSmrg <term> 41950f8248bfSmrg <parameter>changes</parameter> 41960f8248bfSmrg </term> 41970f8248bfSmrg <listitem> 41980f8248bfSmrg <para> 41990f8248bfSmrg records changes indicated by new 42000f8248bfSmrg </para> 42010f8248bfSmrg </listitem> 42020f8248bfSmrg </varlistentry> 42030f8248bfSmrg <varlistentry> 42040f8248bfSmrg <term> 42050f8248bfSmrg <parameter>new</parameter> 42060f8248bfSmrg </term> 42070f8248bfSmrg <listitem> 42080f8248bfSmrg <para> 42090f8248bfSmrg tells which things have changed 42100f8248bfSmrg </para> 42110f8248bfSmrg </listitem> 42120f8248bfSmrg </varlistentry> 42130f8248bfSmrg <varlistentry> 42140f8248bfSmrg <term> 42150f8248bfSmrg <parameter>wanted</parameter> 42160f8248bfSmrg </term> 42170f8248bfSmrg <listitem> 42180f8248bfSmrg <para> 42190f8248bfSmrg tells which parts of new to record in changes 42200f8248bfSmrg </para> 42210f8248bfSmrg </listitem> 42220f8248bfSmrg </varlistentry> 42230f8248bfSmrg</variablelist> 42240f8248bfSmrg 42250f8248bfSmrg<para> 42260f8248bfSmrgThe 42270f8248bfSmrg<parameter>wanted</parameter> 42280f8248bfSmrgparameter is a bitwise inclusive OR of bits taken from the set of masks 42290f8248bfSmrgspecified in <link linkend="table10.7">Table 10.7</link> with <quote>ok</quote> 42300f8248bfSmrgin the 42310f8248bfSmrg<structfield>changed_ctrls</structfield> 42320f8248bfSmrgcolumn. 42330f8248bfSmrg<function>XkbNoteControlsChanges</function> 42340f8248bfSmrgcopies any changes reported in 42350f8248bfSmrg<parameter>new</parameter> 42360f8248bfSmrgand specified in 42370f8248bfSmrg<parameter>wanted</parameter> 42380f8248bfSmrginto the changes record specified by 42390f8248bfSmrg<parameter>changes</parameter>. 42400f8248bfSmrg</para> 42410f8248bfSmrg 42420f8248bfSmrg 42430f8248bfSmrg<para> 42440f8248bfSmrgUse 42450f8248bfSmrg<function>XkbGetControlsChanges</function> 42460f8248bfSmrgto update a local copy of a keyboard description with the changes previously 42470f8248bfSmrgnoted by one or more calls to 42480f8248bfSmrg<function>XkbNoteControlsChanges</function>. 42490f8248bfSmrg</para> 42500f8248bfSmrg 42510f8248bfSmrg 42520f8248bfSmrg<indexterm significance="preferred" zone="XkbGetControlsChanges"><primary><function>XkbGetControlsChanges</function></primary></indexterm> 42530f8248bfSmrg<funcsynopsis id="XkbGetControlsChanges"> 42540f8248bfSmrg <funcprototype> 42550f8248bfSmrg <funcdef>Status <function>XkbGetControlsChanges</function></funcdef> 42560f8248bfSmrg<!-- ( 42570f8248bfSmrg<parameter>dpy</parameter>, 42580f8248bfSmrg<parameter>xkb</parameter>, 42590f8248bfSmrg<parameter>changes</parameter> 42600f8248bfSmrg) --> 42610f8248bfSmrg 42620f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 42630f8248bfSmrg <paramdef>XkbDescPtr <parameter>xkb</parameter></paramdef> 42640f8248bfSmrg <paramdef>XkbNameChangesPtr <parameter>changes</parameter></paramdef> 42650f8248bfSmrg </funcprototype> 42660f8248bfSmrg</funcsynopsis> 42670f8248bfSmrg<variablelist> 42680f8248bfSmrg <varlistentry> 42690f8248bfSmrg <term> 42700f8248bfSmrg <parameter>dpy</parameter> 42710f8248bfSmrg </term> 42720f8248bfSmrg <listitem> 42730f8248bfSmrg <para> 42740f8248bfSmrg connection to X server 42750f8248bfSmrg </para> 42760f8248bfSmrg </listitem> 42770f8248bfSmrg </varlistentry> 42780f8248bfSmrg <varlistentry> 42790f8248bfSmrg <term> 42800f8248bfSmrg <parameter>xkb</parameter> 42810f8248bfSmrg </term> 42820f8248bfSmrg <listitem> 42830f8248bfSmrg <para> 42840f8248bfSmrg <structfield>xkb->ctrls</structfield> will be updated 42850f8248bfSmrg </para> 42860f8248bfSmrg </listitem> 42870f8248bfSmrg </varlistentry> 42880f8248bfSmrg <varlistentry> 42890f8248bfSmrg <term> 42900f8248bfSmrg <parameter>changes</parameter> 42910f8248bfSmrg </term> 42920f8248bfSmrg <listitem> 42930f8248bfSmrg <para> 42940f8248bfSmrg indicates which parts of <structfield>xkb->ctrls</structfield> to update 42950f8248bfSmrg </para> 42960f8248bfSmrg </listitem> 42970f8248bfSmrg </varlistentry> 42980f8248bfSmrg</variablelist> 42990f8248bfSmrg 43000f8248bfSmrg<para> 43010f8248bfSmrg<function>XkbGetControlsChanges</function> 43020f8248bfSmrgexamines the 43030f8248bfSmrg<parameter>changes</parameter> 43040f8248bfSmrgparameter, queries the server for the necessary information, and copies the 43050f8248bfSmrgresults into the 43060f8248bfSmrg<parameter>xkb</parameter>-><structfield>ctrls</structfield> 43070f8248bfSmrgkeyboard description. If the 43080f8248bfSmrg<structfield>ctrls</structfield> 43090f8248bfSmrgfield of 43100f8248bfSmrg<parameter>xkb</parameter> 43110f8248bfSmrgis 43120f8248bfSmrg<symbol>NULL</symbol>, 43130f8248bfSmrg<function>XkbGetControlsChanges</function> 43140f8248bfSmrgallocates and initializes it. To free the 43150f8248bfSmrg<structfield>ctrls</structfield> 43160f8248bfSmrgfield, use 43170f8248bfSmrg<function>XkbFreeControls</function> 43180f8248bfSmrg(see <link linkend="Allocating_and_Freeing_an_XkbControlsRec">section 10.12</link>). 43190f8248bfSmrg</para> 43200f8248bfSmrg 43210f8248bfSmrg 43220f8248bfSmrg<para> 43230f8248bfSmrg<function>XkbGetControlsChanges</function> 43240f8248bfSmrgreturns 43250f8248bfSmrg<symbol>Success</symbol> 43260f8248bfSmrgif successful and can generate 43270f8248bfSmrg<errorname>BadAlloc</errorname>, 43280f8248bfSmrg<errorname>BadImplementation</errorname>, 43290f8248bfSmrgand 43300f8248bfSmrg<errorname>BadMatch</errorname> 43310f8248bfSmrgerrors. 4332e9fcaa8aSmrg</para> 4333e9fcaa8aSmrg 4334e9fcaa8aSmrg 4335e9fcaa8aSmrg</sect1> 4336eb411b4bSmrg<sect1 id='Allocating_and_Freeing_an_XkbControlsRec'> 4337e9fcaa8aSmrg<title>Allocating and Freeing an XkbControlsRec</title> 4338e9fcaa8aSmrg 4339e9fcaa8aSmrg<para> 43400f8248bfSmrgThe need to allocate an 43410f8248bfSmrg<structname>XkbControlsRec</structname> 43420f8248bfSmrgstructure seldom arises; Xkb creates one when an application calls 43430f8248bfSmrg<function>XkbGetControls</function> 43440f8248bfSmrgor a related function. For those situations where there is not an 43450f8248bfSmrg<structname>XkbControlsRec</structname> 43460f8248bfSmrgstructure allocated in the 43470f8248bfSmrg<structname>XkbDescRec</structname>, 43480f8248bfSmrgallocate one by calling 43490f8248bfSmrg<function>XkbAllocControls</function>. 43500f8248bfSmrg</para> 43510f8248bfSmrg 43520f8248bfSmrg<indexterm significance="preferred" zone="XkbAllocControls"><primary><function>XkbAllocControls</function></primary></indexterm> 43530f8248bfSmrg<funcsynopsis id="XkbAllocControls"> 43540f8248bfSmrg <funcprototype> 43550f8248bfSmrg <funcdef>Status <function>XkbAllocControls</function></funcdef> 43560f8248bfSmrg<!-- ( 43570f8248bfSmrg<parameter>xkb, which</parameter> 43580f8248bfSmrg) --> 43590f8248bfSmrg 43600f8248bfSmrg <paramdef>XkbDescPtr <parameter>xkb</parameter></paramdef> 43610f8248bfSmrg <paramdef>unsigned int <parameter>which</parameter></paramdef> 43620f8248bfSmrg </funcprototype> 43630f8248bfSmrg</funcsynopsis> 43640f8248bfSmrg<variablelist> 43650f8248bfSmrg <varlistentry> 43660f8248bfSmrg <term> 43670f8248bfSmrg <parameter>xkb</parameter> 43680f8248bfSmrg </term> 43690f8248bfSmrg <listitem> 43700f8248bfSmrg <para> 43710f8248bfSmrg Xkb description in which to allocate ctrls rec 43720f8248bfSmrg </para> 43730f8248bfSmrg </listitem> 43740f8248bfSmrg </varlistentry> 43750f8248bfSmrg <varlistentry> 43760f8248bfSmrg <term> 43770f8248bfSmrg <parameter>which</parameter> 43780f8248bfSmrg </term> 43790f8248bfSmrg <listitem> 43800f8248bfSmrg <para> 43810f8248bfSmrg mask of components of <structfield>ctrls</structfield> to allocate 43820f8248bfSmrg </para> 43830f8248bfSmrg </listitem> 43840f8248bfSmrg </varlistentry> 43850f8248bfSmrg</variablelist> 43860f8248bfSmrg 43870f8248bfSmrg<para> 43880f8248bfSmrg<function>XkbAllocControls</function> 43890f8248bfSmrgallocates the 43900f8248bfSmrg<structfield>ctrls</structfield> 43910f8248bfSmrgfield of the 43920f8248bfSmrg<parameter>xkb</parameter> 43930f8248bfSmrgparameter, initializes all fields to zero, and returns 43940f8248bfSmrg<symbol>Success</symbol>. 43950f8248bfSmrgIf the 43960f8248bfSmrg<structfield>ctrls</structfield> 43970f8248bfSmrgfield is not 43980f8248bfSmrg<symbol>NULL</symbol>, 43990f8248bfSmrg<function>XkbAllocControls</function> 44000f8248bfSmrgsimply returns 44010f8248bfSmrg<symbol>Success</symbol>. 44020f8248bfSmrgIf 44030f8248bfSmrg<parameter>xkb</parameter> 44040f8248bfSmrgis 44050f8248bfSmrg<symbol>NULL</symbol>, 44060f8248bfSmrg<function>XkbAllocControls</function> 44070f8248bfSmrgreports a 44080f8248bfSmrg<errorname>BadMatch</errorname> 44090f8248bfSmrgerror. If the 44100f8248bfSmrg<structfield>ctrls</structfield> 44110f8248bfSmrgfield could not be allocated, it reports a 44120f8248bfSmrg<errorname>BadAlloc</errorname> 44130f8248bfSmrgerror. 44140f8248bfSmrg</para> 44150f8248bfSmrg 44160f8248bfSmrg 44170f8248bfSmrg<para> 44180f8248bfSmrgThe 44190f8248bfSmrg<parameter>which</parameter> 44200f8248bfSmrgmask specifies the individual fields of the 44210f8248bfSmrg<structfield>ctrls</structfield> 44220f8248bfSmrgstructure to be allocated and can contain any of the valid masks defined in 44230f8248bfSmrg<link linkend="table10.7">Table 10.7</link>. 44240f8248bfSmrgBecause none of the currently existing controls have any structures 4425e9fcaa8aSmrgassociated with them, which is currently of little practical value in this call. 4426e9fcaa8aSmrg</para> 4427e9fcaa8aSmrg 4428e9fcaa8aSmrg 4429e9fcaa8aSmrg<para> 44300f8248bfSmrgTo free memory used by the 44310f8248bfSmrg<structfield>ctrls</structfield> 44320f8248bfSmrgmember of an 44330f8248bfSmrg<structname>XkbDescRec</structname> 44340f8248bfSmrgstructure, use 44350f8248bfSmrg<function>XkbFreeControls</function>: 44360f8248bfSmrg</para> 44370f8248bfSmrg 44380f8248bfSmrg 44390f8248bfSmrg<indexterm significance="preferred" zone="XkbFreeControls"><primary><function>XkbFreeControls</function></primary></indexterm> 44400f8248bfSmrg<funcsynopsis id="XkbFreeControls"> 44410f8248bfSmrg <funcprototype> 44420f8248bfSmrg <funcdef>void <function>XkbFreeControls</function></funcdef> 44430f8248bfSmrg<!-- ( 44440f8248bfSmrg<parameter>xkb, which, free_all</parameter> 44450f8248bfSmrg) --> 44460f8248bfSmrg 44470f8248bfSmrg <paramdef>XkbDescPtr <parameter>xkb</parameter></paramdef> 44480f8248bfSmrg <paramdef>unsigned int <parameter>which</parameter></paramdef> 44490f8248bfSmrg <paramdef>Bool <parameter>free_all</parameter></paramdef> 44500f8248bfSmrg </funcprototype> 44510f8248bfSmrg</funcsynopsis> 44520f8248bfSmrg<variablelist> 44530f8248bfSmrg <varlistentry> 44540f8248bfSmrg <term> 44550f8248bfSmrg <parameter>xkb</parameter> 44560f8248bfSmrg </term> 44570f8248bfSmrg <listitem> 44580f8248bfSmrg <para> 44590f8248bfSmrg Xkb description in which to free controls components 44600f8248bfSmrg </para> 44610f8248bfSmrg </listitem> 44620f8248bfSmrg </varlistentry> 44630f8248bfSmrg <varlistentry> 44640f8248bfSmrg <term> 44650f8248bfSmrg <parameter>which</parameter> 44660f8248bfSmrg </term> 44670f8248bfSmrg <listitem> 44680f8248bfSmrg <para> 44690f8248bfSmrg mask of components of <structfield>ctrls</structfield> to free 44700f8248bfSmrg </para> 44710f8248bfSmrg </listitem> 44720f8248bfSmrg </varlistentry> 44730f8248bfSmrg <varlistentry> 44740f8248bfSmrg <term> 44750f8248bfSmrg <parameter>free_all</parameter> 44760f8248bfSmrg </term> 44770f8248bfSmrg <listitem> 44780f8248bfSmrg <para> 44790f8248bfSmrg <symbol>True</symbol> ⇒ free everything + ctrls itself 44800f8248bfSmrg </para> 44810f8248bfSmrg </listitem> 44820f8248bfSmrg </varlistentry> 44830f8248bfSmrg</variablelist> 44840f8248bfSmrg 44850f8248bfSmrg<para> 44860f8248bfSmrg<function>XkbFreeControls</function> 44870f8248bfSmrgfrees the specified components of the 44880f8248bfSmrg<structfield>ctrls</structfield> 44890f8248bfSmrgfield in the 44900f8248bfSmrg<parameter>xkb</parameter> 44910f8248bfSmrgkeyboard description and sets the corresponding structure component values to 44920f8248bfSmrg<symbol>NULL</symbol> 44930f8248bfSmrgor 44940f8248bfSmrg<emphasis>zero</emphasis>. 44950f8248bfSmrgThe 44960f8248bfSmrg<parameter>which</parameter> 44970f8248bfSmrgmask specifies the fields of 44980f8248bfSmrg<structfield>ctrls</structfield> 44990f8248bfSmrgto be freed and can contain any of the controls components specified in 45000f8248bfSmrg<link linkend="table10.7">Table 10.7</link>. 45010f8248bfSmrg</para> 45020f8248bfSmrg 45030f8248bfSmrg 45040f8248bfSmrg<para> 45050f8248bfSmrgIf 45060f8248bfSmrg<parameter>free_all</parameter> 45070f8248bfSmrgis 45080f8248bfSmrg<symbol>True</symbol>, 45090f8248bfSmrg<function>XkbFreeControls</function> 45100f8248bfSmrgfrees every non- 45110f8248bfSmrg<symbol>NULL</symbol> 45120f8248bfSmrgstructure component in the controls, frees the 45130f8248bfSmrg<structname>XkbControlsRec</structname> 45140f8248bfSmrgstructure referenced by the 45150f8248bfSmrg<structfield>ctrls</structfield> 45160f8248bfSmrgmember of 45170f8248bfSmrg<parameter>xkb</parameter>, 45180f8248bfSmrgand sets 45190f8248bfSmrg<structfield>ctrls</structfield> 45200f8248bfSmrgto 45210f8248bfSmrg<symbol>NULL</symbol>. 4522e9fcaa8aSmrg</para> 4523e9fcaa8aSmrg 4524e9fcaa8aSmrg</sect1> 4525eb411b4bSmrg<sect1 id='The_Miscellaneous_Per_client_Controls'> 4526e9fcaa8aSmrg<title>The Miscellaneous Per-client Controls</title> 4527e9fcaa8aSmrg 4528e9fcaa8aSmrg<para> 4529e9fcaa8aSmrgYou can configure the boolean per-client controls which affect the state 45300f8248bfSmrgreported in button and key events. See 45310f8248bfSmrg<olink targetdoc='xkbproto' targetptr='Setting_a_Passive_Grab_for_an_XKB_State'>section 12.1.1</olink>, 45320f8248bfSmrg<olink targetdoc='xkbproto' targetptr='Effects_of_XKB_on_Core_Protocol_Events'>12.3</olink>, 45330f8248bfSmrg<olink targetdoc='xkbproto' targetptr='Sending_Events_to_Clients'>12.5</olink>, 45340f8248bfSmrgand 45350f8248bfSmrg<olink targetdoc='xkbproto' targetptr='Querying_and_Changing_Per_Client_Flags'>16.3.11</olink> 45360f8248bfSmrgof the 45370f8248bfSmrg<olink targetdoc='xkbproto' targetptr='xkbproto'><citetitle>XKB Protocol specification</citetitle></olink> 45380f8248bfSmrgfor more details. 45390f8248bfSmrg</para> 45400f8248bfSmrg 45410f8248bfSmrg 45420f8248bfSmrg<para> 45430f8248bfSmrgTo get the current values of the 45440f8248bfSmrg<emphasis>per-client</emphasis> 45450f8248bfSmrgcontrols, use 45460f8248bfSmrg<function>XkbGetPerClientControls</function>. 45470f8248bfSmrg</para> 45480f8248bfSmrg 45490f8248bfSmrg<indexterm significance="preferred" zone="XkbGetPerClientControls"><primary><function>XkbGetPerClientControls</function></primary></indexterm> 45500f8248bfSmrg<funcsynopsis id="XkbGetPerClientControls"> 45510f8248bfSmrg <funcprototype> 45520f8248bfSmrg <funcdef>Bool <function>XkbGetPerClientControls</function></funcdef> 45530f8248bfSmrg<!-- ( 45540f8248bfSmrg<parameter>dpy</parameter>, 45550f8248bfSmrg<parameter>ctrls</parameter> 45560f8248bfSmrg) --> 45570f8248bfSmrg 45580f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 45590f8248bfSmrg <paramdef>unsigned int *<parameter>ctrls</parameter></paramdef> 45600f8248bfSmrg </funcprototype> 45610f8248bfSmrg</funcsynopsis> 45620f8248bfSmrg<variablelist> 45630f8248bfSmrg <varlistentry> 45640f8248bfSmrg <term> 45650f8248bfSmrg <parameter>dpy</parameter> 45660f8248bfSmrg </term> 45670f8248bfSmrg <listitem> 45680f8248bfSmrg <para> 45690f8248bfSmrg connection to X server 45700f8248bfSmrg </para> 45710f8248bfSmrg </listitem> 45720f8248bfSmrg </varlistentry> 45730f8248bfSmrg <varlistentry> 45740f8248bfSmrg <term> 45750f8248bfSmrg <parameter>ctrls</parameter> 45760f8248bfSmrg </term> 45770f8248bfSmrg <listitem> 45780f8248bfSmrg <para> 45790f8248bfSmrg 1 bit ⇒ corresponding control is on 45800f8248bfSmrg </para> 45810f8248bfSmrg </listitem> 45820f8248bfSmrg </varlistentry> 45830f8248bfSmrg</variablelist> 45840f8248bfSmrg 45850f8248bfSmrg<para> 45860f8248bfSmrg<function>XkbGetPerClientControls</function> 45870f8248bfSmrgbackfills 45880f8248bfSmrg<parameter>ctrls</parameter> 45890f8248bfSmrgwith the 45900f8248bfSmrg<emphasis>per-client</emphasis> 45910f8248bfSmrgcontrol attributes for this particular client. It returns 45920f8248bfSmrg<symbol>True</symbol> 45930f8248bfSmrgif successful, and 45940f8248bfSmrg<symbol>False</symbol> 45950f8248bfSmrgotherwise. 45960f8248bfSmrg</para> 45970f8248bfSmrg 45980f8248bfSmrg 45990f8248bfSmrg<para> 46000f8248bfSmrgTo change the current values of the 46010f8248bfSmrg<emphasis>per-client</emphasis> 46020f8248bfSmrgcontrol attributes, use 46030f8248bfSmrg<function>XkbSetPerClientControls</function>. 46040f8248bfSmrg</para> 46050f8248bfSmrg 46060f8248bfSmrg 46070f8248bfSmrg<indexterm significance="preferred" zone="XkbSetPerClientControls"><primary><function>XkbSetPerClientControls</function></primary></indexterm> 46080f8248bfSmrg<funcsynopsis id="XkbSetPerClientControls"> 46090f8248bfSmrg <funcprototype> 46100f8248bfSmrg <funcdef>Bool <function>XkbSetPerClientControls</function></funcdef> 46110f8248bfSmrg<!-- ( 46120f8248bfSmrg<parameter>dpy</parameter>, 46130f8248bfSmrg<parameter>ctrls</parameter> 46140f8248bfSmrg) --> 46150f8248bfSmrg 46160f8248bfSmrg <paramdef>Display *<parameter>dpy</parameter></paramdef> 46170f8248bfSmrg <paramdef>unsigned int <parameter>change</parameter></paramdef> 46180f8248bfSmrg <paramdef>unsigned int *<parameter>value</parameter></paramdef> 46190f8248bfSmrg </funcprototype> 46200f8248bfSmrg</funcsynopsis> 46210f8248bfSmrg<variablelist> 46220f8248bfSmrg <varlistentry> 46230f8248bfSmrg <term> 46240f8248bfSmrg <parameter>dpy</parameter> 46250f8248bfSmrg </term> 46260f8248bfSmrg <listitem> 46270f8248bfSmrg <para> 46280f8248bfSmrg connection to X server 46290f8248bfSmrg </para> 46300f8248bfSmrg </listitem> 46310f8248bfSmrg </varlistentry> 46320f8248bfSmrg <varlistentry> 46330f8248bfSmrg <term> 46340f8248bfSmrg <parameter>change</parameter> 46350f8248bfSmrg </term> 46360f8248bfSmrg <listitem> 46370f8248bfSmrg <para> 46380f8248bfSmrg 1 bit ⇒ change control 46390f8248bfSmrg </para> 46400f8248bfSmrg </listitem> 46410f8248bfSmrg </varlistentry> 46420f8248bfSmrg <varlistentry> 46430f8248bfSmrg <term> 46440f8248bfSmrg <parameter>value</parameter> 46450f8248bfSmrg </term> 46460f8248bfSmrg <listitem> 46470f8248bfSmrg <para> 46480f8248bfSmrg 1 bit ⇒ control on 46490f8248bfSmrg </para> 46500f8248bfSmrg </listitem> 46510f8248bfSmrg </varlistentry> 46520f8248bfSmrg</variablelist> 46530f8248bfSmrg 46540f8248bfSmrg<para> 46550f8248bfSmrg<function>XkbSetPerClientControls</function> 46560f8248bfSmrgchanges the per-client values for the controls selected by 46570f8248bfSmrg<parameter>change</parameter> to the corresponding value in 46580f8248bfSmrg<parameter>value</parameter>. Legal values for 46590f8248bfSmrg<parameter>change</parameter> and <parameter>value</parameter> 4660e9fcaa8aSmrgare: XkbPCF_GrabsUseXKBStateMask, XkbPCF_LookupStateWhenGrabbed, and 4661e9fcaa8aSmrgXkbPCF_SendEventUsesXKBState. More than one control may be changed at one time 4662e9fcaa8aSmrgby OR-ing the values together. XkbSetPerClientControls backfills value with the 46630f8248bfSmrg<emphasis>per-client</emphasis> 46640f8248bfSmrgcontrol attributes for this particular client. 46650f8248bfSmrgIt returns 46660f8248bfSmrg<symbol>True</symbol> 46670f8248bfSmrgif successful, and 46680f8248bfSmrg<symbol>False</symbol> 46690f8248bfSmrgotherwise. 4670e9fcaa8aSmrg</para> 4671e9fcaa8aSmrg 4672e9fcaa8aSmrg</sect1> 4673e9fcaa8aSmrg</chapter> 4674