ch09.xml revision 0f8248bf
10f8248bfSmrg<?xml version="1.0" encoding="UTF-8" ?>
20f8248bfSmrg<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
30f8248bfSmrg	  "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
4eb411b4bSmrg<chapter id='Bells'>
5e9fcaa8aSmrg<title>Bells</title>
60f8248bfSmrg<indexterm zone="Bells"><primary>bell</primary></indexterm>
7e9fcaa8aSmrg
8e9fcaa8aSmrg<para>
9e9fcaa8aSmrgThe core X protocol allows only applications to explicitly sound the system
10e9fcaa8aSmrgbell with a given duration, pitch, and volume. Xkb extends this capability by
11e9fcaa8aSmrgallowing clients to attach symbolic names to bells, disable audible bells, and
12e9fcaa8aSmrgreceive an event whenever the keyboard bell is rung. For the purposes of this
130f8248bfSmrgdocument, the
140f8248bfSmrg<firstterm>audible</firstterm>
150f8248bfSmrg<indexterm significance="preferred" zone="Bells">
160f8248bfSmrg<primary>audible bell</primary></indexterm>
170f8248bfSmrg<indexterm significance="preferred" zone="Bells">
180f8248bfSmrg<primary>bell</primary><secondary>audible</secondary></indexterm>
190f8248bfSmrgbell is defined to be the system bell, or the default keyboard bell, as
20e9fcaa8aSmrgopposed to any other audible sound generated elsewhere in the system.
21e9fcaa8aSmrg</para>
22e9fcaa8aSmrg
23e9fcaa8aSmrg
24e9fcaa8aSmrg<para>
250f8248bfSmrgYou can ask to receive
260f8248bfSmrg<symbol>XkbBellNotify</symbol>
270f8248bfSmrgevents (see <link linkend="Detecting_Bells">section 9.4</link>) when any client rings any one of the following:
28e9fcaa8aSmrg</para>
29e9fcaa8aSmrg
30e9fcaa8aSmrg<itemizedlist>
31e9fcaa8aSmrg<listitem>
32e9fcaa8aSmrg  <para>
33e9fcaa8aSmrgThe default bell
34e9fcaa8aSmrg  </para>
35e9fcaa8aSmrg</listitem>
36e9fcaa8aSmrg<listitem>
37e9fcaa8aSmrg  <para>
380f8248bfSmrgAny bell on an input device that can be specified by a
390f8248bfSmrg<structfield>bell_class</structfield>
400f8248bfSmrgand
410f8248bfSmrg<structfield>bell_id</structfield>
420f8248bfSmrgpair
43e9fcaa8aSmrg  </para>
44e9fcaa8aSmrg</listitem>
45e9fcaa8aSmrg<listitem>
46e9fcaa8aSmrg  <para>
47e9fcaa8aSmrgAny bell specified only by an arbitrary name. (This is, from the server’s
48e9fcaa8aSmrgpoint of view, merely a name, and not connected with any physical
49e9fcaa8aSmrgsound-generating device. Some client application must generate the sound, or
50e9fcaa8aSmrgvisual feedback, if any, that is associated with the name.)
51e9fcaa8aSmrg  </para>
52e9fcaa8aSmrg</listitem>
53e9fcaa8aSmrg</itemizedlist>
54e9fcaa8aSmrg
55e9fcaa8aSmrg<para>
560f8248bfSmrgYou can also ask to receive
570f8248bfSmrg<symbol>XkbBellNotify</symbol>
580f8248bfSmrgevents when the server rings the default bell or if any client has requested
59e9fcaa8aSmrgevents only (without the bell sounding) for any of the bell types previously
60e9fcaa8aSmrglisted.
61e9fcaa8aSmrg</para>
62e9fcaa8aSmrg
63e9fcaa8aSmrg<para>
640f8248bfSmrgYou can disable audible bells on a global basis (to set the
650f8248bfSmrg<emphasis>AudibleBell</emphasis>
660f8248bfSmrgcontrol, see <xref linkend="Keyboard_Controls" />). For example, a client that replaces the keyboard
670f8248bfSmrgbell with some other audible cue might want to turn off the
680f8248bfSmrg<emphasis>AudibleBell</emphasis>
690f8248bfSmrgcontrol to prevent the server from also generating a sound and avoid
700f8248bfSmrgcacophony. If you disable audible bells and request to receive
710f8248bfSmrg<symbol>XkbBellNotify</symbol>
720f8248bfSmrgevents, you can generate feedback different from the default bell.
73e9fcaa8aSmrg</para>
74e9fcaa8aSmrg
75e9fcaa8aSmrg
76e9fcaa8aSmrg<para>
770f8248bfSmrgYou can, however, override the
780f8248bfSmrg<emphasis>AudibleBell</emphasis>
790f8248bfSmrgcontrol by calling one of the functions that force the ringing of a bell in
800f8248bfSmrgspite of the setting of the
810f8248bfSmrg<emphasis>AudibleBell</emphasis>
820f8248bfSmrgcontrol —
830f8248bfSmrg<function>XkbForceDeviceBell</function>
840f8248bfSmrgor
850f8248bfSmrg<function>XkbForceBell</function>
860f8248bfSmrg(see <link linkend="Forcing_a_Server_Generated_Bell">section 9.3.3</link>). In this case the server does not generate a bell event.
87e9fcaa8aSmrg</para>
88e9fcaa8aSmrg
89e9fcaa8aSmrg
90e9fcaa8aSmrg<para>
91e9fcaa8aSmrgJust as some keyboards can produce keyclicks to indicate when a key is pressed
92e9fcaa8aSmrgor repeating, Xkb can provide feedback for the controls by using special beep
930f8248bfSmrgcodes. The
940f8248bfSmrg<emphasis>AccessXFeedback</emphasis>
950f8248bfSmrgcontrol is used to configure the specific types of operations that generate
960f8248bfSmrgfeedback. See <link linkend="The_AccessXFeedback_Control">section 10.6.3</link> for a discussion on
970f8248bfSmrg<emphasis>AccessXFeedback</emphasis>
980f8248bfSmrgcontrol.
99e9fcaa8aSmrg</para>
100e9fcaa8aSmrg
101e9fcaa8aSmrg<para>
102e9fcaa8aSmrgThis chapter describes bell names, the functions used to generate named bells,
103e9fcaa8aSmrgand the events the server generates for bells.
104e9fcaa8aSmrg</para>
105e9fcaa8aSmrg
106eb411b4bSmrg<sect1 id='Bell_Names'>
107e9fcaa8aSmrg<title>Bell Names</title>
108e9fcaa8aSmrg
109e9fcaa8aSmrg<para>
110e9fcaa8aSmrgYou can associate a name to an act of ringing a bell by converting the name to
111e9fcaa8aSmrgan Atom and then using this name when you call the functions listed in this
112e9fcaa8aSmrgchapter. If an event is generated as a result, the name is then passed to all
1130f8248bfSmrgother clients interested in receiving
1140f8248bfSmrg<symbol>XkbBellNotify</symbol>
1150f8248bfSmrgevents. Note that these are arbitrary names and that there is no binding to
116e9fcaa8aSmrgany sounds. Any sounds or other effects (such as visual bells on the screen)
117e9fcaa8aSmrgmust be generated by a client application upon receipt of the bell event
118e9fcaa8aSmrgcontaining the name. There is no default name for the default keyboard bell.
119e9fcaa8aSmrgThe server does generate some predefined bells for the AccessX controls (see
1200f8248bfSmrg<link linkend="The_AccessXFeedback_Control">section 10.6.3</link>).
1210f8248bfSmrgThese named bells are shown in <link linkend="table9.1">Table 9.1</link>;
1220f8248bfSmrgthe name is included
1230f8248bfSmrgin any bell event sent to clients that have requested to receive
1240f8248bfSmrg<symbol>XkbBellNotify</symbol>
1250f8248bfSmrgevents.
126e9fcaa8aSmrg</para>
127e9fcaa8aSmrg
1280f8248bfSmrg<table id='table9.1' frame='topbot'>
129e9fcaa8aSmrg<title>Predefined Bells</title>
130eb411b4bSmrg<?dbfo keep-together="always" ?>
131eb411b4bSmrg<tgroup cols='2' align='left' colsep='0' rowsep='0'>
132eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/>
133eb411b4bSmrg<colspec colname='c2' colwidth='1.0*'/>
134e9fcaa8aSmrg<thead>
135eb411b4bSmrg<row rowsep='1'>
136e9fcaa8aSmrg  <entry>Action</entry>
137e9fcaa8aSmrg  <entry>Named Bell</entry>
138e9fcaa8aSmrg</row>
139e9fcaa8aSmrg</thead>
140e9fcaa8aSmrg<tbody>
141eb411b4bSmrg<row>
142e9fcaa8aSmrg    <entry>Indicator turned on</entry>
143e9fcaa8aSmrg    <entry>AX_IndicatorOn</entry>
144e9fcaa8aSmrg</row>
145eb411b4bSmrg<row>
146e9fcaa8aSmrg    <entry>Indicator turned off</entry>
147e9fcaa8aSmrg    <entry>AX_IndicatorOff</entry>
148e9fcaa8aSmrg</row>
149eb411b4bSmrg<row>
150e9fcaa8aSmrg    <entry>More than one indicator changed state</entry>
151e9fcaa8aSmrg    <entry>AX_IndicatorChange</entry>
152e9fcaa8aSmrg</row>
153eb411b4bSmrg<row>
154e9fcaa8aSmrg    <entry>Control turned on</entry>
155e9fcaa8aSmrg    <entry>AX_FeatureOn</entry>
156e9fcaa8aSmrg</row>
157eb411b4bSmrg<row>
158e9fcaa8aSmrg    <entry>Control turned off</entry>
159e9fcaa8aSmrg    <entry>AX_FeatureOff</entry>
160e9fcaa8aSmrg</row>
161eb411b4bSmrg<row>
162e9fcaa8aSmrg    <entry>More than one control changed state</entry>
163e9fcaa8aSmrg    <entry>AX_FeatureChange</entry>
164e9fcaa8aSmrg</row>
165eb411b4bSmrg<row>
166e9fcaa8aSmrg    <entry>SlowKeys and BounceKeys about to be turned on or off</entry>
167e9fcaa8aSmrg    <entry>AX_SlowKeysWarning</entry>
168e9fcaa8aSmrg</row>
169eb411b4bSmrg<row>
170e9fcaa8aSmrg    <entry>SlowKeys key pressed</entry>
171e9fcaa8aSmrg    <entry>AX_SlowKeyPress</entry>
172e9fcaa8aSmrg</row>
173eb411b4bSmrg<row>
174e9fcaa8aSmrg    <entry>SlowKeys key accepted</entry>
175e9fcaa8aSmrg    <entry>AX_SlowKeyAccept</entry>
176e9fcaa8aSmrg</row>
177eb411b4bSmrg<row>
178e9fcaa8aSmrg    <entry>SlowKeys key rejected</entry>
179e9fcaa8aSmrg    <entry>AX_SlowKeyReject</entry>
180e9fcaa8aSmrg</row>
181eb411b4bSmrg<row>
182e9fcaa8aSmrg    <entry>Accepted SlowKeys key released</entry>
183e9fcaa8aSmrg    <entry>AX_SlowKeyRelease</entry>
184e9fcaa8aSmrg</row>
185eb411b4bSmrg<row>
186e9fcaa8aSmrg    <entry>BounceKeys key rejected</entry>
187e9fcaa8aSmrg    <entry>AX_BounceKeyReject</entry>
188e9fcaa8aSmrg</row>
189eb411b4bSmrg<row>
190e9fcaa8aSmrg    <entry>StickyKeys key latched</entry>
191e9fcaa8aSmrg    <entry>AX_StickyLatch</entry>
192e9fcaa8aSmrg</row>
193eb411b4bSmrg<row>
194e9fcaa8aSmrg    <entry>StickyKeys key locked</entry>
195e9fcaa8aSmrg    <entry>AX_StickyLock</entry>
196e9fcaa8aSmrg</row>
197eb411b4bSmrg<row>
198e9fcaa8aSmrg    <entry>StickyKeys key unlocked</entry>
199e9fcaa8aSmrg    <entry>AX_StickyUnlock</entry>
200e9fcaa8aSmrg  </row>
201e9fcaa8aSmrg</tbody>
202e9fcaa8aSmrg</tgroup>
203e9fcaa8aSmrg</table>
204e9fcaa8aSmrg
205e9fcaa8aSmrg</sect1>
206eb411b4bSmrg<sect1 id='Audible_Bells'>
207e9fcaa8aSmrg<title>Audible Bells</title>
208e9fcaa8aSmrg
209e9fcaa8aSmrg<para>
210e9fcaa8aSmrgUsing Xkb you can generate bell events that do not necessarily ring the system
211e9fcaa8aSmrgbell. This is useful if you need to use an audio server instead of the system
212e9fcaa8aSmrgbeep. For example, when an audio client starts, it could disable the audible
2130f8248bfSmrgbell (the system bell) and then listen for
2140f8248bfSmrg<symbol>XkbBellNotify</symbol>
2150f8248bfSmrgevents (see <link linkend="Detecting_Bells">section 9.4</link>). When it receives a
2160f8248bfSmrg<symbol>XkbBellNotify</symbol>
2170f8248bfSmrgevent, the audio client could then send a request to an audio server to play a
218e9fcaa8aSmrgsound.
219e9fcaa8aSmrg</para>
220e9fcaa8aSmrg
221e9fcaa8aSmrg
222e9fcaa8aSmrg<para>
2230f8248bfSmrgYou can control the audible bells feature by passing the
2240f8248bfSmrg<symbol>XkbAudibleBellMask</symbol>
2250f8248bfSmrgto
2260f8248bfSmrg<function>XkbChangeEnabledControls</function>
2270f8248bfSmrg(see <link linkend="The_EnabledControls_Control">section 10.1.1</link>). If you set
2280f8248bfSmrg<symbol>XkbAudibleBellMask</symbol>
2290f8248bfSmrgon, the server rings the system bell when a bell event occurs. This is the
2300f8248bfSmrgdefault. If you set
2310f8248bfSmrg<symbol>XkbAudibleBellMask</symbol>
2320f8248bfSmrgoff and a bell event occurs, the server does not ring the system bell unless
2330f8248bfSmrgyou call
2340f8248bfSmrg<function>XkbForceDeviceBell</function>
2350f8248bfSmrgor
2360f8248bfSmrg<function>XkbForceBell</function>
2370f8248bfSmrg(see <link linkend="Forcing_a_Server_Generated_Bell">section 9.3.3</link>).
238e9fcaa8aSmrg</para>
239e9fcaa8aSmrg
240e9fcaa8aSmrg<para>
241e9fcaa8aSmrgAudible bells are also part of the per-client auto-reset controls. For more
2420f8248bfSmrginformation on auto-reset controls, see <link linkend="The_AutoReset_Control">section 10.1.2</link>.
243e9fcaa8aSmrg</para>
244e9fcaa8aSmrg
245e9fcaa8aSmrg</sect1>
246eb411b4bSmrg<sect1 id='Bell_Functions'>
247e9fcaa8aSmrg<title>Bell Functions</title>
248e9fcaa8aSmrg
249e9fcaa8aSmrg<para>
250e9fcaa8aSmrgUse the functions described in this section to ring bells and to generate bell
251e9fcaa8aSmrgevents.
252e9fcaa8aSmrg</para>
253e9fcaa8aSmrg
254e9fcaa8aSmrg<para>
255e9fcaa8aSmrgThe input extension has two types of feedbacks that can generate bells — bell
256e9fcaa8aSmrgfeedback and keyboard feedback. Some of the functions in this section have
2570f8248bfSmrg<structfield>bell_class</structfield>
2580f8248bfSmrgand
2590f8248bfSmrg<structfield>bell_id</structfield>
2600f8248bfSmrgparameters; set them as follows: Set
2610f8248bfSmrg<structfield>bell_class</structfield>
2620f8248bfSmrgto
2630f8248bfSmrg<symbol>BellFeedbackClass</symbol>
2640f8248bfSmrgor
2650f8248bfSmrg<symbol>KbdFeedbackClass</symbol>.
2660f8248bfSmrgA device can have more than one feedback of each type; set
2670f8248bfSmrg<structfield>bell_id</structfield>
2680f8248bfSmrgto the particular bell feedback of
2690f8248bfSmrg<structfield>bell_class</structfield>
2700f8248bfSmrgtype.
271e9fcaa8aSmrg</para>
272e9fcaa8aSmrg
273e9fcaa8aSmrg<para>
2740f8248bfSmrg<link linkend="table9.2">Table 9.2</link> shows the conditions that cause
2750f8248bfSmrga bell to sound or an <structname>XkbBellNotifyEvent</structname>
2760f8248bfSmrgto be generated when a bell function is called.
277e9fcaa8aSmrg</para>
278e9fcaa8aSmrg
2790f8248bfSmrg<table id='table9.2' frame='topbot'>
280e9fcaa8aSmrg<title>Bell Sounding and Bell Event Generating</title>
281eb411b4bSmrg<?dbfo keep-together="always" ?>
282eb411b4bSmrg<tgroup cols='4' align='left' colsep='0' rowsep='0'>
283eb411b4bSmrg<colspec colname='c1' colwidth='1.0*'/>
284eb411b4bSmrg<colspec colname='c2' colwidth='1.0*'/>
285eb411b4bSmrg<colspec colname='c3' colwidth='1.0*'/>
286eb411b4bSmrg<colspec colname='c4' colwidth='1.0*'/>
287e9fcaa8aSmrg<thead>
288eb411b4bSmrg  <row rowsep='1'>
289e9fcaa8aSmrg    <entry>Function called</entry>
290e9fcaa8aSmrg    <entry>AudibleBell</entry>
291e9fcaa8aSmrg    <entry>Server sounds a bell</entry>
292e9fcaa8aSmrg    <entry>Server sends an XkbBellNotifyEvent</entry>
293e9fcaa8aSmrg  </row>
294e9fcaa8aSmrg</thead>
295e9fcaa8aSmrg<tbody>
296eb411b4bSmrg<row>
297e9fcaa8aSmrg    <entry>XkbDeviceBell</entry>
298e9fcaa8aSmrg    <entry>On</entry>
299e9fcaa8aSmrg    <entry>Yes</entry>
300e9fcaa8aSmrg    <entry>Yes</entry>
301e9fcaa8aSmrg</row>
302eb411b4bSmrg<row>
303e9fcaa8aSmrg    <entry>XkbDeviceBell</entry>
304e9fcaa8aSmrg    <entry>Off</entry>
305e9fcaa8aSmrg    <entry>No</entry>
306e9fcaa8aSmrg    <entry>Yes</entry>
307e9fcaa8aSmrg</row>
308eb411b4bSmrg<row>
309e9fcaa8aSmrg    <entry>XkbBell</entry>
310e9fcaa8aSmrg    <entry>On</entry>
311e9fcaa8aSmrg    <entry>Yes</entry>
312e9fcaa8aSmrg    <entry>Yes</entry>
313e9fcaa8aSmrg</row>
314eb411b4bSmrg<row>
315e9fcaa8aSmrg    <entry>XkbBell</entry>
316e9fcaa8aSmrg    <entry>Off</entry>
317e9fcaa8aSmrg    <entry>No</entry>
318e9fcaa8aSmrg    <entry>Yes</entry>
319e9fcaa8aSmrg</row>
320eb411b4bSmrg<row>
321e9fcaa8aSmrg    <entry>XkbDeviceBellEvent</entry>
322e9fcaa8aSmrg    <entry>On or Off</entry>
323e9fcaa8aSmrg    <entry>No</entry>
324e9fcaa8aSmrg    <entry>Yes</entry>
325e9fcaa8aSmrg</row>
326eb411b4bSmrg<row>
327e9fcaa8aSmrg    <entry>XkbBellEvent</entry>
328e9fcaa8aSmrg    <entry>On or Off</entry>
329e9fcaa8aSmrg    <entry>No</entry>
330e9fcaa8aSmrg    <entry>Yes</entry>
331e9fcaa8aSmrg</row>
332eb411b4bSmrg<row>
333e9fcaa8aSmrg    <entry>XkbDeviceForceBell</entry>
334e9fcaa8aSmrg    <entry>On or Off</entry>
335e9fcaa8aSmrg    <entry>Yes</entry>
336e9fcaa8aSmrg    <entry>No</entry>
337e9fcaa8aSmrg</row>
338eb411b4bSmrg<row>
339e9fcaa8aSmrg    <entry>XkbForceBell</entry>
340e9fcaa8aSmrg    <entry>On or Off</entry>
341e9fcaa8aSmrg    <entry>Yes</entry>
342e9fcaa8aSmrg    <entry>No</entry>
343e9fcaa8aSmrg  </row>
344e9fcaa8aSmrg</tbody>
345e9fcaa8aSmrg</tgroup>
346e9fcaa8aSmrg</table>
347e9fcaa8aSmrg
348eb411b4bSmrg<sect2 id='Generating_Named_Bells'>
349e9fcaa8aSmrg<title>Generating Named Bells</title>
350e9fcaa8aSmrg
351e9fcaa8aSmrg<para>
352e9fcaa8aSmrgTo ring the bell on an X input extension device or the default keyboard, use
3530f8248bfSmrg<function>XkbDeviceBell</function>.
354e9fcaa8aSmrg</para>
355e9fcaa8aSmrg
3560f8248bfSmrg<indexterm significance="preferred" zone="XkbDeviceBell"><primary><function>XkbDeviceBell</function></primary></indexterm>
3570f8248bfSmrg<funcsynopsis id="XkbDeviceBell">
3580f8248bfSmrg  <funcprototype>
3590f8248bfSmrg    <funcdef>Bool <function>XkbDeviceBell</function></funcdef>
3600f8248bfSmrg<!-- (
3610f8248bfSmrg<parameter>display, window, device_id, bell_class, bell_id, percent, name</parameter>
3620f8248bfSmrg) -->
3630f8248bfSmrg
3640f8248bfSmrg    <paramdef>Display *<parameter>display</parameter></paramdef>
3650f8248bfSmrg    <paramdef>Window <parameter>window</parameter></paramdef>
3660f8248bfSmrg    <paramdef>unsigned int <parameter>device_spec</parameter></paramdef>
3670f8248bfSmrg    <paramdef>unsigned int <parameter>bell_class</parameter></paramdef>
3680f8248bfSmrg    <paramdef>unsigned int <parameter>bell_id</parameter></paramdef>
3690f8248bfSmrg    <paramdef>int <parameter>percent</parameter></paramdef>
3700f8248bfSmrg    <paramdef>Atom <parameter>name</parameter></paramdef>
3710f8248bfSmrg  </funcprototype>
3720f8248bfSmrg</funcsynopsis>
3730f8248bfSmrg<variablelist>
3740f8248bfSmrg  <varlistentry>
3750f8248bfSmrg    <term>
3760f8248bfSmrg      <parameter>display</parameter>
3770f8248bfSmrg    </term>
3780f8248bfSmrg    <listitem>
3790f8248bfSmrg      <para>
3800f8248bfSmrg        connection to the X server
3810f8248bfSmrg      </para>
3820f8248bfSmrg    </listitem>
3830f8248bfSmrg  </varlistentry>
3840f8248bfSmrg  <varlistentry>
3850f8248bfSmrg    <term>
3860f8248bfSmrg      <parameter>window</parameter>
3870f8248bfSmrg    </term>
3880f8248bfSmrg    <listitem>
3890f8248bfSmrg      <para>
3900f8248bfSmrg        window for which the bell is generated, or None
3910f8248bfSmrg      </para>
3920f8248bfSmrg    </listitem>
3930f8248bfSmrg  </varlistentry>
3940f8248bfSmrg  <varlistentry>
3950f8248bfSmrg    <term>
3960f8248bfSmrg      <parameter>device_spec</parameter>
3970f8248bfSmrg    </term>
3980f8248bfSmrg    <listitem>
3990f8248bfSmrg      <para>
4000f8248bfSmrg        device ID, or <symbol>XkbUseCoreKbd</symbol>
4010f8248bfSmrg      </para>
4020f8248bfSmrg    </listitem>
4030f8248bfSmrg  </varlistentry>
4040f8248bfSmrg  <varlistentry>
4050f8248bfSmrg    <term>
4060f8248bfSmrg      <parameter>bell_class</parameter>
4070f8248bfSmrg    </term>
4080f8248bfSmrg    <listitem>
4090f8248bfSmrg      <para>
4100f8248bfSmrg        X input extension bell class of the bell to be rung
4110f8248bfSmrg      </para>
4120f8248bfSmrg    </listitem>
4130f8248bfSmrg  </varlistentry>
4140f8248bfSmrg  <varlistentry>
4150f8248bfSmrg    <term>
4160f8248bfSmrg      <parameter>bell_id</parameter>
4170f8248bfSmrg    </term>
4180f8248bfSmrg    <listitem>
4190f8248bfSmrg      <para>
4200f8248bfSmrg        X input extension bell ID of the bell to be rung
4210f8248bfSmrg      </para>
4220f8248bfSmrg    </listitem>
4230f8248bfSmrg  </varlistentry>
4240f8248bfSmrg  <varlistentry>
4250f8248bfSmrg    <term>
4260f8248bfSmrg      <parameter>percent</parameter>
4270f8248bfSmrg    </term>
4280f8248bfSmrg    <listitem>
4290f8248bfSmrg      <para>
4300f8248bfSmrg        bell volume, from &minus;100 to 100 inclusive
4310f8248bfSmrg      </para>
4320f8248bfSmrg    </listitem>
4330f8248bfSmrg  </varlistentry>
4340f8248bfSmrg  <varlistentry>
4350f8248bfSmrg    <term>
4360f8248bfSmrg      <parameter>name</parameter>
4370f8248bfSmrg    </term>
4380f8248bfSmrg    <listitem>
4390f8248bfSmrg      <para>
4400f8248bfSmrg        a name for the bell, or <symbol>NULL</symbol>
4410f8248bfSmrg      </para>
4420f8248bfSmrg    </listitem>
4430f8248bfSmrg  </varlistentry>
4440f8248bfSmrg</variablelist>
445e9fcaa8aSmrg
446e9fcaa8aSmrg<para>
4470f8248bfSmrgSet
4480f8248bfSmrg<parameter>percent</parameter>
4490f8248bfSmrgto be the volume relative to the base volume for the keyboard as described for
4500f8248bfSmrg<function>XBell</function>.
451e9fcaa8aSmrg</para>
452e9fcaa8aSmrg
453e9fcaa8aSmrg<para>
4540f8248bfSmrgNote that
4550f8248bfSmrg<parameter>bell_class</parameter>
4560f8248bfSmrgand
4570f8248bfSmrg<parameter>bell_id</parameter>
4580f8248bfSmrgindicate the bell to physically ring.
4590f8248bfSmrg<parameter>name</parameter>
4600f8248bfSmrgis simply an arbitrary moniker for the client application’s use.
461e9fcaa8aSmrg</para>
462e9fcaa8aSmrg
463e9fcaa8aSmrg<para>
464e9fcaa8aSmrgTo determine the current feedback settings of an extension input device, use
4650f8248bfSmrg<function>XGetFeedbackControl</function>.
4660f8248bfSmrgSee <olink targetdoc='inputlib' targetptr='Controlling_Device_Feedback'>the
4670f8248bfSmrgX input extension documentation</olink> for more information on
4680f8248bfSmrg<function>XGetFeedbackControl</function>
4690f8248bfSmrgand related data structures.
470e9fcaa8aSmrg</para>
471e9fcaa8aSmrg
472e9fcaa8aSmrg<para>
4730f8248bfSmrgIf a compatible keyboard extension is not present in the X server,
4740f8248bfSmrg<function>XkbDeviceBell</function>
4750f8248bfSmrgimmediately returns
4760f8248bfSmrg<symbol>False</symbol>.
4770f8248bfSmrgOtherwise,
4780f8248bfSmrg<function>XkbDeviceBell</function>
479e9fcaa8aSmrgrings the bell as specified for the display and keyboard device and returns
4800f8248bfSmrg<symbol>True</symbol>.
4810f8248bfSmrgIf you have disabled the audible bell, the server does not ring the system
4820f8248bfSmrgbell, although it does generate a
4830f8248bfSmrg<symbol>XkbBellNotify</symbol>
4840f8248bfSmrgevent.
485e9fcaa8aSmrg</para>
486e9fcaa8aSmrg
487e9fcaa8aSmrg<para>
4880f8248bfSmrgYou can call
4890f8248bfSmrg<function>XkbDeviceBell</function>
4900f8248bfSmrgwithout first initializing the keyboard extension.
491e9fcaa8aSmrg</para>
492e9fcaa8aSmrg
493e9fcaa8aSmrg<para>
494e9fcaa8aSmrgAs a convenience function, Xkb provides a function to ring the bell on the
4950f8248bfSmrgdefault keyboard:
4960f8248bfSmrg<function>XkbBell</function>.
497e9fcaa8aSmrg</para>
498e9fcaa8aSmrg
4990f8248bfSmrg<indexterm significance="preferred" zone="XkbBell"><primary><function>XkbBell</function></primary></indexterm>
5000f8248bfSmrg<funcsynopsis id="XkbBell">
5010f8248bfSmrg  <funcprototype>
5020f8248bfSmrg    <funcdef>Bool <function>XkbBell</function></funcdef>
5030f8248bfSmrg<!-- (
5040f8248bfSmrg<parameter>display, window, percent, name</parameter>
5050f8248bfSmrg) -->
5060f8248bfSmrg
5070f8248bfSmrg    <paramdef>Display *<parameter>display</parameter></paramdef>
5080f8248bfSmrg    <paramdef>Window <parameter>window</parameter></paramdef>
5090f8248bfSmrg    <paramdef>int <parameter>percent</parameter></paramdef>
5100f8248bfSmrg    <paramdef>Atom <parameter>name</parameter></paramdef>
5110f8248bfSmrg  </funcprototype>
5120f8248bfSmrg</funcsynopsis>
5130f8248bfSmrg<variablelist>
5140f8248bfSmrg  <varlistentry>
5150f8248bfSmrg    <term>
5160f8248bfSmrg      <parameter>display</parameter>
5170f8248bfSmrg    </term>
5180f8248bfSmrg    <listitem>
5190f8248bfSmrg      <para>
5200f8248bfSmrg        connection to the X server
5210f8248bfSmrg      </para>
5220f8248bfSmrg    </listitem>
5230f8248bfSmrg  </varlistentry>
5240f8248bfSmrg  <varlistentry>
5250f8248bfSmrg    <term>
5260f8248bfSmrg      <parameter>window</parameter>
5270f8248bfSmrg    </term>
5280f8248bfSmrg    <listitem>
5290f8248bfSmrg      <para>
5300f8248bfSmrg        event window, or None
5310f8248bfSmrg      </para>
5320f8248bfSmrg    </listitem>
5330f8248bfSmrg  </varlistentry>
5340f8248bfSmrg  <varlistentry>
5350f8248bfSmrg    <term>
5360f8248bfSmrg      <parameter>percent</parameter>
5370f8248bfSmrg    </term>
5380f8248bfSmrg    <listitem>
5390f8248bfSmrg      <para>
5400f8248bfSmrg        relative volume, which can range from &minus;100 to 100 inclusive
5410f8248bfSmrg      </para>
5420f8248bfSmrg    </listitem>
5430f8248bfSmrg  </varlistentry>
5440f8248bfSmrg  <varlistentry>
5450f8248bfSmrg    <term>
5460f8248bfSmrg      <parameter>name</parameter>
5470f8248bfSmrg    </term>
5480f8248bfSmrg    <listitem>
5490f8248bfSmrg      <para>
5500f8248bfSmrg        a bell name, or <symbol>NULL</symbol>
5510f8248bfSmrg      </para>
5520f8248bfSmrg    </listitem>
5530f8248bfSmrg  </varlistentry>
5540f8248bfSmrg</variablelist>
555e9fcaa8aSmrg
556e9fcaa8aSmrg<para>
5570f8248bfSmrgIf a compatible keyboard extension isn’t present in the X server,
5580f8248bfSmrg<function>XkbBell</function>
5590f8248bfSmrgcalls
5600f8248bfSmrg<function>XBell</function>
5610f8248bfSmrgwith the specified
5620f8248bfSmrg<parameter>display</parameter>
5630f8248bfSmrgand
5640f8248bfSmrg<parameter>percent</parameter>,
5650f8248bfSmrgand returns
5660f8248bfSmrg<symbol>False</symbol>.
5670f8248bfSmrgOtherwise,
5680f8248bfSmrg<function>XkbBell</function>
5690f8248bfSmrgcalls
5700f8248bfSmrg<function>XkbDeviceBell</function>
5710f8248bfSmrgwith the specified
5720f8248bfSmrg<parameter>display</parameter>,
5730f8248bfSmrg<parameter>window</parameter>,
5740f8248bfSmrg<parameter>percent</parameter>,
5750f8248bfSmrgand
5760f8248bfSmrg<parameter>name</parameter>,
5770f8248bfSmrga
5780f8248bfSmrg<structfield>device_spec</structfield>
5790f8248bfSmrgof
5800f8248bfSmrg<symbol>XkbUseCoreKbd</symbol>,
5810f8248bfSmrga
5820f8248bfSmrg<structfield>bell_class</structfield>
5830f8248bfSmrgof
5840f8248bfSmrg<symbol>XkbDfltXIClass</symbol>,
5850f8248bfSmrgand a
5860f8248bfSmrg<structfield>bell_id</structfield>
5870f8248bfSmrgof
5880f8248bfSmrg<symbol>XkbDfltXIId</symbol>,
5890f8248bfSmrgand returns
5900f8248bfSmrg<symbol>True</symbol>.
591e9fcaa8aSmrg</para>
592e9fcaa8aSmrg
593e9fcaa8aSmrg<para>
594e9fcaa8aSmrgIf you have disabled the audible bell, the server does not ring the system
5950f8248bfSmrgbell, although it does generate a
5960f8248bfSmrg<symbol>XkbBellNotify</symbol>
5970f8248bfSmrgevent.
598e9fcaa8aSmrg</para>
599e9fcaa8aSmrg
600e9fcaa8aSmrg<para>
6010f8248bfSmrgYou can call
6020f8248bfSmrg<function>XkbBell</function>
6030f8248bfSmrgwithout first initializing the keyboard extension.
604e9fcaa8aSmrg</para>
605e9fcaa8aSmrg
606e9fcaa8aSmrg</sect2>
607eb411b4bSmrg<sect2 id='Generating_Named_Bell_Events'>
608e9fcaa8aSmrg<title>Generating Named Bell Events</title>
609e9fcaa8aSmrg
610e9fcaa8aSmrg<para>
611e9fcaa8aSmrgUsing Xkb, you can also generate a named bell event that does not ring any
612e9fcaa8aSmrgbell. This allows you to do things such as generate events when your
613e9fcaa8aSmrgapplication starts.
614e9fcaa8aSmrg</para>
615e9fcaa8aSmrg
616e9fcaa8aSmrg<para>
617e9fcaa8aSmrgFor example, if an audio client listens for these types of bells, it can
6180f8248bfSmrgproduce a <quote>whoosh</quote> sound when it receives a named bell event to indicate a
619e9fcaa8aSmrgclient just started. In this manner, applications can generate start-up
620e9fcaa8aSmrgfeedback and not worry about producing annoying beeps if an audio server is not
621e9fcaa8aSmrgrunning.
622e9fcaa8aSmrg</para>
623e9fcaa8aSmrg
624e9fcaa8aSmrg
625e9fcaa8aSmrg<para>
626e9fcaa8aSmrgTo cause a bell event for an X input extension device or for the keyboard,
6270f8248bfSmrgwithout ringing the corresponding bell, use
6280f8248bfSmrg<function>XkbDeviceBellEvent</function>.
629e9fcaa8aSmrg</para>
630e9fcaa8aSmrg
6310f8248bfSmrg<indexterm significance="preferred" zone="XkbDeviceBellEvent"><primary><function>XkbDeviceBellEvent</function></primary></indexterm>
6320f8248bfSmrg<funcsynopsis id="XkbDeviceBellEvent">
6330f8248bfSmrg  <funcprototype>
6340f8248bfSmrg    <funcdef>Bool <function>XkbDeviceBellEvent</function></funcdef>
6350f8248bfSmrg<!-- (
6360f8248bfSmrg<parameter>display, window, device_spec, bell_class, bell_id, percent, name</parameter>
6370f8248bfSmrg) -->
6380f8248bfSmrg
6390f8248bfSmrg    <paramdef>Display *<parameter>display</parameter></paramdef>
6400f8248bfSmrg    <paramdef>Window <parameter>window</parameter></paramdef>
6410f8248bfSmrg    <paramdef>unsigned int <parameter>device_spec</parameter></paramdef>
6420f8248bfSmrg    <paramdef>unsigned int <parameter>bell_class</parameter></paramdef>
6430f8248bfSmrg    <paramdef>unsigned int <parameter>bell_id</parameter></paramdef>
6440f8248bfSmrg    <paramdef>int <parameter>percent</parameter></paramdef>
6450f8248bfSmrg    <paramdef>Atom <parameter>name</parameter></paramdef>
6460f8248bfSmrg  </funcprototype>
6470f8248bfSmrg</funcsynopsis>
6480f8248bfSmrg<variablelist>
6490f8248bfSmrg  <varlistentry>
6500f8248bfSmrg    <term>
6510f8248bfSmrg      <parameter>display</parameter>
6520f8248bfSmrg    </term>
6530f8248bfSmrg    <listitem>
6540f8248bfSmrg      <para>
6550f8248bfSmrg        connection to the X server
6560f8248bfSmrg      </para>
6570f8248bfSmrg    </listitem>
6580f8248bfSmrg  </varlistentry>
6590f8248bfSmrg  <varlistentry>
6600f8248bfSmrg    <term>
6610f8248bfSmrg      <parameter>window</parameter>
6620f8248bfSmrg    </term>
6630f8248bfSmrg    <listitem>
6640f8248bfSmrg      <para>
6650f8248bfSmrg        event window, or None
6660f8248bfSmrg      </para>
6670f8248bfSmrg    </listitem>
6680f8248bfSmrg  </varlistentry>
6690f8248bfSmrg  <varlistentry>
6700f8248bfSmrg    <term>
6710f8248bfSmrg      <parameter>device_spec</parameter>
6720f8248bfSmrg    </term>
6730f8248bfSmrg    <listitem>
6740f8248bfSmrg      <para>
6750f8248bfSmrg        device ID, or <symbol>XkbUseCoreKbd</symbol>
6760f8248bfSmrg      </para>
6770f8248bfSmrg    </listitem>
6780f8248bfSmrg  </varlistentry>
6790f8248bfSmrg  <varlistentry>
6800f8248bfSmrg    <term>
6810f8248bfSmrg      <parameter>bell_class</parameter>
6820f8248bfSmrg    </term>
6830f8248bfSmrg    <listitem>
6840f8248bfSmrg      <para>
6850f8248bfSmrg        input extension bell class for the event
6860f8248bfSmrg      </para>
6870f8248bfSmrg    </listitem>
6880f8248bfSmrg  </varlistentry>
6890f8248bfSmrg  <varlistentry>
6900f8248bfSmrg    <term>
6910f8248bfSmrg      <parameter>bell_id</parameter>
6920f8248bfSmrg    </term>
6930f8248bfSmrg    <listitem>
6940f8248bfSmrg      <para>
6950f8248bfSmrg        input extension bell ID for the event
6960f8248bfSmrg      </para>
6970f8248bfSmrg    </listitem>
6980f8248bfSmrg  </varlistentry>
6990f8248bfSmrg  <varlistentry>
7000f8248bfSmrg    <term>
7010f8248bfSmrg      <parameter>percent</parameter>
7020f8248bfSmrg    </term>
7030f8248bfSmrg    <listitem>
7040f8248bfSmrg      <para>
7050f8248bfSmrg        volume for the bell, which can range from &minus;100 to 100 inclusive
7060f8248bfSmrg      </para>
7070f8248bfSmrg    </listitem>
7080f8248bfSmrg  </varlistentry>
7090f8248bfSmrg  <varlistentry>
7100f8248bfSmrg    <term>
7110f8248bfSmrg      <parameter>name</parameter>
7120f8248bfSmrg    </term>
7130f8248bfSmrg    <listitem>
7140f8248bfSmrg      <para>
7150f8248bfSmrg        a bell name, or <symbol>NULL</symbol>
7160f8248bfSmrg      </para>
7170f8248bfSmrg    </listitem>
7180f8248bfSmrg  </varlistentry>
7190f8248bfSmrg</variablelist>
720e9fcaa8aSmrg
721e9fcaa8aSmrg<para>
7220f8248bfSmrgIf a compatible keyboard extension isn’t present in the X server,
7230f8248bfSmrg<function>XkbDeviceBellEvent</function>
7240f8248bfSmrgimmediately returns
7250f8248bfSmrg<symbol>False</symbol>.
7260f8248bfSmrgOtherwise,
7270f8248bfSmrg<function>XkbDeviceBellEvent</function>
7280f8248bfSmrgcauses an
7290f8248bfSmrg<symbol>XkbBellNotify</symbol>
7300f8248bfSmrgevent to be sent to all interested clients and returns
7310f8248bfSmrg<symbol>True</symbol>.
7320f8248bfSmrgSet
7330f8248bfSmrg<parameter>percent</parameter>
7340f8248bfSmrgto be the volume relative to the base volume for the keyboard as described for
7350f8248bfSmrg<function>XBell</function>.
736e9fcaa8aSmrg</para>
737e9fcaa8aSmrg
738e9fcaa8aSmrg
739e9fcaa8aSmrg<para>
7400f8248bfSmrgIn addition,
7410f8248bfSmrg<function>XkbDeviceBellEvent</function>
7420f8248bfSmrgmay generate
7430f8248bfSmrg<type>Atom</type>
7440f8248bfSmrgprotocol errors as well as
7450f8248bfSmrg<symbol>XkbBellNotify</symbol>
7460f8248bfSmrgevents. You can call
7470f8248bfSmrg<function>XkbBell</function>
7480f8248bfSmrgwithout first initializing the keyboard extension.
749e9fcaa8aSmrg</para>
750e9fcaa8aSmrg
751e9fcaa8aSmrg
752e9fcaa8aSmrg<para>
753e9fcaa8aSmrgAs a convenience function, Xkb provides a function to cause a bell event for
7540f8248bfSmrgthe keyboard without ringing the bell:
7550f8248bfSmrg<function>XkbBellEvent</function>.
756e9fcaa8aSmrg</para>
757e9fcaa8aSmrg
758e9fcaa8aSmrg
7590f8248bfSmrg<indexterm significance="preferred" zone="XkbBellEvent"><primary><function>XkbBellEvent</function></primary></indexterm>
7600f8248bfSmrg<funcsynopsis id="XkbBellEvent">
7610f8248bfSmrg  <funcprototype>
7620f8248bfSmrg    <funcdef>Bool <function>XkbBellEvent</function></funcdef>
7630f8248bfSmrg<!-- (
7640f8248bfSmrg<parameter>display, window, percent, name</parameter>
7650f8248bfSmrg) -->
7660f8248bfSmrg
7670f8248bfSmrg    <paramdef>Display *<parameter>display</parameter></paramdef>
7680f8248bfSmrg    <paramdef>Window <parameter>window</parameter></paramdef>
7690f8248bfSmrg    <paramdef>int <parameter>percent</parameter></paramdef>
7700f8248bfSmrg    <paramdef>Atom <parameter>name</parameter></paramdef>
7710f8248bfSmrg  </funcprototype>
7720f8248bfSmrg</funcsynopsis>
7730f8248bfSmrg<variablelist>
7740f8248bfSmrg  <varlistentry>
7750f8248bfSmrg    <term>
7760f8248bfSmrg      <parameter>display</parameter>
7770f8248bfSmrg    </term>
7780f8248bfSmrg    <listitem>
7790f8248bfSmrg      <para>
7800f8248bfSmrg        connection to the X server
7810f8248bfSmrg      </para>
7820f8248bfSmrg    </listitem>
7830f8248bfSmrg  </varlistentry>
7840f8248bfSmrg  <varlistentry>
7850f8248bfSmrg    <term>
7860f8248bfSmrg      <parameter>window</parameter>
7870f8248bfSmrg    </term>
7880f8248bfSmrg    <listitem>
7890f8248bfSmrg      <para>
7900f8248bfSmrg        the event window, or None
7910f8248bfSmrg      </para>
7920f8248bfSmrg    </listitem>
7930f8248bfSmrg  </varlistentry>
7940f8248bfSmrg  <varlistentry>
7950f8248bfSmrg    <term>
7960f8248bfSmrg      <parameter>percent</parameter>
7970f8248bfSmrg    </term>
7980f8248bfSmrg    <listitem>
7990f8248bfSmrg      <para>
8000f8248bfSmrg        relative volume, which can range from &minus;100 to 100 inclusive
8010f8248bfSmrg      </para>
8020f8248bfSmrg    </listitem>
8030f8248bfSmrg  </varlistentry>
8040f8248bfSmrg  <varlistentry>
8050f8248bfSmrg    <term>
8060f8248bfSmrg      <parameter>name</parameter>
8070f8248bfSmrg    </term>
8080f8248bfSmrg    <listitem>
8090f8248bfSmrg      <para>
8100f8248bfSmrg        a bell name, or <symbol>NULL</symbol>
8110f8248bfSmrg      </para>
8120f8248bfSmrg    </listitem>
8130f8248bfSmrg  </varlistentry>
8140f8248bfSmrg</variablelist>
815e9fcaa8aSmrg
816e9fcaa8aSmrg<para>
8170f8248bfSmrgIf a compatible keyboard extension isn’t present in the X server,
8180f8248bfSmrg<function>XkbBellEvent</function>
8190f8248bfSmrgimmediately returns
8200f8248bfSmrg<symbol>False</symbol>.
8210f8248bfSmrgOtherwise,
8220f8248bfSmrg<function>XkbBellEvent</function>
8230f8248bfSmrgcalls
8240f8248bfSmrg<function>XkbDeviceBellEvent</function>
8250f8248bfSmrgwith the specified
8260f8248bfSmrg<parameter>display</parameter>,
8270f8248bfSmrg<parameter>window</parameter>,
8280f8248bfSmrg<parameter>percent</parameter>,
8290f8248bfSmrgand
8300f8248bfSmrg<parameter>name</parameter>,
8310f8248bfSmrga
8320f8248bfSmrg<structfield>device_spec</structfield>
8330f8248bfSmrgof
8340f8248bfSmrg<symbol>XkbUseCoreKbd</symbol>,
8350f8248bfSmrga
8360f8248bfSmrg<structfield>bell_class</structfield>
8370f8248bfSmrgof
8380f8248bfSmrg<symbol>XkbDfltXIClass</symbol>,
8390f8248bfSmrgand a
8400f8248bfSmrg<structfield>bell_id</structfield>
8410f8248bfSmrgof
8420f8248bfSmrg<symbol>XkbDfltXIId</symbol>,
8430f8248bfSmrgand returns what
8440f8248bfSmrg<function>XkbDeviceBellEvent</function>
8450f8248bfSmrgreturns.
846e9fcaa8aSmrg</para>
847e9fcaa8aSmrg
848e9fcaa8aSmrg<para>
8490f8248bfSmrg<function>XkbBellEvent</function>
8500f8248bfSmrggenerates a <symbol>XkbBellNotify</symbol>
851e9fcaa8aSmrgevent.
852e9fcaa8aSmrg</para>
853e9fcaa8aSmrg
854e9fcaa8aSmrg
855e9fcaa8aSmrg<para>
8560f8248bfSmrgYou can call
8570f8248bfSmrg<function>XkbBellEvent</function>
858e9fcaa8aSmrgwithout first initializing the keyboard extension.
859e9fcaa8aSmrg</para>
860e9fcaa8aSmrg
861e9fcaa8aSmrg</sect2>
862eb411b4bSmrg<sect2 id='Forcing_a_Server_Generated_Bell'>
863e9fcaa8aSmrg<title>Forcing a Server-Generated Bell</title>
864e9fcaa8aSmrg
865e9fcaa8aSmrg<para>
866e9fcaa8aSmrgTo ring the bell on any keyboard, overriding user preference settings for
8670f8248bfSmrgaudible bells, use <function>XkbForceDeviceBell</function>.
868e9fcaa8aSmrg</para>
869e9fcaa8aSmrg
8700f8248bfSmrg<indexterm significance="preferred" zone="XkbForceDeviceBell"><primary><function>XkbForceDeviceBell</function></primary></indexterm>
8710f8248bfSmrg<funcsynopsis id="XkbForceDeviceBell">
8720f8248bfSmrg  <funcprototype>
8730f8248bfSmrg    <funcdef>Bool <function>XkbForceDeviceBell</function></funcdef>
8740f8248bfSmrg<!-- (
8750f8248bfSmrg<parameter>display, window, device_spec, bell_class, bell_id, percent</parameter>
8760f8248bfSmrg) -->
8770f8248bfSmrg
8780f8248bfSmrg    <paramdef>Display *<parameter>display</parameter></paramdef>
8790f8248bfSmrg    <paramdef>Window <parameter>window</parameter></paramdef>
8800f8248bfSmrg    <paramdef>unsigned int <parameter>device_spec</parameter></paramdef>
8810f8248bfSmrg    <paramdef>unsigned int <parameter>bell_class</parameter></paramdef>
8820f8248bfSmrg    <paramdef>unsigned int <parameter>bell_id</parameter></paramdef>
8830f8248bfSmrg    <paramdef>int <parameter>percent</parameter></paramdef>
8840f8248bfSmrg  </funcprototype>
8850f8248bfSmrg</funcsynopsis>
8860f8248bfSmrg<variablelist>
8870f8248bfSmrg  <varlistentry>
8880f8248bfSmrg    <term>
8890f8248bfSmrg      <parameter>display</parameter>
8900f8248bfSmrg    </term>
8910f8248bfSmrg    <listitem>
8920f8248bfSmrg      <para>
8930f8248bfSmrg        connection to the X server
8940f8248bfSmrg      </para>
8950f8248bfSmrg    </listitem>
8960f8248bfSmrg  </varlistentry>
8970f8248bfSmrg  <varlistentry>
8980f8248bfSmrg    <term>
8990f8248bfSmrg      <parameter>window</parameter>
9000f8248bfSmrg    </term>
9010f8248bfSmrg    <listitem>
9020f8248bfSmrg      <para>
9030f8248bfSmrg        event window, or None
9040f8248bfSmrg      </para>
9050f8248bfSmrg    </listitem>
9060f8248bfSmrg  </varlistentry>
9070f8248bfSmrg  <varlistentry>
9080f8248bfSmrg    <term>
9090f8248bfSmrg      <parameter>device_spec</parameter>
9100f8248bfSmrg    </term>
9110f8248bfSmrg    <listitem>
9120f8248bfSmrg      <para>
9130f8248bfSmrg        device ID, or <symbol>XkbUseCoreKbd</symbol>
9140f8248bfSmrg      </para>
9150f8248bfSmrg    </listitem>
9160f8248bfSmrg  </varlistentry>
9170f8248bfSmrg  <varlistentry>
9180f8248bfSmrg    <term>
9190f8248bfSmrg      <parameter>bell_class</parameter>
9200f8248bfSmrg    </term>
9210f8248bfSmrg    <listitem>
9220f8248bfSmrg      <para>
9230f8248bfSmrg        input extension class of the bell to be rung
9240f8248bfSmrg      </para>
9250f8248bfSmrg    </listitem>
9260f8248bfSmrg  </varlistentry>
9270f8248bfSmrg  <varlistentry>
9280f8248bfSmrg    <term>
9290f8248bfSmrg      <parameter>bell_id</parameter>
9300f8248bfSmrg    </term>
9310f8248bfSmrg    <listitem>
9320f8248bfSmrg      <para>
9330f8248bfSmrg        input extension ID of the bell to be rung
9340f8248bfSmrg      </para>
9350f8248bfSmrg    </listitem>
9360f8248bfSmrg  </varlistentry>
9370f8248bfSmrg  <varlistentry>
9380f8248bfSmrg    <term>
9390f8248bfSmrg      <parameter>percent</parameter>
9400f8248bfSmrg    </term>
9410f8248bfSmrg    <listitem>
9420f8248bfSmrg      <para>
9430f8248bfSmrg        relative volume, which can range from &minus;100 to 100 inclusive
9440f8248bfSmrg      </para>
9450f8248bfSmrg    </listitem>
9460f8248bfSmrg  </varlistentry>
9470f8248bfSmrg</variablelist>
948e9fcaa8aSmrg
949e9fcaa8aSmrg<para>
9500f8248bfSmrgIf a compatible keyboard extension isn’t present in the X server,
9510f8248bfSmrg<function>XkbForceDeviceBell</function>
9520f8248bfSmrgimmediately returns
9530f8248bfSmrg<symbol>False</symbol>.
9540f8248bfSmrgOtherwise,
9550f8248bfSmrg<function>XkbForceDeviceBell</function>
956e9fcaa8aSmrgrings the bell as specified for the display and keyboard device and returns
9570f8248bfSmrg<symbol>True</symbol>.
9580f8248bfSmrgSet
9590f8248bfSmrg<parameter>percent</parameter>
9600f8248bfSmrgto be the volume relative to the base volume for the keyboard as described for
9610f8248bfSmrg<function>XBell</function>.
9620f8248bfSmrgThere is no
9630f8248bfSmrg<structfield>name</structfield>
9640f8248bfSmrgparameter because
9650f8248bfSmrg<function>XkbForceDeviceBell</function>
9660f8248bfSmrgdoes not cause an
9670f8248bfSmrg<symbol>XkbBellNotify</symbol>
9680f8248bfSmrgevent.
969e9fcaa8aSmrg</para>
970e9fcaa8aSmrg
971e9fcaa8aSmrg<para>
9720f8248bfSmrgYou can call
9730f8248bfSmrg<function>XkbBell</function>
9740f8248bfSmrgwithout first initializing the keyboard extension.
975e9fcaa8aSmrg</para>
976e9fcaa8aSmrg
977e9fcaa8aSmrg<para>
978e9fcaa8aSmrgTo ring the bell on the default keyboard, overriding user preference settings
9790f8248bfSmrgfor audible bells, use
9800f8248bfSmrg<function>XkbForceBell</function>.
981e9fcaa8aSmrg</para>
982e9fcaa8aSmrg
9830f8248bfSmrg<indexterm significance="preferred" zone="XkbForceBell"><primary><function>XkbForceBell</function></primary></indexterm>
9840f8248bfSmrg<funcsynopsis id="XkbForceBell">
9850f8248bfSmrg  <funcprototype>
9860f8248bfSmrg    <funcdef>Bool <function>XkbForceBell</function></funcdef>
9870f8248bfSmrg<!-- (
9880f8248bfSmrg<parameter>display, percent)</parameter> -->
9890f8248bfSmrg
9900f8248bfSmrg    <paramdef>Display *<parameter>display</parameter></paramdef>
9910f8248bfSmrg    <paramdef>int <parameter>percent</parameter></paramdef>
9920f8248bfSmrg  </funcprototype>
9930f8248bfSmrg</funcsynopsis>
9940f8248bfSmrg<variablelist>
9950f8248bfSmrg  <varlistentry>
9960f8248bfSmrg    <term>
9970f8248bfSmrg      <parameter>display</parameter>
9980f8248bfSmrg    </term>
9990f8248bfSmrg    <listitem>
10000f8248bfSmrg      <para>
10010f8248bfSmrg        connection to the X server
10020f8248bfSmrg      </para>
10030f8248bfSmrg    </listitem>
10040f8248bfSmrg  </varlistentry>
10050f8248bfSmrg  <varlistentry>
10060f8248bfSmrg    <term>
10070f8248bfSmrg      <parameter>percent</parameter>
10080f8248bfSmrg    </term>
10090f8248bfSmrg    <listitem>
10100f8248bfSmrg      <para>
10110f8248bfSmrg        volume for the bell, which can range from &minus;100 to 100 inclusive
10120f8248bfSmrg      </para>
10130f8248bfSmrg    </listitem>
10140f8248bfSmrg  </varlistentry>
10150f8248bfSmrg</variablelist>
1016e9fcaa8aSmrg
1017e9fcaa8aSmrg<para>
10180f8248bfSmrgIf a compatible keyboard extension isn’t present in the X server,
10190f8248bfSmrg<function>XkbForceBell</function>
10200f8248bfSmrgcalls
10210f8248bfSmrg<function>XBell</function>
10220f8248bfSmrgwith the specified
10230f8248bfSmrg<parameter>display</parameter>
10240f8248bfSmrgand
10250f8248bfSmrg<parameter>percent</parameter>
10260f8248bfSmrgand returns
10270f8248bfSmrg<symbol>False</symbol>.
10280f8248bfSmrgOtherwise,
10290f8248bfSmrg<function>XkbForceBell</function>
10300f8248bfSmrgcalls
10310f8248bfSmrg<function>XkbForceDeviceBell</function>
10320f8248bfSmrgwith the specified
10330f8248bfSmrg<parameter>display</parameter>
10340f8248bfSmrgand
10350f8248bfSmrg<parameter>percent</parameter>,
10360f8248bfSmrg<structfield>device_spec</structfield>
10370f8248bfSmrg=
10380f8248bfSmrg<symbol>XkbUseCoreKbd</symbol>,
10390f8248bfSmrg<structfield>bell_class</structfield>
10400f8248bfSmrg=
10410f8248bfSmrg<symbol>XkbDfltXIClass</symbol>,
10420f8248bfSmrg<structfield>bell_id</structfield>
10430f8248bfSmrg=
10440f8248bfSmrg<symbol>XkbDfltXIId</symbol>,
10450f8248bfSmrg<structfield>window</structfield>
10460f8248bfSmrg= None, and
10470f8248bfSmrg<structfield>name</structfield>
10480f8248bfSmrg=
10490f8248bfSmrg<symbol>NULL</symbol>,
10500f8248bfSmrgand returns what
10510f8248bfSmrg<function>XkbForceDeviceBell</function>
10520f8248bfSmrgreturns.
1053e9fcaa8aSmrg</para>
1054e9fcaa8aSmrg
1055e9fcaa8aSmrg<para>
10560f8248bfSmrg<function>XkbForceBell</function>
10570f8248bfSmrgdoes not cause an
10580f8248bfSmrg<symbol>XkbBellNotify</symbol>
10590f8248bfSmrgevent.
1060e9fcaa8aSmrg</para>
1061e9fcaa8aSmrg
1062e9fcaa8aSmrg<para>
10630f8248bfSmrgYou can call
10640f8248bfSmrg<function>XkbBell</function>
10650f8248bfSmrgwithout first initializing the keyboard extension.
1066e9fcaa8aSmrg</para>
1067e9fcaa8aSmrg
1068e9fcaa8aSmrg</sect2>
1069e9fcaa8aSmrg</sect1>
1070eb411b4bSmrg<sect1 id='Detecting_Bells'>
1071e9fcaa8aSmrg<title>Detecting Bells</title>
1072e9fcaa8aSmrg
1073e9fcaa8aSmrg<para>
10740f8248bfSmrgXkb generates
10750f8248bfSmrg<symbol>XkbBellNotify</symbol>
10760f8248bfSmrgevents for all bells except for those resulting from calls to
10770f8248bfSmrg<function>XkbForceDeviceBell</function>
10780f8248bfSmrgand
10790f8248bfSmrg<function>XkbForceBell</function>.
10800f8248bfSmrgTo receive
10810f8248bfSmrg<symbol>XkbBellNotify</symbol>
10820f8248bfSmrgevents under all possible conditions, pass
10830f8248bfSmrg<symbol>XkbBellNotifyMask</symbol>
10840f8248bfSmrgin both the
10850f8248bfSmrg<parameter>bits_to_change</parameter>
10860f8248bfSmrgand
10870f8248bfSmrg<parameter>values_for_bits</parameter>
10880f8248bfSmrgparameters to
10890f8248bfSmrg<function>XkbSelectEvents</function>
10900f8248bfSmrg(see <link linkend="Selecting_Xkb_Events">section 4.3</link>).
1091e9fcaa8aSmrg</para>
1092e9fcaa8aSmrg
1093e9fcaa8aSmrg<para>
10940f8248bfSmrgThe
10950f8248bfSmrg<symbol>XkbBellNotify</symbol>
10960f8248bfSmrgevent has no event details. It is either selected or it is not. However, you
10970f8248bfSmrgcan call
10980f8248bfSmrg<function>XkbSelectEventDetails</function>
10990f8248bfSmrgusing
11000f8248bfSmrg<symbol>XkbBellNotify</symbol>
11010f8248bfSmrgas the
11020f8248bfSmrg<structfield>event_type</structfield>
11030f8248bfSmrgand specifying
11040f8248bfSmrg<symbol>XkbAllBellEventsMask</symbol>
11050f8248bfSmrgin
11060f8248bfSmrg<parameter>bits_to_change</parameter>
11070f8248bfSmrgand
11080f8248bfSmrg<parameter>values_for_bits</parameter>.
11090f8248bfSmrgThis has the same effect as a call to
11100f8248bfSmrg<function>XkbSelectEvents</function>.
1111e9fcaa8aSmrg</para>
1112e9fcaa8aSmrg
1113e9fcaa8aSmrg<para>
11140f8248bfSmrgThe structure for the
11150f8248bfSmrg<symbol>XkbBellNotify</symbol>
11160f8248bfSmrgevent type contains:
1117e9fcaa8aSmrg
11180f8248bfSmrg<programlisting>
1119e9fcaa8aSmrgtypedef struct _XkbBellNotify {
11200f8248bfSmrg    int             type;        /* Xkb extension base event code */
11210f8248bfSmrg    unsigned long   serial;      /* X server serial number for event */
11220f8248bfSmrg    Bool            send_event;  /* <symbol>True</symbol> &rArr; synthetically generated */
11230f8248bfSmrg    Display *       display;     /* server connection where event generated */
11240f8248bfSmrg    Time            time;        /* server time when event generated */
11250f8248bfSmrg    int             xkb_type;    /* <symbol>XkbBellNotify</symbol> */
11260f8248bfSmrg    unsigned int    device;      /* Xkb device ID, will not be <symbol>XkbUseCoreKbd</symbol> */
11270f8248bfSmrg    int             percent;     /* requested volume as % of max */
11280f8248bfSmrg    int             pitch;       /* requested pitch in Hz */
11290f8248bfSmrg    int             duration;    /* requested duration in microseconds */
11300f8248bfSmrg    unsigned int    bell_class;  /* X input extension feedback class */
11310f8248bfSmrg    unsigned int    bell_id;     /* X input extension feedback ID */
11320f8248bfSmrg    Atom            name;        /* "name" of requested bell */
11330f8248bfSmrg    Window          window;      /* window associated with event */
11340f8248bfSmrg    Bool            event_only;  /* <symbol>False</symbol> &rarr; the server did not produce a beep */
11350f8248bfSmrg} <structname>XkbBellNotifyEvent</structname>;
1136e9fcaa8aSmrg</programlisting></para>
1137e9fcaa8aSmrg
1138e9fcaa8aSmrg<para>
1139e9fcaa8aSmrgIf your application needs to generate visual bell feedback on the screen when
11400f8248bfSmrgit receives a bell event, use the window ID in the
11410f8248bfSmrg<structname>XkbBellNotifyEvent</structname>,
11420f8248bfSmrgif present.
1143e9fcaa8aSmrg</para>
1144e9fcaa8aSmrg
1145e9fcaa8aSmrg</sect1>
1146e9fcaa8aSmrg</chapter>
1147