summaryrefslogtreecommitdiff
path: root/specs/kbproto/ch15.xml
diff options
context:
space:
mode:
Diffstat (limited to 'specs/kbproto/ch15.xml')
-rw-r--r--specs/kbproto/ch15.xml233
1 files changed, 233 insertions, 0 deletions
diff --git a/specs/kbproto/ch15.xml b/specs/kbproto/ch15.xml
new file mode 100644
index 0000000..d3e47d0
--- /dev/null
+++ b/specs/kbproto/ch15.xml
@@ -0,0 +1,233 @@
+<chapter id='Interactions_Between_XKB_and_the_X_Input_Extension'>
+<title>Interactions Between XKB and the X Input Extension</title>
+
+<para>
+All XKB interactions with the input extension are optional; implementors are
+free to restrict the effects of the X Keyboard Extension to the core keyboard
+device. The <emphasis>
+XkbGetExtensionDeviceInfo</emphasis>
+ request reports whether or not an XKB implementation supports a particular
+capability for input extension devices.
+</para>
+
+
+<para>
+XKB recognizes the following interactions with the X Input Extension:
+</para>
+
+<informaltable frame='topbot'>
+<?dbfo keep-together="always" ?>
+<tgroup cols='2' align='left' colsep='0' rowsep='0'>
+<colspec colname='c1' colwidth='1.0*'/>
+<colspec colname='c2' colwidth='3.0*'/>
+<thead>
+ <row rowsep='1'>
+ <entry>Name</entry>
+ <entry>Capability</entry>
+ </row>
+</thead>
+<tbody>
+ <row>
+ <entry>XI_Keyboards</entry>
+ <entry>If set, applications can use all XKB requests and events with
+extension keyboards.</entry>
+ </row>
+ <row>
+ <entry>XI_ButtonActions</entry>
+ <entry>If set, clients can assign key actions to buttons, even on input
+extension devices that are not keyboards.</entry>
+ </row>
+ <row>
+ <entry>XI_IndicatorNames</entry>
+ <entry>If set, clients can assign names to indicators on non-keyboard
+extension devices.</entry>
+ </row>
+ <row>
+ <entry>XI_IndicatorMaps</entry>
+ <entry>If set, clients can assign indicator maps to indicators on
+non-keyboard extension devices. </entry>
+ </row>
+ <row>
+ <entry>XI_IndicatorState</entry>
+ <entry>If set, clients can change the state of device indicators using the
+<emphasis>
+XkbSetExtensionDeviceInfo</emphasis>
+ request.</entry>
+ </row>
+</tbody>
+</tgroup>
+</informaltable>
+
+<para>
+Attempts to use an XKB feature with an extension device fail with a <emphasis>
+Keyboard</emphasis>
+ error if the server does not support the <emphasis>
+XkbXI_Keyboards</emphasis>
+ optional feature. If a capability particular capability other than <emphasis>
+XkbXI_Keyboards</emphasis>
+ is not supported, attempts to use it fail silently. The replies for most
+requests that can use one of the other optional features include a field to
+report whether or not the request was successful, but such requests do not
+cause an error condition.
+</para>
+
+
+<para>
+Clients can also request an <emphasis>
+XkbExtensionDeviceNotify</emphasis>
+ event. This event notifies interested clients of changes to any of the
+supported XKB features for extension devices, or if a request from the client
+that is receiving the event attempted to use an unsupported feature.
+</para>
+
+<sect1 id='Using_XKB_Functions_with_Input_Extension_Keyboards'>
+<title>Using XKB Functions with Input Extension Keyboards</title>
+
+<para>
+All XKB requests and events include a device identifier which can refer to an
+input extension <emphasis>
+KeyClass</emphasis>
+ device, if the implementation allows XKB to control extension devices. If the
+implementation does not support XKB manipulation of extension devices, the
+device identifier is ignored but it must be either <emphasis>
+0</emphasis>
+ or <emphasis>
+UseCoreKbd</emphasis>
+.
+</para>
+
+
+<para>
+Implementations which do not support the use of XKB functions with extension
+keyboards must not set the <emphasis>
+XkbXI_Keyboards</emphasis>
+ flag. Attempts to use XKB features on an extension keyboard with an
+implementation that does not support this feature yield a <emphasis>
+Keyboard</emphasis>
+ error.
+</para>
+
+
+</sect1>
+<sect1 id='Pointer_and_Device_Button_Actions'>
+<title>Pointer and Device Button Actions</title>
+
+<para>
+The XKB extension optionally allows clients to assign any key action (see
+<link linkend='Key_Actions'>Key Actions</link>) to core
+pointer or input extension device buttons. This makes it possible to control
+the keyboard or generate keyboard key events from extension devices or from the
+core pointer.
+</para>
+
+
+<para>
+XKB implementations are required to support actions for the buttons of the core
+pointer device, but support for actions on extension devices is optional.
+Implementations which do not support button actions for extension devices must
+not set the <emphasis>
+XkbXI_ButtonActions</emphasis>
+ flag.
+</para>
+
+
+<para>
+Attempts to query or assign button actions with an implementation that does not
+support this feature report failure in the request reply and might cause the
+server to send an <emphasis>
+XkbExtensionDeviceNotify</emphasis>
+ event to the client which issued the request that failed. Such requests never
+cause an error condition.
+</para>
+
+
+</sect1>
+<sect1 id='Indicator_Maps_for_Extension_Devices'>
+<title>Indicator Maps for Extension Devices</title>
+
+<para>
+The XKB extension allows applications to assign indicator maps to the
+indicators of non-keyboard extension devices. If supported, maps can be
+assigned to all extension device indicators, whether they are part of a
+keyboard feedback or part of an indicator feedback.
+</para>
+
+
+<para>
+Implementations which do not support indicator maps for extension devices must
+not set the <emphasis>
+XkbXI_IndicatorMaps</emphasis>
+ flag.
+</para>
+
+
+<para>
+Attempts to query or assign indicator maps with an implementation that does not
+support this feature report failure in the request reply and might cause the
+server to send an <emphasis>
+XkbExtensionDeviceNotify</emphasis>
+ event to the client which issued the request that failed. Such requests never
+cause an error condition.
+</para>
+
+
+<para>
+If this feature is supported, the maps for the default indicators on the core
+keyboard device are visible both as extension indicators and as the core
+indicators. Changes made with <emphasis>
+XkbSetDeviceInfo</emphasis>
+ are visible via <emphasis>
+XkbGetIndicatorMap</emphasis>
+ and changes made with <emphasis>
+XkbSetIndicatorMap</emphasis>
+ are visible via <emphasis>
+XkbGetDeviceInfo</emphasis>
+.
+</para>
+
+
+</sect1>
+<sect1 id='Indicator_Names_for_Extension_Devices'>
+<title>Indicator Names for Extension Devices</title>
+
+<para>
+The XKB extension allows applications to assign symbolic names to the
+indicators of non-keyboard extension devices. If supported, symbolic names can
+be assigned to all extension device indicators, whether they are part of a
+keyboard feedback or part of an indicator feedback.
+</para>
+
+
+<para>
+Implementations which do not support indicator maps for extension devices must
+not set the <emphasis>
+XkbXI_IndicatorMaps</emphasis>
+ flag.
+</para>
+
+
+<para>
+Attempts to query or assign indicator names with an implementation that does
+not support this feature report failure in the request reply and might cause
+the server to send an <emphasis>
+XkbExtensionDeviceNotify</emphasis>
+ event to the client which issued the request that failed. Such requests never
+cause an error condition.
+</para>
+
+
+<para>
+If this feature is supported, the names for the default indicators on the core
+keyboard device are visible both as extension indicators and as the core
+indicators. Changes made with <emphasis>
+XkbSetDeviceInfo</emphasis>
+ are visible via <emphasis>
+XkbGetNames</emphasis>
+ and changes made with <emphasis>
+XkbSetNames</emphasis>
+ are visible via <emphasis>
+XkbGetDeviceInfo</emphasis>
+.
+</para>
+</sect1>
+</chapter>