ch09.xml revision eb411b4b
1eb411b4bSmrg<chapter id='Bells'> 2e9fcaa8aSmrg<title>Bells</title> 3e9fcaa8aSmrg 4e9fcaa8aSmrg<para> 5e9fcaa8aSmrgThe core X protocol allows only applications to explicitly sound the system 6e9fcaa8aSmrgbell with a given duration, pitch, and volume. Xkb extends this capability by 7e9fcaa8aSmrgallowing clients to attach symbolic names to bells, disable audible bells, and 8e9fcaa8aSmrgreceive an event whenever the keyboard bell is rung. For the purposes of this 9e9fcaa8aSmrgdocument, the <emphasis> 10e9fcaa8aSmrgaudible</emphasis> 11e9fcaa8aSmrg bell is defined to be the system bell, or the default keyboard bell, as 12e9fcaa8aSmrgopposed to any other audible sound generated elsewhere in the system. 13e9fcaa8aSmrg</para> 14e9fcaa8aSmrg 15e9fcaa8aSmrg 16e9fcaa8aSmrg<para> 17e9fcaa8aSmrgYou can ask to receive <emphasis> 18e9fcaa8aSmrgXkbBellNotify</emphasis> 19e9fcaa8aSmrg events (see section 9.4) when any client rings any one of the following: <!-- xref --> 20e9fcaa8aSmrg</para> 21e9fcaa8aSmrg 22e9fcaa8aSmrg<itemizedlist> 23e9fcaa8aSmrg<listitem> 24e9fcaa8aSmrg <para> 25e9fcaa8aSmrgThe default bell 26e9fcaa8aSmrg </para> 27e9fcaa8aSmrg</listitem> 28e9fcaa8aSmrg<listitem> 29e9fcaa8aSmrg <para> 30e9fcaa8aSmrgAny bell on an input device that can be specified by a <emphasis> 31e9fcaa8aSmrgbell_class</emphasis> 32e9fcaa8aSmrg and <emphasis> 33e9fcaa8aSmrgbell_id</emphasis> 34e9fcaa8aSmrg pair 35e9fcaa8aSmrg </para> 36e9fcaa8aSmrg</listitem> 37e9fcaa8aSmrg<listitem> 38e9fcaa8aSmrg <para> 39e9fcaa8aSmrgAny bell specified only by an arbitrary name. (This is, from the server’s 40e9fcaa8aSmrgpoint of view, merely a name, and not connected with any physical 41e9fcaa8aSmrgsound-generating device. Some client application must generate the sound, or 42e9fcaa8aSmrgvisual feedback, if any, that is associated with the name.) 43e9fcaa8aSmrg </para> 44e9fcaa8aSmrg</listitem> 45e9fcaa8aSmrg</itemizedlist> 46e9fcaa8aSmrg 47e9fcaa8aSmrg<para> 48e9fcaa8aSmrgYou can also ask to receive <emphasis> 49e9fcaa8aSmrgXkbBellNotify</emphasis> 50e9fcaa8aSmrg events when the server rings the default bell or if any client has requested 51e9fcaa8aSmrgevents only (without the bell sounding) for any of the bell types previously 52e9fcaa8aSmrglisted. 53e9fcaa8aSmrg</para> 54e9fcaa8aSmrg 55e9fcaa8aSmrg<para> 56e9fcaa8aSmrgYou can disable audible bells on a global basis (to set the <emphasis> 57e9fcaa8aSmrgAudibleBell</emphasis> 58e9fcaa8aSmrg control, see Chapter 10). For example, a client that replaces the keyboard 59e9fcaa8aSmrgbell with some other audible cue might want to turn off the <emphasis> 60e9fcaa8aSmrgAudibleBell</emphasis> 61e9fcaa8aSmrg control to prevent the server from also generating a sound and avoid 62e9fcaa8aSmrgcacophony. If you disable audible bells and request to receive <emphasis> 63e9fcaa8aSmrgXkbBellNotify</emphasis> 64e9fcaa8aSmrg events, you can generate feedback different from the default bell. 65e9fcaa8aSmrg</para> 66e9fcaa8aSmrg 67e9fcaa8aSmrg 68e9fcaa8aSmrg<para> 69e9fcaa8aSmrgYou can, however, override the <emphasis> 70e9fcaa8aSmrgAudibleBell</emphasis> 71e9fcaa8aSmrg control by calling one of the functions that force the ringing of a bell in 72e9fcaa8aSmrgspite of the setting of the <emphasis> 73e9fcaa8aSmrgAudibleBell</emphasis> 74e9fcaa8aSmrg control — <emphasis> 75e9fcaa8aSmrgXkbForceDeviceBell</emphasis> 76e9fcaa8aSmrg or <emphasis> 77e9fcaa8aSmrgXkbForceBell</emphasis> 78e9fcaa8aSmrg (see section 9.3.3). In this case the server does not generate a bell event. <!-- xref --> 79e9fcaa8aSmrg</para> 80e9fcaa8aSmrg 81e9fcaa8aSmrg 82e9fcaa8aSmrg<para> 83e9fcaa8aSmrgJust as some keyboards can produce keyclicks to indicate when a key is pressed 84e9fcaa8aSmrgor repeating, Xkb can provide feedback for the controls by using special beep 85e9fcaa8aSmrgcodes. The <emphasis> 86e9fcaa8aSmrgAccessXFeedback</emphasis> 87e9fcaa8aSmrg control is used to configure the specific types of operations that generate 88e9fcaa8aSmrgfeedback. See section 10.6.3 for a discussion on <emphasis> <!-- xref --> 89e9fcaa8aSmrgAccessXFeedback</emphasis> 90e9fcaa8aSmrg control. 91e9fcaa8aSmrg</para> 92e9fcaa8aSmrg 93e9fcaa8aSmrg<para> 94e9fcaa8aSmrgThis chapter describes bell names, the functions used to generate named bells, 95e9fcaa8aSmrgand the events the server generates for bells. 96e9fcaa8aSmrg</para> 97e9fcaa8aSmrg 98eb411b4bSmrg<sect1 id='Bell_Names'> 99e9fcaa8aSmrg<title>Bell Names</title> 100e9fcaa8aSmrg 101e9fcaa8aSmrg<para> 102e9fcaa8aSmrgYou can associate a name to an act of ringing a bell by converting the name to 103e9fcaa8aSmrgan Atom and then using this name when you call the functions listed in this 104e9fcaa8aSmrgchapter. If an event is generated as a result, the name is then passed to all 105e9fcaa8aSmrgother clients interested in receiving <emphasis> 106e9fcaa8aSmrgXkbBellNotify</emphasis> 107e9fcaa8aSmrg events. Note that these are arbitrary names and that there is no binding to 108e9fcaa8aSmrgany sounds. Any sounds or other effects (such as visual bells on the screen) 109e9fcaa8aSmrgmust be generated by a client application upon receipt of the bell event 110e9fcaa8aSmrgcontaining the name. There is no default name for the default keyboard bell. 111e9fcaa8aSmrgThe server does generate some predefined bells for the AccessX controls (see 112e9fcaa8aSmrgsection 10.6.3). These named bells are shown in Table 9.1; the name is included 113e9fcaa8aSmrgin any bell event sent to clients that have requested to receive <emphasis> 114e9fcaa8aSmrgXkbBellNotify</emphasis> 115e9fcaa8aSmrg events. 116e9fcaa8aSmrg</para> 117e9fcaa8aSmrg 118eb411b4bSmrg<table frame='topbot'> 119e9fcaa8aSmrg<title>Predefined Bells</title> 120eb411b4bSmrg<?dbfo keep-together="always" ?> 121eb411b4bSmrg<tgroup cols='2' align='left' colsep='0' rowsep='0'> 122eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 123eb411b4bSmrg<colspec colname='c2' colwidth='1.0*'/> 124e9fcaa8aSmrg<thead> 125eb411b4bSmrg<row rowsep='1'> 126e9fcaa8aSmrg <entry>Action</entry> 127e9fcaa8aSmrg <entry>Named Bell</entry> 128e9fcaa8aSmrg</row> 129e9fcaa8aSmrg</thead> 130e9fcaa8aSmrg<tbody> 131eb411b4bSmrg<row> 132e9fcaa8aSmrg <entry>Indicator turned on</entry> 133e9fcaa8aSmrg <entry>AX_IndicatorOn</entry> 134e9fcaa8aSmrg</row> 135eb411b4bSmrg<row> 136e9fcaa8aSmrg <entry>Indicator turned off</entry> 137e9fcaa8aSmrg <entry>AX_IndicatorOff</entry> 138e9fcaa8aSmrg</row> 139eb411b4bSmrg<row> 140e9fcaa8aSmrg <entry>More than one indicator changed state</entry> 141e9fcaa8aSmrg <entry>AX_IndicatorChange</entry> 142e9fcaa8aSmrg</row> 143eb411b4bSmrg<row> 144e9fcaa8aSmrg <entry>Control turned on</entry> 145e9fcaa8aSmrg <entry>AX_FeatureOn</entry> 146e9fcaa8aSmrg</row> 147eb411b4bSmrg<row> 148e9fcaa8aSmrg <entry>Control turned off</entry> 149e9fcaa8aSmrg <entry>AX_FeatureOff</entry> 150e9fcaa8aSmrg</row> 151eb411b4bSmrg<row> 152e9fcaa8aSmrg <entry>More than one control changed state</entry> 153e9fcaa8aSmrg <entry>AX_FeatureChange</entry> 154e9fcaa8aSmrg</row> 155eb411b4bSmrg<row> 156e9fcaa8aSmrg <entry>SlowKeys and BounceKeys about to be turned on or off</entry> 157e9fcaa8aSmrg <entry>AX_SlowKeysWarning</entry> 158e9fcaa8aSmrg</row> 159eb411b4bSmrg<row> 160e9fcaa8aSmrg <entry>SlowKeys key pressed</entry> 161e9fcaa8aSmrg <entry>AX_SlowKeyPress</entry> 162e9fcaa8aSmrg</row> 163eb411b4bSmrg<row> 164e9fcaa8aSmrg <entry>SlowKeys key accepted</entry> 165e9fcaa8aSmrg <entry>AX_SlowKeyAccept</entry> 166e9fcaa8aSmrg</row> 167eb411b4bSmrg<row> 168e9fcaa8aSmrg <entry>SlowKeys key rejected</entry> 169e9fcaa8aSmrg <entry>AX_SlowKeyReject</entry> 170e9fcaa8aSmrg</row> 171eb411b4bSmrg<row> 172e9fcaa8aSmrg <entry>Accepted SlowKeys key released</entry> 173e9fcaa8aSmrg <entry>AX_SlowKeyRelease</entry> 174e9fcaa8aSmrg</row> 175eb411b4bSmrg<row> 176e9fcaa8aSmrg <entry>BounceKeys key rejected</entry> 177e9fcaa8aSmrg <entry>AX_BounceKeyReject</entry> 178e9fcaa8aSmrg</row> 179eb411b4bSmrg<row> 180e9fcaa8aSmrg <entry>StickyKeys key latched</entry> 181e9fcaa8aSmrg <entry>AX_StickyLatch</entry> 182e9fcaa8aSmrg</row> 183eb411b4bSmrg<row> 184e9fcaa8aSmrg <entry>StickyKeys key locked</entry> 185e9fcaa8aSmrg <entry>AX_StickyLock</entry> 186e9fcaa8aSmrg</row> 187eb411b4bSmrg<row> 188e9fcaa8aSmrg <entry>StickyKeys key unlocked</entry> 189e9fcaa8aSmrg <entry>AX_StickyUnlock</entry> 190e9fcaa8aSmrg </row> 191e9fcaa8aSmrg</tbody> 192e9fcaa8aSmrg</tgroup> 193e9fcaa8aSmrg</table> 194e9fcaa8aSmrg 195e9fcaa8aSmrg</sect1> 196eb411b4bSmrg<sect1 id='Audible_Bells'> 197e9fcaa8aSmrg<title>Audible Bells</title> 198e9fcaa8aSmrg 199e9fcaa8aSmrg<para> 200e9fcaa8aSmrgUsing Xkb you can generate bell events that do not necessarily ring the system 201e9fcaa8aSmrgbell. This is useful if you need to use an audio server instead of the system 202e9fcaa8aSmrgbeep. For example, when an audio client starts, it could disable the audible 203e9fcaa8aSmrgbell (the system bell) and then listen for <emphasis> 204e9fcaa8aSmrgXkbBellNotify</emphasis> 205e9fcaa8aSmrg events (see section 9.4). When it receives a <emphasis> <!-- xref --> 206e9fcaa8aSmrgXkbBellNotify</emphasis> 207e9fcaa8aSmrg event, the audio client could then send a request to an audio server to play a 208e9fcaa8aSmrgsound. 209e9fcaa8aSmrg</para> 210e9fcaa8aSmrg 211e9fcaa8aSmrg 212e9fcaa8aSmrg<para> 213e9fcaa8aSmrgYou can control the audible bells feature by passing the <emphasis> 214e9fcaa8aSmrgXkbAudibleBellMask</emphasis> 215e9fcaa8aSmrg to <emphasis> 216e9fcaa8aSmrgXkbChangeEnabledControls</emphasis> 217e9fcaa8aSmrg (see section 10.1.1). If you set <emphasis> <!-- xref --> 218e9fcaa8aSmrgXkbAudibleBellMask</emphasis> 219e9fcaa8aSmrg on, the server rings the system bell when a bell event occurs. This is the 220e9fcaa8aSmrgdefault. If you set <emphasis> 221e9fcaa8aSmrgXkbAudibleBellMask</emphasis> 222e9fcaa8aSmrg off and a bell event occurs, the server does not ring the system bell unless 223e9fcaa8aSmrgyou call <emphasis> 224e9fcaa8aSmrgXkbForceDeviceBell</emphasis> 225e9fcaa8aSmrg or <emphasis> 226e9fcaa8aSmrgXkbForceBell</emphasis> 227e9fcaa8aSmrg (see section 9.3.3). <!-- xref --> 228e9fcaa8aSmrg</para> 229e9fcaa8aSmrg 230e9fcaa8aSmrg<para> 231e9fcaa8aSmrgAudible bells are also part of the per-client auto-reset controls. For more 232e9fcaa8aSmrginformation on auto-reset controls, see section 10.1.2. <!-- xref --> 233e9fcaa8aSmrg</para> 234e9fcaa8aSmrg 235e9fcaa8aSmrg</sect1> 236eb411b4bSmrg<sect1 id='Bell_Functions'> 237e9fcaa8aSmrg<title>Bell Functions</title> 238e9fcaa8aSmrg 239e9fcaa8aSmrg<para> 240e9fcaa8aSmrgUse the functions described in this section to ring bells and to generate bell 241e9fcaa8aSmrgevents. 242e9fcaa8aSmrg</para> 243e9fcaa8aSmrg 244e9fcaa8aSmrg<para> 245e9fcaa8aSmrgThe input extension has two types of feedbacks that can generate bells — bell 246e9fcaa8aSmrgfeedback and keyboard feedback. Some of the functions in this section have 247e9fcaa8aSmrg<emphasis> 248e9fcaa8aSmrgbell_class</emphasis> 249e9fcaa8aSmrg and <emphasis> 250e9fcaa8aSmrgbell_id</emphasis> 251e9fcaa8aSmrg parameters; set them as follows: Set <emphasis> 252e9fcaa8aSmrgbell_class</emphasis> 253e9fcaa8aSmrg to <emphasis> 254e9fcaa8aSmrgBellFeedbackClass</emphasis> 255e9fcaa8aSmrg or <emphasis> 256e9fcaa8aSmrgKbdFeedbackClass</emphasis> 257e9fcaa8aSmrg. A device can have more than one feedback of each type; set <emphasis> 258e9fcaa8aSmrgbell_id</emphasis> 259e9fcaa8aSmrg to the particular bell feedback of <emphasis> 260e9fcaa8aSmrgbell_class</emphasis> 261e9fcaa8aSmrg type. 262e9fcaa8aSmrg</para> 263e9fcaa8aSmrg 264e9fcaa8aSmrg<para> 265e9fcaa8aSmrgTable 9.2 shows the conditions that cause a bell to sound or an <emphasis> <!-- xref --> 266e9fcaa8aSmrgXkbBellNotifyEvent</emphasis> 267e9fcaa8aSmrg to be generated when a bell function is called. 268e9fcaa8aSmrg</para> 269e9fcaa8aSmrg 270eb411b4bSmrg<table frame='topbot'> 271e9fcaa8aSmrg<title>Bell Sounding and Bell Event Generating</title> 272eb411b4bSmrg<?dbfo keep-together="always" ?> 273eb411b4bSmrg<tgroup cols='4' align='left' colsep='0' rowsep='0'> 274eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 275eb411b4bSmrg<colspec colname='c2' colwidth='1.0*'/> 276eb411b4bSmrg<colspec colname='c3' colwidth='1.0*'/> 277eb411b4bSmrg<colspec colname='c4' colwidth='1.0*'/> 278e9fcaa8aSmrg<thead> 279eb411b4bSmrg <row rowsep='1'> 280e9fcaa8aSmrg <entry>Function called</entry> 281e9fcaa8aSmrg <entry>AudibleBell</entry> 282e9fcaa8aSmrg <entry>Server sounds a bell</entry> 283e9fcaa8aSmrg <entry>Server sends an XkbBellNotifyEvent</entry> 284e9fcaa8aSmrg </row> 285e9fcaa8aSmrg</thead> 286e9fcaa8aSmrg<tbody> 287eb411b4bSmrg<row> 288e9fcaa8aSmrg <entry>XkbDeviceBell</entry> 289e9fcaa8aSmrg <entry>On</entry> 290e9fcaa8aSmrg <entry>Yes</entry> 291e9fcaa8aSmrg <entry>Yes</entry> 292e9fcaa8aSmrg</row> 293eb411b4bSmrg<row> 294e9fcaa8aSmrg <entry>XkbDeviceBell</entry> 295e9fcaa8aSmrg <entry>Off</entry> 296e9fcaa8aSmrg <entry>No</entry> 297e9fcaa8aSmrg <entry>Yes</entry> 298e9fcaa8aSmrg</row> 299eb411b4bSmrg<row> 300e9fcaa8aSmrg <entry>XkbBell</entry> 301e9fcaa8aSmrg <entry>On</entry> 302e9fcaa8aSmrg <entry>Yes</entry> 303e9fcaa8aSmrg <entry>Yes</entry> 304e9fcaa8aSmrg</row> 305eb411b4bSmrg<row> 306e9fcaa8aSmrg <entry>XkbBell</entry> 307e9fcaa8aSmrg <entry>Off</entry> 308e9fcaa8aSmrg <entry>No</entry> 309e9fcaa8aSmrg <entry>Yes</entry> 310e9fcaa8aSmrg</row> 311eb411b4bSmrg<row> 312e9fcaa8aSmrg <entry>XkbDeviceBellEvent</entry> 313e9fcaa8aSmrg <entry>On or Off</entry> 314e9fcaa8aSmrg <entry>No</entry> 315e9fcaa8aSmrg <entry>Yes</entry> 316e9fcaa8aSmrg</row> 317eb411b4bSmrg<row> 318e9fcaa8aSmrg <entry>XkbBellEvent</entry> 319e9fcaa8aSmrg <entry>On or Off</entry> 320e9fcaa8aSmrg <entry>No</entry> 321e9fcaa8aSmrg <entry>Yes</entry> 322e9fcaa8aSmrg</row> 323eb411b4bSmrg<row> 324e9fcaa8aSmrg <entry>XkbDeviceForceBell</entry> 325e9fcaa8aSmrg <entry>On or Off</entry> 326e9fcaa8aSmrg <entry>Yes</entry> 327e9fcaa8aSmrg <entry>No</entry> 328e9fcaa8aSmrg</row> 329eb411b4bSmrg<row> 330e9fcaa8aSmrg <entry>XkbForceBell</entry> 331e9fcaa8aSmrg <entry>On or Off</entry> 332e9fcaa8aSmrg <entry>Yes</entry> 333e9fcaa8aSmrg <entry>No</entry> 334e9fcaa8aSmrg </row> 335e9fcaa8aSmrg</tbody> 336e9fcaa8aSmrg</tgroup> 337e9fcaa8aSmrg</table> 338e9fcaa8aSmrg 339eb411b4bSmrg<sect2 id='Generating_Named_Bells'> 340e9fcaa8aSmrg<title>Generating Named Bells</title> 341e9fcaa8aSmrg 342e9fcaa8aSmrg<para> 343e9fcaa8aSmrgTo ring the bell on an X input extension device or the default keyboard, use 344e9fcaa8aSmrg<emphasis> 345e9fcaa8aSmrgXkbDeviceBell.</emphasis> 346e9fcaa8aSmrg</para> 347e9fcaa8aSmrg 348e9fcaa8aSmrg<informaltable frame='none'> 349eb411b4bSmrg<?dbfo keep-together="always" ?> 350eb411b4bSmrg<tgroup cols='1' align='left' colsep='0' rowsep='0'> 351eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 352e9fcaa8aSmrg<tbody> 353eb411b4bSmrg <row> 354e9fcaa8aSmrg <entry role='functiondecl'> 355e9fcaa8aSmrgBool <emphasis> 356e9fcaa8aSmrgXkbDeviceBell</emphasis> 357e9fcaa8aSmrg(<emphasis> 358e9fcaa8aSmrgdisplay, window, device_id, bell_class, bell_id, percent, name</emphasis> 359e9fcaa8aSmrg) 360e9fcaa8aSmrg </entry> 361e9fcaa8aSmrg </row> 362eb411b4bSmrg <row> 363e9fcaa8aSmrg <entry role='functionargdecl'> 364e9fcaa8aSmrgDisplay *<emphasis> 365e9fcaa8aSmrg display</emphasis> 366e9fcaa8aSmrg; /* connection to the X server */ 367e9fcaa8aSmrg </entry> 368e9fcaa8aSmrg </row> 369eb411b4bSmrg <row> 370e9fcaa8aSmrg <entry role='functionargdecl'> 371e9fcaa8aSmrgWindow<emphasis> 372e9fcaa8aSmrg window</emphasis> 373e9fcaa8aSmrg; /* window for which the bell is generated, or None */ 374e9fcaa8aSmrg </entry> 375e9fcaa8aSmrg </row> 376eb411b4bSmrg <row> 377e9fcaa8aSmrg <entry role='functionargdecl'> 378e9fcaa8aSmrgunsigned int <emphasis> 379e9fcaa8aSmrgdevice_spec</emphasis> 380e9fcaa8aSmrg; /* device ID, or <emphasis> 381e9fcaa8aSmrgXkbUseCoreKbd</emphasis> 382e9fcaa8aSmrg */ 383e9fcaa8aSmrg </entry> 384e9fcaa8aSmrg </row> 385eb411b4bSmrg <row> 386e9fcaa8aSmrg <entry role='functionargdecl'> 387e9fcaa8aSmrgunsigned int <emphasis> 388e9fcaa8aSmrgbell_class</emphasis> 389e9fcaa8aSmrg; /* X input extension bell class of the bell to be rung */ 390e9fcaa8aSmrg </entry> 391e9fcaa8aSmrg </row> 392eb411b4bSmrg <row> 393e9fcaa8aSmrg <entry role='functionargdecl'> 394e9fcaa8aSmrgunsigned int <emphasis> 395e9fcaa8aSmrgbell_id</emphasis> 396e9fcaa8aSmrg; /* X input extension bell ID of the bell to be rung */ 397e9fcaa8aSmrg </entry> 398e9fcaa8aSmrg </row> 399eb411b4bSmrg <row> 400e9fcaa8aSmrg <entry role='functionargdecl'> 401e9fcaa8aSmrgint <emphasis> 402e9fcaa8aSmrgpercent</emphasis> 403e9fcaa8aSmrg; /* bell volume, from -100 to 100 inclusive */ 404e9fcaa8aSmrg </entry> 405e9fcaa8aSmrg </row> 406eb411b4bSmrg <row> 407e9fcaa8aSmrg <entry role='functionargdecl'> 408e9fcaa8aSmrgAtom <emphasis> 409e9fcaa8aSmrgname</emphasis> 410e9fcaa8aSmrg; /* a name for the bell, or <emphasis> 411e9fcaa8aSmrgNULL</emphasis> 412e9fcaa8aSmrg */ 413e9fcaa8aSmrg </entry> 414e9fcaa8aSmrg</row> 415e9fcaa8aSmrg</tbody> 416e9fcaa8aSmrg</tgroup> 417e9fcaa8aSmrg</informaltable> 418e9fcaa8aSmrg 419e9fcaa8aSmrg<para> 420e9fcaa8aSmrgSet <emphasis> 421e9fcaa8aSmrgpercent</emphasis> 422e9fcaa8aSmrg to be the volume relative to the base volume for the keyboard as described for 423e9fcaa8aSmrg<emphasis> 424e9fcaa8aSmrgXBell</emphasis>. 425e9fcaa8aSmrg</para> 426e9fcaa8aSmrg 427e9fcaa8aSmrg<para> 428e9fcaa8aSmrgNote that <emphasis> 429e9fcaa8aSmrgbell_class</emphasis> 430e9fcaa8aSmrg and <emphasis> 431e9fcaa8aSmrgbell_id</emphasis> 432e9fcaa8aSmrg indicate the bell to physically ring. <emphasis> 433e9fcaa8aSmrgname</emphasis> 434e9fcaa8aSmrg is simply an arbitrary moniker for the client application’s use. 435e9fcaa8aSmrg</para> 436e9fcaa8aSmrg 437e9fcaa8aSmrg<para> 438e9fcaa8aSmrgTo determine the current feedback settings of an extension input device, use 439e9fcaa8aSmrg<emphasis> 440e9fcaa8aSmrgXGetFeedbackControl</emphasis> 441e9fcaa8aSmrg. See the X input extension documentation for more information on <emphasis> 442e9fcaa8aSmrgXGetFeedbackControl</emphasis> 443e9fcaa8aSmrg and related data structures. 444e9fcaa8aSmrg</para> 445e9fcaa8aSmrg 446e9fcaa8aSmrg<para> 447e9fcaa8aSmrgIf a compatible keyboard extension is not present in the X server, <emphasis> 448e9fcaa8aSmrgXkbDeviceBell</emphasis> 449e9fcaa8aSmrg immediately returns <emphasis> 450e9fcaa8aSmrgFalse</emphasis> 451e9fcaa8aSmrg. Otherwise, <emphasis> 452e9fcaa8aSmrgXkbDeviceBell </emphasis> 453e9fcaa8aSmrgrings the bell as specified for the display and keyboard device and returns 454e9fcaa8aSmrg<emphasis> 455e9fcaa8aSmrgTrue</emphasis> 456e9fcaa8aSmrg. If you have disabled the audible bell, the server does not ring the system 457e9fcaa8aSmrgbell, although it does generate a <emphasis> 458e9fcaa8aSmrgXkbBellNotify</emphasis> 459e9fcaa8aSmrg event. 460e9fcaa8aSmrg</para> 461e9fcaa8aSmrg 462e9fcaa8aSmrg<para> 463e9fcaa8aSmrgYou can call <emphasis> 464e9fcaa8aSmrgXkbDeviceBell</emphasis> 465e9fcaa8aSmrg without first initializing the keyboard extension. 466e9fcaa8aSmrg</para> 467e9fcaa8aSmrg 468e9fcaa8aSmrg<para> 469e9fcaa8aSmrgAs a convenience function, Xkb provides a function to ring the bell on the 470e9fcaa8aSmrgdefault keyboard: <emphasis> 471e9fcaa8aSmrgXkbBell.</emphasis> 472e9fcaa8aSmrg</para> 473e9fcaa8aSmrg 474e9fcaa8aSmrg<informaltable frame='none'> 475eb411b4bSmrg<?dbfo keep-together="always" ?> 476eb411b4bSmrg<tgroup cols='1' align='left' colsep='0' rowsep='0'> 477eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 478e9fcaa8aSmrg<tbody> 479eb411b4bSmrg <row> 480e9fcaa8aSmrg <entry role='functiondecl'> 481e9fcaa8aSmrgBool <emphasis> 482e9fcaa8aSmrgXkbBell</emphasis> 483e9fcaa8aSmrg(<emphasis> 484e9fcaa8aSmrgdisplay, window, percent, name</emphasis> 485e9fcaa8aSmrg) 486e9fcaa8aSmrg </entry> 487e9fcaa8aSmrg </row> 488eb411b4bSmrg <row> 489e9fcaa8aSmrg <entry role='functionargdecl'> 490e9fcaa8aSmrgDisplay * <emphasis> 491e9fcaa8aSmrgdisplay</emphasis> 492e9fcaa8aSmrg; /* connection to the X server */ 493e9fcaa8aSmrg </entry> 494e9fcaa8aSmrg </row> 495eb411b4bSmrg <row> 496e9fcaa8aSmrg <entry role='functionargdecl'> 497e9fcaa8aSmrgWindow<emphasis> 498e9fcaa8aSmrg window</emphasis> 499e9fcaa8aSmrg; /* event window, or None*/ 500e9fcaa8aSmrg </entry> 501e9fcaa8aSmrg </row> 502eb411b4bSmrg <row> 503e9fcaa8aSmrg <entry role='functionargdecl'> 504e9fcaa8aSmrgint<emphasis> 505e9fcaa8aSmrg percent</emphasis> 506e9fcaa8aSmrg; /* relative volume, which can range from -100 to 100 inclusive */ 507e9fcaa8aSmrg </entry> 508e9fcaa8aSmrg </row> 509eb411b4bSmrg <row> 510e9fcaa8aSmrg <entry role='functionargdecl'> 511e9fcaa8aSmrgAtom<emphasis> 512e9fcaa8aSmrg name</emphasis> 513e9fcaa8aSmrg; /* a bell name, or <emphasis> 514e9fcaa8aSmrgNULL</emphasis> 515e9fcaa8aSmrg */ 516e9fcaa8aSmrg </entry> 517e9fcaa8aSmrg</row> 518e9fcaa8aSmrg</tbody> 519e9fcaa8aSmrg</tgroup> 520e9fcaa8aSmrg</informaltable> 521e9fcaa8aSmrg 522e9fcaa8aSmrg<para> 523e9fcaa8aSmrgIf a compatible keyboard extension isn’t present in the X server, <emphasis> 524e9fcaa8aSmrgXkbBell</emphasis> 525e9fcaa8aSmrg calls <emphasis> 526e9fcaa8aSmrgXBell </emphasis> 527e9fcaa8aSmrgwith the specified <emphasis> 528e9fcaa8aSmrgdisplay</emphasis> 529e9fcaa8aSmrg and <emphasis> 530e9fcaa8aSmrgpercent</emphasis> 531e9fcaa8aSmrg, and returns <emphasis> 532e9fcaa8aSmrgFalse</emphasis> 533e9fcaa8aSmrg. Otherwise, <emphasis> 534e9fcaa8aSmrgXkbBell </emphasis> 535e9fcaa8aSmrgcalls <emphasis> 536e9fcaa8aSmrgXkbDeviceBell</emphasis> 537e9fcaa8aSmrg with the specified <emphasis> 538e9fcaa8aSmrgdisplay, window, percent, </emphasis> 539e9fcaa8aSmrgand <emphasis> 540e9fcaa8aSmrgname</emphasis> 541e9fcaa8aSmrg, a <emphasis> 542e9fcaa8aSmrgdevice_spec</emphasis> 543e9fcaa8aSmrg of <emphasis> 544e9fcaa8aSmrgXkbUseCoreKbd</emphasis> 545e9fcaa8aSmrg, a <emphasis> 546e9fcaa8aSmrgbell_class </emphasis> 547e9fcaa8aSmrgof <emphasis> 548e9fcaa8aSmrgXkbDfltXIClass</emphasis> 549e9fcaa8aSmrg, and a <emphasis> 550e9fcaa8aSmrgbell_id </emphasis> 551e9fcaa8aSmrgof <emphasis> 552e9fcaa8aSmrgXkbDfltXIId,</emphasis> 553e9fcaa8aSmrg and returns <emphasis> 554e9fcaa8aSmrgTrue</emphasis>. 555e9fcaa8aSmrg</para> 556e9fcaa8aSmrg 557e9fcaa8aSmrg<para> 558e9fcaa8aSmrgIf you have disabled the audible bell, the server does not ring the system 559e9fcaa8aSmrgbell, although it does generate a <emphasis> 560e9fcaa8aSmrgXkbBellNotify</emphasis> 561e9fcaa8aSmrg event. 562e9fcaa8aSmrg</para> 563e9fcaa8aSmrg 564e9fcaa8aSmrg<para> 565e9fcaa8aSmrgYou can call <emphasis> 566e9fcaa8aSmrgXkbBell</emphasis> 567e9fcaa8aSmrg without first initializing the keyboard extension. 568e9fcaa8aSmrg</para> 569e9fcaa8aSmrg 570e9fcaa8aSmrg</sect2> 571eb411b4bSmrg<sect2 id='Generating_Named_Bell_Events'> 572e9fcaa8aSmrg<title>Generating Named Bell Events</title> 573e9fcaa8aSmrg 574e9fcaa8aSmrg<para> 575e9fcaa8aSmrgUsing Xkb, you can also generate a named bell event that does not ring any 576e9fcaa8aSmrgbell. This allows you to do things such as generate events when your 577e9fcaa8aSmrgapplication starts. 578e9fcaa8aSmrg</para> 579e9fcaa8aSmrg 580e9fcaa8aSmrg<para> 581e9fcaa8aSmrgFor example, if an audio client listens for these types of bells, it can 582e9fcaa8aSmrgproduce a "whoosh" sound when it receives a named bell event to indicate a 583e9fcaa8aSmrgclient just started. In this manner, applications can generate start-up 584e9fcaa8aSmrgfeedback and not worry about producing annoying beeps if an audio server is not 585e9fcaa8aSmrgrunning. 586e9fcaa8aSmrg</para> 587e9fcaa8aSmrg 588e9fcaa8aSmrg 589e9fcaa8aSmrg<para> 590e9fcaa8aSmrgTo cause a bell event for an X input extension device or for the keyboard, 591e9fcaa8aSmrgwithout ringing the corresponding bell, use <emphasis> 592e9fcaa8aSmrgXkbDeviceBellEvent.</emphasis> 593e9fcaa8aSmrg</para> 594e9fcaa8aSmrg 595e9fcaa8aSmrg<informaltable frame='none'> 596eb411b4bSmrg<?dbfo keep-together="always" ?> 597eb411b4bSmrg<tgroup cols='1' align='left' colsep='0' rowsep='0'> 598eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 599e9fcaa8aSmrg<tbody> 600eb411b4bSmrg <row> 601e9fcaa8aSmrg <entry role='functiondecl'> 602e9fcaa8aSmrgBool <emphasis> 603e9fcaa8aSmrgXkbDeviceBellEvent</emphasis> 604e9fcaa8aSmrg(<emphasis> 605e9fcaa8aSmrgdisplay, window, device_spec, bell_class, bell_id, percent, name</emphasis> 606e9fcaa8aSmrg) 607e9fcaa8aSmrg </entry> 608e9fcaa8aSmrg </row> 609eb411b4bSmrg <row> 610e9fcaa8aSmrg <entry role='functionargdecl'> 611e9fcaa8aSmrgDisplay * <emphasis> 612e9fcaa8aSmrgdisplay</emphasis> 613e9fcaa8aSmrg; /* connection to the X server */ 614e9fcaa8aSmrg </entry> 615e9fcaa8aSmrg </row> 616eb411b4bSmrg <row> 617e9fcaa8aSmrg <entry role='functionargdecl'> 618e9fcaa8aSmrgWindow <emphasis> 619e9fcaa8aSmrgwindow</emphasis> 620e9fcaa8aSmrg; /* event window, or None*/ 621e9fcaa8aSmrg </entry> 622e9fcaa8aSmrg </row> 623eb411b4bSmrg <row> 624e9fcaa8aSmrg <entry role='functionargdecl'> 625e9fcaa8aSmrgunsigned int <emphasis> 626e9fcaa8aSmrgdevice_spec</emphasis> 627e9fcaa8aSmrg; /* device ID, or <emphasis> 628e9fcaa8aSmrgXkbUseCoreKbd</emphasis> 629e9fcaa8aSmrg */ 630e9fcaa8aSmrg </entry> 631e9fcaa8aSmrg </row> 632eb411b4bSmrg <row> 633e9fcaa8aSmrg <entry role='functionargdecl'> 634e9fcaa8aSmrgunsigned int <emphasis> 635e9fcaa8aSmrgbell_class;</emphasis> 636e9fcaa8aSmrg /* input extension bell class for the event */ 637e9fcaa8aSmrg </entry> 638e9fcaa8aSmrg </row> 639eb411b4bSmrg <row> 640e9fcaa8aSmrg <entry role='functionargdecl'> 641e9fcaa8aSmrgunsigned int <emphasis> 642e9fcaa8aSmrgbell_id</emphasis> 643e9fcaa8aSmrg; /* input extension bell ID for the event */ 644e9fcaa8aSmrg </entry> 645e9fcaa8aSmrg </row> 646eb411b4bSmrg <row> 647e9fcaa8aSmrg <entry role='functionargdecl'> 648e9fcaa8aSmrgint <emphasis> 649e9fcaa8aSmrgpercent</emphasis> 650e9fcaa8aSmrg; /* volume for the bell, which can range from -100 to 100 inclusive */ 651e9fcaa8aSmrg </entry> 652e9fcaa8aSmrg </row> 653eb411b4bSmrg <row> 654e9fcaa8aSmrg <entry role='functionargdecl'> 655e9fcaa8aSmrgAtom <emphasis> 656e9fcaa8aSmrgname</emphasis> 657e9fcaa8aSmrg; /* a bell name, or <emphasis> 658e9fcaa8aSmrgNULL</emphasis> 659e9fcaa8aSmrg */ 660e9fcaa8aSmrg </entry> 661e9fcaa8aSmrg</row> 662e9fcaa8aSmrg</tbody> 663e9fcaa8aSmrg</tgroup> 664e9fcaa8aSmrg</informaltable> 665e9fcaa8aSmrg 666e9fcaa8aSmrg<para> 667e9fcaa8aSmrgIf a compatible keyboard extension isn’t present in the X server, <emphasis> 668e9fcaa8aSmrgXkbDeviceBellEvent</emphasis> 669e9fcaa8aSmrg immediately returns <emphasis> 670e9fcaa8aSmrgFalse</emphasis> 671e9fcaa8aSmrg. Otherwise, <emphasis> 672e9fcaa8aSmrgXkbDeviceBellEvent</emphasis> 673e9fcaa8aSmrg causes an <emphasis> 674e9fcaa8aSmrgXkbBellNotify</emphasis> 675e9fcaa8aSmrg event to be sent to all interested clients and returns <emphasis> 676e9fcaa8aSmrgTrue</emphasis> 677e9fcaa8aSmrg. Set <emphasis> 678e9fcaa8aSmrgpercent</emphasis> 679e9fcaa8aSmrg to be the volume relative to the base volume for the keyboard as described for 680e9fcaa8aSmrg<emphasis>XBell</emphasis>. 681e9fcaa8aSmrg</para> 682e9fcaa8aSmrg 683e9fcaa8aSmrg 684e9fcaa8aSmrg<para> 685e9fcaa8aSmrgIn addition, <emphasis> 686e9fcaa8aSmrgXkbDeviceBellEvent</emphasis> 687e9fcaa8aSmrg may generate <emphasis> 688e9fcaa8aSmrgAtom</emphasis> 689e9fcaa8aSmrg protocol errors as well as <emphasis> 690e9fcaa8aSmrgXkbBellNotify</emphasis> 691e9fcaa8aSmrg events. You can call <emphasis> 692e9fcaa8aSmrgXkbBell</emphasis> 693e9fcaa8aSmrg without first initializing the keyboard extension. 694e9fcaa8aSmrg</para> 695e9fcaa8aSmrg 696e9fcaa8aSmrg 697e9fcaa8aSmrg<para> 698e9fcaa8aSmrgAs a convenience function, Xkb provides a function to cause a bell event for 699e9fcaa8aSmrgthe keyboard without ringing the bell: <emphasis> 700e9fcaa8aSmrgXkbBellEvent.</emphasis> 701e9fcaa8aSmrg</para> 702e9fcaa8aSmrg 703e9fcaa8aSmrg 704e9fcaa8aSmrg<informaltable frame='none'> 705eb411b4bSmrg<?dbfo keep-together="always" ?> 706eb411b4bSmrg<tgroup cols='1' align='left' colsep='0' rowsep='0'> 707eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 708e9fcaa8aSmrg<tbody> 709eb411b4bSmrg <row> 710e9fcaa8aSmrg <entry role='functiondecl'> 711e9fcaa8aSmrgBool <emphasis> 712e9fcaa8aSmrgXkbBellEvent</emphasis> 713e9fcaa8aSmrg(<emphasis> 714e9fcaa8aSmrgdisplay, window, percent, name</emphasis> 715e9fcaa8aSmrg) 716e9fcaa8aSmrg </entry> 717e9fcaa8aSmrg </row> 718eb411b4bSmrg <row> 719e9fcaa8aSmrg <entry role='functionargdecl'> 720e9fcaa8aSmrgDisplay * <emphasis> 721e9fcaa8aSmrgdisplay</emphasis> 722e9fcaa8aSmrg; /* connection to the X server */ 723e9fcaa8aSmrg </entry> 724e9fcaa8aSmrg </row> 725eb411b4bSmrg <row> 726e9fcaa8aSmrg <entry role='functionargdecl'> 727e9fcaa8aSmrgWindow <emphasis> 728e9fcaa8aSmrgwindow</emphasis> 729e9fcaa8aSmrg; /* the event window, or None */ 730e9fcaa8aSmrg </entry> 731e9fcaa8aSmrg </row> 732eb411b4bSmrg <row> 733e9fcaa8aSmrg <entry role='functionargdecl'> 734e9fcaa8aSmrgint <emphasis> 735e9fcaa8aSmrgpercent</emphasis> 736e9fcaa8aSmrg; /* relative volume, which can range from -100 to 100 inclusive */ 737e9fcaa8aSmrg </entry> 738e9fcaa8aSmrg </row> 739eb411b4bSmrg <row> 740e9fcaa8aSmrg <entry role='functionargdecl'> 741e9fcaa8aSmrgAtom <emphasis> 742e9fcaa8aSmrgname</emphasis> 743e9fcaa8aSmrg; /* a bell name, or <emphasis> 744e9fcaa8aSmrgNULL</emphasis> 745e9fcaa8aSmrg */ 746e9fcaa8aSmrg </entry> 747e9fcaa8aSmrg</row> 748e9fcaa8aSmrg</tbody> 749e9fcaa8aSmrg</tgroup> 750e9fcaa8aSmrg</informaltable> 751e9fcaa8aSmrg 752e9fcaa8aSmrg<para> 753e9fcaa8aSmrgIf a compatible keyboard extension isn’t present in the X server, <emphasis> 754e9fcaa8aSmrgXkbBellEvent</emphasis> 755e9fcaa8aSmrg immediately returns <emphasis> 756e9fcaa8aSmrgFalse</emphasis> 757e9fcaa8aSmrg. Otherwise, <emphasis> 758e9fcaa8aSmrgXkbBellEvent </emphasis> 759e9fcaa8aSmrgcalls<emphasis> 760e9fcaa8aSmrg XkbDeviceBellEvent</emphasis> 761e9fcaa8aSmrg with the specified <emphasis> 762e9fcaa8aSmrgdisplay, window, percent, </emphasis> 763e9fcaa8aSmrgand <emphasis> 764e9fcaa8aSmrgname</emphasis> 765e9fcaa8aSmrg, a <emphasis> 766e9fcaa8aSmrgdevice_spec</emphasis> 767e9fcaa8aSmrg of <emphasis> 768e9fcaa8aSmrgXkbUseCoreKbd</emphasis> 769e9fcaa8aSmrg, a <emphasis> 770e9fcaa8aSmrgbell_class </emphasis> 771e9fcaa8aSmrgof <emphasis> 772e9fcaa8aSmrgXkbDfltXIClass</emphasis> 773e9fcaa8aSmrg, and a <emphasis> 774e9fcaa8aSmrgbell_id </emphasis> 775e9fcaa8aSmrgof <emphasis> 776e9fcaa8aSmrgXkbDfltXIId,</emphasis> 777e9fcaa8aSmrg and returns what <emphasis> 778e9fcaa8aSmrgXkbDeviceBellEvent</emphasis> 779e9fcaa8aSmrg returns. 780e9fcaa8aSmrg</para> 781e9fcaa8aSmrg 782e9fcaa8aSmrg<para> 783e9fcaa8aSmrg<emphasis>XkbBellEvent</emphasis> 784e9fcaa8aSmrggenerates a <emphasis>XkbBellNotify</emphasis> 785e9fcaa8aSmrgevent. 786e9fcaa8aSmrg</para> 787e9fcaa8aSmrg 788e9fcaa8aSmrg 789e9fcaa8aSmrg<para> 790e9fcaa8aSmrgYou can call <emphasis> 791e9fcaa8aSmrgXkbBellEvent</emphasis> 792e9fcaa8aSmrgwithout first initializing the keyboard extension. 793e9fcaa8aSmrg</para> 794e9fcaa8aSmrg 795e9fcaa8aSmrg</sect2> 796eb411b4bSmrg<sect2 id='Forcing_a_Server_Generated_Bell'> 797e9fcaa8aSmrg<title>Forcing a Server-Generated Bell</title> 798e9fcaa8aSmrg 799e9fcaa8aSmrg<para> 800e9fcaa8aSmrgTo ring the bell on any keyboard, overriding user preference settings for 801e9fcaa8aSmrgaudible bells, use <emphasis>XkbForceDeviceBell</emphasis>. 802e9fcaa8aSmrg</para> 803e9fcaa8aSmrg 804e9fcaa8aSmrg<informaltable frame='none'> 805eb411b4bSmrg<?dbfo keep-together="always" ?> 806eb411b4bSmrg<tgroup cols='1' align='left' colsep='0' rowsep='0'> 807eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 808e9fcaa8aSmrg<tbody> 809eb411b4bSmrg <row> 810e9fcaa8aSmrg <entry role='functiondecl'> 811e9fcaa8aSmrgBool <emphasis> 812e9fcaa8aSmrgXkbForceDeviceBell</emphasis> 813e9fcaa8aSmrg(<emphasis> 814e9fcaa8aSmrgdisplay, window, device_spec, bell_class, bell_id, percent</emphasis> 815e9fcaa8aSmrg) 816e9fcaa8aSmrg </entry> 817e9fcaa8aSmrg </row> 818eb411b4bSmrg <row> 819e9fcaa8aSmrg <entry role='functionargdecl'> 820e9fcaa8aSmrgDisplay * <emphasis> 821e9fcaa8aSmrgdisplay</emphasis> 822e9fcaa8aSmrg; /* connection to the X server */ 823e9fcaa8aSmrg </entry> 824e9fcaa8aSmrg </row> 825eb411b4bSmrg <row> 826e9fcaa8aSmrg <entry role='functionargdecl'> 827e9fcaa8aSmrgWindow <emphasis> 828e9fcaa8aSmrgwindow</emphasis> 829e9fcaa8aSmrg; /* event window, or None */ 830e9fcaa8aSmrg </entry> 831e9fcaa8aSmrg </row> 832eb411b4bSmrg <row> 833e9fcaa8aSmrg <entry role='functionargdecl'> 834e9fcaa8aSmrgunsigned int <emphasis> 835e9fcaa8aSmrgdevice_spec</emphasis> 836e9fcaa8aSmrg; /* device ID, or <emphasis> 837e9fcaa8aSmrgXkbUseCoreKbd</emphasis> 838e9fcaa8aSmrg */ 839e9fcaa8aSmrg </entry> 840e9fcaa8aSmrg </row> 841eb411b4bSmrg <row> 842e9fcaa8aSmrg <entry role='functionargdecl'> 843e9fcaa8aSmrgunsigned int <emphasis> 844e9fcaa8aSmrgbell_class</emphasis> 845e9fcaa8aSmrg; /* input extension class of the bell to be rung */ 846e9fcaa8aSmrg </entry> 847e9fcaa8aSmrg </row> 848eb411b4bSmrg <row> 849e9fcaa8aSmrg <entry role='functionargdecl'> 850e9fcaa8aSmrgunsigned int <emphasis> 851e9fcaa8aSmrgbell_id</emphasis> 852e9fcaa8aSmrg; /* input extension ID of the bell to be rung */ 853e9fcaa8aSmrg </entry> 854e9fcaa8aSmrg </row> 855eb411b4bSmrg <row> 856e9fcaa8aSmrg <entry role='functionargdecl'> 857e9fcaa8aSmrgint <emphasis> 858e9fcaa8aSmrgpercent</emphasis> 859e9fcaa8aSmrg; /* relative volume, which can range from -100 to 100 inclusive */ 860e9fcaa8aSmrg </entry> 861e9fcaa8aSmrg</row> 862e9fcaa8aSmrg</tbody> 863e9fcaa8aSmrg</tgroup> 864e9fcaa8aSmrg</informaltable> 865e9fcaa8aSmrg 866e9fcaa8aSmrg<para> 867e9fcaa8aSmrgIf a compatible keyboard extension isn’t present in the X server, <emphasis> 868e9fcaa8aSmrgXkbForceDeviceBell</emphasis> 869e9fcaa8aSmrg immediately returns <emphasis> 870e9fcaa8aSmrgFalse</emphasis> 871e9fcaa8aSmrg. Otherwise, <emphasis> 872e9fcaa8aSmrgXkbForceDeviceBell </emphasis> 873e9fcaa8aSmrgrings the bell as specified for the display and keyboard device and returns 874e9fcaa8aSmrg<emphasis> 875e9fcaa8aSmrgTrue</emphasis> 876e9fcaa8aSmrg. Set <emphasis> 877e9fcaa8aSmrgpercent</emphasis> 878e9fcaa8aSmrg to be the volume relative to the base volume for the keyboard as described for 879e9fcaa8aSmrg<emphasis> 880e9fcaa8aSmrgXBell</emphasis> 881e9fcaa8aSmrg. There is no <emphasis> 882e9fcaa8aSmrgname</emphasis> 883e9fcaa8aSmrg parameter because <emphasis> 884e9fcaa8aSmrgXkbForceDeviceBell </emphasis> 885e9fcaa8aSmrgdoes not cause an <emphasis> 886e9fcaa8aSmrgXkbBellNotify</emphasis> 887e9fcaa8aSmrg event. 888e9fcaa8aSmrg</para> 889e9fcaa8aSmrg 890e9fcaa8aSmrg<para> 891e9fcaa8aSmrgYou can call <emphasis> 892e9fcaa8aSmrgXkbBell</emphasis> 893e9fcaa8aSmrg without first initializing the keyboard extension. 894e9fcaa8aSmrg</para> 895e9fcaa8aSmrg 896e9fcaa8aSmrg<para> 897e9fcaa8aSmrgTo ring the bell on the default keyboard, overriding user preference settings 898e9fcaa8aSmrgfor audible bells, use <emphasis> 899e9fcaa8aSmrgXkbForceBell</emphasis>. 900e9fcaa8aSmrg</para> 901e9fcaa8aSmrg 902e9fcaa8aSmrg<informaltable frame='none'> 903eb411b4bSmrg<?dbfo keep-together="always" ?> 904eb411b4bSmrg<tgroup cols='1' align='left' colsep='0' rowsep='0'> 905eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/> 906e9fcaa8aSmrg<tbody> 907eb411b4bSmrg <row> 908e9fcaa8aSmrg <entry role='functiondecl'> 909e9fcaa8aSmrgBool <emphasis> 910e9fcaa8aSmrgXkbForceBell</emphasis> 911e9fcaa8aSmrg(<emphasis> 912e9fcaa8aSmrgdisplay, percent)</emphasis> 913e9fcaa8aSmrg </entry> 914e9fcaa8aSmrg </row> 915eb411b4bSmrg <row> 916e9fcaa8aSmrg <entry role='functionargdecl'> 917e9fcaa8aSmrgDisplay * <emphasis> 918e9fcaa8aSmrgdisplay</emphasis> 919e9fcaa8aSmrg; /* connection to the X server */ 920e9fcaa8aSmrg </entry> 921e9fcaa8aSmrg </row> 922eb411b4bSmrg <row> 923e9fcaa8aSmrg <entry role='functionargdecl'> 924e9fcaa8aSmrgint <emphasis> 925e9fcaa8aSmrgpercent</emphasis> 926e9fcaa8aSmrg; /* volume for the bell, which can range from -100 to 100 inclusive */ 927e9fcaa8aSmrg </entry> 928e9fcaa8aSmrg</row> 929e9fcaa8aSmrg</tbody> 930e9fcaa8aSmrg</tgroup> 931e9fcaa8aSmrg</informaltable> 932e9fcaa8aSmrg 933e9fcaa8aSmrg<para> 934e9fcaa8aSmrgIf a compatible keyboard extension isn’t present in the X server, <emphasis> 935e9fcaa8aSmrgXkbForceBell</emphasis> 936e9fcaa8aSmrg calls <emphasis> 937e9fcaa8aSmrgXBell </emphasis> 938e9fcaa8aSmrgwith the specified <emphasis> 939e9fcaa8aSmrgdisplay</emphasis> 940e9fcaa8aSmrg and <emphasis> 941e9fcaa8aSmrgpercent</emphasis> 942e9fcaa8aSmrg and returns <emphasis> 943e9fcaa8aSmrgFalse</emphasis> 944e9fcaa8aSmrg. Otherwise, <emphasis> 945e9fcaa8aSmrgXkbForceBell </emphasis> 946e9fcaa8aSmrgcalls <emphasis> 947e9fcaa8aSmrgXkbForceDeviceBell</emphasis> 948e9fcaa8aSmrg with the specified <emphasis> 949e9fcaa8aSmrgdisplay </emphasis> 950e9fcaa8aSmrgand<emphasis> 951e9fcaa8aSmrg percent</emphasis> 952e9fcaa8aSmrg, <emphasis> 953e9fcaa8aSmrgdevice_spec</emphasis> 954e9fcaa8aSmrg =<emphasis> 955e9fcaa8aSmrgXkbUseCoreKbd</emphasis> 956e9fcaa8aSmrg, <emphasis> 957e9fcaa8aSmrgbell_class </emphasis> 958e9fcaa8aSmrg= <emphasis> 959e9fcaa8aSmrgXkbDfltXIClass</emphasis> 960e9fcaa8aSmrg, <emphasis> 961e9fcaa8aSmrgbell_id </emphasis> 962e9fcaa8aSmrg= <emphasis> 963e9fcaa8aSmrgXkbDfltXIId,</emphasis> 964e9fcaa8aSmrg <emphasis> 965e9fcaa8aSmrgwindow</emphasis> 966e9fcaa8aSmrg = None, and <emphasis> 967e9fcaa8aSmrgname</emphasis> 968e9fcaa8aSmrg = <emphasis> 969e9fcaa8aSmrgNULL</emphasis> 970e9fcaa8aSmrg, and returns what<emphasis> 971e9fcaa8aSmrg XkbForceDeviceBell</emphasis> 972e9fcaa8aSmrg returns. 973e9fcaa8aSmrg</para> 974e9fcaa8aSmrg 975e9fcaa8aSmrg<para> 976e9fcaa8aSmrg<emphasis> 977e9fcaa8aSmrgXkbForceBell </emphasis> 978e9fcaa8aSmrgdoes not cause an <emphasis> 979e9fcaa8aSmrgXkbBellNotify</emphasis> 980e9fcaa8aSmrg event. 981e9fcaa8aSmrg</para> 982e9fcaa8aSmrg 983e9fcaa8aSmrg<para> 984e9fcaa8aSmrgYou can call <emphasis> 985e9fcaa8aSmrgXkbBell</emphasis> 986e9fcaa8aSmrg without first initializing the keyboard extension. 987e9fcaa8aSmrg</para> 988e9fcaa8aSmrg 989e9fcaa8aSmrg</sect2> 990e9fcaa8aSmrg</sect1> 991eb411b4bSmrg<sect1 id='Detecting_Bells'> 992e9fcaa8aSmrg<title>Detecting Bells</title> 993e9fcaa8aSmrg 994e9fcaa8aSmrg<para> 995e9fcaa8aSmrgXkb generates <emphasis> 996e9fcaa8aSmrgXkbBellNotify</emphasis> 997e9fcaa8aSmrg events for all bells except for those resulting from calls to <emphasis> 998e9fcaa8aSmrgXkbForceDeviceBell</emphasis> 999e9fcaa8aSmrg and <emphasis> 1000e9fcaa8aSmrgXkbForceBell</emphasis> 1001e9fcaa8aSmrg. To receive <emphasis> 1002e9fcaa8aSmrgXkbBellNotify</emphasis> 1003e9fcaa8aSmrg events under all possible conditions, pass <emphasis> 1004e9fcaa8aSmrgXkbBellNotifyMask</emphasis> 1005e9fcaa8aSmrg in both the <emphasis> 1006e9fcaa8aSmrgbits_to_change </emphasis> 1007e9fcaa8aSmrgand<emphasis> 1008e9fcaa8aSmrg values_for_bits</emphasis> 1009e9fcaa8aSmrg parameters to <emphasis> 1010e9fcaa8aSmrgXkbSelectEvents</emphasis> 1011e9fcaa8aSmrg (see section 4.3). <!-- xref --> 1012e9fcaa8aSmrg</para> 1013e9fcaa8aSmrg 1014e9fcaa8aSmrg<para> 1015e9fcaa8aSmrgThe <emphasis> 1016e9fcaa8aSmrgXkbBellNotify</emphasis> 1017e9fcaa8aSmrg event has no event details. It is either selected or it is not. However, you 1018e9fcaa8aSmrgcan call <emphasis> 1019e9fcaa8aSmrgXkbSelectEventDetails</emphasis> 1020e9fcaa8aSmrg using <emphasis> 1021e9fcaa8aSmrgXkbBellNotify</emphasis> 1022e9fcaa8aSmrg as the <emphasis> 1023e9fcaa8aSmrgevent_type</emphasis> 1024e9fcaa8aSmrg and specifying <emphasis> 1025e9fcaa8aSmrgXkbAllBellNotifyMask</emphasis> 1026e9fcaa8aSmrg in <emphasis> 1027e9fcaa8aSmrgbits_to_change</emphasis> 1028e9fcaa8aSmrg and <emphasis> 1029e9fcaa8aSmrgvalues_for_bits.</emphasis> 1030e9fcaa8aSmrg This has the same effect as a call to <emphasis> 1031e9fcaa8aSmrgXkbSelectEvents</emphasis>. 1032e9fcaa8aSmrg</para> 1033e9fcaa8aSmrg 1034e9fcaa8aSmrg<para> 1035e9fcaa8aSmrgThe structure for the <emphasis> 1036e9fcaa8aSmrgXkbBellNotify</emphasis> 1037e9fcaa8aSmrg event type contains: 1038e9fcaa8aSmrg</para> 1039e9fcaa8aSmrg 1040e9fcaa8aSmrg<para><programlisting> 1041e9fcaa8aSmrgtypedef struct _XkbBellNotify { 1042e9fcaa8aSmrg int type; /* Xkb extension base event code */ 1043e9fcaa8aSmrg unsigned long serial; /* X server serial number for event */ 1044e9fcaa8aSmrg Bool send_event; /* <emphasis> True</emphasis> => synthetically generated */ 1045e9fcaa8aSmrg Display * display; /* server connection where event generated */ 1046e9fcaa8aSmrg Time time; /* server time when event generated */ 1047e9fcaa8aSmrg int xkb_type; /* <emphasis> XkbBellNotify</emphasis> */ 1048e9fcaa8aSmrg unsigned int device; /* Xkb device ID, will not be <emphasis> XkbUseCoreKbd</emphasis> */ 1049e9fcaa8aSmrg int percent; /* requested volume as % of max */ 1050e9fcaa8aSmrg int pitch; /* requested pitch in Hz */ 1051e9fcaa8aSmrg int duration; /* requested duration in microseconds */ 1052e9fcaa8aSmrg unsigned int bell_class; /* X input extension feedback class */ 1053e9fcaa8aSmrg unsigned int bell_id; /* X input extension feedback ID */ 1054e9fcaa8aSmrg Atom name; /* "name" of requested bell */ 1055e9fcaa8aSmrg Window window; /* window associated with event */ 1056e9fcaa8aSmrg Bool event_only; /* <emphasis> False</emphasis> -> the server did not produce a beep */ 1057e9fcaa8aSmrg} <emphasis>XkbBellNotifyEvent</emphasis>; 1058e9fcaa8aSmrg</programlisting></para> 1059e9fcaa8aSmrg 1060e9fcaa8aSmrg<para> 1061e9fcaa8aSmrgIf your application needs to generate visual bell feedback on the screen when 1062e9fcaa8aSmrgit receives a bell event, use the window ID in the <emphasis> 1063e9fcaa8aSmrgXkbBellNotifyEvent</emphasis> 1064e9fcaa8aSmrg, if present. 1065e9fcaa8aSmrg</para> 1066e9fcaa8aSmrg 1067e9fcaa8aSmrg</sect1> 1068e9fcaa8aSmrg</chapter> 1069