9428 lines
222 KiB
XML
9428 lines
222 KiB
XML
|
||
<chapter id='XKB_Protocol_Requests'>
|
||
<title>XKB Protocol Requests</title>
|
||
|
||
<para>
|
||
This document uses the syntactic conventions and common types defined by the
|
||
specification of the core X protocol with a number of additions, which are
|
||
detailed below.
|
||
</para>
|
||
|
||
<sect1 id='Errors'>
|
||
<title>Errors</title>
|
||
|
||
<para>
|
||
If a client attempts to use any other XKB request except <emphasis>
|
||
XkbUseExtension</emphasis>
|
||
before the extension is properly initialized, XKB reports an <emphasis>
|
||
Access</emphasis>
|
||
error and ignores the request. XKB is properly initialized once <emphasis>
|
||
XkbUseExtension</emphasis>
|
||
reports that the client has asked for a supported or compatible version of the
|
||
extension.
|
||
</para>
|
||
|
||
|
||
<sect2 id='Keyboard_Errors'>
|
||
<title>Keyboard Errors</title>
|
||
|
||
<para>
|
||
In addition to all of the errors defined by the core protocol, the X Keyboard
|
||
Extension defines a single error, <emphasis>
|
||
Keyboard</emphasis>
|
||
, which indicates that some request specified an illegal device identifier or
|
||
an extension device that is not a member of an appropriate. Unless otherwise
|
||
noted, any request with an argument of type KB_DEVICESPEC can cause <emphasis>
|
||
Keyboard</emphasis>
|
||
errors if an illegal or inappropriate device is specified.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
When the extension reports a Keyboard error, the most significant byte of the
|
||
<emphasis>
|
||
resource_id</emphasis>
|
||
is a further refinement of the error cause, as defined in the table below. The
|
||
least significant byte contains the device, class, or feedback id as indicated:
|
||
</para>
|
||
|
||
<informaltable frame='topbot'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='4' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='2.0*'/>
|
||
<colspec colname='c2' colwidth='1.0*'/>
|
||
<colspec colname='c3' colwidth='3.0*'/>
|
||
<colspec colname='c4' colwidth='2.0*'/>
|
||
<thead>
|
||
<row rowsep='1'>
|
||
<entry>high-order byte</entry>
|
||
<entry>value</entry>
|
||
<entry>meaning</entry>
|
||
<entry>low-order byte</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>XkbErr_BadDevice</entry>
|
||
<entry>0xff</entry>
|
||
<entry>device not found</entry>
|
||
<entry>device id</entry>
|
||
</row>
|
||
<row>
|
||
<entry>XkbErr_BadClass</entry>
|
||
<entry>0xfe</entry>
|
||
<entry>device found, but is the wrong class</entry>
|
||
<entry>class id</entry>
|
||
</row>
|
||
<row>
|
||
<entry>XkbErr_BadId</entry>
|
||
<entry>0xfd</entry>
|
||
<entry>device found, class ok, but device does not have a feedback with the
|
||
indicated id</entry>
|
||
<entry>feedback id</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
</sect2>
|
||
<sect2 id='Side_Effects_of_Errors'>
|
||
<title>Side-Effects of Errors</title>
|
||
|
||
<para>
|
||
With the exception of <emphasis>
|
||
Alloc</emphasis>
|
||
or <emphasis>
|
||
Implementation</emphasis>
|
||
errors, which might result in an inconsistent internal state, no XKB request
|
||
that reports an error condition has any effect. Unless otherwise stated,
|
||
requests which update some aspect of the keyboard description will not apply
|
||
only part of a request — if part of a request fails, the whole thing is
|
||
ignored.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
</sect1>
|
||
<sect1 id='Common_Types'>
|
||
<title>Common Types</title>
|
||
|
||
<para>
|
||
The following types are used in the request and event definitions in subsequent
|
||
sections:
|
||
</para>
|
||
|
||
<informaltable frame='topbot'>
|
||
<?dbfo keep-together="auto" ?>
|
||
<tgroup cols='2' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<colspec colname='c2' colwidth='2.0*'/>
|
||
<thead>
|
||
<row rowsep='1'>
|
||
<entry>Name</entry>
|
||
<entry>Value</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>LISTofITEMs</entry>
|
||
<entry> The type LISTofITEMs is special. It is similar to the
|
||
LISTofVALUE defined by the core protocol, but the elements of a LISTofITEMs are
|
||
not necessarily all the same size. The use of a BITMASK to indicate which
|
||
members are present is optional for a LISTofITEMs — it is possible for the
|
||
set of elements to be derived from one or more fields of the request.</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_DEVICESPEC</entry>
|
||
<entry>8 bit unsigned integer, <emphasis>
|
||
UseCoreKbd, or UseCorePtr</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_LEDCLASSSPEC</entry>
|
||
<entry>{ <emphasis>
|
||
KbdFeedbackClass</emphasis>
|
||
, <emphasis>
|
||
LedFeedbackClass</emphasis>
|
||
, <emphasis>
|
||
DfltXIClass</emphasis>
|
||
, <emphasis>
|
||
AllXIClasses</emphasis>
|
||
, <emphasis>
|
||
XINone</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_BELLCLASSSPEC</entry>
|
||
<entry>{ <emphasis>
|
||
KbdFeedbackClass</emphasis>
|
||
, <emphasis>
|
||
BellFeedbackClass</emphasis>
|
||
, <emphasis>
|
||
DfltXIClass</emphasis>
|
||
, <emphasis>
|
||
AllXIClasses</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_IDSPEC</entry>
|
||
<entry>8 bit unsigned integer or <emphasis>
|
||
DfltXIId</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_VMODMASK</entry>
|
||
<entry> CARD16, each bit corresponds to a virtual modifier</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_GROUPMASK</entry>
|
||
<entry>{ <emphasis>
|
||
Group1</emphasis>
|
||
, <emphasis>
|
||
Group2</emphasis>
|
||
, <emphasis>
|
||
Group3</emphasis>
|
||
, <emphasis>
|
||
Group4</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_GROUPSWRAP</entry>
|
||
<entry>{ <emphasis>
|
||
WrapIntoRange</emphasis>
|
||
, <emphasis>
|
||
ClampIntoRange</emphasis>
|
||
, <emphasis>
|
||
RedirectIntoRange</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_GROUPINFO</entry>
|
||
<entry>{ groupsWrap: KB_GROUPSWRAP
|
||
redirectGroup: 1…4,
|
||
numGroups: 1…4 }</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_NKNDETAILSMASK</entry>
|
||
<entry>{ <emphasis>
|
||
NKN_Keycodes</emphasis>
|
||
, NKN_Geometry, <emphasis>
|
||
NKN_DeviceID</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_STATEMASK</entry>
|
||
<entry> KEYBUTMASK or KB_GROUPMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_STATEPARTMASK</entry>
|
||
<entry>{ <emphasis>
|
||
ModifierState</emphasis>
|
||
, <emphasis>
|
||
ModifierBase</emphasis>
|
||
, <emphasis>
|
||
ModifierLatch</emphasis>
|
||
, <emphasis>
|
||
ModifierLock</emphasis>
|
||
, <emphasis>
|
||
GroupState</emphasis>
|
||
, <emphasis>
|
||
GroupBase</emphasis>
|
||
, <emphasis>
|
||
GroupLatch</emphasis>
|
||
, <emphasis>
|
||
GroupLock</emphasis>
|
||
, <emphasis>
|
||
CompatState</emphasis>
|
||
, <emphasis>
|
||
GrabMods</emphasis>
|
||
, <emphasis>
|
||
CompatGrabMods</emphasis>
|
||
, <emphasis>
|
||
LookupMods</emphasis>
|
||
, <emphasis>
|
||
CompatLookupMods</emphasis>
|
||
, <emphasis>
|
||
PointerButtons</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_BOOLCTRLMASK</entry>
|
||
<entry>{ <emphasis>
|
||
RepeatKeys</emphasis>
|
||
, <emphasis>
|
||
SlowKeys</emphasis>
|
||
, <emphasis>
|
||
BounceKeys</emphasis>
|
||
, <emphasis>
|
||
StickyKeys</emphasis>
|
||
, <emphasis>
|
||
MouseKeys</emphasis>
|
||
, <emphasis>
|
||
MouseKeysAccel</emphasis>
|
||
, <emphasis>
|
||
AccessXKeys</emphasis>
|
||
, <emphasis>
|
||
AccessXTimeout</emphasis>
|
||
, <emphasis>
|
||
AccessXFeedback</emphasis>
|
||
, <emphasis>
|
||
AudibleBell</emphasis>
|
||
, <emphasis>
|
||
Overlay1</emphasis>
|
||
, <emphasis>
|
||
Overlay2</emphasis>
|
||
, <emphasis>
|
||
IgnoreGroupLock</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_CONTROLSMASK</entry>
|
||
<entry>{ <emphasis>
|
||
GroupsWrap, InternalMods</emphasis>
|
||
, <emphasis>
|
||
IgnoreLockMods</emphasis>
|
||
, <emphasis>
|
||
PerKeyRepeat</emphasis>
|
||
, <emphasis>
|
||
ControlsEnabled</emphasis>
|
||
} or KB_BOOLCTRLMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_MAPPARTMASK</entry>
|
||
<entry>{ <emphasis>
|
||
KeyTypes</emphasis>
|
||
, <emphasis>
|
||
KeySyms</emphasis>
|
||
, <emphasis>
|
||
ModifierMap</emphasis>
|
||
, <emphasis>
|
||
ExplicitComponents</emphasis>
|
||
, <emphasis>
|
||
KeyActions</emphasis>
|
||
, <emphasis>
|
||
KeyBehaviors</emphasis>
|
||
, <emphasis>
|
||
VirtualMods</emphasis>
|
||
, <emphasis>
|
||
VirtualModMap</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_CMDETAILMASK</entry>
|
||
<entry>{ <emphasis>
|
||
SymInterp</emphasis>
|
||
, <emphasis>
|
||
GroupCompat</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_NAMEDETAILMASK</entry>
|
||
<entry>{ <emphasis>
|
||
KeycodesName</emphasis>
|
||
, <emphasis>
|
||
GeometryName</emphasis>
|
||
, <emphasis>
|
||
SymbolsName</emphasis>
|
||
,
|
||
<emphasis>
|
||
PhysSymbolsName</emphasis>
|
||
, <emphasis>
|
||
TypesName</emphasis>
|
||
, <emphasis>
|
||
CompatName</emphasis>
|
||
, <emphasis>
|
||
KeyTypeNames</emphasis>
|
||
, <emphasis>
|
||
KTLevelNames</emphasis>
|
||
, <emphasis>
|
||
IndicatorNames</emphasis>
|
||
, <emphasis>
|
||
KeyNames</emphasis>
|
||
, <emphasis>
|
||
KeyAliases</emphasis>
|
||
, <emphasis>
|
||
VirtualModNames</emphasis>
|
||
, <emphasis>
|
||
GroupNames</emphasis>
|
||
, <emphasis>
|
||
RGNames</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_AXNDETAILMASK</entry>
|
||
<entry>{ <emphasis>
|
||
AXN_SKPress</emphasis>
|
||
, <emphasis>
|
||
AXN_SKAccept</emphasis>
|
||
, <emphasis>
|
||
AXN_SKReject</emphasis>
|
||
, <emphasis>
|
||
AXN_SKRelease, AXN_BKAccept, AXN_BKReject, AXN_AXKWarning </emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_AXSKOPTSMASK</entry>
|
||
<entry>{ <emphasis>
|
||
AX_TwoKeys</emphasis>
|
||
, <emphasis>
|
||
AX_LatchToLock</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_AXFBOPTSMASK</entry>
|
||
<entry>{ <emphasis>
|
||
AX_SKPressFB</emphasis>
|
||
, <emphasis>
|
||
AX_SKAcceptFB</emphasis>
|
||
, <emphasis>
|
||
AX_FeatureFB</emphasis>
|
||
, <emphasis>
|
||
AX_SlowWarnFB</emphasis>
|
||
, <emphasis>
|
||
AX_IndicatorFB</emphasis>
|
||
, <emphasis>
|
||
AX_StickyKeysFB</emphasis>
|
||
, <emphasis>
|
||
AX_SKReleaseFB</emphasis>
|
||
,<emphasis>
|
||
AX_SKRejectFB</emphasis>
|
||
, <emphasis>
|
||
AX_BKRejectFB</emphasis>
|
||
, <emphasis>
|
||
AX_DumbBellFB</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_AXOPTIONSMASK</entry>
|
||
<entry> KB_AXFBOPTSMASK or KB_AXSKOPTSMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_GBNDETAILMASK</entry>
|
||
<entry>{ <emphasis>
|
||
GBN_Types</emphasis>
|
||
, <emphasis>
|
||
GBN_CompatMap</emphasis>
|
||
, <emphasis>
|
||
GBN_ClientSymbols</emphasis>
|
||
, <emphasis>
|
||
GBN_ServerSymbols</emphasis>
|
||
, <emphasis>
|
||
GBN_IndicatorMap</emphasis>
|
||
, <emphasis>
|
||
GBN_KeyNames</emphasis>
|
||
, <emphasis>
|
||
GBN_Geometry</emphasis>
|
||
, <emphasis>
|
||
GBN_OtherNames</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_BELLDETAILMASK</entry>
|
||
<entry>{ <emphasis>
|
||
XkbAllBellNotifyEvents</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_MSGDETAILMASK</entry>
|
||
<entry>{ <emphasis>
|
||
XkbAllActionMessages</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_EVENTTYPE</entry>
|
||
<entry>{ <emphasis>
|
||
XkbNewKeyboardNotify</emphasis>
|
||
, <emphasis>
|
||
XkbMapNotify</emphasis>
|
||
, <emphasis>
|
||
XkbStateNotify</emphasis>
|
||
, <emphasis>
|
||
XkbControlsNotify</emphasis>
|
||
, <emphasis>
|
||
XkbIndicatorStateNotify</emphasis>
|
||
, <emphasis>
|
||
XkbIndicatorMapNotify</emphasis>
|
||
, <emphasis>
|
||
XkbNamesNotify</emphasis>
|
||
, <emphasis>
|
||
XkbCompatMapNotify</emphasis>
|
||
, <emphasis>
|
||
XkbBellNotify</emphasis>
|
||
, <emphasis>
|
||
XkbActionMessage</emphasis>
|
||
, <emphasis>
|
||
XkbAccessXNotify</emphasis>
|
||
, <emphasis>
|
||
XkbExtensionDeviceNotify</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_ACTION</entry>
|
||
<entry>[ type: CARD8
|
||
data: LISTofCARD8 ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_BEHAVIOR</entry>
|
||
<entry>[ type: CARD8, data: CARD 8 ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_MODDEF</entry>
|
||
<entry>[ mask: KEYMASK,
|
||
mods: KEYMASK,
|
||
vmods: KB_VMODMASK ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_KTMAPENTRY</entry>
|
||
<entry>[ active: BOOL,
|
||
level: CARD8,
|
||
mods: KB_MODDEF ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_KTSETMAPENTRY</entry>
|
||
<entry>[ level: CARD8,
|
||
mods: KB_MODDEF ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_KEYTYPE</entry>
|
||
<entry>[ mods: KB_MODDEF,
|
||
numLevels: CARD8,
|
||
map: LISTofKB_KTMAPENTRY,
|
||
preserve: LISTofKB_MODDEF ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_SETKEYTYPE</entry>
|
||
<entry>[ realMods: KEYMASK,
|
||
vmods: CARD16,
|
||
numLevels: CARD8,
|
||
map: LISTofKB_KTSETMAPENTRY,
|
||
preserve: LISTofKB_MODDEF ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_KEYSYMMAP</entry>
|
||
<entry>[ ktIndex: LISTofCARD8, width: CARD8
|
||
numGroups: 0…4,
|
||
groupsWrap: KB_GROUPSWRAP,
|
||
redirectGroup: 0…3,
|
||
syms: LISTofKEYSYM ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_KEYVMODMAP</entry>
|
||
<entry>[ key: KEYCODE, vmods: CARD16 ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_KEYMODMAP</entry>
|
||
<entry>[ key: KEYCODE, mods: KEYMASK ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_EXPLICITMASK</entry>
|
||
<entry>{ <emphasis>
|
||
ExplicitKeyType1</emphasis>
|
||
, <emphasis>
|
||
ExplicitKeyType2</emphasis>
|
||
, <emphasis>
|
||
ExplicitKeyType3</emphasis>
|
||
, <emphasis>
|
||
ExplicitKeyType4</emphasis>
|
||
, <emphasis>
|
||
ExplicitInterpret</emphasis>
|
||
, <emphasis>
|
||
ExplicitAutoRepeat</emphasis>
|
||
, <emphasis>
|
||
ExplicitBehavior</emphasis>
|
||
, <emphasis>
|
||
ExplicitVModMap</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_INDICATORMASK</entry>
|
||
<entry> CARD32, each bit corresponds to an indicator</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_IMFLAGS</entry>
|
||
<entry>{ <emphasis>
|
||
IM_NoExplicit</emphasis>
|
||
, <emphasis>
|
||
IM_NoAutomatic</emphasis>
|
||
, <emphasis>
|
||
IM_LEDDrivesKB</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_IMMODSWHICH</entry>
|
||
<entry>{ <emphasis>
|
||
IM_UseNone</emphasis>
|
||
, <emphasis>
|
||
IM_UseBase</emphasis>
|
||
, <emphasis>
|
||
IM_UseLatched</emphasis>
|
||
, <emphasis>
|
||
IM_UseLocked</emphasis>
|
||
, <emphasis>
|
||
IM_UseEffective</emphasis>
|
||
, <emphasis>
|
||
IM_UseCompat</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_IMGROUPSWHICH</entry>
|
||
<entry>{ <emphasis>
|
||
IM_UseNone</emphasis>
|
||
, <emphasis>
|
||
IM_UseBase</emphasis>
|
||
, <emphasis>
|
||
IM_UseLatched</emphasis>
|
||
, <emphasis>
|
||
IM_UseLocked</emphasis>
|
||
, <emphasis>
|
||
IM_UseEffective</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_INDICATORMAP</entry>
|
||
<entry>[ flags: CARD8,
|
||
mods: KB_MODDEF,
|
||
whichMods:
|
||
groups: KB_GROUPMASK,
|
||
whichGroups:
|
||
ctrls: KB_BOOLCTRLMASK ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_SYMINTERPMATCH</entry>
|
||
<entry>{ <emphasis>
|
||
SI_NoneOf</emphasis>
|
||
, <emphasis>
|
||
SI_AnyOfOrNone</emphasis>
|
||
, <emphasis>
|
||
SI_AnyOf</emphasis>
|
||
, <emphasis>
|
||
SI_AllOf</emphasis>
|
||
, <emphasis>
|
||
SI_Exactly</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_SYMINTERP</entry>
|
||
<entry>[ sym: KEYSYM,
|
||
mods; KEYMASK,
|
||
levelOneOnly: BOOL,
|
||
match: KB_SYMINTERPMATCH,
|
||
virtualMod: CARD8,
|
||
autoRepeat: BOOL,
|
||
lockingKey: BOOL ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_PCFMASK</entry>
|
||
<entry>{ <emphasis>
|
||
PCF_DetectableAutorepeat</emphasis>
|
||
, <emphasis>
|
||
PCF_GrabsUseXkbState</emphasis>
|
||
, <emphasis>
|
||
PCF_AutoResetControls</emphasis>
|
||
, <emphasis>
|
||
PCF_LookupStateWhenGrabbed</emphasis>
|
||
, <emphasis>
|
||
PCF_SendEventUsesXKBState</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_LCFLAGSMASK</entry>
|
||
<entry>{ <emphasis>
|
||
LC_Hidden</emphasis>
|
||
, <emphasis>
|
||
LC_Default</emphasis>
|
||
, <emphasis>
|
||
LC_Partial</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_LCSYMFLAGSMASK</entry>
|
||
<entry>{ <emphasis>
|
||
LC_AlphanumericKeys</emphasis>
|
||
, <emphasis>
|
||
LC_ModifierKeys</emphasis>
|
||
, <emphasis>
|
||
LC_KeypadKeys</emphasis>
|
||
, <emphasis>
|
||
LC_FunctionKeys</emphasis>
|
||
, <emphasis>
|
||
LC_AlternateGroup</emphasis>
|
||
}</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
These types are used by the <emphasis>
|
||
XkbGetGeometry</emphasis>
|
||
and <emphasis>
|
||
XkbSetGeometry</emphasis>
|
||
requests:
|
||
</para>
|
||
|
||
<informaltable frame='topbot'>
|
||
<?dbfo keep-together="auto" ?>
|
||
<tgroup cols='2' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<colspec colname='c2' colwidth='2.0*'/>
|
||
<thead>
|
||
<row rowsep='1'>
|
||
<entry>Name</entry>
|
||
<entry>Value</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>KB_PROPERTY</entry>
|
||
<entry>[ name, value: STRING8 ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_POINT</entry>
|
||
<entry>[ x, y: CARD16 ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_OUTLINE</entry>
|
||
<entry>[ cornerRadius: CARD8, points: LISTofKB_POINT ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_SHAPE</entry>
|
||
<entry>[ name: ATOM, outlines: LISTofKB_OUTLINE
|
||
primaryNdx, approxNdx: CARD8 ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_KEYNAME</entry>
|
||
<entry>[ name: LISTofCHAR ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_KEYALIAS</entry>
|
||
<entry>[ real: LISTofCHAR, alias: LISTofCHAR ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_KEY</entry>
|
||
<entry>[ name: KB_KEYNAME, gap: INT16,
|
||
shapeNdx, colorNdx: CARD8 ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_ROW</entry>
|
||
<entry>[ top, left: INT16, vertical: BOOL, keys LISTofKB_KEY ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_OVERLAYKEY</entry>
|
||
<entry>[ over, under: KB_KEYNAME ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_OVERLAYROW</entry>
|
||
<entry>[ rowUnder: CARD8, keys: LISTofKB_OVERLAYKEY ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_OVERLAY</entry>
|
||
<entry>[ sectionUnder: CARD8,
|
||
rows: LISTofKB_OVERLAYROW ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_SHAPEDOODAD</entry>
|
||
<entry>[ name: ATOM, priority: CARD8, top, left: INT16,
|
||
type: { SolidDoodad, OutlineDoodad },
|
||
angle: INT16, width, height: CARD16
|
||
colorNdx, shapeNdx: CARD8 ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_TEXTDOODAD</entry>
|
||
<entry>[ name: ATOM, priority: CARD8, top, left: INT16,
|
||
angle: INT16, width, height: CARD16,
|
||
colorNdx: CARD8, text: STRING8, font: STRING8 ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_INDICATORDOODAD</entry>
|
||
<entry>[ name: ATOM, priority: CARD8, top, left: INT16,
|
||
angle: INT16,
|
||
shapeNdx, onColorNdx, offColorNdx: CARD8 ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_LOGODOODAD</entry>
|
||
<entry>[ name: ATOM, priority: CARD8, top, left: INT16,
|
||
angle: INT16, colorNdx, shapeNdx: CARD8,
|
||
logoName: STRING8 ]</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_DOODAD</entry>
|
||
<entry>KB_SHAPEDOODAD, or KB_TEXTDOODAD, or KB_INDICATORDOODAD, or
|
||
KB_LOGODOODAD</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_SECTION</entry>
|
||
<entry>[ name: ATOM,
|
||
top, left, angle: INT16,
|
||
width, height: CARD16,
|
||
priority: CARD8,
|
||
rows: LISTofKB_ROW,
|
||
doodads: LISTofKB_DOODAD,
|
||
overlays: LISTofKB_OVERLAY ]</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
These types are used by <emphasis>
|
||
XkbGetDeviceInfo</emphasis>
|
||
and <emphasis>
|
||
XkbSetDeviceInfo</emphasis>
|
||
:
|
||
</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='2.0*'/>
|
||
<thead>
|
||
<row rowsep='1'>
|
||
<entry>Name</entry>
|
||
<entry>Value</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>KB_XIDEVFEATUREMASK</entry>
|
||
<entry>{ <emphasis>
|
||
XI_ButtonActions</emphasis>
|
||
, <emphasis>
|
||
XI_IndicatorNames</emphasis>
|
||
, <emphasis>
|
||
XI_IndicatorMaps</emphasis>
|
||
, <emphasis>
|
||
XI_IndicatorState</emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_XIFEATUREMASK</entry>
|
||
<entry>{ KB_XIDEVFEATURES or <emphasis>
|
||
XI_Keyboards</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_XIDETAILMASK</entry>
|
||
<entry> { KB_XIFEATURES or <emphasis>
|
||
XI_UnsupportedFeature</emphasis>
|
||
<emphasis>
|
||
}</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>KB_DEVICELEDINFO</entry>
|
||
<entry>[ ledClass: KB_LEDCLASSSPEC,
|
||
ledID: KB_IDSPEC,
|
||
physIndicators: CARD32,
|
||
state: CARD32,
|
||
names: LISTofATOM,
|
||
maps: LISTofKB_INDICATORMAP ]</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
</sect1>
|
||
<sect1 id='Requests'>
|
||
<title>Requests</title>
|
||
|
||
<para>
|
||
This section lists all of the requests supported by the X Keyboard Extension,
|
||
separated into categories of related requests.
|
||
</para>
|
||
|
||
|
||
<sect2 id='Initializing_the_X_Keyboard_Extension'>
|
||
<title>Initializing the X Keyboard Extension</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbUseExtension</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>wantedMajor, wantedMinor: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
supported: BOOL
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
serverMajor, serverMinor: CARD16</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request enables XKB extension capabilities for the client that issues the
|
||
request; the <emphasis>
|
||
wantedMajor</emphasis>
|
||
and <emphasis>
|
||
wantedMinor</emphasis>
|
||
fields specify the extension version in use by the requesting client. The
|
||
<emphasis>
|
||
supported</emphasis>
|
||
field is <emphasis>
|
||
True</emphasis>
|
||
if the server supports a compatible version, <emphasis>
|
||
False</emphasis>
|
||
otherwise. The <emphasis>
|
||
serverMajor</emphasis>
|
||
and <emphasis>
|
||
serverMinor</emphasis>
|
||
fields return the actual version supported by the server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Until a client explicitly and successfully requests the XKB extension, an XKB
|
||
capable server reports compatibility state in all core protocol events and
|
||
requests. Once a client asks for XKB extension semantics by issuing this
|
||
request, the server reports the extended XKB keyboard state in some core
|
||
protocol events and requests, as described in the overview section of this
|
||
specification.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Clients should issue an <emphasis>
|
||
XkbUseExtension</emphasis>
|
||
request before using any other extension requests.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Selecting_Events'>
|
||
<title>Selecting Events</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbSelectEvents</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
affectWhich, clear, selectAll: KB_EVENTTYPE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
affectMap, map: KB_MAPPARTMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
details: LISTofITEMs</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Match</emphasis>
|
||
, <emphasis>
|
||
Value</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request updates the event masks of the keyboard indicated by <emphasis>
|
||
deviceSpec</emphasis>
|
||
for this client. If <emphasis>
|
||
deviceSpec</emphasis>
|
||
specifies an illegal device, a <emphasis>
|
||
Keyboard</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
affectMap</emphasis>
|
||
and <emphasis>
|
||
map</emphasis>
|
||
fields specify changes to the event details mask for the <emphasis>
|
||
XkbMapNotify</emphasis>
|
||
event. If any map components are set in <emphasis>
|
||
map</emphasis>
|
||
but not in <emphasis>
|
||
affectMap</emphasis>
|
||
, a <emphasis>
|
||
Match</emphasis>
|
||
error results. Otherwise, any map components that are set in <emphasis>
|
||
affectMap</emphasis>
|
||
are set or cleared in the map notify details mask, depending on the value of
|
||
the corresponding field in <emphasis>
|
||
map</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
affectWhich</emphasis>
|
||
, <emphasis>
|
||
clear</emphasis>
|
||
, and <emphasis>
|
||
selectAll</emphasis>
|
||
fields specify changes to any other event details masks. If any event types
|
||
are set in both <emphasis>
|
||
clear</emphasis>
|
||
and <emphasis>
|
||
selectAll</emphasis>
|
||
, a <emphasis>
|
||
Match</emphasis>
|
||
error results; if any event types are specified in either <emphasis>
|
||
clear</emphasis>
|
||
or <emphasis>
|
||
selectAll</emphasis>
|
||
but not in <emphasis>
|
||
affectWhich</emphasis>
|
||
, a <emphasis>
|
||
Match</emphasis>
|
||
error results. Otherwise, the detail masks for any event types specified in
|
||
the <emphasis>
|
||
affectWhich</emphasis>
|
||
field of this request are changed as follows:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>If the event type is also set in <emphasis>
|
||
clear</emphasis>
|
||
, the detail mask for the corresponding event is set to <emphasis>
|
||
0</emphasis>
|
||
or <emphasis>
|
||
False</emphasis>
|
||
, as appropriate.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>If the event type is also set in <emphasis>
|
||
selectAll</emphasis>
|
||
, the detail mask for the corresponding event is set to include all legal
|
||
detail values for that type.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>If the event type is not set in either <emphasis>
|
||
clear</emphasis>
|
||
or <emphasis>
|
||
selectAll</emphasis>
|
||
, the corresponding element of <emphasis>
|
||
details</emphasis>
|
||
lists a set of explicit changes to the details mask for the event, as
|
||
described below.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
Each entry of the <emphasis>
|
||
details</emphasis>
|
||
list specifies changes to the event details mask for a single type of event,
|
||
and consists of an <emphasis>
|
||
affects</emphasis>
|
||
mask and a <emphasis>
|
||
values</emphasis>
|
||
mask. All details that are specified in <emphasis>
|
||
affects</emphasis>
|
||
are set to the corresponding value from <emphasis>
|
||
values</emphasis>
|
||
; if any details are listed in <emphasis>
|
||
values</emphasis>
|
||
but not in <emphasis>
|
||
affects</emphasis>
|
||
, a <emphasis>
|
||
Match</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The details list contains entries only for those event types, if any, that are
|
||
listed in the <emphasis>
|
||
affectWhich</emphasis>
|
||
mask and not in either <emphasis>
|
||
clear</emphasis>
|
||
or <emphasis>
|
||
selectAll</emphasis>
|
||
. When present, the items of the <emphasis>
|
||
details</emphasis>
|
||
list appear in the following order:
|
||
</para>
|
||
|
||
<informaltable frame='none'>
|
||
<?dbfo keep-together="auto" ?>
|
||
<tgroup cols='3' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<colspec colname='c2' colwidth='1.0*'/>
|
||
<colspec colname='c3' colwidth='1.0*'/>
|
||
<thead>
|
||
<row rowsep='1'>
|
||
<entry>Event Type</entry>
|
||
<entry>Legal Details</entry>
|
||
<entry>Type</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbNewKeyboardNotify</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
KB_NKNDETAILSMASK</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
CARD16</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbStateNotify</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
KB_STATEPARTMASK</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
CARD16</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbControlsNotify</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
KB_CONTROLMASK</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
CARD32</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbIndicatorMapNotify</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
KB_INDICATORMASK</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
CARD32</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbIndicatorStateNotify</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
KB_INDICATORMASK</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
CARD32</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbNamesNotify</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
KB_NAMEDETAILMASK</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
CARD16</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbCompatMapNotify</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
KB_CMDETAILMASK</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
CARD8</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbBellNotify</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
KB_BELLDETAILMASK</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
CARD8</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbActionMessage</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
KB_MSGDETAILMASK</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
CARD8</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbAccessXNotify</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
KB_AXNDETAILMASK</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
CARD16</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbExtensionDeviceNotify</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
KB_XIDETAILMASK</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
CARD16</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
Detail masks for event types that are not specified in <emphasis>
|
||
affectWhich</emphasis>
|
||
are not changed.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If any components are specified in a client’s event masks, the X server sends
|
||
the client an appropriate event whenever any of those components change state.
|
||
Unless explicitly modified, all event detail masks are empty. <link linkend='Events'>Events</link> describes all XKB events
|
||
and the conditions under which the server generates them.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Generating_Named_Keyboard_Bells'>
|
||
<title>Generating Named Keyboard Bells</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbBell</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
bellClass: KB_BELLCLASSSPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
bellID: KB_IDSPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
percent: INT8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
forceSound: BOOL</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
eventOnly: BOOL</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
pitch, duration: INT16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
name: ATOM</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
window: WINDOW</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Value</emphasis>
|
||
, <emphasis>
|
||
Match</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request generates audible bells and/or <emphasis>
|
||
XkbBellNotify</emphasis>
|
||
events for the bell specified by the <emphasis>
|
||
bellClass</emphasis>
|
||
and <emphasis>
|
||
bellID</emphasis>
|
||
on the device specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
at the specified <emphasis>
|
||
pitch</emphasis>
|
||
, <emphasis>
|
||
duration</emphasis>
|
||
and volume (<emphasis>
|
||
percent</emphasis>
|
||
). If deviceSpec specifies a device that does not have a bell or keyboard
|
||
feedback, a <emphasis>
|
||
Keyboard</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If both <emphasis>
|
||
forceSound</emphasis>
|
||
and <emphasis>
|
||
eventOnly</emphasis>
|
||
are set, this request yields a <emphasis>
|
||
Match</emphasis>
|
||
error. Otherwise, if <emphasis>
|
||
forceSound</emphasis>
|
||
is <emphasis>
|
||
True</emphasis>
|
||
, this request always generates a sound and never generates an event; if
|
||
<emphasis>
|
||
eventOnly</emphasis>
|
||
is <emphasis>
|
||
True</emphasis>
|
||
, it causes an event but no sound. If neither <emphasis>
|
||
forceSound</emphasis>
|
||
nor <emphasis>
|
||
eventOnly</emphasis>
|
||
are <emphasis>
|
||
True</emphasis>
|
||
, this request always generates an event; if the keyboard’s global <emphasis>
|
||
AudibleBell</emphasis>
|
||
control is enabled, it also generates a sound.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Any bell event generated by this request contains all of the information about
|
||
the bell that was requested, including the symbolic name specified by <emphasis>
|
||
name</emphasis>
|
||
and the event window specified by window. The <emphasis>
|
||
name</emphasis>
|
||
and <emphasis>
|
||
window</emphasis>
|
||
are not directly interpreted by XKB, but they must have the value <emphasis>
|
||
None</emphasis>
|
||
or specify a legal Atom or Window, respectively. <emphasis>
|
||
XkbBellNotify</emphasis>
|
||
events generated in response to core protocol or X input extension bell
|
||
requests always report <emphasis>
|
||
None</emphasis>
|
||
as their <emphasis>
|
||
name</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
bellClass</emphasis>
|
||
, <emphasis>
|
||
bellID</emphasis>
|
||
, and <emphasis>
|
||
percent</emphasis>
|
||
fields are interpreted as for the X input extension <emphasis>
|
||
DeviceBell</emphasis>
|
||
request. If <emphasis>
|
||
pitch</emphasis>
|
||
and <emphasis>
|
||
duration</emphasis>
|
||
are zero, the server uses the corresponding values for that bell from the core
|
||
protocol or input extension, otherwise <emphasis>
|
||
pitch</emphasis>
|
||
and <emphasis>
|
||
duration</emphasis>
|
||
are interpreted as for the core protocol <emphasis>
|
||
ChangeKeyboardControl</emphasis>
|
||
request; if they do not include legal values, a <emphasis>
|
||
Value</emphasis>
|
||
error results. The <emphasis>
|
||
window</emphasis>
|
||
field must specify a legal Window or have the value <emphasis>
|
||
None</emphasis>
|
||
, or a <emphasis>
|
||
Value</emphasis>
|
||
error results. The name field must specify a legal Atom or have the value
|
||
<emphasis>
|
||
None</emphasis>
|
||
, or an <emphasis>
|
||
Atom</emphasis>
|
||
error results. If an error occurs, this request has no other effect (i.e. does
|
||
not cause a sound or generate an event).
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
pitch</emphasis>
|
||
, <emphasis>
|
||
volume</emphasis>
|
||
, and <emphasis>
|
||
duration</emphasis>
|
||
are suggested values for the bell, but XKB does not require the server to
|
||
honor them.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Querying_and_Changing_Keyboard_State'>
|
||
<title>Querying and Changing Keyboard State</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbGetState</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
deviceID: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
mods, baseMods, latchedMods, lockedMods: KEYMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
group, lockedGroup: KB_GROUP
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
baseGroup, latchedGroup: INT16
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
compatState: KEYMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
grabMods, compatGrabMods: KB_GROUP
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
lookupMods, compatLookupMods: KEYMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
ptrBtnState: BUTMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request returns a detailed description of the current state of the
|
||
keyboard specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
deviceID</emphasis>
|
||
return value contains the input extension identifier for the specified device,
|
||
or <emphasis>
|
||
0</emphasis>
|
||
if the server does not support the input extension.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
baseMods</emphasis>
|
||
return value reports the modifiers that are set because one or more modifier
|
||
keys are logically down. The <emphasis>
|
||
latchedMods</emphasis>
|
||
and <emphasis>
|
||
lockedMods</emphasis>
|
||
return values report the modifiers that are latched or locked respectively.
|
||
The <emphasis>
|
||
mods</emphasis>
|
||
return value reports the effective modifier mask which results from the
|
||
current combination of base, latched and locked modifiers.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
baseGroup</emphasis>
|
||
return value reports the group state selected by group shift keys that are
|
||
logically down. The <emphasis>
|
||
latchedGroup</emphasis>
|
||
and <emphasis>
|
||
lockedGroup</emphasis>
|
||
return values detail the effects of latching or locking group shift keys and
|
||
<emphasis>
|
||
XkbLatchLockState</emphasis>
|
||
requests. The <emphasis>
|
||
group</emphasis>
|
||
return value reports the effective keyboard group which results from the
|
||
current combination of base, latched and locked group values.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
lookupMods</emphasis>
|
||
return value reports the lookup modifiers, which consist of the current
|
||
effective modifiers minus any server internal modifiers. The <emphasis>
|
||
grabMods</emphasis>
|
||
return value reports the grab modifiers, which consist of the lookup modifiers
|
||
minus any members of the ignore locks mask that are not either latched or
|
||
logically depressed. <link linkend='Keyboard_State'>Keyboard
|
||
State</link> describes the lookup modifiers and grab modifiers in more detail.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
ptrBtnState</emphasis>
|
||
return value reports the current logical state of up to five buttons on the
|
||
core pointer device.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
compatState</emphasis>
|
||
return value reports the compatibility state that corresponds to the effective
|
||
keyboard group and modifier state. The <emphasis>
|
||
compatLookupMods</emphasis>
|
||
and <emphasis>
|
||
compatGrabMods</emphasis>
|
||
return values report the core protocol compatibility states that correspond to
|
||
the XKB lookup and grab state. All of the compatibility states are computed by
|
||
applying the group compatibility mapping to the corresponding XKB modifier and
|
||
group states, as described in <link linkend='Group_Compatibility_Map'>
|
||
Group Compatibility Map</link>.
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbLatchLockState</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
affectModLocks, modLocks: KEYMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
lockGroup: BOOL</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
groupLock: KB_GROUP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
affectModLatches,modLatches: KEYMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
latchGroup: BOOL</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
groupLatch: INT16</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Value</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request locks or latches keyboard modifiers and group state for the device
|
||
specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. If <emphasis>
|
||
deviceSpec</emphasis>
|
||
specifies an illegal or non-keyboard device, a <emphasis>
|
||
Keyboard</emphasis>
|
||
error occurs.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The locked state of any modifier specified in the <emphasis>
|
||
affectModLocks</emphasis>
|
||
mask is set to the corresponding value from <emphasis>
|
||
modLocks</emphasis>
|
||
. If <emphasis>
|
||
lockGroup</emphasis>
|
||
is <emphasis>
|
||
True</emphasis>
|
||
, the locked keyboard group is set to the group specified by <emphasis>
|
||
groupLock</emphasis>
|
||
. If any modifiers are set in <emphasis>
|
||
modLocks</emphasis>
|
||
but not <emphasis>
|
||
affectModLocks</emphasis>
|
||
, a <emphasis>
|
||
Match</emphasis>
|
||
error occurs.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The latched state of any modifier specified in the <emphasis>
|
||
affectModLatches</emphasis>
|
||
mask is set to the corresponding value from <emphasis>
|
||
modLatches</emphasis>
|
||
. If <emphasis>
|
||
latchGroup</emphasis>
|
||
is <emphasis>
|
||
True</emphasis>
|
||
, the latched keyboard group is set to the group specified by <emphasis>
|
||
groupLatch</emphasis>
|
||
. if any modifiers are set in <emphasis>
|
||
modLatches</emphasis>
|
||
but not in <emphasis>
|
||
affectModLatches</emphasis>
|
||
, a <emphasis>
|
||
Match</emphasis>
|
||
error occurs.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the locked group exceeds the maximum number of groups permitted for the
|
||
specified keyboard, it is wrapped or truncated back into range as specified by
|
||
the global <emphasis>
|
||
GroupsWrap</emphasis>
|
||
<emphasis>
|
||
</emphasis>
|
||
control. No error results from an out-of-range group specification.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
After changing the locked and latched modifiers and groups as specified, the X
|
||
server recalculates the effective and compatibility keyboard state and
|
||
generates <emphasis>
|
||
XkbStateNotify</emphasis>
|
||
events as appropriate if any state components have changed. Changing the
|
||
keyboard state might also turn indicators on or off which can cause <emphasis>
|
||
XkbIndicatorStateNotify</emphasis>
|
||
events as well.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If any errors occur, this request has no effect.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Querying_and_Changing_Keyboard_Controls'>
|
||
<title>Querying and Changing Keyboard Controls</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbGetControls</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
deviceID: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
mouseKeysDfltBtn: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
numGroups: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
groupsWrap: KB_GROUPINFO
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
internalMods,ignoreLockMods: KB_MODDEF
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
repeatDelay,repeatInterval: CARD16
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
slowKeysDelay, debounceDelay: CARD16
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
mouseKeysDelay, mouseKeysInterval: CARD16
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
mouseKeysTimeToMax, mouseKeysMaxSpeed: CARD16
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
mouseKeysCurve: INT16
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
accessXOptions: KB_AXOPTIONMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
accessXTimeout: CARD16
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
accessXTimeoutOptionsMask, accessXTimeoutOptionValues: CARD16
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
accessXTimeoutMask,accessXTimeoutValues: CARD32
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
enabledControls: KB_BOOLCTRLMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
perKeyRepeat: LISTofCARD8</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request returns the current values and status of all controls for the
|
||
keyboard specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. If <emphasis>
|
||
deviceSpec</emphasis>
|
||
specifies an illegal device a <emphasis>
|
||
Keyboard</emphasis>
|
||
error results. On return, the <emphasis>
|
||
deviceID</emphasis>
|
||
specifies the identifier of the requested device or zero if the server does
|
||
not support the input extension.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
numGroups</emphasis>
|
||
return value reports the current number of groups, and <emphasis>
|
||
groupsWrap</emphasis>
|
||
reports the treatment of out-of-range groups, as described in <link linkend='Key_Symbol_Map'>Key Symbol Map</link>. The <emphasis>
|
||
internalMods</emphasis>
|
||
and <emphasis>
|
||
ignoreLockMods</emphasis>
|
||
return values report the current values of the server internal and ignore
|
||
locks modifiers as described in <link linkend='Keyboard_State'>
|
||
Keyboard State</link>. Both are modifier definitions (
|
||
<link linkend='Modifier_Definitions'>Modifier Definitions</link>) which
|
||
report the real modifiers, virtual modifiers, and the resulting combination of
|
||
real modifiers that are bound to the corresponding control.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
repeatDelay</emphasis>
|
||
, <emphasis>
|
||
repeatInterval</emphasis>
|
||
, <emphasis>
|
||
slowKeysDelay</emphasis>
|
||
and <emphasis>
|
||
debounceDelay</emphasis>
|
||
fields report the current values of the for the autorepeat delay, autorepeat
|
||
interval, slow keys delay and bounce keys timeout, respectively. The <emphasis>
|
||
mouseKeysDelay</emphasis>
|
||
, <emphasis>
|
||
mouseKeysInterval</emphasis>
|
||
, <emphasis>
|
||
mouseKeysTimeToMax</emphasis>
|
||
and <emphasis>
|
||
mouseKeysMaxSpeed</emphasis>
|
||
and <emphasis>
|
||
mouseKeysCurve</emphasis>
|
||
return values report the current acceleration applied to mouse keys, as
|
||
described in <link linkend='The_MouseKeysAccel_Control'>The MouseKeysAccel
|
||
Control</link>. All times are reported in milliseconds.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
mouseKeysDfltBtn</emphasis>
|
||
return value reports the current default pointer button for which events are
|
||
synthesized by the mouse keys server actions.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
accessXOptions</emphasis>
|
||
return value reports the current settings of the various AccessX options flags
|
||
which govern the behavior of the <emphasis>
|
||
StickyKeys</emphasis>
|
||
control and of AccessX feedback.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
accessXTimeout</emphasis>
|
||
return value reports the length of time, in seconds, that the keyboard must
|
||
remain idle before AccessX controls are automatically changed; an <emphasis>
|
||
accessXTimeout</emphasis>
|
||
of <emphasis>
|
||
0</emphasis>
|
||
indicates that AccessX controls are not automatically changed. The <emphasis>
|
||
accessXTimeoutMask</emphasis>
|
||
specifies the boolean controls to be changed if the AccessX timeout expires;
|
||
the <emphasis>
|
||
accessXTimeoutValues</emphasis>
|
||
field specifies new values for all of the controls in the timeout mask. The
|
||
<emphasis>
|
||
accessXTimeoutOptionsMask</emphasis>
|
||
field specifies the AccessX options to be changed when the AccessX timeout
|
||
expires; the <emphasis>
|
||
accessXTimeoutOptionValues</emphasis>
|
||
return value reports the values to which they will be set.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
enabledControls</emphasis>
|
||
return value reports the current state of all of the global boolean controls.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
perKeyRepeat</emphasis>
|
||
array consists of one bit per key and reports the current autorepeat behavior
|
||
of each keyboard key; if a bit is set in <emphasis>
|
||
perKeyRepeat</emphasis>
|
||
, the corresponding key repeats if it is held down while global keyboard
|
||
autorepeat is enabled. This array parallels the core protocol and input
|
||
extension keyboard controls, if the autorepeat behavior of a key is changed via
|
||
the core protocol or input extension, those changes are automatically reflected
|
||
in the <emphasis>
|
||
perKeyRepeat</emphasis>
|
||
array.
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbSetControls</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
affectInternalRealMods, internalRealMods: KEYMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
affectInternalVirtualMods,internalVirtualMods: KB_VMODMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
affectIgnoreLockRealMods,ignoreLockRealMods: KB_MODMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
affectIgnoreLockVirtualMods,ignoreLockVirtualMods: KB_VMODMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
mouseKeysDfltBtn: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
groupsWrap: KB_GROUPINFO</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
accessXOptions: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
affectEnabledControls: KB_BOOLCTRLMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
enabledControls: KB_BOOLCTRLMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
changeControls: KB_CONTROLMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
repeatDelay,repeatInterval: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
slowKeysDelay, debounceDelay: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
mouseKeysDelay, mouseKeysInterval: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
mouseKeysTimeToMax, mouseKeysMaxSpeed: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
mouseKeysCurve: INT16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
accessXTimeout: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
accessXTimeoutMask, accessXTimeoutValues: KB_BOOLCTRLMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
accessXTimeoutOptionsMask,accessXTimeoutOptionsValues: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
perKeyRepeat: LISTofCARD8</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors:<emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Value</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request sets the keyboard controls indicated in <emphasis>
|
||
changeControls</emphasis>
|
||
for the keyboard specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. Each bit that is set in <emphasis>
|
||
changeControls</emphasis>
|
||
indicates that one or more of the other request fields should be applied, as
|
||
follows:
|
||
</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='2.0*'/>
|
||
<thead>
|
||
<row rowsep='1'>
|
||
<entry>Bit in changeControls</entry>
|
||
<entry>Field(s) to be Applied</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbRepeatKeysMask</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
repeatDelay</emphasis>
|
||
, <emphasis>
|
||
repeatInterval</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbSlowKeysMask</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
slowKeysDelay</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbStickyKeysMask</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
accessXOptions</emphasis>
|
||
(only the <emphasis>
|
||
XkbAX_TwoKeys</emphasis>
|
||
<emphasis>
|
||
</emphasis>
|
||
and the <emphasis>
|
||
XkbAX_LatchToLock</emphasis>
|
||
options are affected)</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbBounceKeysMask</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
debounceDelay</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbMouseKeysMask</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
mouseKeysDfltBtn</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbMouseKeysAccelMask</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
mouseKeysDelay</emphasis>
|
||
, <emphasis>
|
||
mouseKeysInterval</emphasis>
|
||
, <emphasis>
|
||
mouseKeysCurve</emphasis>
|
||
, <emphasis>
|
||
mouseKeysTimeToMax</emphasis>
|
||
, <emphasis>
|
||
mouseKeysMaxSpeed</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbAccessXKeysMask</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
accessXOptions (all options)</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbAccessXTimeoutMask</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
accessXTimeout</emphasis>
|
||
, <emphasis>
|
||
accessXTimeoutMask</emphasis>
|
||
, <emphasis>
|
||
accessXTimeoutValues</emphasis>
|
||
, <emphasis>
|
||
accessXTimeoutOptionsMask</emphasis>
|
||
, <emphasis>
|
||
accessXTimeoutOptionsValues</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>XkbAccessXFeedbackMask</entry>
|
||
<entry><emphasis>
|
||
accessXOptions</emphasis>
|
||
(all options except those affected by the <emphasis>
|
||
XkbStickyKeysMask</emphasis>
|
||
bit)</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbGroupsWrapMask</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
groupsWrap</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbInternalModsMask</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
affectInternalRealMods</emphasis>
|
||
, <emphasis>
|
||
internalRealMods</emphasis>
|
||
, <emphasis>
|
||
affectInternalVirtualMods</emphasis>
|
||
, <emphasis>
|
||
internalVirtualMods</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbIgnoreLockModsMask</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
affectIgnoreLockRealMods</emphasis>
|
||
, <emphasis>
|
||
ignoreLockRealMods</emphasis>
|
||
, <emphasis>
|
||
affectIgnoreLockVirtualMods</emphasis>
|
||
, <emphasis>
|
||
ignoreLockVirtualMods</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbPerKeyRepeatMask</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
perKeyRepeat</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbControlsEnabledMask</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
affectEnabledControls</emphasis>
|
||
, <emphasis>
|
||
enabledControls</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
If any other bits are set in <emphasis>
|
||
changeControls</emphasis>
|
||
, a <emphasis>
|
||
Value</emphasis>
|
||
error results. If any of the bits listed above are not set in <emphasis>
|
||
changeControls</emphasis>
|
||
, the corresponding fields must have the value <emphasis>
|
||
0</emphasis>
|
||
, or a <emphasis>
|
||
Match</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If applied, <emphasis>
|
||
repeatDelay</emphasis>
|
||
and <emphasis>
|
||
repeatInterval</emphasis>
|
||
change the autorepeat characteristics of the keyboard, as described in
|
||
<link linkend='The_RepeatKeys_Control'>The RepeatKeys Control</link>. If
|
||
specified, <emphasis>
|
||
repeatDelay</emphasis>
|
||
and <emphasis>
|
||
repeatInterval</emphasis>
|
||
must both be non-zero or a <emphasis>
|
||
Value</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If applied, the <emphasis>
|
||
slowKeysDelay</emphasis>
|
||
field specifies a new delay for the <emphasis>
|
||
SlowKeys</emphasis>
|
||
control, as defined in <link linkend='The_SlowKeys_Control'>The
|
||
SlowKeys Control</link>. If specified, <emphasis>
|
||
slowKeysDelay</emphasis>
|
||
must be non-zero, or a <emphasis>
|
||
Value</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If applied, the <emphasis>
|
||
debounceDelay</emphasis>
|
||
field specifies a new delay for the <emphasis>
|
||
BounceKeys</emphasis>
|
||
control, as described in <link linkend='The_BounceKeys_Control'>The
|
||
BounceKeys Control</link>. If present, the <emphasis>
|
||
debounceDelay</emphasis>
|
||
must be non-zero or a <emphasis>
|
||
Value</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If applied, the <emphasis>
|
||
mouseKeysDfltBtn</emphasis>
|
||
field specifies the core pointer button for which events are generated
|
||
whenever a <emphasis>
|
||
SA_PtrBtn</emphasis>
|
||
or <emphasis>
|
||
SA_LockPtrBtn</emphasis>
|
||
key action is activated. If present, <emphasis>
|
||
mouseKeysDfltBtn</emphasis>
|
||
must specify a legal button for the core pointer device, or a <emphasis>
|
||
Value</emphasis>
|
||
error results. <link linkend='Key_Actions'>Key
|
||
Actions</link> describes the <emphasis>
|
||
SA_PtrBtn</emphasis>
|
||
and <emphasis>
|
||
SA_LockPtrBtn</emphasis>
|
||
actions in more detail.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If applied, the <emphasis>
|
||
mouseKeysDelay</emphasis>
|
||
, <emphasis>
|
||
mouseKeysInterval</emphasis>
|
||
, <emphasis>
|
||
mouseKeysTimeToMax</emphasis>
|
||
, <emphasis>
|
||
mouseKeysMaxSpeed</emphasis>
|
||
and <emphasis>
|
||
mouseKeysCurve</emphasis>
|
||
fields change the rate at which the pointer moves when a key which generates a
|
||
<emphasis>
|
||
SA_MovePtr</emphasis>
|
||
action is held down. <link linkend='The_MouseKeysAccel_Control'>The
|
||
MouseKeysAccel Control</link> describes these <emphasis>
|
||
MouseKeysAccel</emphasis>
|
||
parameters in more detail. If defined, the <emphasis>
|
||
mouseKeysDelay</emphasis>
|
||
, <emphasis>
|
||
mouseKeysInterval</emphasis>
|
||
, <emphasis>
|
||
mouseKeysTimeToMax</emphasis>
|
||
and <emphasis>
|
||
mouseKeysMaxSpeed</emphasis>
|
||
values must all be greater than zero, or a <emphasis>
|
||
Value</emphasis>
|
||
error results. The <emphasis>
|
||
mouseKeysCurve</emphasis>
|
||
value must be greater than <emphasis>
|
||
-1000</emphasis>
|
||
or a <emphasis>
|
||
Value</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If applied, the <emphasis>
|
||
accessXOptions</emphasis>
|
||
field sets the AccessX options, which are described in detail in
|
||
<link linkend='The_AccessXKeys_Control'>The AccessXKeys Control</link>. If
|
||
either one of <emphasis>
|
||
XkbStickyKeysMask</emphasis>
|
||
and <emphasis>
|
||
XkbAccessXFeedbackMask</emphasis>
|
||
are set in <emphasis>
|
||
changeControls</emphasis>
|
||
and <emphasis>
|
||
XkbAccessXKeysMask</emphasis>
|
||
is not, only a subset of the AccessX options are changed, as described in the
|
||
table above; if both are set or if the <emphasis>
|
||
AccessXKeys</emphasis>
|
||
bit is set in <emphasis>
|
||
changeControls</emphasis>
|
||
, all of the AccessX options are updated. Any bit in <emphasis>
|
||
accessXOptions</emphasis>
|
||
whose interpretation is undefined must be zero, or a <emphasis>
|
||
Value</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If applied, the <emphasis>
|
||
accessXTimeout</emphasis>
|
||
, <emphasis>
|
||
accessXTimeoutMask</emphasis>
|
||
, <emphasis>
|
||
accessXTimeoutValues</emphasis>
|
||
, <emphasis>
|
||
accessXTimeoutOptionsMask</emphasis>
|
||
and <emphasis>
|
||
accessXTimeoutOptionsValues</emphasis>
|
||
fields change the behavior of the AccessX Timeout control, as described in
|
||
<link linkend='The_AccessXTimeout_Control'>The AccessXTimeout
|
||
Control</link>. The <emphasis>
|
||
accessXTimeout</emphasis>
|
||
must be greater than zero, or a <emphasis>
|
||
Value</emphasis>
|
||
error results. The <emphasis>
|
||
accessXTimeoutMask</emphasis>
|
||
or <emphasis>
|
||
accessXTimeoutValues</emphasis>
|
||
fields must specify only legal boolean controls, or a <emphasis>
|
||
Value</emphasis>
|
||
error results. The <emphasis>
|
||
accessXTimeoutOptionsMask</emphasis>
|
||
and <emphasis>
|
||
accessXTimeoutOptionsValues</emphasis>
|
||
fields must contain only legal AccessX options or a <emphasis>
|
||
Value</emphasis>
|
||
error results. If any bits are set in either values field but not in the
|
||
corresponding mask, a <emphasis>
|
||
Match</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If present, the <emphasis>
|
||
groupsWrap</emphasis>
|
||
field specifies the treatment of out-of-range keyboard groups, as described in
|
||
<link linkend='Key_Symbol_Map'>Key Symbol Map</link>. If the
|
||
<emphasis>
|
||
groupsWrap</emphasis>
|
||
field does not specify a legal treatment for out-of-range groups, a <emphasis>
|
||
Value</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If present, the <emphasis>
|
||
affectInternalRealMods</emphasis>
|
||
field specifies the set of real modifiers to be changed in the internal
|
||
modifier definition and the <emphasis>
|
||
internalRealMods</emphasis>
|
||
field specifies new values for those modifiers. The <emphasis>
|
||
affectInternalVirtualMods</emphasis>
|
||
and <emphasis>
|
||
internalVirtualMods</emphasis>
|
||
fields update the virtual modifier component of the modifier definition that
|
||
describes the internal modifiers in the same way. If any bits are set in either
|
||
values field but not in the corresponding mask field, a <emphasis>
|
||
Match</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If present, the <emphasis>
|
||
affectIgnoreLockRealMods</emphasis>
|
||
field specifies the set of real modifiers to be changed in the ignore locks
|
||
modifier definition and the <emphasis>
|
||
ignoreLockRealMods</emphasis>
|
||
field specifies new values for those modifiers. The <emphasis>
|
||
affectIgnoreLockVirtualMods</emphasis>
|
||
and <emphasis>
|
||
ignoreLockVirtualMods</emphasis>
|
||
fields update the virtual modifier component of the ignore locks modifier
|
||
definition in the same way. If any bits are set in either values field but not
|
||
in the corresponding mask field, a <emphasis>
|
||
Match</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If present, the <emphasis>
|
||
perKeyRepeat</emphasis>
|
||
array specifies the repeat behavior of the individual keyboard keys. The
|
||
corresponding core protocol or input extension per-key autorepeat information
|
||
is updated to reflect any changes specified in <emphasis>
|
||
perKeyRepeat</emphasis>
|
||
. If the bits that correspond to any out-of-range keys are set in <emphasis>
|
||
perKeyRepeat</emphasis>
|
||
, a <emphasis>
|
||
Value</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If present, the <emphasis>
|
||
affectEnabledControls</emphasis>
|
||
and <emphasis>
|
||
enabledControls</emphasis>
|
||
field enable and disable global boolean controls. Any controls set in both
|
||
fields are enabled; any controls that are set in <emphasis>
|
||
affectEnabledControls</emphasis>
|
||
but not in <emphasis>
|
||
enabledControls</emphasis>
|
||
are disabled. Controls that are not set in either field are not affected. If
|
||
any controls are specified in <emphasis>
|
||
enabledControls</emphasis>
|
||
but not in <emphasis>
|
||
affectEnabledControls</emphasis>
|
||
, a <emphasis>
|
||
Match</emphasis>
|
||
error results. If either field contains anything except boolean controls, a
|
||
<emphasis>
|
||
Value</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Querying_and_Changing_the_Keyboard_Mapping'>
|
||
<title>Querying and Changing the Keyboard Mapping</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbGetMap</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
full, partial: KB_MAPPARTMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstType, nTypes: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstKeySym, firstKeyAction: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
nKeySyms, nKeyActions: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstKeyBehavior,firstKeyExplicit: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
nKeyBehaviors,nKeyExplicit: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstModMapKey,firstVModMapKey: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
nModMapKeys, nVModMapKeys: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
virtualMods: KB_VMODMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
deviceID: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
minKeyCode, maxKeyCode: KEYCODE
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
present: KB_MAPPARTMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
firstType, nTypes, nTotalTypes: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
firstKeySym, firstKeyAction: KEYCODE
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
nKeySyms, nKeyActions: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
totalSyms, totalActions: CARD16
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
firstKeyBehavior, firstKeyExplicit: KEYCODE
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
nKeyBehaviors, nKeyExplicit: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
totalKeyBehaviors, totalKeyExplicit: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
firstModMapKey, firstVModMapKey: KEYCODE
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
nModMapKeys, nVModMapKeys: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
totalModMapKeys, totalVModMapKeys: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
virtualMods: KB_VMODMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
typesRtrn: LISTofKB_KEYTYPE
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
symsRtrn: LISTofKB_KEYSYMMAP
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
actsRtrn: { count: LISTofCARD8, acts: LISTofKB_ACTION }
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
behaviorsRtrn: LISTofKB_SETBEHAVIOR
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
vmodsRtrn: LISTofSETofKEYMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
explicitRtrn: LISTofKB_SETEXPLICIT
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
modmapRtrn: LISTofKB_KEYMODMAP
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
vmodMapRtrn: LISTofKB_KEYVMODMAP
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoerror'>
|
||
Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Value</emphasis>
|
||
, <emphasis>
|
||
Match</emphasis>
|
||
, <emphasis>
|
||
Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request returns the indicated components of the server and client maps of
|
||
the keyboard specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. The <emphasis>
|
||
full</emphasis>
|
||
mask specifies the map components to be returned in full; the <emphasis>
|
||
partial</emphasis>
|
||
mask specifies the components for which some subset of the legal elements are
|
||
to be returned. The server returns a <emphasis>
|
||
Match</emphasis>
|
||
error if any component is specified in both <emphasis>
|
||
full</emphasis>
|
||
and <emphasis>
|
||
partial</emphasis>
|
||
, or a <emphasis>
|
||
Value</emphasis>
|
||
error if any undefined bits are set in either <emphasis>
|
||
full</emphasis>
|
||
or <emphasis>
|
||
partial</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Each bit in the <emphasis>
|
||
partial</emphasis>
|
||
mask controls the interpretation of one or more of the other request fields,
|
||
as follows:
|
||
</para>
|
||
|
||
<informaltable frame='topbot'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='3' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.5*'/>
|
||
<colspec colname='c2' colwidth='1.0*'/>
|
||
<colspec colname='c3' colwidth='1.5*'/>
|
||
<thead>
|
||
<row rowsep='1'>
|
||
<entry>Bit in the Partial Mask</entry>
|
||
<entry>Type</entry>
|
||
<entry>Corresponding Field(s)</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbKeyTypesMask</emphasis>
|
||
</entry>
|
||
<entry>key types</entry>
|
||
<entry><emphasis>
|
||
firstType</emphasis>
|
||
, <emphasis>
|
||
nTypes</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbKeySymsMask</emphasis>
|
||
</entry>
|
||
<entry>keycodes</entry>
|
||
<entry><emphasis>
|
||
firstKeySym</emphasis>
|
||
, <emphasis>
|
||
nKeySyms</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbKeyActionsMask</emphasis>
|
||
</entry>
|
||
<entry>keycodes</entry>
|
||
<entry><emphasis>
|
||
firstKeyAction</emphasis>
|
||
, <emphasis>
|
||
nKeyActions</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbKeyBehaviorsMask</emphasis>
|
||
</entry>
|
||
<entry>keycodes</entry>
|
||
<entry><emphasis>
|
||
firstKeyBehavior</emphasis>
|
||
, <emphasis>
|
||
nKeyBehaviors</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbExplicitComponentsMask</emphasis>
|
||
</entry>
|
||
<entry>keycodes</entry>
|
||
<entry><emphasis>
|
||
firstKeyExplicit</emphasis>
|
||
, <emphasis>
|
||
nKeyExplicit</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbModifierMapMask</emphasis>
|
||
</entry>
|
||
<entry>keycodes</entry>
|
||
<entry><emphasis>
|
||
firstModMapKey</emphasis>
|
||
, <emphasis>
|
||
nModMapKeys</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbVirtualModMapMask</emphasis>
|
||
</entry>
|
||
<entry>keycodes</entry>
|
||
<entry><emphasis>
|
||
firstVModMapKey</emphasis>
|
||
, <emphasis>
|
||
nVModMapKeys</emphasis>
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbVirtualModsMask</emphasis>
|
||
</entry>
|
||
<entry>virtual modifiers</entry>
|
||
<entry><emphasis>
|
||
virtualMods</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
If any of these keyboard map components are specified in <emphasis>
|
||
partial</emphasis>
|
||
, the corresponding values must specify a valid subset of the requested
|
||
components or this request reports a <emphasis>
|
||
Value</emphasis>
|
||
error. If a keyboard map component is not specified in <emphasis>
|
||
partial</emphasis>
|
||
, the corresponding fields must contain zeroes, or a <emphasis>
|
||
Match</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If any error is generated, the request aborts and does not report any values.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
On successful return, the <emphasis>
|
||
deviceID</emphasis>
|
||
field reports the X input extension device ID of the keyboard for which
|
||
information is being returned, or <emphasis>
|
||
0</emphasis>
|
||
if the server does not support the X input extension. The <emphasis>
|
||
minKeyCode</emphasis>
|
||
and <emphasis>
|
||
maxKeyCode</emphasis>
|
||
return values report the minimum and maximum keycodes that are legal for the
|
||
keyboard in question.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
present</emphasis>
|
||
return value lists all of the keyboard map components contained in the reply.
|
||
The bits in <emphasis>
|
||
present</emphasis>
|
||
affect the interpretation of the other return values as follows:
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbKeyTypesMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para><emphasis>
|
||
firstType</emphasis>
|
||
and <emphasis>
|
||
nTypes</emphasis>
|
||
specify the types reported in the reply.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para><emphasis>
|
||
nTotalTypes</emphasis>
|
||
reports the total number of types defined for the keyboard
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para><emphasis>
|
||
typesRtrn</emphasis>
|
||
has <emphasis>
|
||
nTypes</emphasis>
|
||
elements of type KB_KEYTYPE which describe consecutive key types starting from
|
||
<emphasis>
|
||
firstType</emphasis>
|
||
.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbKeySymsMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para><emphasis>
|
||
firstKeySym</emphasis>
|
||
and <emphasis>
|
||
nKeySyms</emphasis>
|
||
specify the subset of the keyboard keys for which symbols will be reported.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para><emphasis>
|
||
totalSyms</emphasis>
|
||
reports the total number of keysyms bound to the keys returned in this reply.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para><emphasis>
|
||
symsRtrn</emphasis>
|
||
has <emphasis>
|
||
nKeySyms</emphasis>
|
||
elements of type KB_KEYSYMMAP, which describe the symbols bound to consecutive
|
||
keys starting from <emphasis>
|
||
firstKeySym</emphasis>
|
||
.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbKeyActionsMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para><emphasis>
|
||
firstKeyAction</emphasis>
|
||
and <emphasis>
|
||
nKeyActions</emphasis>
|
||
specify the subset of the keys for which actions are reported.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para><emphasis>
|
||
totalActions</emphasis>
|
||
reports the total number of actions bound to the returned keys.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
count </emphasis>
|
||
field of the <emphasis>
|
||
actsRtrn</emphasis>
|
||
return value has <emphasis>
|
||
nKeyActions</emphasis>
|
||
entries of type CARD8, which specify the number of actions bound to
|
||
consecutive keys starting from <emphasis>
|
||
firstKeyAction</emphasis>
|
||
. The <emphasis>
|
||
acts</emphasis>
|
||
field of <emphasis>
|
||
actsRtrn</emphasis>
|
||
has <emphasis>
|
||
totalActions</emphasis>
|
||
elements of type KB_ACTION and specifies the actions bound to the keys.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbKeyBehaviorsMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
firstKeyBehavior</emphasis>
|
||
and <emphasis>
|
||
nKeyBehaviors</emphasis>
|
||
return values report the range of keyboard keys for which behaviors will be
|
||
reported.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
totalKeyBehaviors</emphasis>
|
||
return value reports the number of keys in the range to be reported that have
|
||
non-default values.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
behaviorsRtrn</emphasis>
|
||
value has <emphasis>
|
||
totalKeyBehaviors</emphasis>
|
||
entries of type KB_BEHAVIOR. Each entry specifies a key in the range for which
|
||
behaviors are being reported and the behavior associated with that key. Any
|
||
keys in that range that do not have an entry in <emphasis>
|
||
behaviorsRtrn</emphasis>
|
||
have the default behavior, <emphasis>
|
||
KB_Default</emphasis>
|
||
.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbExplicitComponentsMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
firstKeyExplicit</emphasis>
|
||
and <emphasis>
|
||
nKeyExplicit</emphasis>
|
||
return values report the range of keyboard keys for which the set of explicit
|
||
components is to be returned.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
totalKeyExplicit</emphasis>
|
||
return value reports the number of keys in the range specified by <emphasis>
|
||
firstKeyExplicit</emphasis>
|
||
and <emphasis>
|
||
nKeyExplicit</emphasis>
|
||
that have one or more explicit components.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
explicitRtrn</emphasis>
|
||
return value has <emphasis>
|
||
totalKeyExplicit</emphasis>
|
||
entries of type KB_KEYEXPLICIT. Each entry specifies the a key in the range
|
||
for which explicit components are being reported and the explicit components
|
||
that are bound to it. Any keys in that range that do not have an entry in
|
||
<emphasis>
|
||
explicitRtrn</emphasis>
|
||
have no explicit components.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbModifierMapMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
firstModMapKey</emphasis>
|
||
and <emphasis>
|
||
nModMapKeys</emphasis>
|
||
return values report the range of keyboard keys for which the modifier map is
|
||
to be reported.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
totalModMapKeys</emphasis>
|
||
return value reports the number of keys in the range specified by <emphasis>
|
||
firstModMapKey</emphasis>
|
||
and <emphasis>
|
||
nModMapKeys</emphasis>
|
||
that are bound with to one or more modifiers.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
modmapRtrn</emphasis>
|
||
return value has <emphasis>
|
||
totalModMapKeys</emphasis>
|
||
entries of type KB_KEYMODMAP. Each entry specifies the a key in the range for
|
||
which the modifier map is being reported and the set of modifiers that are
|
||
bound to that key. Any keys in that range that do not have an entry in
|
||
<emphasis>
|
||
modmapRtrn</emphasis>
|
||
are not associated with any modifiers by the modifier mapping.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbVirtualModMapMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
firstVModMapKey</emphasis>
|
||
and <emphasis>
|
||
nVModMapKeys</emphasis>
|
||
return values report the range of keyboard keys for which the virtual modifier
|
||
map is to be reported.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
totalVModMapKeys</emphasis>
|
||
return value reports the number of keys in the range specified by <emphasis>
|
||
firstVModMapKey</emphasis>
|
||
and <emphasis>
|
||
nVModMapKeys</emphasis>
|
||
that are bound with to or more virtual modifiers.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
vmodmapRtrn</emphasis>
|
||
return value has <emphasis>
|
||
totalVModMapKeys</emphasis>
|
||
entries of type KB_KEYVMODMAP. Each entry specifies the a key in the range for
|
||
which the virtual modifier map is being reported and the set of virtual
|
||
modifiers that are bound to that key. Any keys in that range that do not have
|
||
an entry in <emphasis>
|
||
vmodmapRtrn</emphasis>
|
||
are not associated with any virtual modifiers,
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbVirtualModsMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
virtualMods</emphasis>
|
||
return value is a mask with one bit per virtual modifier which specifies the
|
||
virtual modifiers for which a set of corresponding real modifiers is to be
|
||
returned.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
vmodsRtrn</emphasis>
|
||
return value is a list with one entry of type KEYBUTMASK for each virtual
|
||
modifier that is specified in <emphasis>
|
||
virtualMods</emphasis>
|
||
. The entries in <emphasis>
|
||
vmodsRtrn</emphasis>
|
||
contain the real modifier bindings for the specified virtual modifiers,
|
||
beginning with the lowest-numbered virtual modifier that is present in
|
||
<emphasis>
|
||
virtualMods</emphasis>
|
||
and proceeding to the highest.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
If any of these bits are not set in <emphasis>
|
||
present</emphasis>
|
||
, the corresponding numeric fields all have the value zero, and the
|
||
corresponding lists are all of length zero.
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbSetMap</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
flags: { <emphasis>
|
||
SetMapResizeTypes, SetMapRecomputeActions </emphasis>
|
||
}</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
present: KB_MAPPARTMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
minKeyCode, maxKeyCode: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstType, nTypes: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstKeySym, firstKeyAction: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
nKeySyms, nKeyActions: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
totalSyms, totalActions: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstKeyBehavior, firstKeyExplicit: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
nKeyBehaviors, nKeyExplicit: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
totalKeyBehaviors, totalKeyExplicit: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstModMapKey, firstVModMapKey: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
nModMapKeys, nVModMapKeys: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
totalModMapKeys, totalVModMapKeys: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
virtualMods: VMODMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
types: LISTofKB_KEYTYPE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
syms: LISTofKB_KEYSYMMAP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
actions: { count: LISTofCARD8, actions: LISTofKB_ACTION }</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
behaviors: LISTofKB_BEHAVIOR</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
vmods: LISTofKEYMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
explicit: LISTofKB_EXPLICIT</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
modmap: LISTofKB_KEYMODMAP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
vmodmap: LISTofKB_KEYVMODMAP</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Value</emphasis>
|
||
, <emphasis>
|
||
Match</emphasis>
|
||
, <emphasis>
|
||
Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request changes the indicated parts of the keyboard specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. With XKB, the effect of a key release is independent of the keyboard mapping
|
||
at the time of the release, so this request can be processed regardless of the
|
||
logical state of the modifier keys at the time of the request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
present</emphasis>
|
||
field specifies the keyboard map components contained to be changed. The bits
|
||
in <emphasis>
|
||
present</emphasis>
|
||
affect the interpretation of the other fields as follows:
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbKeyTypesMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
, <emphasis>
|
||
firstType</emphasis>
|
||
and <emphasis>
|
||
nTypes</emphasis>
|
||
specify a subset of the key types bound to the keyboard to be changed or
|
||
created. The index of the first key type to be changed must be less than or
|
||
equal to the unmodified length of the list of key types or a <emphasis>
|
||
Value</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbKeyTypesMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
and <emphasis>
|
||
SetMapResizeTypes</emphasis>
|
||
is set in <emphasis>
|
||
flags</emphasis>
|
||
, the server resizes the list of key types bound to the keyboard so that the
|
||
last key type specified by this request is the last element in the list. If the
|
||
list of key types is shrunk, any existing key definitions that use key types
|
||
that eliminated are automatically assigned key types from the list of canonical
|
||
key types as described in <link linkend='Assigning_Types_To_Groups_of_Symbols_for_a_Key'>
|
||
Assigning Types To Groups of Symbols for a Key</link>. The list of key types
|
||
bound to a keyboard must always include the four canonical types and cannot
|
||
have more than <emphasis>
|
||
XkbMaxTypesPerKey</emphasis>
|
||
(32) types; any attempt to reduce the number of types bound to a keyboard
|
||
below four or above <emphasis>
|
||
XkbMaxTypesPerKey</emphasis>
|
||
causes a <emphasis>
|
||
Value</emphasis>
|
||
error. Symbolic names for newly created key types or levels within a key type
|
||
are initialized to <emphasis>
|
||
None</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbKeyTypesMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
, the types list has <emphasis>
|
||
nTypes</emphasis>
|
||
entries of type KB_KEYTYPE.Each key type specified in <emphasis>
|
||
types</emphasis>
|
||
must be valid or a <emphasis>
|
||
Value</emphasis>
|
||
error results. To be valid a key type definition must meet the following
|
||
criteria:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
numLevels</emphasis>
|
||
for the type must be greater than zero.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>If the key type is <emphasis>
|
||
ONE_LEVEL</emphasis>
|
||
(i.e. index zero in the list of key types), <emphasis>
|
||
numLevels</emphasis>
|
||
must be one.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>If the key type is <emphasis>
|
||
TWO_LEVEL</emphasis>
|
||
or <emphasis>
|
||
KEYPAD</emphasis>
|
||
, or <emphasis>
|
||
ALPHABETIC</emphasis>
|
||
(i.e. index one, two, or three in the lest of key types) group width must be
|
||
two.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
Each key type in types must also be internally consistent, or a Match error
|
||
results. To be internally consistent, a key type definition must meet the
|
||
following criteria:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Each map entry must specify a resulting level that is legal for the
|
||
type.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Any real or virtual modifiers specified in any of the map entries must
|
||
also be specified in the <emphasis>
|
||
mods</emphasis>
|
||
for the type.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbKeySymsMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
, <emphasis>
|
||
firstKeySym</emphasis>
|
||
and <emphasis>
|
||
nKeySyms</emphasis>
|
||
specify a subset of the keyboard keys to which new symbols are to be assigned
|
||
and <emphasis>
|
||
totalSyms</emphasis>
|
||
specifies the total number of symbols to be assigned to those keys. If any of
|
||
the keys specified by <emphasis>
|
||
firstKeySym</emphasis>
|
||
and <emphasis>
|
||
nKeySyms</emphasis>
|
||
are not legal, a <emphasis>
|
||
Match</emphasis>
|
||
error results. The <emphasis>
|
||
syms</emphasis>
|
||
list has <emphasis>
|
||
nKeySyms</emphasis>
|
||
elements of type KB_KEYSYMMAP. Each key in the resulting key symbol map must
|
||
be valid and internally consistent or a <emphasis>
|
||
Value</emphasis>
|
||
error results. To be valid and internally consistent, a key symbol map must
|
||
meet the following criteria:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>The key type indices must specify legal result key types.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The number of groups specified by <emphasis>
|
||
groupInfo</emphasis>
|
||
must be in the range <emphasis>
|
||
0…4</emphasis>
|
||
.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
width</emphasis>
|
||
of the key symbol map must be equal to <emphasis>
|
||
numLevels</emphasis>
|
||
of the widest key type bound to the key.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The number of symbols, <emphasis>
|
||
nSyms</emphasis>
|
||
, must equal the number of groups times <emphasis>
|
||
width</emphasis>
|
||
.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbKeyActionsMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
, <emphasis>
|
||
firstKeyAction</emphasis>
|
||
and <emphasis>
|
||
nKeyActions</emphasis>
|
||
specify a subset of the keyboard keys to which new actions are to be assigned
|
||
and <emphasis>
|
||
totalActions</emphasis>
|
||
specifies the total number of actions to be assigned to those keys. If any of
|
||
the keys specified by <emphasis>
|
||
firstKeyAction</emphasis>
|
||
and <emphasis>
|
||
nKeyActions</emphasis>
|
||
are not legal, a <emphasis>
|
||
Match</emphasis>
|
||
error results. The <emphasis>
|
||
count</emphasis>
|
||
field of the <emphasis>
|
||
actions</emphasis>
|
||
return value has <emphasis>
|
||
nKeyActions</emphasis>
|
||
elements of type CARD8; each element of <emphasis>
|
||
count</emphasis>
|
||
specifies the number of actions bound to the corresponding key. The <emphasis>
|
||
actions</emphasis>
|
||
list in the <emphasis>
|
||
actions</emphasis>
|
||
field has <emphasis>
|
||
totalActions</emphasis>
|
||
elements of type KB_ACTION. These actions are assigned to each target key in
|
||
turn, as specified by <emphasis>
|
||
count</emphasis>
|
||
. The list of actions assigned to each key must either be empty or have exactly
|
||
as many actions as the key has symbols, or a <emphasis>
|
||
Match</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbKeyBehaviorsMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
, <emphasis>
|
||
firstKeyBehavior</emphasis>
|
||
and <emphasis>
|
||
nKeyBehaviors</emphasis>
|
||
specify a subset of the keyboard keys to which new behaviors are to be
|
||
assigned, and <emphasis>
|
||
totalKeyBehaviors</emphasis>
|
||
specifies the total number of keys in that range to be assigned non-default
|
||
behavior. If any of the keys specified by <emphasis>
|
||
firstKeyBehavior</emphasis>
|
||
and <emphasis>
|
||
nKeyBehaviors</emphasis>
|
||
are not legal, a <emphasis>
|
||
Match</emphasis>
|
||
error results. The <emphasis>
|
||
behaviors</emphasis>
|
||
list has <emphasis>
|
||
totalKeyBehaviors</emphasis>
|
||
elements of type KB_BEHAVIOR; each entry of <emphasis>
|
||
behaviors</emphasis>
|
||
specifies a key in the specified range and a new behavior for that key; any
|
||
key that falls in the range specified by <emphasis>
|
||
firstBehavior</emphasis>
|
||
and <emphasis>
|
||
nBehaviors</emphasis>
|
||
for which no behavior is specified in <emphasis>
|
||
behaviors</emphasis>
|
||
is assigned the default behavior, <emphasis>
|
||
KB_Default</emphasis>
|
||
. The new behaviors must be legal, or a <emphasis>
|
||
Value</emphasis>
|
||
error results. To be legal, the behavior specified in the <emphasis>
|
||
XkbSetMap</emphasis>
|
||
request must:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Specify a key in the range indicated by <emphasis>
|
||
firstKeyBehavior</emphasis>
|
||
and <emphasis>
|
||
nKeyBehaviors</emphasis>
|
||
.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Not specify the <emphasis>
|
||
permanent</emphasis>
|
||
flag; permanent behaviors cannot be set or changed using the <emphasis>
|
||
XkbSetMap</emphasis>
|
||
request.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>If present, the <emphasis>
|
||
KB_Overlay1</emphasis>
|
||
and <emphasis>
|
||
KB_Overlay2</emphasis>
|
||
behaviors must specify a keycode for the overlay key that is valid for the
|
||
current keyboard.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>If present, the <emphasis>
|
||
KB_RadioGroup</emphasis>
|
||
behavior must specify a legal index (0…31) for the radio group to which the
|
||
key belongs.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
Key behaviors that are not recognized by the server are accepted but ignored.
|
||
Attempts to replace a "permanent" behavior are silently ignored; the behavior
|
||
is not replaced, but not error is generated and any other components specified
|
||
in the <emphasis>
|
||
XkbSetMap</emphasis>
|
||
request are updated, as appropriate.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbVirtualModsMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
, <emphasis>
|
||
virtualMods</emphasis>
|
||
is a mask which specifies the virtual modifiers to be rebound. The <emphasis>
|
||
vmods</emphasis>
|
||
list specifies the real modifiers that are bound to each of the virtual
|
||
modifiers specified in <emphasis>
|
||
virtualMods</emphasis>
|
||
, starting from the lowest numbered virtual modifier and progressing upward.
|
||
Any virtual modifier that is not specified in <emphasis>
|
||
virtualMods</emphasis>
|
||
has no corresponding entry in <emphasis>
|
||
vmods</emphasis>
|
||
, so the <emphasis>
|
||
vmods</emphasis>
|
||
list has one entry for each bit that is set in <emphasis>
|
||
virtualMods</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbExplicitComponentsMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
, <emphasis>
|
||
firstKeyExplicit</emphasis>
|
||
and <emphasis>
|
||
nKeyExplicit</emphasis>
|
||
specify a subset of the keyboard keys to which new explicit components are to
|
||
be assigned, and <emphasis>
|
||
totalKeyExplicit</emphasis>
|
||
specifies the total number of keys in that range that have at least one
|
||
explicit component. The <emphasis>
|
||
explicit</emphasis>
|
||
list has <emphasis>
|
||
totalKeyExplicit</emphasis>
|
||
elements of type KB_KEYEXPLICIT; each entry of <emphasis>
|
||
explicit</emphasis>
|
||
specifies a key in the specified range and a new set of explicit components
|
||
for that key. Any key that falls in the range specified by <emphasis>
|
||
firstKeyExplicit</emphasis>
|
||
and <emphasis>
|
||
nKeyExplicit</emphasis>
|
||
that is not assigned some value in <emphasis>
|
||
explicit</emphasis>
|
||
has no explicit components.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbModifierMapMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
, <emphasis>
|
||
firstModMapKey</emphasis>
|
||
and <emphasis>
|
||
nModMapKeys</emphasis>
|
||
specify a subset of the keyboard keys for which new modifier mappings are to
|
||
be assigned, and <emphasis>
|
||
totalModMapKeys</emphasis>
|
||
specifies the total number of keys in that range to which at least one
|
||
modifier is bound. The <emphasis>
|
||
modmap</emphasis>
|
||
list has <emphasis>
|
||
totalModMapKeys</emphasis>
|
||
elements of type KB_KEYMODMAP; each entry of <emphasis>
|
||
modmap</emphasis>
|
||
specifies a key in the specified range and a new set of modifiers to be
|
||
associated with that key. Any key that falls in the range specified by
|
||
<emphasis>
|
||
firstModMapKey</emphasis>
|
||
and <emphasis>
|
||
nModMapKeys</emphasis>
|
||
that is not assigned some value in <emphasis>
|
||
modmap</emphasis>
|
||
has no associated modifiers.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the modifier map is changed by the <emphasis>
|
||
XkbSetMap</emphasis>
|
||
request, any changes are also reflected in the core protocol modifier mapping.
|
||
Changes to the core protocol modifier mapping are reported to XKB-unaware
|
||
clients via <emphasis>
|
||
MappingNotify</emphasis>
|
||
events and can be retrieved with the core protocol <emphasis>
|
||
GetModifierMapping</emphasis>
|
||
request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbVirtualModMapMask</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
, <emphasis>
|
||
firstVModMapKey</emphasis>
|
||
and <emphasis>
|
||
nVModMapKeys</emphasis>
|
||
specify a subset of the keyboard keys for which new modifier mappings are to
|
||
be assigned, and <emphasis>
|
||
totalVModMapKeys</emphasis>
|
||
specifies the total number of keys in that range to which at least one virtual
|
||
modifier is bound. The <emphasis>
|
||
vmodmap</emphasis>
|
||
list has <emphasis>
|
||
totalVModMapKeys</emphasis>
|
||
elements of type KB_KEYVMODMAP; each entry of <emphasis>
|
||
vmodmap</emphasis>
|
||
specifies a key in the specified range and a new set of virtual modifiers to
|
||
be associated with that key. Any key that falls in the range specified by
|
||
<emphasis>
|
||
firstVModMapKey</emphasis>
|
||
and <emphasis>
|
||
nVModMapKeys</emphasis>
|
||
that is not assigned some value in <emphasis>
|
||
vmodmap</emphasis>
|
||
has no associated virtual modifiers.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the resulting keyboard map is legal, the server updates the keyboard map.
|
||
Changes to some keyboard components have indirect effects on others:
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the <emphasis>
|
||
XkbSetMapRecomputeActions</emphasis>
|
||
bit is set in <emphasis>
|
||
flags</emphasis>
|
||
, the actions associated with any keys for which symbol or modifier bindings
|
||
were changed by this request are recomputed as described in
|
||
<link linkend='Assigning_Actions_To_Keys'>Assigning Actions To Keys</link>. Note
|
||
that actions are recomputed <emphasis>
|
||
after </emphasis>
|
||
any actions specified in this request are bound to keys, so the actions
|
||
specified in this request might be clobbered by the automatic assignment of
|
||
actions to keys.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the group width of an existing key type is changed, the list of symbols
|
||
associated with any keys of the changed type might be resized accordingly. If
|
||
the list increases in size, any unspecified new symbols are initialized to
|
||
<emphasis>
|
||
NoSymbol</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the list of actions associated with a key is not empty, changing the key
|
||
type of the key resizes the list. Unspecified new actions are calculated by
|
||
applying any keyboard symbol interpretations to the corresponding symbols.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The number of groups global to the keyboard is always equal to the largest
|
||
number of groups specified by any of the key symbol maps. Changing the number
|
||
of groups in one or more key symbol maps may change the number of groups global
|
||
to the keyboard.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Assigning key behavior <emphasis>
|
||
KB_RadioGroup</emphasis>
|
||
to a key adds that key as a member of the specified radio group. Changing a
|
||
key with the existing behavior <emphasis>
|
||
KB_RadioGroup</emphasis>
|
||
removes that key from the group. Changing the elements of a radio group can
|
||
cause synthetic key press or key release events if the key to be added or
|
||
removed is logically down at the time of the change.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Changing a key with behavior <emphasis>
|
||
KB_Lock</emphasis>
|
||
causes a synthetic key release event if the key is logically but not
|
||
physically down at the time of the change.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
This request sends an <emphasis>
|
||
XkbMapNotify</emphasis>
|
||
event which reflects both explicit and indirect map changes to any interested
|
||
clients. If any symbolic names are changed, it sends a <emphasis>
|
||
XkbNamesNotify</emphasis>
|
||
reflecting the changes to any interested clients. XKB-unaware clients are
|
||
notified of keyboard changes via core protocol <emphasis>
|
||
MappingNotify</emphasis>
|
||
events.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Key press and key release events caused by changing key behavior may cause
|
||
additional <emphasis>
|
||
XkbStateNotify</emphasis>
|
||
or <emphasis>
|
||
XkbIndicatorStateNotify</emphasis>
|
||
events.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Querying_and_Changing_the_Compatibility_Map'>
|
||
<title>Querying and Changing the Compatibility Map</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbGetCompatMap</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
groups: KB_GROUPMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
getAllSI: BOOL</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstSI, nSI: CARD16
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
deviceID: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
groupsRtrn: KB_GROUPMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
firstSIRtrn, nSIRtrn, nTotalSI: CARD16
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
siRtrn: LISTofKB_SYMINTERP
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
groupRtrn: LISTofKB_MODDEF</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Match</emphasis>
|
||
, <emphasis>
|
||
Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request returns the listed compatibility map components for the keyboard
|
||
specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. If <emphasis>
|
||
deviceSpec</emphasis>
|
||
does not specify a valid keyboard device, a <emphasis>
|
||
Keyboard</emphasis>
|
||
Error results. On return, <emphasis>
|
||
deviceID</emphasis>
|
||
reports the input extension identifier of the keyboard device or <emphasis>
|
||
0</emphasis>
|
||
if the server does not support the input extension.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
getAllSI</emphasis>
|
||
is <emphasis>
|
||
False</emphasis>
|
||
, <emphasis>
|
||
firstSI</emphasis>
|
||
and <emphasis>
|
||
nSI</emphasis>
|
||
specify a subset of the symbol interpretations to be returned; if used,
|
||
<emphasis>
|
||
nSI</emphasis>
|
||
must be greater than <emphasis>
|
||
0</emphasis>
|
||
and all of the elements specified by <emphasis>
|
||
firstSI</emphasis>
|
||
and <emphasis>
|
||
nSI</emphasis>
|
||
must be defined or a <emphasis>
|
||
Value</emphasis>
|
||
error results. If <emphasis>
|
||
getAllSyms</emphasis>
|
||
is <emphasis>
|
||
True</emphasis>
|
||
, the server ignores <emphasis>
|
||
firstSym</emphasis>
|
||
and <emphasis>
|
||
nSyms</emphasis>
|
||
and returns all of the symbol interpretations defined for the keyboard.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
groups</emphasis>
|
||
mask specifies the groups for which compatibility maps are to be returned.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
nTotalSI</emphasis>
|
||
return value reports the total number of symbol interpretations defined for
|
||
the keyboard. On successful return, the <emphasis>
|
||
siRtrn</emphasis>
|
||
return list contains the definitions for <emphasis>
|
||
nSIRtrn</emphasis>
|
||
symbol interpretations beginning at <emphasis>
|
||
firstSIRtrn</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
groupRtrn</emphasis>
|
||
return values report the entries in the group compatibility map for any groups
|
||
specified in the <emphasis>
|
||
groupsRtrn</emphasis>
|
||
return value.
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbSetCompatMap</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
recomputeActions: BOOL</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
truncateSI: BOOL</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
groups: KB_GROUPMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstSI, nSI: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
si: LISTofKB_SYMINTERPRET</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
groupMaps: LISTofKB_MODDEF</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Match</emphasis>
|
||
, <emphasis>
|
||
Value</emphasis>
|
||
, <emphasis>
|
||
Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request changes a specified subset of the compatibility map of the
|
||
keyboard indicated by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. If <emphasis>
|
||
deviceSpec</emphasis>
|
||
specifies an invalid device, a <emphasis>
|
||
Keyboard</emphasis>
|
||
error results and nothing is changed.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
firstSI</emphasis>
|
||
and <emphasis>
|
||
nSI</emphasis>
|
||
fields specify a subset of the keyboard symbol interpretations to be changed.
|
||
The <emphasis>
|
||
si</emphasis>
|
||
list specifies new values for each of the interpretations in that range.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The first symbol interpretation to be changed, <emphasis>
|
||
firstSI</emphasis>
|
||
, must be less than or equal to the unchanged length of the list of symbol
|
||
interpretations, or a <emphasis>
|
||
Value</emphasis>
|
||
error results. If the resulting list would be larger than the unchanged list,
|
||
it server list of symbol interpretations is automatically increased in size.
|
||
Otherwise, if <emphasis>
|
||
truncateSyms</emphasis>
|
||
is <emphasis>
|
||
True</emphasis>
|
||
, the server deletes any symbol interpretations after the last element changed
|
||
by this request, and reduces the length of the list accordingly.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
groupMaps</emphasis>
|
||
fields contain new definitions for a subset of the group compatibility map;
|
||
<emphasis>
|
||
groups</emphasis>
|
||
specifies the group compatibility map entries to be updated from <emphasis>
|
||
groupMaps</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
All changed compatibility maps and symbol interpretations must either ignore
|
||
group state or specify a legal range of groups, or a <emphasis>
|
||
Value</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the <emphasis>
|
||
recomputeActions</emphasis>
|
||
field is <emphasis>
|
||
True</emphasis>
|
||
, the server regenerates recalculates the actions bound to all keyboard keys by
|
||
applying the new symbol interpretations to the entire key symbol map, as
|
||
described in <link linkend='Assigning_Actions_To_Keys'>Assigning Actions To
|
||
Keys</link>.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Querying_and_Changing_Indicators'>
|
||
<title>Querying and Changing Indicators</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbGetIndicatorState</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
deviceID: CARD8
|
||
state: KB_INDICATORMASK</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request reports the current state of the indicators for the keyboard
|
||
specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. If <emphasis>
|
||
deviceSpec</emphasis>
|
||
does not specify a valid keyboard, a <emphasis>
|
||
Keyboard</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
On successful return, the <emphasis>
|
||
deviceID</emphasis>
|
||
field reports the input extension identifier of the keyboard or <emphasis>
|
||
0</emphasis>
|
||
if the server does not support the input extension. The <emphasis>
|
||
state</emphasis>
|
||
return value reports the state of each of the thirty-two indicators on the
|
||
specified keyboard. The least-significant bit corresponds to indicator 0, the
|
||
most significant bit to indicator 31; if a bit is set, the corresponding
|
||
indicator is lit.
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbGetIndicatorMap</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
which: KB_INDICATORMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
deviceID: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
which: KB_INDICATORMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
realIndicators: KB_INDICATORMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
nIndicators: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
maps: LISTofKB_INDICATORMAP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Value</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request returns a subset of the maps for the indicators on the keyboard
|
||
specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. If <emphasis>
|
||
deviceSpec</emphasis>
|
||
does not specify a valid keyboard device, a <emphasis>
|
||
Keyboard</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
which</emphasis>
|
||
field specifies the subset to be returned; a set bit in the which field
|
||
indicates that the map for the corresponding indicator should be returned.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
On successful return, the <emphasis>
|
||
deviceID</emphasis>
|
||
field reports the input extension identifier of the keyboard or <emphasis>
|
||
0</emphasis>
|
||
if the server does not support the input extension. Any indicators specified
|
||
in <emphasis>
|
||
realIndicators</emphasis>
|
||
are actually present on the keyboard; the rest are virtual indicators. Virtual
|
||
indicators do not directly cause any visible or audible effect when they change
|
||
state, but they do cause <emphasis>
|
||
XkbIndicatorStateNotify</emphasis>
|
||
events.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
maps</emphasis>
|
||
return value reports the requested indicator maps. Indicator maps are
|
||
described in <link linkend='Indicator_Maps'>Indicator Maps</link>
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbSetIndicatorMap</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
which: KB_INDICATORMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
maps: LISTofKB_INDICATORMAP</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Value</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request changes a subset of the maps on the keyboard specified by
|
||
<emphasis>
|
||
deviceSpec</emphasis>
|
||
. If <emphasis>
|
||
deviceSpec</emphasis>
|
||
does not specify a valid keyboard device, a <emphasis>
|
||
Keyboard</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
which</emphasis>
|
||
field specifies the subset to be changed; the <emphasis>
|
||
maps</emphasis>
|
||
field contains the new definitions.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If successful, the new indicator maps are applied immediately. If any
|
||
indicators change state as a result of the new maps, the server generates
|
||
<emphasis>
|
||
XkbIndicatorStateNotify</emphasis>
|
||
events as appropriate.
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbGetNamedIndicator</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
ledClass: KB_LEDCLASSSPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
ledID: KB_IDSPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
indicator: ATOM
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
deviceID: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
supported: BOOL
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
indicator: ATOM
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
found: BOOL
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
on: BOOL
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
realIndicator: BOOL
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
ndx: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
map: KB_INDICATORMAP</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Atom</emphasis>
|
||
, <emphasis>
|
||
Value</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request returns information about the indicator specified by <emphasis>
|
||
ledClass</emphasis>
|
||
, <emphasis>
|
||
ledID</emphasis>
|
||
, and <emphasis>
|
||
indicator</emphasis>
|
||
on the keyboard specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. The <emphasis>
|
||
indicator</emphasis>
|
||
field specifies the name of the indicator for which information is to be
|
||
returned.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
deviceSpec</emphasis>
|
||
does not specify a device with indicators, a <emphasis>
|
||
Keyboard</emphasis>
|
||
error results. If <emphasis>
|
||
ledClass</emphasis>
|
||
does not have the value <emphasis>
|
||
DfltXIClass</emphasis>
|
||
, <emphasis>
|
||
LedFeedbackClass</emphasis>
|
||
, or <emphasis>
|
||
KbdFeedbackClass</emphasis>
|
||
, a <emphasis>
|
||
Value</emphasis>
|
||
error results. If <emphasis>
|
||
ledID</emphasis>
|
||
does not have the value <emphasis>
|
||
DfltXIId</emphasis>
|
||
or specify the identifier of a feedback of the class specified by <emphasis>
|
||
ledClass</emphasis>
|
||
on the device specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
, a <emphasis>
|
||
Match</emphasis>
|
||
error results. If <emphasis>
|
||
indicator</emphasis>
|
||
is not a valid ATOM other than <emphasis>
|
||
None</emphasis>
|
||
, an <emphasis>
|
||
Atom</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
This request is always supported with default class and identifier on the core
|
||
keyboard device. If the request specifies a device other than the core keyboard
|
||
device or a feedback class and identifier other than the defaults, and the
|
||
server does not support indicator names or indicator maps for extension
|
||
devices, the <emphasis>
|
||
supported</emphasis>
|
||
return value is <emphasis>
|
||
False</emphasis>
|
||
and the values of the other fields in the reply are undefined. If the client
|
||
which issued the unsupported request has also selected to do so, it will also
|
||
receive an <emphasis>
|
||
XkbExtensionDeviceNotify</emphasis>
|
||
event which reports the attempt to use an unsupported feature, in this case
|
||
one or both of <emphasis>
|
||
XkbXI_IndicatorMaps</emphasis>
|
||
or <emphasis>
|
||
XkbXI_IndicatorNames</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Otherwise, <emphasis>
|
||
supported</emphasis>
|
||
is <emphasis>
|
||
True</emphasis>
|
||
and the <emphasis>
|
||
deviceID</emphasis>
|
||
field reports the input extension identifier of the keyboard or <emphasis>
|
||
0</emphasis>
|
||
if the server does not support the input extension. The <emphasis>
|
||
indicator</emphasis>
|
||
return value reports the name for which information was requested and the
|
||
<emphasis>
|
||
found</emphasis>
|
||
return value is <emphasis>
|
||
True</emphasis>
|
||
if an indicator with the specified name was found on the device.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If a matching indicator was found:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
on</emphasis>
|
||
return value reports the state of the indicator at the time of the request.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
realIndicator</emphasis>
|
||
return value is <emphasis>
|
||
True</emphasis>
|
||
if the requested indicator is actually present on the keyboard or <emphasis>
|
||
False</emphasis>
|
||
if it is virtual.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
ndx</emphasis>
|
||
return value reports the index of the indicator in the requested feedback.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
map</emphasis>
|
||
return value reports the indicator map used by to automatically change the
|
||
state of the specified indicator in response to changes in keyboard state or
|
||
controls.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
If no matching indicator is found, the <emphasis>
|
||
found</emphasis>
|
||
return value is <emphasis>
|
||
False</emphasis>
|
||
, and the <emphasis>
|
||
on</emphasis>
|
||
, <emphasis>
|
||
realIndicator</emphasis>
|
||
, <emphasis>
|
||
ndx</emphasis>
|
||
, and <emphasis>
|
||
map</emphasis>
|
||
return values are undefined.
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbSetNamedIndicator</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
ledClass: KB_LEDCLASSSPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
ledID: KB_IDSPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
indicator: ATOM</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
setState: BOOL</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
on: BOOL</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
setMap: BOOL</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
createMap: BOOL</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
map: KB_SETINDICATORMAP</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Atom</emphasis>
|
||
, <emphasis>
|
||
Access</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request changes various aspects of the indicator specified by <emphasis>
|
||
ledClass</emphasis>
|
||
, <emphasis>
|
||
ledID</emphasis>
|
||
, and <emphasis>
|
||
indicator</emphasis>
|
||
on the keyboard specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. The <emphasis>
|
||
indicator</emphasis>
|
||
argument specifies the name of the indicator to be updated.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
deviceSpec</emphasis>
|
||
does not specify a device with indicators, a <emphasis>
|
||
Keyboard</emphasis>
|
||
error results. If <emphasis>
|
||
ledClass</emphasis>
|
||
does not have the value <emphasis>
|
||
DfltXIClass</emphasis>
|
||
, <emphasis>
|
||
LedFeedbackClass</emphasis>
|
||
, or <emphasis>
|
||
KbdFeedbackClass</emphasis>
|
||
, a <emphasis>
|
||
Value</emphasis>
|
||
error results. If <emphasis>
|
||
ledID</emphasis>
|
||
does not have the value <emphasis>
|
||
DfltXIId</emphasis>
|
||
or specify the identifier of a feedback of the class specified by <emphasis>
|
||
ledClass</emphasis>
|
||
on the device specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
, a <emphasis>
|
||
Match</emphasis>
|
||
error results. If <emphasis>
|
||
indicator</emphasis>
|
||
is not a valid ATOM other than <emphasis>
|
||
None</emphasis>
|
||
, an <emphasis>
|
||
Atom</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
This request is always supported with default class and identifier on the core
|
||
keyboard device. If the request specifies a device other than the core keyboard
|
||
device or a feedback class and identifier other than the defaults, and the
|
||
server does not support indicator names or indicator maps for extension
|
||
devices, the <emphasis>
|
||
supported</emphasis>
|
||
return value is <emphasis>
|
||
False</emphasis>
|
||
and the values of the other fields in the reply are undefined. If the client
|
||
which issued the unsupported request has also selected to do so, it will also
|
||
receive an <emphasis>
|
||
XkbExtensionDeviceNotify</emphasis>
|
||
event which reports the attempt to use an unsupported feature, in this case
|
||
one or both of <emphasis>
|
||
XkbXI_IndicatorMaps</emphasis>
|
||
and <emphasis>
|
||
XkbXI_IndicatorNames</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Otherwise, <emphasis>
|
||
supported</emphasis>
|
||
is <emphasis>
|
||
True</emphasis>
|
||
and the <emphasis>
|
||
deviceID</emphasis>
|
||
field reports the input extension identifier of the keyboard or <emphasis>
|
||
0</emphasis>
|
||
if the server does not support the input extension. The <emphasis>
|
||
indicator</emphasis>
|
||
return value reports the name for which information was requested and the
|
||
<emphasis>
|
||
found</emphasis>
|
||
return value is <emphasis>
|
||
True</emphasis>
|
||
if an indicator with the specified name was found on the device.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If no indicator with the specified name is found on the specified device, and
|
||
the <emphasis>
|
||
createMap</emphasis>
|
||
field is <emphasis>
|
||
True</emphasis>
|
||
, XKB assigns the specified name to the lowest-numbered indicator that has no
|
||
name (i.e. whose name is <emphasis>
|
||
None</emphasis>
|
||
) and applies the rest of the fields in the request to the newly named
|
||
indicator. If no unnamed indicators remain, this request reports no error and
|
||
has no effect.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If no matching indicator is found or new indicator assigned this request
|
||
reports no error and has no effect. Otherwise, it updates the indicator as
|
||
follows:
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
setMap </emphasis>
|
||
is <emphasis>
|
||
True</emphasis>
|
||
, XKB changes the map for the indicator (see <link linkend='Indicator_Maps'>Indicator Maps</link>) to reflect the
|
||
values specified in <emphasis>
|
||
map</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
setState</emphasis>
|
||
is <emphasis>
|
||
True</emphasis>
|
||
, XKB attempts to explicitly change the state of the indicator to the state
|
||
specified in <emphasis>
|
||
on</emphasis>
|
||
. The effects of an attempt to explicitly change the state of an indicator
|
||
depend on the values in the map for that indicator and are not guaranteed to
|
||
succeed.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If this request affects both indicator map and state, it updates the indicator
|
||
map before attempting to change its state, so the success of the explicit
|
||
change depends on the indicator map values specified in the request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If this request changes the indicator map, it applies the new map immediately
|
||
to determine the appropriate state for the indicator given the new indicator
|
||
map and the current state of the keyboard.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Querying_and_Changing_Symbolic_Names'>
|
||
<title>Querying and Changing Symbolic Names</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbGetNames</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
which: KB_NAMEDETAILMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
deviceID: CARD8
|
||
which: KB_NAMESMASK
|
||
minKeyCode, maxKeyCode: KEYCODE
|
||
nTypes: CARD8
|
||
nKTLevels: CARD16
|
||
groupNames: KB_GROUPMASK
|
||
virtualMods: KB_VMODMASK
|
||
firstKey: KEYCODE
|
||
nKeys: CARD8
|
||
indicators: KB_INDICATORMASK
|
||
nRadioGroups, nKeyAliases: CARD8
|
||
present: KB_NAMEDETAILMASK
|
||
valueList: LISTofITEMs</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Value</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request returns the symbolic names for various components of the keyboard
|
||
mapping for the device specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. The <emphasis>
|
||
which</emphasis>
|
||
field specifies the keyboard components for which names are to be returned. If
|
||
<emphasis>
|
||
deviceSpec</emphasis>
|
||
does not specify a valid keyboard device, a <emphasis>
|
||
Keyboard</emphasis>
|
||
error results. If any undefined bits in <emphasis>
|
||
which</emphasis>
|
||
are non-zero, a <emphasis>
|
||
Value</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
deviceID</emphasis>
|
||
return value contains the X Input Extension device identifier of the specified
|
||
device or <emphasis>
|
||
0</emphasis>
|
||
if the server does not support the input extension. The <emphasis>
|
||
present</emphasis>
|
||
and <emphasis>
|
||
valueList</emphasis>
|
||
return values specify the components for which names are being reported. If a
|
||
component is specified in <emphasis>
|
||
present</emphasis>
|
||
, the corresponding element is present in the <emphasis>
|
||
valueList</emphasis>
|
||
, otherwise that component has length <emphasis>
|
||
0</emphasis>
|
||
. The components of the <emphasis>
|
||
valueList</emphasis>
|
||
appear in the following order, when present:.
|
||
</para>
|
||
|
||
<informaltable frame='none'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='3' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<colspec colname='c2' colwidth='1.0*'/>
|
||
<colspec colname='c3' colwidth='1.0*'/>
|
||
<thead>
|
||
<row rowsep='1'>
|
||
<entry>Component</entry>
|
||
<entry>Size</entry>
|
||
<entry>Type</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbKeycodesName</emphasis>
|
||
</entry>
|
||
<entry>1</entry>
|
||
<entry> ATOM</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbGeometryName</emphasis>
|
||
</entry>
|
||
<entry>1</entry>
|
||
<entry> ATOM</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbSymbolsName</emphasis>
|
||
</entry>
|
||
<entry>1</entry>
|
||
<entry> ATOM</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbPhysSymbolsName</emphasis>
|
||
</entry>
|
||
<entry>1</entry>
|
||
<entry> ATOM</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbTypesName</emphasis>
|
||
</entry>
|
||
<entry>1</entry>
|
||
<entry> ATOM</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbCompatName</emphasis>
|
||
</entry>
|
||
<entry>1</entry>
|
||
<entry> ATOM</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbKeyTypeNames</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
nTypes</emphasis>
|
||
</entry>
|
||
<entry> LISTofATOM</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbKTLevelNames</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
nTypes</emphasis>
|
||
,
|
||
<emphasis>
|
||
nKTLevels</emphasis>
|
||
</entry>
|
||
<entry>{ count: LISTofCARD8,
|
||
names: LISTofATOM }</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbIndicatorNames</emphasis>
|
||
</entry>
|
||
<entry>One per bit set in <emphasis>
|
||
indicators</emphasis>
|
||
</entry>
|
||
<entry> LISTofATOM</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbVirtualModNames</emphasis>
|
||
</entry>
|
||
<entry>One per bit set in <emphasis>
|
||
virtualMods</emphasis>
|
||
</entry>
|
||
<entry> LISTofATOM</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbGroupNames </emphasis>
|
||
</entry>
|
||
<entry>One per bit set in <emphasis>
|
||
groupNames</emphasis>
|
||
</entry>
|
||
<entry> LISTofATOM</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbKeyNames</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
nKeys</emphasis>
|
||
</entry>
|
||
<entry> LISTofKB_KEYNAME</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbKeyAliases</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
nKeyAliases</emphasis>
|
||
</entry>
|
||
<entry> LISTofKB_KEYALIAS</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbRGNames</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
nRadioGroups</emphasis>
|
||
</entry>
|
||
<entry> LISTofATOM</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
If type names are reported, the <emphasis>
|
||
nTypes</emphasis>
|
||
return value reports the number of types defined for the keyboard, and the
|
||
list of key type names in <emphasis>
|
||
valueList</emphasis>
|
||
has <emphasis>
|
||
nTypes</emphasis>
|
||
elements.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If key type level names are reported, the list of key type level names in the
|
||
<emphasis>
|
||
valueList</emphasis>
|
||
has two parts: The <emphasis>
|
||
count</emphasis>
|
||
array has <emphasis>
|
||
nTypes</emphasis>
|
||
elements, each of which reports the number of level names reported for the
|
||
corresponding key type. The <emphasis>
|
||
names</emphasis>
|
||
array has <emphasis>
|
||
nKTLevels</emphasis>
|
||
atoms and reports the names of each type sequentially. The <emphasis>
|
||
nKTLevels</emphasis>
|
||
return value is always equal to the sum of all of the elements of the
|
||
<emphasis>
|
||
count</emphasis>
|
||
array.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If indicator names are reported, the <emphasis>
|
||
indicators</emphasis>
|
||
mask specifies the indicators for which names are defined; any indicators not
|
||
specified in <emphasis>
|
||
indicators</emphasis>
|
||
have the name <emphasis>
|
||
None</emphasis>
|
||
. The list of indicator names in <emphasis>
|
||
valueList</emphasis>
|
||
contains the names of the listed indicators, beginning with the
|
||
lowest-numbered indicator for which a name is defined and proceeding to the
|
||
highest.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If virtual modifier names are reported, the <emphasis>
|
||
virtualMods</emphasis>
|
||
mask specifies the virtual modifiers for which names are defined; any virtual
|
||
modifiers not specified in <emphasis>
|
||
virtualMods</emphasis>
|
||
have the name <emphasis>
|
||
None</emphasis>
|
||
. The list of virtual modifier names in <emphasis>
|
||
valueList</emphasis>
|
||
contains the names of the listed virtual modifiers, beginning with the
|
||
lowest-numbered virtual modifier for which a name is defined and proceeding to
|
||
the highest.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If group names are reported, the <emphasis>
|
||
groupNames</emphasis>
|
||
mask specifies the groups for which names are defined; any groups not
|
||
specified in <emphasis>
|
||
groupNames</emphasis>
|
||
have the name <emphasis>
|
||
None</emphasis>
|
||
. The list of group names in <emphasis>
|
||
valueList</emphasis>
|
||
contains the names of the listed groups, beginning with the lowest-numbered
|
||
group for which a name is defined and proceeding to the highest.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If key names are reported, the <emphasis>
|
||
firstKey</emphasis>
|
||
and <emphasis>
|
||
nKeys</emphasis>
|
||
return values specify a range of keys which includes all keys for which names
|
||
are defined; any key that does not fall in the range specified by <emphasis>
|
||
firstKey</emphasis>
|
||
and <emphasis>
|
||
nKeys</emphasis>
|
||
has the name <emphasis>
|
||
NullKeyName</emphasis>
|
||
. The list of key names in the <emphasis>
|
||
valueList</emphasis>
|
||
has <emphasis>
|
||
nKeys</emphasis>
|
||
entries and specifies the names of the keys beginning at <emphasis>
|
||
firstKey</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If key aliases are reported, the <emphasis>
|
||
nKeyAliases</emphasis>
|
||
return value specifies the total number of key aliases defined for the
|
||
keyboard. The list of key aliases in <emphasis>
|
||
valueList</emphasis>
|
||
has <emphasis>
|
||
nKeyAliases</emphasis>
|
||
entries, each of which reports an alias and the real name of the key to which
|
||
it corresponds.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If radio group names are reported, the <emphasis>
|
||
nRadioGroups</emphasis>
|
||
return value specifies the number of radio groups on the keyboard for which
|
||
names are defined. The list of radio group names in <emphasis>
|
||
valueList</emphasis>
|
||
reports the names of each group and has <emphasis>
|
||
nRadioGroups</emphasis>
|
||
entries.
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbSetNames</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoargs'>which: KB_NAMEDETAILMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
virtualMods: KB_VMODMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstType, nTypes: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstKTLevel, nKTLevels: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
totalKTLevelNames: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
indicators: KB_INDICATORMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
groupNames: KB_GROUPMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
nRadioGroups: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstKey: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
nKeys, nKeyAliases: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
valueList: LISTofITEMs</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Atom</emphasis>
|
||
, <emphasis>
|
||
Value</emphasis>
|
||
, <emphasis>
|
||
Match</emphasis>
|
||
, <emphasis>
|
||
Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request changes the symbolic names for the requested components of the
|
||
keyboard specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. The <emphasis>
|
||
which</emphasis>
|
||
field specifies the components for which one or more names are to be updated.
|
||
If <emphasis>
|
||
deviceSpec</emphasis>
|
||
does not specify a valid keyboard device, a <emphasis>
|
||
Keyboard</emphasis>
|
||
error results. If any undefined bits in <emphasis>
|
||
which</emphasis>
|
||
are non-zero, a <emphasis>
|
||
Value</emphasis>
|
||
error results. If any error (other than <emphasis>
|
||
Alloc</emphasis>
|
||
or <emphasis>
|
||
Implementation</emphasis>
|
||
) occurs, this request returns without modifying any names.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
which</emphasis>
|
||
and <emphasis>
|
||
valueList</emphasis>
|
||
fields specify the components to be changed; the type of each <emphasis>
|
||
valueList</emphasis>
|
||
entry, the order in which components appear in the <emphasis>
|
||
valueList</emphasis>
|
||
when specified, and the correspondence between components in <emphasis>
|
||
which</emphasis>
|
||
and the entries in the <emphasis>
|
||
valueList</emphasis>
|
||
are as specified for the <emphasis>
|
||
XkbGetNames</emphasis>
|
||
request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If keycodes, geometry, symbols, physical symbols, types or compatibility map
|
||
names are to be changed, the corresponding entries in the <emphasis>
|
||
valueList</emphasis>
|
||
must have the value <emphasis>
|
||
None</emphasis>
|
||
or specify a valid ATOM, else an <emphasis>
|
||
Atom</emphasis>
|
||
error occurs.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If key type names are to be changed, the <emphasis>
|
||
firstType</emphasis>
|
||
and <emphasis>
|
||
nTypes</emphasis>
|
||
fields specify a range of types for which new names are supplied, and the list
|
||
of key type names in <emphasis>
|
||
valueList</emphasis>
|
||
has <emphasis>
|
||
nTypes</emphasis>
|
||
elements. Names for types that fall outside of the range specified by
|
||
<emphasis>
|
||
firstType</emphasis>
|
||
and <emphasis>
|
||
nTypes</emphasis>
|
||
are not affected. If this request specifies names for types that are not
|
||
present on the keyboard, a <emphasis>
|
||
Match</emphasis>
|
||
error results. All of the type names in the <emphasis>
|
||
valueList</emphasis>
|
||
must be valid ATOMs or have the value <emphasis>
|
||
None</emphasis>
|
||
, or an <emphasis>
|
||
Atom</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The names of the first four keyboard types are specified by the XKB extension
|
||
and cannot be changed; including any of the canonical types in this request
|
||
causes an <emphasis>
|
||
Access</emphasis>
|
||
error, as does trying to assign the name reserved for a canonical type to one
|
||
of the other key types.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If key type level names are to be changed, the <emphasis>
|
||
firstKTLevel</emphasis>
|
||
and <emphasis>
|
||
nKTLevels</emphasis>
|
||
fields specify a range of key types for which new level names are supplied,
|
||
and the list of key type level names in the <emphasis>
|
||
valueList</emphasis>
|
||
has two parts: The <emphasis>
|
||
count</emphasis>
|
||
array has <emphasis>
|
||
nKTLevels</emphasis>
|
||
elements, each of which specifies the number of levels for which names are
|
||
supplied on the corresponding key type; any levels for which no names are
|
||
specified are assigned the name <emphasis>
|
||
None</emphasis>
|
||
. The <emphasis>
|
||
names</emphasis>
|
||
array has <emphasis>
|
||
totalKTLevels</emphasis>
|
||
atoms and specifies the names of each type sequentially. The <emphasis>
|
||
totalKTLevels</emphasis>
|
||
field must always equal the sum of all of the elements of the <emphasis>
|
||
count</emphasis>
|
||
array. Level names for types that fall outside of the specified range are not
|
||
affected. If this request specifies level names for types that are not present
|
||
on the keyboard, or if it specifies more names for a type than the type has
|
||
levels, a <emphasis>
|
||
Match</emphasis>
|
||
error results. All specified type level names must be <emphasis>
|
||
None</emphasis>
|
||
or a valid ATOM or an <emphasis>
|
||
Atom</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If indicator names are to be changed, the <emphasis>
|
||
indicators</emphasis>
|
||
mask specifies the indicators for which new names are specified; the names for
|
||
indicators not specified in <emphasis>
|
||
indicators</emphasis>
|
||
are not affected. The list of indicator names in <emphasis>
|
||
valueList</emphasis>
|
||
contains the new names for the listed indicators, beginning with the
|
||
lowest-numbered indicator for which a name is defined and proceeding to the
|
||
highest. All specified indicator names must be a valid ATOM or <emphasis>
|
||
None</emphasis>
|
||
, or an <emphasis>
|
||
Atom</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If virtual modifier names are to be changed, the <emphasis>
|
||
virtualMods</emphasis>
|
||
mask specifies the virtual modifiers for which new names are specified; names
|
||
for any virtual modifiers not specified in <emphasis>
|
||
virtualMods</emphasis>
|
||
are not affected. The list of virtual modifier names in <emphasis>
|
||
valueList</emphasis>
|
||
contains the new names for the specified virtual modifiers, beginning with the
|
||
lowest-numbered virtual modifier for which a name is defined and proceeding to
|
||
the highest. All virtual modifier names must be valid ATOMs or <emphasis>
|
||
None</emphasis>
|
||
, or an <emphasis>
|
||
Atom</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If group names are to be changed, the <emphasis>
|
||
groupNames</emphasis>
|
||
mask specifies the groups for which new names are specified; the name of any
|
||
group not specified in <emphasis>
|
||
groupNames</emphasis>
|
||
is not changed. The list of group names in <emphasis>
|
||
valueList</emphasis>
|
||
contains the new names for the listed groups, beginning with the
|
||
lowest-numbered group for which a name is defined and proceeding to the
|
||
highest. All specified group names must be a valid ATOM or <emphasis>
|
||
None</emphasis>
|
||
, or an <emphasis>
|
||
Atom</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If key names are to be changed, the <emphasis>
|
||
firstKey</emphasis>
|
||
and <emphasis>
|
||
nKeys</emphasis>
|
||
fields specify a range of keys for which new names are defined; the name of
|
||
any key that does not fall in the range specified by <emphasis>
|
||
firstKey</emphasis>
|
||
and <emphasis>
|
||
nKeys</emphasis>
|
||
is not changed. The list of key names in the <emphasis>
|
||
valueList</emphasis>
|
||
has <emphasis>
|
||
nKeys</emphasis>
|
||
entries and specifies the names of the keys beginning at <emphasis>
|
||
firstKey</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If key aliases are to be changed, the <emphasis>
|
||
nKeyAliases</emphasis>
|
||
field specifies the length of a new list of key aliases for the keyboard. The
|
||
list of key aliases can only be replaced in its entirety; it cannot be
|
||
replaced. The list of key aliases in <emphasis>
|
||
valueList</emphasis>
|
||
has <emphasis>
|
||
nKeyAliases</emphasis>
|
||
entries, each of which reports an alias and the real name of the key to which
|
||
it corresponds.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
XKB does not check key names or aliases for consistency and validity, so
|
||
applications should take care not to assign duplicate names or aliases
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If radio group names are to be changed, the <emphasis>
|
||
nRadioGroups</emphasis>
|
||
field specifies the length of a new list of radio group names for the
|
||
keyboard. There is no way to edit the list of radio group names; it can only be
|
||
replaced in its entirety. The list of radio group names in <emphasis>
|
||
valueList</emphasis>
|
||
reports the names of each group and has <emphasis>
|
||
nRadioGroups</emphasis>
|
||
entries. If the list of radio group names specifies names for more radio
|
||
groups than XKB allows (32), a <emphasis>
|
||
Match</emphasis>
|
||
error results. All specified radio group names must be valid ATOMs or have the
|
||
value <emphasis>
|
||
None</emphasis>
|
||
, or an <emphasis>
|
||
Atom</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Querying_and_Changing_Keyboard_Geometry'>
|
||
<title>Querying and Changing Keyboard Geometry</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbGetGeometry</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
name: ATOM</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
deviceID: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
name: ATOM
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
found: BOOL
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
widthMM, heightMM: CARD16
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
baseColorNdx, labelColorNdx: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
properties: LISTofKB_PROPERTY
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
colors: LISTofSTRING8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
shapes: LISTofKB_SHAPE
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
sections: LISTofKB_SECTION
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
doodads: LISTofKB_DOODAD
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
keyAliases: LISTofKB_KEYALIAS</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request returns a description of the physical layout of a keyboard. If the
|
||
<emphasis>
|
||
name</emphasis>
|
||
field has the value <emphasis>
|
||
None</emphasis>
|
||
, or if name is identical to the name of the geometry for the keyboard
|
||
specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
, this request returns the geometry of the keyboard specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
; otherwise, if <emphasis>
|
||
name</emphasis>
|
||
is a valid atom other than <emphasis>
|
||
None</emphasis>
|
||
, the server returns the keyboard geometry description with that name in the
|
||
server database of keyboard components (see <link linkend='The_Server_Database_of_Keyboard_Components'>The Server Database of Keyboard
|
||
Components</link>) if one exists. If <emphasis>
|
||
deviceSpec</emphasis>
|
||
does not specify a valid keyboard device, a <emphasis>
|
||
Keyboard</emphasis>
|
||
error results. If <emphasis>
|
||
name</emphasis>
|
||
has a value other than <emphasis>
|
||
None</emphasis>
|
||
or a valid ATOM, an <emphasis>
|
||
Atom</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
On successful return, the <emphasis>
|
||
deviceID</emphasis>
|
||
field reports the X Input extension identifier of the keyboard device
|
||
specified in the request, or <emphasis>
|
||
0</emphasis>
|
||
if the server does not support the input extension.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
found</emphasis>
|
||
return value reports whether the requested geometry was available. If
|
||
<emphasis>
|
||
found</emphasis>
|
||
is <emphasis>
|
||
False</emphasis>
|
||
, no matching geometry was found and the remaining fields in the request reply
|
||
are undefined; if <emphasis>
|
||
found</emphasis>
|
||
is <emphasis>
|
||
True</emphasis>
|
||
, the remaining fields of the reply describe the requested keyboard geometry.
|
||
The interpretation of the components that make up a keyboard geometry is
|
||
described in detail in <link linkend='Keyboard_Geometry'>Keyboard
|
||
Geometry</link>
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbSetGeometry</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
name: ATOM</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
widthMM, heightMM, CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
baseColorNdx, labelColorNdx: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
shapes: LISTofKB_SHAPE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
sections: LISTofKB_SECTION</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
properties: LISTofKB_PROPERTY</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
colors: LISTofSTRING8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
doodads: LISTofKB_DOODAD</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
keyAliases: LISTofKB_KEYALIAS</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Atom</emphasis>
|
||
, <emphasis>
|
||
Value</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request changes the reported description of the geometry for the keyboard
|
||
specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. If deviceSpec does not specify a valid keyboard device, a <emphasis>
|
||
Keyboard</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
name</emphasis>
|
||
field specifies the name of the new keyboard geometry and must be a valid ATOM
|
||
or an <emphasis>
|
||
Atom</emphasis>
|
||
error results. The new geometry is not added to the server database of
|
||
keyboard components, but it can be retrieved using the <emphasis>
|
||
XkbGetGeometry</emphasis>
|
||
request for as long as it is bound to the keyboard. The keyboard geometry
|
||
symbolic name is also updated from the name field, and an <emphasis>
|
||
XkbNamesNotify</emphasis>
|
||
event is generated, if necessary.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The list of <emphasis>
|
||
colors</emphasis>
|
||
must include at least two definitions, or a <emphasis>
|
||
Value</emphasis>
|
||
error results. All color definitions in the geometry must specify a legal
|
||
color (i.e. must specify a valid index for one of the entries of the <emphasis>
|
||
colors</emphasis>
|
||
list) or a <emphasis>
|
||
Match</emphasis>
|
||
error results. The <emphasis>
|
||
baseColorNdx</emphasis>
|
||
and the <emphasis>
|
||
labelColorNdx</emphasis>
|
||
must be different or a <emphasis>
|
||
Match</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The list of <emphasis>
|
||
shapes</emphasis>
|
||
must include at least one shape definition, or a <emphasis>
|
||
Value</emphasis>
|
||
error results. If any two shapes have the same name, a <emphasis>
|
||
Match</emphasis>
|
||
error result. All doodads and keys which specify shape must specify a valid
|
||
index for one of the elements of the <emphasis>
|
||
shapes</emphasis>
|
||
list, or a <emphasis>
|
||
Match</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
All section, shape and doodad names must be valid ATOMs or an <emphasis>
|
||
Atom</emphasis>
|
||
error results; the constant <emphasis>
|
||
None</emphasis>
|
||
is not permitted for any of these components.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
All doodads must be of a known type; XKB does not support "private" doodad
|
||
types.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If, after rotation, any keys or doodads fall outside of the bounding box for a
|
||
section, the bounding box is automatically adjusted to the minimum size which
|
||
encloses all of its components.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If, after adjustment and rotation, the bounding box of any section or doodad
|
||
extends below zero on either the X or Y axes, the entire geometry is translated
|
||
so that the minimum extent along either axis is zero.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If, after rotation and translation, any keyboard components fall outside of the
|
||
rectangle specified by <emphasis>
|
||
widthMM</emphasis>
|
||
and <emphasis>
|
||
heightMM</emphasis>
|
||
, the keyboard dimensions are automatically resized to the minimum bounding box
|
||
that surrounds all components. Otherwise, the width and height of the keyboard
|
||
are left as specified.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
under</emphasis>
|
||
field of any overlay key definitions must specify a key that is in the section
|
||
that contains the overlay key, or a <emphasis>
|
||
Match</emphasis>
|
||
error results. This request does not check the value of the <emphasis>
|
||
over</emphasis>
|
||
field of an overlay key definition, so applications must be careful to avoid
|
||
conflicts with actual keys.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
This request does not verify that key names or aliases are unique. It also does
|
||
not verify that all key names specified in the geometry are bound to some
|
||
keycode or that all keys that are named in the keyboard definition are also
|
||
available in the geometry. Applications should make sure that keyboard geometry
|
||
has no internal conflicts and is consistent with the other components of the
|
||
keyboard definition, but XKB does not check for or guarantee it.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Querying_and_Changing_Per_Client_Flags'>
|
||
<title>Querying and Changing Per-Client Flags</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbPerClientFlags</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
change: KB_PCFMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
value: KB_PCFMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
ctrlsToChange: KB_BOOLCTRLMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
autoCtrls: KB_BOOLCTRLMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
autoCtrlValues: KB_BOOLCTRLMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
deviceID: CARD8
|
||
supported: KB_PCFMASK
|
||
value: KB_PCFMASK
|
||
autoCtrls: KB_BOOLCTRLMASK
|
||
autoCtrlValues: KB_BOOLCTRLMASK
|
||
where: KB_PCFMASK:</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Value</emphasis>
|
||
, <emphasis>
|
||
Match</emphasis>
|
||
, <emphasis>
|
||
Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
Changes the client specific flags for the keyboard specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. Reports a <emphasis>
|
||
Keyboard</emphasis>
|
||
error if <emphasis>
|
||
deviceSpec</emphasis>
|
||
does not specify a valid keyboard device.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Any flags specified in <emphasis>
|
||
change</emphasis>
|
||
are set to the corresponding values in <emphasis>
|
||
value</emphasis>
|
||
, provided that the server supports the requested control. Legal
|
||
per-client-flags are:
|
||
</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='1.0*'/>
|
||
<thead>
|
||
<row rowsep='1'>
|
||
<entry>Flag…</entry>
|
||
<entry>Described in…</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbPCF_DetectableAutorepeat</emphasis>
|
||
</entry>
|
||
<entry><link linkend='Detectable_Autorepeat'>Detectable
|
||
Autorepeat</link></entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbPCF_GrabsUseXKBStateMask</emphasis>
|
||
</entry>
|
||
<entry><link linkend='Setting_a_Passive_Grab_for_an_XKB_State'>Setting a Passive Grab
|
||
for an XKB State</link></entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbPCF_AutoResetControlsMask</emphasis>
|
||
</entry>
|
||
<entry><link linkend='Automatic_Reset_of_Boolean_Controls'>Automatic Reset of
|
||
Boolean Controls</link></entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbPCF_LookupStateWhenGrabbed</emphasis>
|
||
</entry>
|
||
<entry><link linkend='Effects_of_XKB_on_Core_Protocol_Events'>Effects of XKB on Core
|
||
Protocol Events</link></entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbPCF_SendEventUsesXKBState</emphasis>
|
||
</entry>
|
||
<entry><link linkend='Sending_Events_to_Clients'>Sending Events to
|
||
Clients</link></entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
If <emphasis>
|
||
PCF_AutoResetControls</emphasis>
|
||
is set in both <emphasis>
|
||
change</emphasis>
|
||
and <emphasis>
|
||
value</emphasis>
|
||
, the client’s mask of controls to be changed is updated from <emphasis>
|
||
ctrlsToChange</emphasis>
|
||
, <emphasis>
|
||
autoCtrls</emphasis>
|
||
, and <emphasis>
|
||
autoCtrlValues</emphasis>
|
||
. Any controls specified in <emphasis>
|
||
ctrlsToChange</emphasis>
|
||
are modified in the auto-reset controls mask for the client; the corresponding
|
||
bits from the <emphasis>
|
||
autoCtrls</emphasis>
|
||
field are copied into the auto-reset controls mask and the corresponding bits
|
||
from <emphasis>
|
||
autoCtrlValues</emphasis>
|
||
are copied into the auto-reset controls state values. If any controls are
|
||
specified in <emphasis>
|
||
autoCtrlValues</emphasis>
|
||
but not in <emphasis>
|
||
autoCtrls</emphasis>
|
||
, a <emphasis>
|
||
Match</emphasis>
|
||
error results. If any controls are specified in <emphasis>
|
||
autoCtrls</emphasis>
|
||
but not in <emphasis>
|
||
ctrlsToChange</emphasis>
|
||
, a <emphasis>
|
||
Match</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
PCF_AutoResetControls</emphasis>
|
||
is set in <emphasis>
|
||
change</emphasis>
|
||
but not in <emphasis>
|
||
value</emphasis>
|
||
, the client’s mask of controls to be changed is reset to all zeroes (i.e.
|
||
the client does not change any controls when it exits).
|
||
</para>
|
||
|
||
|
||
<para>
|
||
This request reports a <emphasis>
|
||
Match</emphasis>
|
||
error if a bit is set in any of the value masks but not in the control mask
|
||
that governs it or a <emphasis>
|
||
Value</emphasis>
|
||
error if any undefined bits are set in any of the masks.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
On successful return, the <emphasis>
|
||
deviceID</emphasis>
|
||
field reports the X Input extension identifier of the keyboard, or <emphasis>
|
||
0</emphasis>
|
||
if the server does not support the X Input Extension.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
supported</emphasis>
|
||
return value reports the set of per-client flags that are supported by the
|
||
server; in this version of XKB, only the <emphasis>
|
||
XkbPCF_DetectableAutorepeat</emphasis>
|
||
per-client flag is optional; all other per-client flags must be supported.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
value</emphasis>
|
||
return value reports the current settings of all per-client flags for the
|
||
specified keyboard. The <emphasis>
|
||
autoCtrls</emphasis>
|
||
return value reports the current set of controls to be reset when the client
|
||
exits, while the <emphasis>
|
||
autoCtrlValues</emphasis>
|
||
return value reports the state to which they should be set.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Using_the_Servers_Database_of_Keyboard_Components'>
|
||
<title>Using the Server’s Database of Keyboard Components</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbListComponents</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
maxNames: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
keymapsSpec: STRING8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
keycodesSpec: STRING8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
typesSpec: STRING8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
compatMapSpec: STRING8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
symbolsSpec: STRING8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
geometrySpec: STRING8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
deviceID: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
extra: CARD16
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
keymaps,keycodes,types,compatMaps: LISTofKB_COMPONENTNAME
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
symbols, geometries: LISTofKB_COMPONENTNAME</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>Where:</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>KB_COMPONENTNAME { hints: CARD8, name:
|
||
STRING8 }</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request returns one or more lists of keyboard components that are
|
||
available from the X server database of keyboard components for the device
|
||
specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. The X server is allowed, but not required or expected, to maintain separate
|
||
databases for each keyboard device. A <emphasis>
|
||
Keyboard</emphasis>
|
||
error results if <emphasis>
|
||
deviceSpec</emphasis>
|
||
does not specify a valid keyboard device.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
maxNames</emphasis>
|
||
field specifies the maximum number of component names to be reported, in
|
||
total, by this request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
keymapsSpec</emphasis>
|
||
, <emphasis>
|
||
keycodesSpec</emphasis>
|
||
, <emphasis>
|
||
typesSpec</emphasis>
|
||
, <emphasis>
|
||
compatMapSpec</emphasis>
|
||
, <emphasis>
|
||
symbolsSpec</emphasis>
|
||
and <emphasis>
|
||
geometrySpec</emphasis>
|
||
request fields specify a pattern to be matched against the names of all
|
||
components of the corresponding type in the server database of keyboard
|
||
components.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Each pattern uses the ISO Latin-1 encoding and should contain only parentheses,
|
||
the wildcard characters "?" and "*" or characters that are permitted in a
|
||
component class or member name (see <link linkend='Component_Names'>Component Names</link>). Illegal
|
||
characters in a pattern are simply ignored; no error results if a pattern
|
||
contains illegal characters.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Comparison is case-sensitive and, in a pattern, the "?" wildcard character
|
||
matches any single character except parentheses while the "*" character matches
|
||
any number of characters except parentheses. If an implementation accepts
|
||
characters other than those required by XKB, whether or not those characters
|
||
match either wildcard is also implementation dependent. An empty pattern does
|
||
not match any component names.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
On successful return, the <emphasis>
|
||
deviceID</emphasis>
|
||
return value reports the X Input Extension device identifier of the specified
|
||
device, or <emphasis>
|
||
0</emphasis>
|
||
if the server does not support the X input extension. The <emphasis>
|
||
extra</emphasis>
|
||
return value reports the number of matching component names that could not be
|
||
returned due to the setting of the <emphasis>
|
||
maxNames</emphasis>
|
||
field in the request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
keymaps</emphasis>
|
||
, <emphasis>
|
||
keycodes</emphasis>
|
||
, <emphasis>
|
||
types</emphasis>
|
||
, <emphasis>
|
||
compatMaps</emphasis>
|
||
, <emphasis>
|
||
symbols</emphasis>
|
||
and <emphasis>
|
||
geometries</emphasis>
|
||
return the hints (see <link linkend='Component_Hints'>Component
|
||
Hints</link>) and names of any components from the server database that match
|
||
the corresponding pattern.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
<link linkend='The_Server_Database_of_Keyboard_Components'>The Server Database of Keyboard
|
||
Components</link> describes the X server database of keyboard components in
|
||
more detail.
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbGetKbdByName</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
need, want: KB_GBNDETAILMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
load: BOOL</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
keymapsSpec: STRING8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
keycodesSpec, typesSpec: STRING8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
compatMapSpec, symbolsSpec: STRING8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
geometrySpec: STRING8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
deviceID: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
minKeyCode, maxKeyCode: KEYCODE
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
loaded, newKeyboard: BOOL
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
found, reported: KB_GBNDETAILMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
map: optional <emphasis>
|
||
XkbGetMap</emphasis>
|
||
reply
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
compat: optional <emphasis>
|
||
XkbGetCompatMap</emphasis>
|
||
reply
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
indicators: optional <emphasis>
|
||
XkbGetIndicatorMap</emphasis>
|
||
reply
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
names: optional <emphasis>
|
||
XkbGetNames</emphasis>
|
||
reply
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
geometry: optional <emphasis>
|
||
XkbGetGeometry</emphasis>
|
||
reply</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Keyboard</emphasis>
|
||
, <emphasis>
|
||
Access</emphasis>
|
||
, <emphasis>
|
||
Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
Assembles and returns a keymap from the current mapping and specified elements
|
||
from the server database of keymap components for the keyboard specified by
|
||
<emphasis>
|
||
deviceSpec</emphasis>
|
||
, and optionally replaces the current keyboard mapping with the newly generated
|
||
description. If <emphasis>
|
||
deviceSpec</emphasis>
|
||
does not specify a valid keyboard device, a <emphasis>
|
||
Keyboard</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
keymapsSpec</emphasis>
|
||
, <emphasis>
|
||
keycodesSpec</emphasis>
|
||
, <emphasis>
|
||
typesSpec</emphasis>
|
||
, <emphasis>
|
||
compatMapSpec</emphasis>
|
||
, <emphasis>
|
||
symbolsSpec</emphasis>
|
||
and <emphasis>
|
||
geometrySpec</emphasis>
|
||
component expressions (see <link linkend='Partial_Components_and_Combining_Multiple_Components'>
|
||
Partial Components and Combining Multiple Components</link>) specify the
|
||
database components to be used to assemble the keyboard description.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
want</emphasis>
|
||
field lists the pieces of the keyboard description that the client wants to
|
||
have reported for the newly constructed keymap. The <emphasis>
|
||
need</emphasis>
|
||
field lists all of the pieces that must be reported. If any of the pieces in
|
||
<emphasis>
|
||
need</emphasis>
|
||
cannot be loaded from the specified names, no description of the keyboard is
|
||
returned.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
want</emphasis>
|
||
and <emphasis>
|
||
need</emphasis>
|
||
fields can include any combinations of these <emphasis>
|
||
XkbGetMapByName</emphasis>
|
||
(GBN) components:
|
||
</para>
|
||
|
||
<informaltable frame='topbot'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='3' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<colspec colname='c2' colwidth='1.0*'/>
|
||
<colspec colname='c3' colwidth='1.0*'/>
|
||
<thead>
|
||
<row rowsep='1'>
|
||
<entry>XkbGetMapByName Keyboard Component…</entry>
|
||
<entry>Database Component…</entry>
|
||
<entry>Components of Keyboard Description</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbGBN_Types</emphasis>
|
||
</entry>
|
||
<entry>types</entry>
|
||
<entry>key types</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbGBN_CompatMap</emphasis>
|
||
</entry>
|
||
<entry>compat</entry>
|
||
<entry>symbol interpretations, group compatibility map</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbGBN_ClientSymbols</emphasis>
|
||
</entry>
|
||
<entry>symbols, types, keycodes</entry>
|
||
<entry>key types, key symbol mappings, modifier mapping</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbGBN_ServerSymbols</emphasis>
|
||
</entry>
|
||
<entry>symbols, types, keycodes</entry>
|
||
<entry>key behaviors, key actions, key explicit components, virtual
|
||
modifiers, virtual modifier mapping</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbGBN_IndicatorMap</emphasis>
|
||
</entry>
|
||
<entry>compat</entry>
|
||
<entry>indicator maps, indicator names</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbGBN_KeyNames</emphasis>
|
||
</entry>
|
||
<entry>keycodes</entry>
|
||
<entry>key names, key aliases</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbGBN_Geometry</emphasis>
|
||
</entry>
|
||
<entry>geometry</entry>
|
||
<entry>keyboard geometry</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
XkbGBN_OtherNames</emphasis>
|
||
</entry>
|
||
<entry>all</entry>
|
||
<entry>key types, symbol interpretations, indicator maps, names,
|
||
geometry</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
If either field contains a GBN component that depends on some database
|
||
component for which the request does not supply an expression, XKB
|
||
automatically substitutes the special pattern "%" which copies the
|
||
corresponding component from the current keyboard description, as described in
|
||
<link linkend='Partial_Components_and_Combining_Multiple_Components'>Partial Components and Combining
|
||
Multiple Components</link>.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
load</emphasis>
|
||
flag asks the server to replace the current keyboard description for <emphasis>
|
||
deviceSpec</emphasis>
|
||
with the newly constructed keyboard description. If <emphasis>
|
||
load</emphasis>
|
||
is <emphasis>
|
||
True</emphasis>
|
||
, the request must include component expressions for all of the database
|
||
components; if any are missing, XKB substitutes "%" as described above.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If all necessary components are both specified and found, the new keyboard
|
||
description is loaded. If the new keyboard description has a different geometry
|
||
or keycode range than the previous keyboard description, XKB sends <emphasis>
|
||
XkbNewKeyboardNotify</emphasis>
|
||
events to all interested clients. See
|
||
<link linkend='Replacing_the_Keyboard_On_the_Fly'>Replacing the Keyboard
|
||
"On-the-Fly"</link> for more information about the effects of replacing the
|
||
keyboard description on the fly.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the range of keycodes changes, clients that have requested <emphasis>
|
||
XkbNewKeyboardNotify</emphasis>
|
||
events are not sent any other change notification events by this request.
|
||
Clients that do not request <emphasis>
|
||
XkbNewKeyboardNotify</emphasis>
|
||
events are sent other XKB change notification events (e.g. <emphasis>
|
||
XkbMapNotify</emphasis>
|
||
, <emphasis>
|
||
XkbNamesNotify</emphasis>
|
||
) as necessary to alert them to as many of the keyboard changes as possible.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If no error occurs, the request reply reports the GBN components that were
|
||
found and sends a description of any of the resulting keyboard that includes
|
||
and of the components that were requested.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
deviceID</emphasis>
|
||
return value reports the X Input extension device identifier of the keyboard
|
||
that was used, or <emphasis>
|
||
0</emphasis>
|
||
if the server does not support the X input extension.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
minKeyCode</emphasis>
|
||
and <emphasis>
|
||
maxKeyCode</emphasis>
|
||
return values report the legal range of keycodes for the keyboard description
|
||
that was created. If the resulting keyboard description does not include at
|
||
least one of the key names, client symbols or server symbols components,
|
||
<emphasis>
|
||
minKeyCode</emphasis>
|
||
and <emphasis>
|
||
maxKeyCode</emphasis>
|
||
are both <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
loaded</emphasis>
|
||
return value reports whether or not the existing keyboard definition was
|
||
replaced with the newly created one. If <emphasis>
|
||
loaded</emphasis>
|
||
is <emphasis>
|
||
True</emphasis>
|
||
, the <emphasis>
|
||
newKeyboard</emphasis>
|
||
return value reports whether or not the new map changed the geometry or range
|
||
of keycodes and caused <emphasis>
|
||
XkbNewKeyboardNotify</emphasis>
|
||
events for clients that have requested them.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
found</emphasis>
|
||
return value reports the GBN components that were present in the keymap that
|
||
was constructed by this request. The <emphasis>
|
||
reported</emphasis>
|
||
return value lists the subset of those components for which descriptions
|
||
follow. if any of the components specified in the <emphasis>
|
||
need</emphasis>
|
||
field of the request were not found, <emphasis>
|
||
reported</emphasis>
|
||
is empty, otherwise it contains the intersection of the <emphasis>
|
||
found</emphasis>
|
||
return value with the union of the <emphasis>
|
||
need</emphasis>
|
||
and <emphasis>
|
||
want</emphasis>
|
||
request fields.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If any of <emphasis>
|
||
GBN_Types</emphasis>
|
||
, <emphasis>
|
||
GBN_ClientSymbols</emphasis>
|
||
or <emphasis>
|
||
GBN_ServerSymbols</emphasis>
|
||
are set in <emphasis>
|
||
reported</emphasis>
|
||
, the <emphasis>
|
||
map</emphasis>
|
||
return value has the same format as the reply to an <emphasis>
|
||
XkbGetMap</emphasis>
|
||
request and reports the corresponding pieces of the newly constructed keyboard
|
||
description.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
GBN_CompatMap</emphasis>
|
||
is set in <emphasis>
|
||
reported</emphasis>
|
||
, the <emphasis>
|
||
compat</emphasis>
|
||
return value has the same format as the reply to an <emphasis>
|
||
XkbGetCompatMap</emphasis>
|
||
request and reports the symbol interpretations and group compatibility map for
|
||
the newly constructed keyboard description.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
GBN_IndicatorMap</emphasis>
|
||
is set in <emphasis>
|
||
reported</emphasis>
|
||
, the <emphasis>
|
||
indicators</emphasis>
|
||
return value has the same format as the reply to an <emphasis>
|
||
XkbGetIndicatorMap</emphasis>
|
||
request and reports the physical indicators and indicator maps for the newly
|
||
constructed keyboard description.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
GBN_KeyNames</emphasis>
|
||
or <emphasis>
|
||
GBN_OtherNames</emphasis>
|
||
are set in <emphasis>
|
||
reported</emphasis>
|
||
, the <emphasis>
|
||
names</emphasis>
|
||
return value has the same format as the reply to an <emphasis>
|
||
XkbGetNames</emphasis>
|
||
reply and reports the corresponding set of symbolic names for the newly
|
||
constructed keyboard description.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
GBN_Geometry</emphasis>
|
||
is set in <emphasis>
|
||
reported</emphasis>
|
||
, the <emphasis>
|
||
geometry</emphasis>
|
||
return value has the same format as the reply to an <emphasis>
|
||
XkbGetGeometryMap</emphasis>
|
||
request and reports the keyboard geometry for the newly constructed keyboard
|
||
description.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Querying_and_Changing_Input_Extension_Devices'>
|
||
<title>Querying and Changing Input Extension Devices</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbGetDeviceInfo</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
wanted: KB_XIDEVFEATUREMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
ledClass: KB_LEDCLASSSPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
ledID: KB_IDSPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
allButtons: BOOL</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstButton, nButtons: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
deviceID: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
present: KB_XIDEVFEATUREMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
supported: KB_XIFEATUREMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
unsupported: KB_XIFEATUREMASK
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
firstBtnWanted: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
nBtnsWanted: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
firstBtnRtrn: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
nBtnsRtrn: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
totalBtns: CARD8
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
hasOwnState: BOOL
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
dfltKbdFB, dfltLedFB: KB_IDSPEC
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
devType: ATOM
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
name: STRING
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
btnActions: LISTofKB_ACTION
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
leds: LISTofKB_DEVICELEDINFO</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Device</emphasis>
|
||
, <emphasis>
|
||
Match</emphasis>
|
||
, <emphasis>
|
||
Access</emphasis>
|
||
, <emphasis>
|
||
Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
Reports a subset of the XKB-supplied information about the input device
|
||
specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. Unlike most XKB requests, the device specified for <emphasis>
|
||
XkbGetDeviceInfo</emphasis>
|
||
need not be a keyboard device. Nonetheless, a <emphasis>
|
||
Keyboard</emphasis>
|
||
error results if <emphasis>
|
||
deviceSpec</emphasis>
|
||
does not specify a valid core or input extension device.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
wanted</emphasis>
|
||
field specifies the types of information to be returned, and controls the
|
||
interpretation of the other request fields.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the server does not support assignment of XKB actions to extension device
|
||
buttons, the <emphasis>
|
||
allButtons</emphasis>
|
||
, <emphasis>
|
||
firstButton</emphasis>
|
||
and <emphasis>
|
||
nButtons</emphasis>
|
||
fields are ignored.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Otherwise, if the <emphasis>
|
||
XkbXI_ButtonActions</emphasis>
|
||
flag is set in <emphasis>
|
||
wanted</emphasis>
|
||
, the <emphasis>
|
||
allButtons</emphasis>
|
||
, <emphasis>
|
||
firstButton</emphasis>
|
||
and <emphasis>
|
||
nButtons</emphasis>
|
||
fields specify the device buttons for which actions should be returned.
|
||
Setting <emphasis>
|
||
allButtons</emphasis>
|
||
to <emphasis>
|
||
True</emphasis>
|
||
requests actions for all device buttons; if <emphasis>
|
||
allButtons</emphasis>
|
||
is <emphasis>
|
||
False</emphasis>
|
||
, <emphasis>
|
||
firstButton</emphasis>
|
||
and <emphasis>
|
||
nButtons</emphasis>
|
||
specify a range of buttons for which actions are requested. If the device has
|
||
no buttons or if <emphasis>
|
||
firstButton</emphasis>
|
||
and <emphasis>
|
||
nButtons</emphasis>
|
||
specify illegal buttons, a <emphasis>
|
||
Match</emphasis>
|
||
error results. If <emphasis>
|
||
allButtons</emphasis>
|
||
is <emphasis>
|
||
True</emphasis>
|
||
, <emphasis>
|
||
firstButton</emphasis>
|
||
and <emphasis>
|
||
nButtons</emphasis>
|
||
are ignored.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the server does not support XKB access to any aspect of the indicators on
|
||
extension devices, or if the <emphasis>
|
||
wanted</emphasis>
|
||
field does not include any of the indicator flags, the <emphasis>
|
||
ledClass</emphasis>
|
||
and <emphasis>
|
||
ledID</emphasis>
|
||
fields are ignored. Otherwise, <emphasis>
|
||
ledClass</emphasis>
|
||
and <emphasis>
|
||
ledID</emphasis>
|
||
specify one or more feedback(s) for which indicator information is requested.
|
||
If <emphasis>
|
||
ledClass</emphasis>
|
||
or <emphasis>
|
||
ledID</emphasis>
|
||
have illegal values, a <emphasis>
|
||
Value</emphasis>
|
||
error results. If they have legal values but do not specify a keyboard or
|
||
indicator class feedback for the device in question, a <emphasis>
|
||
Match</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
ledClass</emphasis>
|
||
field can specify either <emphasis>
|
||
KbdFeedbackClass</emphasis>
|
||
, <emphasis>
|
||
LedFeedbackClass</emphasis>
|
||
, <emphasis>
|
||
XkbDfltXIClass</emphasis>
|
||
, or <emphasis>
|
||
XkbAllXIClasses</emphasis>
|
||
. If at least one keyboard feedback is defined for the specified device,
|
||
<emphasis>
|
||
XkbDfltXIClass</emphasis>
|
||
is equivalent to <emphasis>
|
||
KbdFeedbackClass</emphasis>
|
||
, otherwise it is equivalent to <emphasis>
|
||
LedFeedbackClass</emphasis>
|
||
. If <emphasis>
|
||
XkbAllXIClasses</emphasis>
|
||
is specified, this request returns information about both indicator and
|
||
keyboard class feedbacks which match the requested identifier, as described
|
||
below.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
ledID</emphasis>
|
||
field can specify any valid input extension feedback identifier, <emphasis>
|
||
XkbDfltXIId</emphasis>
|
||
, or <emphasis>
|
||
XkbAllXIIds</emphasis>
|
||
. The default keyboard feedback is the one that is affected by core protocol
|
||
requests; the default led feedback is implementation-specific. If <emphasis>
|
||
XkbAllXIIds</emphasis>
|
||
is specified, this request returns indicator information about all feedbacks
|
||
of the class(es) specified by <emphasis>
|
||
ledClass</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If no error results, the <emphasis>
|
||
deviceID</emphasis>
|
||
return value reports the input extension device identifier of the device for
|
||
which values are being returned. The <emphasis>
|
||
supported</emphasis>
|
||
return value reports the set of optional XKB extension device features that
|
||
are supported by this implementation (see
|
||
<link linkend='Interactions_Between_XKB_and_the_X_Input_Extension'>
|
||
Interactions Between XKB and the X Input
|
||
Extension</link>) for the specified device, and the unsupported return value
|
||
reports any <emphasis>
|
||
unsupported</emphasis>
|
||
features.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
hasOwnState</emphasis>
|
||
is <emphasis>
|
||
True</emphasis>
|
||
, the device is also a keyboard, and any indicator maps bound to the device use
|
||
the current state and control settings for this device to control automatic
|
||
changes. If <emphasis>
|
||
hasOwnState</emphasis>
|
||
is <emphasis>
|
||
False</emphasis>
|
||
, the state and control settings of the core keyboard device control automatic
|
||
indicator changes.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
name</emphasis>
|
||
field reports the X Input Extension name for the device. The <emphasis>
|
||
devType</emphasis>
|
||
field reports the X Input Extension device type. Both fields are provided
|
||
merely for convenience and are not interpreted by XKB.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
present</emphasis>
|
||
return value reports the kinds of device information being returned, and
|
||
controls the interpretation of the remaining fields. The <emphasis>
|
||
present</emphasis>
|
||
field consists of the <emphasis>
|
||
wanted</emphasis>
|
||
field from the original request minus the flags for any unsupported features.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbXI_ButtonActions</emphasis>
|
||
is set in <emphasis>
|
||
present</emphasis>
|
||
, the <emphasis>
|
||
totalBtns</emphasis>
|
||
return value reports the total number of buttons present on the device,
|
||
<emphasis>
|
||
firstBtnWanted</emphasis>
|
||
and <emphasis>
|
||
nBtnsWanted</emphasis>
|
||
specify the range of buttons for which actions were requested, and the
|
||
<emphasis>
|
||
firstBtnRtrn</emphasis>
|
||
and <emphasis>
|
||
nBtnsRtrn </emphasis>
|
||
values specify the range of buttons for which actions are reported. The
|
||
<emphasis>
|
||
actionsRtrn</emphasis>
|
||
list has <emphasis>
|
||
nButtonsRtrn</emphasis>
|
||
entries which contain the actions bound to the specified buttons on the
|
||
device. Any buttons for which actions were requested but not returned have the
|
||
action <emphasis>
|
||
NoAction()</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If any indicator information is reported, the leds list contains one element
|
||
for each requested feedback. For example, if <emphasis>
|
||
ledClass</emphasis>
|
||
is <emphasis>
|
||
XkbAllXIClasses</emphasis>
|
||
and <emphasis>
|
||
ledID</emphasis>
|
||
is <emphasis>
|
||
XkbAllXIIds</emphasis>
|
||
, <emphasis>
|
||
leds</emphasis>
|
||
describes all of the indicators on the device and has one element for each
|
||
keyboard or led class feedback defined for the device. If any information at
|
||
all is reported about a feedback, the set of physical indicators is also
|
||
reported in the <emphasis>
|
||
physIndicators</emphasis>
|
||
field of the corresponding element of <emphasis>
|
||
leds</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the server supports assignment of indicator maps to extension device
|
||
indicators, and if the <emphasis>
|
||
XkbXI_IndicatorMaps</emphasis>
|
||
flag is set in <emphasis>
|
||
wanted</emphasis>
|
||
, each member of <emphasis>
|
||
leds</emphasis>
|
||
reports any indicators on the corresponding feedback to which names have been
|
||
assigned. Any indicators for which no map is reported have the default map,
|
||
which allows explicit changes and does not request any automatic changes.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the server supports assignment of indicator names to extension device
|
||
indicators, and the <emphasis>
|
||
XkbXI_IndicatorNames</emphasis>
|
||
flag is set in <emphasis>
|
||
wanted</emphasis>
|
||
, each member of <emphasis>
|
||
leds</emphasis>
|
||
reports any indicators on the corresponding feedback to which names have been
|
||
assigned. Any indicators for which no name is reported have the name <emphasis>
|
||
None</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the server supports XKB access to the state of extension device indicators,
|
||
and the <emphasis>
|
||
XkbXI_IndicatorState</emphasis>
|
||
flag is set in wanted, each member of leds reports the state of the indicators
|
||
on the corresponding feedback.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If any unsupported features are requested, and the requesting client has
|
||
selected for them, the server sends the client an <emphasis>
|
||
XkbExtensionDeviceNotify</emphasis>
|
||
event which indicates that an unsupported feature was requested. This event is
|
||
only generated if the client which issued the unsupported request has selected
|
||
for it and, if generated, is not sent to any other clients.
|
||
</para>
|
||
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbSetDeviceInfo</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>deviceSpec: KB_DEVICESPEC</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
change: KB_XIDEVFEATUREMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstBtn, nBtns: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
btnActions:LISTofKB_ACTION</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
leds: LISTofKB_DEVICELEDINFO</entry>
|
||
</row>
|
||
|
||
<row>
|
||
<entry role='protoerror'>Errors: <emphasis>
|
||
Device</emphasis>
|
||
, <emphasis>
|
||
Match</emphasis>
|
||
, <emphasis>
|
||
Access</emphasis>
|
||
, <emphasis>
|
||
Alloc</emphasis>
|
||
</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
Changes a subset of the XKB-supplied information about the input device
|
||
specified by <emphasis>
|
||
deviceSpec</emphasis>
|
||
. Unlike most XKB requests, the device specified for <emphasis>
|
||
XkbGetDeviceInfo</emphasis>
|
||
need not be a keyboard device. Nonetheless, a <emphasis>
|
||
Keyboard</emphasis>
|
||
error results if <emphasis>
|
||
deviceSpec</emphasis>
|
||
does not specify a valid core or input extension device
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
change</emphasis>
|
||
field specifies the features for which new values are supplied, and controls
|
||
the interpretation of the other request fields.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the server does not support assignment of XKB actions to extension device
|
||
buttons, the <emphasis>
|
||
firstButton</emphasis>
|
||
and <emphasis>
|
||
nButtons</emphasis>
|
||
fields are ignored.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Otherwise, if the <emphasis>
|
||
XkbXI_ButtonActions</emphasis>
|
||
flag is set in <emphasis>
|
||
change</emphasis>
|
||
, the <emphasis>
|
||
firstBtn</emphasis>
|
||
and <emphasis>
|
||
nBtns</emphasis>
|
||
fields specify a range of buttons for which actions are specified in this
|
||
request. If the device has no buttons or if <emphasis>
|
||
firstBtn</emphasis>
|
||
and <emphasis>
|
||
nBtns</emphasis>
|
||
specify illegal buttons, a <emphasis>
|
||
Match</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Each element of the <emphasis>
|
||
leds</emphasis>
|
||
list describes the changes for a single keyboard or led feedback. If the
|
||
<emphasis>
|
||
ledClass</emphasis>
|
||
field of any element of <emphasis>
|
||
leds</emphasis>
|
||
contains any value other than <emphasis>
|
||
KbdFeedbackClass</emphasis>
|
||
, <emphasis>
|
||
LedFeedbackClass</emphasis>
|
||
or <emphasis>
|
||
XkbDfltXIClass</emphasis>
|
||
, a <emphasis>
|
||
Value</emphasis>
|
||
error results. If the <emphasis>
|
||
ledId</emphasis>
|
||
field of any element of leds contains any value other than a valid input
|
||
extension feedback identifier or <emphasis>
|
||
XkbDfltXIId</emphasis>
|
||
, a <emphasis>
|
||
Value</emphasis>
|
||
error results. If both fields are valid, but the device has no matching
|
||
feedback, a <emphasis>
|
||
Match</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The fields of each element of <emphasis>
|
||
leds</emphasis>
|
||
are interpreted as follows:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>If <emphasis>
|
||
XkbXI_IndicatorMaps</emphasis>
|
||
is set in <emphasis>
|
||
change</emphasis>
|
||
and the server supports XKB assignment of indicator maps to the corresponding
|
||
feedback, the maps for all indicators on the corresponding feedback are taken
|
||
from <emphasis>
|
||
leds</emphasis>
|
||
. If the server does not support this feature, any maps specified in <emphasis>
|
||
leds</emphasis>
|
||
are ignored.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>If <emphasis>
|
||
XkbXI_IndicatorNames</emphasis>
|
||
is set in <emphasis>
|
||
change</emphasis>
|
||
, and the server supports XKB assignment of names to indicators for the
|
||
corresponding feedback, the names for all indicators on the corresponding
|
||
feedback are taken from <emphasis>
|
||
leds</emphasis>
|
||
. If the server does not support this feature, any names specified in <emphasis>
|
||
leds</emphasis>
|
||
are ignored. Regardless of whether they are used, any names be a valid Atom or
|
||
<emphasis>
|
||
None</emphasis>
|
||
, or an <emphasis>
|
||
Atom</emphasis>
|
||
error results.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>If <emphasis>
|
||
XkbXI_IndicatorState</emphasis>
|
||
is set in change, and the server supports XKB changes to extension device
|
||
indicator state, the server attempts to change the indicators on the
|
||
corresponding feedback as specified by <emphasis>
|
||
leds</emphasis>
|
||
. Any indicator maps bound to the feedback are applied, so state changes might
|
||
be blocked or have side-effects.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
If any unsupported features are requested, and the requesting client has
|
||
selected for them, the server sends the client an <emphasis>
|
||
XkbExtensionDeviceNotify</emphasis>
|
||
event which indicates that an unsupported feature was requested. This event is
|
||
only generated if the client which issued the unsupported request has selected
|
||
for it and, if generated, is not sent to any other clients.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Debugging_the_X_Keyboard_Extension'>
|
||
<title>Debugging the X Keyboard Extension</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbSetDebuggingFlags</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>affectFlags, flags: CARD32</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
affectCtrls, ctrls: CARD32</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
message: STRING
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
currentFlags, supportedFlags: CARD32
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoreply'>
|
||
currentCtrls, supportedCtrls: CARD32</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
This request sets up various internal XKB debugging flags and controls. It is
|
||
intended for developer use and may be disabled in production servers. If
|
||
disabled, <emphasis>
|
||
XkbSetDebuggingFlags</emphasis>
|
||
has no effect but returns <emphasis>
|
||
Success</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
affectFlags</emphasis>
|
||
field specifies the debugging flags to be changed, the <emphasis>
|
||
flags</emphasis>
|
||
field specifies new values for the changed flags. The interpretation of the
|
||
debugging flags is implementation-specific, but flags are intended to control
|
||
debugging output and should not otherwise affect the operation of the server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
affectCtrls</emphasis>
|
||
field specifies the debugging controls to be changed, the <emphasis>
|
||
ctrls</emphasis>
|
||
field specifies new values for the changed controls. The interpretation of the
|
||
debugging controls is implementation-specific, but debugging controls are
|
||
allowed to affect the behavior of the server.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
message</emphasis>
|
||
field provides a message that the X server can print in any logging or
|
||
debugging files before changing the flags. The server must accept this field
|
||
but it is not required to actually display it anywhere.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The X Test Suite makes some assumptions about the implementation of locking
|
||
modifier keys that do not apply when XKB is present. The <emphasis>
|
||
XkbDF_DisableLocks</emphasis>
|
||
debugging control provides a simple workaround to these test suite problems by
|
||
simply disabling all locking keys. If <emphasis>
|
||
XkbDF_DisableLocks</emphasis>
|
||
is enabled, the <emphasis>
|
||
SA_LockMods</emphasis>
|
||
and <emphasis>
|
||
SA_LockGroup</emphasis>
|
||
actions behave like <emphasis>
|
||
SA_SetMods</emphasis>
|
||
and <emphasis>
|
||
SA_LockMods</emphasis>
|
||
, respectively. If it is disabled, <emphasis>
|
||
SA_LockMods</emphasis>
|
||
and <emphasis>
|
||
SA_LockGroup</emphasis>
|
||
actions behave normally.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Implementations are free to ignore the <emphasis>
|
||
XkbDF_DisableLocks</emphasis>
|
||
debugging control or to define others.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
currentFlags</emphasis>
|
||
return value reports the current setting for the debugging flags, if
|
||
applicable. The <emphasis>
|
||
currentCtrls</emphasis>
|
||
return value reports the setting for the debugging controls, if applicable.
|
||
The <emphasis>
|
||
supportedFlags</emphasis>
|
||
and <emphasis>
|
||
supportedCtrls</emphasis>
|
||
fields report the flags and controls that are recognized by the
|
||
implementation. Attempts to change unsupported fields or controls are silently
|
||
ignored.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the <emphasis>
|
||
XkbSetDebuggingFlags</emphasis>
|
||
request contains more data than expected, the server ignores the extra data,
|
||
but no error results. If the request has less data than expected, a <emphasis>
|
||
Length</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the <emphasis>
|
||
XkbSetDebuggingFlags</emphasis>
|
||
reply contains more data than expected, the client just ignores any
|
||
uninterpreted data without reporting an error. If the reply has less data than
|
||
expected, a <emphasis>
|
||
Length</emphasis>
|
||
error results.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
</sect1>
|
||
<sect1 id='Events'>
|
||
<title>Events</title>
|
||
|
||
<para>
|
||
All XKB events report the time at which they occurred in a field named
|
||
<emphasis>
|
||
time</emphasis>
|
||
and the device on which they occurred in a field named <emphasis>
|
||
deviceID</emphasis>
|
||
. XKB uses a single X event code for all events and uses a common field to
|
||
distinguish XKB event type.
|
||
</para>
|
||
|
||
|
||
<sect2 id='Tracking_Keyboard_Replacement'>
|
||
<title>Tracking Keyboard Replacement</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbNewKeyboardNotify</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>time: TIMESTAMP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
deviceID: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
changed: KB_NKNDETAILMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
minKeyCode, maxKeyCode: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
oldDeviceID: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
oldMinKeyCode, oldMaxKeyCode: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
requestMajor, requestMinor: CARD8</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
An <emphasis>
|
||
XkbNewKeyboardNotify</emphasis>
|
||
event reports that a new core keyboard has been installed. New keyboard notify
|
||
events can be generated:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>When the X server detects that the keyboard was changed.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>When a client installs a new extension device as the core keyboard
|
||
using the X Input Extension <emphasis>
|
||
ChangeKeyboardDevice</emphasis>
|
||
request.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>When a client issues an <emphasis>
|
||
XkbGetMapByName</emphasis>
|
||
request which changes the keycodes range or geometry.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
The <emphasis>
|
||
changed</emphasis>
|
||
field of the event reports the aspects of the keyboard that have changed, and
|
||
can contain any combination of the event details for this event:
|
||
</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='2.0*'/>
|
||
<thead>
|
||
<row rowsep='1'>
|
||
<entry>Bit in Changed</entry>
|
||
<entry>Meaning</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>NKN_Keycodes</entry>
|
||
<entry>The new keyboard has a different minimum or maximum keycode.</entry>
|
||
</row>
|
||
<row>
|
||
<entry>NKN_Geometry</entry>
|
||
<entry>The new keyboard has a different keyboard geometry.</entry>
|
||
</row>
|
||
<row>
|
||
<entry>NKN_DeviceID</entry>
|
||
<entry>The new keyboard has a new X Input Extension device
|
||
identifier</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
The server sends an <emphasis>
|
||
XkbNewKeyboardNotify</emphasis>
|
||
event to a client only if at least one of the bits that is set in the
|
||
<emphasis>
|
||
changed</emphasis>
|
||
field of the event is also set in the appropriate event details mask for the
|
||
client.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
minKeyCode</emphasis>
|
||
and <emphasis>
|
||
maxKeyCode</emphasis>
|
||
fields report the minimum and maximum keycodes that can be returned by the new
|
||
keyboard. The <emphasis>
|
||
oldMinKeyCode</emphasis>
|
||
and <emphasis>
|
||
oldMaxKeyCode</emphasis>
|
||
fields report the minimum and maximum values that could be returned before the
|
||
change. This event always reports all four values, but the old and new values
|
||
are the same unless <emphasis>
|
||
NKN_Keycodes</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Once a client receives a new keyboard notify event which reports a new keycode
|
||
range, the X server reports events from all keys in the new range to that
|
||
client. Clients that do not request or receive new keyboard notify events
|
||
receive events only from keys that fall in the last range for legal keys
|
||
reported to that client. See <link linkend='Replacing_the_Keyboard_On_the_Fly'>
|
||
Replacing the Keyboard "On-the-Fly"</link> for a more detailed explanation.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
NKN_Keycodes</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
, the <emphasis>
|
||
XkbNewKeyboardNotify</emphasis>
|
||
event subsumes all other change notification events (e.g. <emphasis>
|
||
XkbMapNotify</emphasis>
|
||
, <emphasis>
|
||
XkbNamesNotify</emphasis>
|
||
) that would otherwise result from the keyboard change. Clients who receive an
|
||
<emphasis>
|
||
XkbNewKeyboardNotify</emphasis>
|
||
event should assume that all other aspects of the keyboard mapping have
|
||
changed and regenerate the entire local copy of the keyboard description.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
deviceID</emphasis>
|
||
field reports the X Input Extension device identifier of the new keyboard
|
||
device; <emphasis>
|
||
oldDeviceID</emphasis>
|
||
reports the device identifier before the change. This event always includes
|
||
both values, but they are the same unless <emphasis>
|
||
NKN_DeviceID</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
. If the server does not support the X Input Extension, both fields have the
|
||
value <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
requestMajor</emphasis>
|
||
and <emphasis>
|
||
requestMinor</emphasis>
|
||
fields report the major and minor opcode of the request that caused the
|
||
keyboard change. If the keyboard change was not caused by some client request,
|
||
both fields have the value <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Tracking_Keyboard_Mapping_Changes'>
|
||
<title>Tracking Keyboard Mapping Changes</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbMapNotify</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>time: TIMESTAMP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
deviceID: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
ptrBtnActions: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
changed: KB_MAPPARTMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
minKeyCode, maxKeyCode: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstType, nTypes: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstKeySym, firstKeyAction: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
nKeySyms, nKeyActions: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstKeyBehavior, firstKeyExplicit: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
nKeyBehaviors, nKeyExplicit: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
virtualMods: KB_VMODMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstModMapKey, firstVModMapKey: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
nModMapKeys, nVModMapKeys: CARD8</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
An <emphasis>
|
||
XkbMapNotify</emphasis>
|
||
event reports that some aspect of XKB map for a keyboard has changed. Map
|
||
notify events can be generated whenever some aspect of the keyboard map is
|
||
changed by an XKB or core protocol request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
deviceID</emphasis>
|
||
field reports the keyboard for which some map component has changed and the
|
||
<emphasis>
|
||
changed</emphasis>
|
||
field reports the components with new values, and can contain any of the
|
||
values that are legal for the <emphasis>
|
||
full</emphasis>
|
||
and <emphasis>
|
||
partial</emphasis>
|
||
fields of the <emphasis>
|
||
XkbGetMap</emphasis>
|
||
request. The server sends an <emphasis>
|
||
XkbMapNotify</emphasis>
|
||
event to a client only if at least one of the bits that is set in the
|
||
<emphasis>
|
||
changed</emphasis>
|
||
field of the event is also set in the appropriate event details mask for the
|
||
client.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
minKeyCode</emphasis>
|
||
and <emphasis>
|
||
maxKeyCode</emphasis>
|
||
fields report the range of keycodes that are legal on the keyboard for which
|
||
the change is being reported.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbKeyTypesMask</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
, the <emphasis>
|
||
firstType</emphasis>
|
||
and <emphasis>
|
||
nTypes</emphasis>
|
||
fields report a range of key types that includes all changed types. Otherwise,
|
||
both fields are <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbKeySymsMask</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
, the <emphasis>
|
||
firstKeySym</emphasis>
|
||
and <emphasis>
|
||
nKeySyms</emphasis>
|
||
fields report a range of keycodes that includes all keys with new symbols.
|
||
Otherwise, both fields are <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbKeyActionsMask</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
, the <emphasis>
|
||
firstKeyAction</emphasis>
|
||
and <emphasis>
|
||
nKeyActions</emphasis>
|
||
fields report a range of keycodes that includes all keys with new actions.
|
||
Otherwise, both fields are <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbKeyBehaviorsMask</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
, the <emphasis>
|
||
firstKeyBehavior </emphasis>
|
||
and <emphasis>
|
||
nKeyBehaviors</emphasis>
|
||
fields report a range of keycodes that includes all keys with new key
|
||
behavior. Otherwise, both fields are <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbVirtualModsMask</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
, <emphasis>
|
||
virtualMods</emphasis>
|
||
contains all virtual modifiers to which a new set of real modifiers is bound.
|
||
Otherwise, <emphasis>
|
||
virtualMods</emphasis>
|
||
is <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbExplicitComponentsMask</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
, the <emphasis>
|
||
firstKeyExplicit</emphasis>
|
||
and <emphasis>
|
||
nKeyExplicit</emphasis>
|
||
fields report a range of keycodes that includes all keys with changed explicit
|
||
components. Otherwise, both fields are <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbModifierMapMask</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
, the <emphasis>
|
||
firstModMapKey</emphasis>
|
||
and <emphasis>
|
||
nModMapKeys</emphasis>
|
||
fields report a range of keycodes that includes all keys with changed modifier
|
||
bindings. Otherwise, both fields are <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbVirtualModMapMask</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
, the <emphasis>
|
||
firstVModMapKey</emphasis>
|
||
and <emphasis>
|
||
nVModMapKeys</emphasis>
|
||
fields report a range of keycodes that includes all keys with changed virtual
|
||
modifier mappings. Otherwise, both fields are <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Tracking_Keyboard_State_Changes'>
|
||
<title>Tracking Keyboard State Changes</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbStateNotify</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>time: TIMESTAMP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
deviceID: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
mods, baseMods, latchedMods, lockedMods: KEYMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
group, lockedGroup: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
baseGroup, latchedGroup: INT16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
compatState: KEYMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
grabMods, compatGrabMods: KEYMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
lookupMods, compatLookupMods: KEYMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
ptrBtnState: BUTMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
changed: KB_STATEPARTMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
keycode: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
eventType: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
requestMajor, requestMinor: CARD8</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
An <emphasis>XkbStateNotify</emphasis>
|
||
event reports that some component of the XKB state (see
|
||
<link linkend='Keyboard_State'>Keyboard State</link>) has changed.
|
||
State notify events are usually caused by key or pointer activity, but they can
|
||
also result from explicit state changes requested by the <emphasis>
|
||
XkbLatchLockState</emphasis>
|
||
request or by other extensions.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
deviceID</emphasis>
|
||
field reports the keyboard on which some state component changed. The
|
||
<emphasis>
|
||
changed</emphasis>
|
||
field reports the XKB state components (see
|
||
<link linkend='Keyboard_State'>Keyboard State</link>) that have changed
|
||
and contain any combination of:
|
||
</para>
|
||
|
||
<informaltable frame='none'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='3' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<colspec colname='c2' colwidth='1.0*'/>
|
||
<colspec colname='c3' colwidth='2.0*'/>
|
||
<thead>
|
||
<row rowsep='1'>
|
||
<entry>Bit in changed</entry>
|
||
<entry>Event field</entry>
|
||
<entry>Changed component</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><emphasis>
|
||
ModifierState</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
mods</emphasis>
|
||
</entry>
|
||
<entry>The effective modifiers</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
ModifierBase</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
baseMods</emphasis>
|
||
</entry>
|
||
<entry>The base modifiers</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
ModifierLatch</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
latchedMods</emphasis>
|
||
</entry>
|
||
<entry>The latched modifiers</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
ModifierLock</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
lockedMods</emphasis>
|
||
</entry>
|
||
<entry>The locked modifiers</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
GroupState</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
group</emphasis>
|
||
</entry>
|
||
<entry>The effective keyboard group</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
GroupBase</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
baseGroup</emphasis>
|
||
</entry>
|
||
<entry>The base keyboard group</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
GroupLatch</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
latchedGroup</emphasis>
|
||
</entry>
|
||
<entry>The latched keyboard group</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
GroupLock</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
lockedGroup</emphasis>
|
||
</entry>
|
||
<entry>The locked keyboard group</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
PointerButtons</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
ptrBtnState</emphasis>
|
||
</entry>
|
||
<entry>The state of the core pointer buttons</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
GrabMods</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
grabMods</emphasis>
|
||
</entry>
|
||
<entry>The XKB state used to compute grabs</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
LookupMods</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
lookupMods</emphasis>
|
||
</entry>
|
||
<entry>The XKB state used to look up symbols</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
CompatState</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
compatState</emphasis>
|
||
</entry>
|
||
<entry>Default state for non-XKB clients</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
CompatGrabMods</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
compatGrabMods</emphasis>
|
||
</entry>
|
||
<entry>The core state used to compute grabs</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
CompatLookupMods</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
compatLookupMods</emphasis>
|
||
</entry>
|
||
<entry>The core state used to look up symbols</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
The server sends an <emphasis>
|
||
XkbStateNotify</emphasis>
|
||
event to a client only if at least one of the bits that is set in the
|
||
<emphasis>
|
||
changed</emphasis>
|
||
field of the event is also set in the appropriate event details mask for the
|
||
client.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
A state notify event reports current values for all state components, even
|
||
those with unchanged values.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
keycode</emphasis>
|
||
field reports the key or button which caused the change in state while the
|
||
<emphasis>
|
||
eventType</emphasis>
|
||
field reports the exact type of event (e.g. <emphasis>
|
||
KeyPress</emphasis>
|
||
). If the change in state was not caused by key or button activity, both fields
|
||
have the value <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
requestMajor</emphasis>
|
||
and <emphasis>
|
||
requestMinor</emphasis>
|
||
fields report the major and minor opcodes of the request that caused the
|
||
change in state and have the value <emphasis>
|
||
0</emphasis>
|
||
if it was resulted from key or button activity.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Tracking_Keyboard_Control_Changes'>
|
||
<title>Tracking Keyboard Control Changes</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbControlsNotify</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>time: TIMESTAMP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
deviceID: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
numGroups: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
changedControls: KB_CONTROLMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
enabledControls,enabledControlChanges: KB_BOOLCTRLMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
keycode: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
eventType: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
requestMajor: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
requestMinor: CARD8</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
An <emphasis>
|
||
XkbControlsNotify</emphasis>
|
||
event reports a change in one or more of the global keyboard controls (see
|
||
<link linkend='Global_Keyboard_Controls'>Global Keyboard Controls</link>)
|
||
or in the internal modifiers or ignore locks masks (see
|
||
<link linkend='Server_Internal_Modifiers_and_Ignore_Locks_Behavior'>
|
||
Server Internal Modifiers and Ignore
|
||
Locks Behavior</link>). Controls notify events are usually caused by and
|
||
<emphasis>
|
||
XkbSetControls</emphasis>
|
||
request, but they can also be caused by keyboard activity or certain core
|
||
protocol and input extension requests.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
deviceID</emphasis>
|
||
field reports the keyboard for which some control has changed, and the
|
||
<emphasis>
|
||
changed</emphasis>
|
||
field reports the controls that have new values.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
changed</emphasis>
|
||
field can contain any of the values that are permitted for the <emphasis>
|
||
changeControls</emphasis>
|
||
field of the <emphasis>
|
||
XkbSetControls</emphasis>
|
||
request. The server sends an <emphasis>
|
||
XkbControlsNotify</emphasis>
|
||
event to a client only if at least one of the bits that is set in the
|
||
<emphasis>
|
||
changed</emphasis>
|
||
field of the event is also set in the appropriate event details mask for the
|
||
client.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
numGroups</emphasis>
|
||
field reports the total number of groups defined for the keyboard, whether or
|
||
not the number of groups has changed.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
enabledControls</emphasis>
|
||
field reports the current status of all of the boolean controls, whether or
|
||
not any boolean controls changed state. If <emphasis>
|
||
EnabledControls</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
, the <emphasis>
|
||
enabledControlChanges</emphasis>
|
||
field reports the boolean controls that were enabled or disabled; if a control
|
||
is specified in <emphasis>
|
||
enabledControlChanges</emphasis>
|
||
, the value that is reported for that control in <emphasis>
|
||
enabledControls</emphasis>
|
||
represents a change in state.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
keycode</emphasis>
|
||
field reports the key or button which caused the change in state while the
|
||
<emphasis>
|
||
eventType</emphasis>
|
||
field reports the exact type of event (e.g. <emphasis>
|
||
KeyPress</emphasis>
|
||
). If the change in state was not caused by key or button activity, both fields
|
||
have the value <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
requestMajor</emphasis>
|
||
and <emphasis>
|
||
requestMinor</emphasis>
|
||
fields report the major and minor opcodes of the request that caused the
|
||
change in state and have the value <emphasis>
|
||
0</emphasis>
|
||
if it was resulted from key or button activity.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Tracking_Keyboard_Indicator_State_Changes'>
|
||
<title>Tracking Keyboard Indicator State Changes</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbIndicatorStateNotify</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>time: TIMESTAMP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
deviceID: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
stateChanged, state: KB_INDICATORMASK</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
An <emphasis>
|
||
XkbIndicatorStateNotify</emphasis>
|
||
event indicates that one or more of the indicators on a keyboard have changed
|
||
state. Indicator state notify events can be caused by:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>Automatic update to reflect changes in keyboard state (keyboard
|
||
activity, <emphasis>
|
||
XkbLatchLockState</emphasis>
|
||
requests).
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Automatic update to reflect changes in keyboard controls (<emphasis>
|
||
XkbSetControls</emphasis>
|
||
, keyboard activity, certain core protocol and input extension requests).
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Explicit attempts to change indicator state (core protocol and input
|
||
extension requests, <emphasis>
|
||
XkbSetNamedIndicator</emphasis>
|
||
requests).
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>Changes to indicator maps (<emphasis>
|
||
XkbSetIndicatorMap</emphasis>
|
||
and <emphasis>
|
||
XkbSetNamedIndicator</emphasis>
|
||
requests).
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
The <emphasis>
|
||
deviceID</emphasis>
|
||
field reports the keyboard for which some indicator has changed, and the
|
||
<emphasis>
|
||
state</emphasis>
|
||
field reports the new state for all indicators on the specified keyboard. The
|
||
<emphasis>
|
||
stateChanged</emphasis>
|
||
field specifies which of the values in <emphasis>
|
||
state</emphasis>
|
||
represent a new state for the corresponding indicator. The server sends an
|
||
<emphasis>
|
||
XkbIndicatorStateNotify</emphasis>
|
||
event to a client only if at least one of the bits that is set in the
|
||
<emphasis>
|
||
stateChanged</emphasis>
|
||
field of the event is also set in the appropriate event details mask for the
|
||
client.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Tracking_Keyboard_Indicator_Map_Changes'>
|
||
<title>Tracking Keyboard Indicator Map Changes</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbIndicatorMapNotify</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>time: TIMESTAMP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
deviceID: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
state: KB_INDICATORMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
mapChanged: KB_INDICATORMASK</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
An <emphasis>
|
||
XkbIndicatorMapNotify</emphasis>
|
||
event indicates that the maps for one or more keyboard indicators have been
|
||
changed. Indicator map notify events can be caused by <emphasis>
|
||
XkbSetIndicatorMap</emphasis>
|
||
and <emphasis>
|
||
XkbSetNamedIndicator</emphasis>
|
||
requests.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
deviceID</emphasis>
|
||
field reports the keyboard for which some indicator map has changed, and the
|
||
<emphasis>
|
||
mapChanged</emphasis>
|
||
field reports the indicators with changed maps. The server sends an <emphasis>
|
||
XkbIndicatorMapNotify</emphasis>
|
||
event to a client only if at least one of the bits that is set in the
|
||
<emphasis>
|
||
mapChanged</emphasis>
|
||
field of the event is also set in the appropriate event details mask for the
|
||
client.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
state</emphasis>
|
||
field reports the current state of all indicators on the specified keyboard.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Tracking_Keyboard_Name_Changes'>
|
||
<title>Tracking Keyboard Name Changes</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbNamesNotify</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>time: TIMESTAMP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
deviceID: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
changed: KB_NAMEDETAILMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstType, nTypes: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstLevelName, nLevelNames: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstKey: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
nKeys, nKeyAliases, nRadioGroups: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
changedGroupNames: KB_GROUPMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
changedVirtualMods: KB_VMODMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
changedIndicators: KB_INDICATORMASK</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
An <emphasis>
|
||
XkbNamesNotify</emphasis>
|
||
event reports a change to one or more of the symbolic names associated with a
|
||
keyboard. Symbolic names can change when:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para> Some client explicitly changes them using <emphasis>
|
||
XkbSetNames</emphasis>
|
||
.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The list of key types or radio groups is resized
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The group width of some key type is changed
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
The <emphasis>
|
||
deviceID</emphasis>
|
||
field reports the keyboard on which names were changed. The <emphasis>
|
||
changed</emphasis>
|
||
mask lists the components for which some names have changed and can have any
|
||
combination of the values permitted for the <emphasis>
|
||
which</emphasis>
|
||
field of the <emphasis>
|
||
XkbGetNames</emphasis>
|
||
request. The server sends an <emphasis>
|
||
XkbNamesNotify</emphasis>
|
||
event to a client only if at least one of the bits that is set in the
|
||
<emphasis>
|
||
changed</emphasis>
|
||
field of the event is also set in the appropriate event details mask for the
|
||
client.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
KeyTypeNames</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
, the <emphasis>
|
||
firstType</emphasis>
|
||
and <emphasis>
|
||
nTypes</emphasis>
|
||
fields report a range of types that includes all types with changed names.
|
||
Otherwise, both fields are <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
KTLevelNames</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
, the <emphasis>
|
||
firstLevelName</emphasis>
|
||
and <emphasis>
|
||
nLevelNames</emphasis>
|
||
fields report a range of types that includes all types with changed level
|
||
names. Otherwise, both fields are <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
IndicatorNames</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
, the <emphasis>
|
||
changedIndicators</emphasis>
|
||
field reports the indicators with changed names. Otherwise, <emphasis>
|
||
changedIndicators</emphasis>
|
||
is <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
VirtualModNames</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
, the <emphasis>
|
||
changedVirtualMods</emphasis>
|
||
field reports the virtual modifiers with changed names. Otherwise, <emphasis>
|
||
changedVirtualMods</emphasis>
|
||
is <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
GroupNames</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
, the <emphasis>
|
||
changedGroupNames</emphasis>
|
||
field reports the groups with changed names. Otherwise, <emphasis>
|
||
changedGroupNames</emphasis>
|
||
is <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
KeyNames</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
, the <emphasis>
|
||
firstKey</emphasis>
|
||
and <emphasis>
|
||
nKeys</emphasis>
|
||
fields report a range of keycodes that includes all keys with changed names.
|
||
Otherwise, both fields are <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
nKeyAliases</emphasis>
|
||
field reports the total number of key aliases associated with the keyboard,
|
||
regardless of whether <emphasis>
|
||
KeyAliases</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
nRadioGroups</emphasis>
|
||
field reports the total number of radio group names associated with the
|
||
keyboard, regardless of whether <emphasis>
|
||
RGNames</emphasis>
|
||
is set in <emphasis>
|
||
changed</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Tracking_Compatibility_Map_Changes'>
|
||
<title>Tracking Compatibility Map Changes</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbCompatMapNotify</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>time: TIMESTAMP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
deviceID: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
changedGroups: KB_GROUPMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstSI, nSI: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
nTotalSI: CARD16</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
An <emphasis>
|
||
XkbCompatMapNotify</emphasis>
|
||
event indicates that some component of the compatibility map for a keyboard
|
||
has been changed. Compatibility map notify events can be caused by <emphasis>
|
||
XkbSetCompatMap</emphasis>
|
||
and <emphasis>
|
||
XkbGetMapByName</emphasis>
|
||
requests.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
deviceID</emphasis>
|
||
field reports the keyboard for which the compatibility map has changed; if the
|
||
server does not support the X input extension, <emphasis>
|
||
deviceID</emphasis>
|
||
is <emphasis>
|
||
0</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
changedGroups</emphasis>
|
||
field reports the keyboard groups, if any, with a changed entry in the group
|
||
compatibility map. The <emphasis>
|
||
firstSI</emphasis>
|
||
and <emphasis>
|
||
nSI</emphasis>
|
||
fields specify a range of symbol interpretations in the symbol compatibility
|
||
map that includes all changed symbol interpretations; if the symbol
|
||
compatibility map is unchanged, both fields are <emphasis>
|
||
0</emphasis>
|
||
. The <emphasis>
|
||
nTotalSI</emphasis>
|
||
field always reports the total number of symbol interpretations present in the
|
||
symbol compatibility map, regardless of whether any symbol interpretations have
|
||
been changed.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The server sends an <emphasis>
|
||
XkbCompatMapNotify</emphasis>
|
||
event to a client only if at least one of the following conditions is met:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
nSI</emphasis>
|
||
field of the event is non-zero, and the <emphasis>
|
||
XkbSymInterpMask</emphasis>
|
||
bit is set in the appropriate event details mask for the client.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>The <emphasis>
|
||
changedGroups</emphasis>
|
||
field of the event contains at least one group, and the <emphasis>
|
||
XkbGroupCompatMask</emphasis>
|
||
bit is set in the appropriate event details mask for the client.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
</sect2>
|
||
<sect2 id='Tracking_Application_Bell_Requests'>
|
||
<title>Tracking Application Bell Requests</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbBellNotify</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>time: TIMESTAMP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
deviceID: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
bellClass: { KbdFeedbackClass, BellFeedbackClass }</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
bellID: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
percent: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
pitch: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
duration: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
eventOnly: BOOL</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
name: ATOM</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
window: WINDOW</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
An <emphasis>
|
||
XkbBellNotify</emphasis>
|
||
event indicates that some client has requested a keyboard bell. Bell notify
|
||
events are usually caused by <emphasis>
|
||
Bell</emphasis>
|
||
, <emphasis>
|
||
DeviceBell</emphasis>
|
||
, or <emphasis>
|
||
XkbBell</emphasis>
|
||
requests, but they can also be generated by the server (e.g. if the <emphasis>
|
||
AccessXFeedback</emphasis>
|
||
control is active).
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The server sends an <emphasis>
|
||
XkbBellNotify</emphasis>
|
||
event to a client if the appropriate event details field for the client has
|
||
the value <emphasis>
|
||
True</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
deviceID</emphasis>
|
||
field specifies the device for which a bell was requested, while the <emphasis>
|
||
bellClass</emphasis>
|
||
and <emphasis>
|
||
bellID</emphasis>
|
||
fields specify the input extension class and identifier of the feedback for
|
||
which the bell was requested. If the reporting server does not support the
|
||
input extension, all three fields have the value 0.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
percent</emphasis>
|
||
, <emphasis>
|
||
pitch</emphasis>
|
||
and <emphasis>
|
||
duration</emphasis>
|
||
fields report the volume, tone and duration requested for the bell as
|
||
specified by the <emphasis>
|
||
XkbBell</emphasis>
|
||
request. Bell notify events caused by core protocol or input extension
|
||
requests use the pitch and duration specified in the corresponding bell or
|
||
keyboard feedback control.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the bell was caused by an <emphasis>
|
||
XkbBell</emphasis>
|
||
request or by the X server, <emphasis>
|
||
name</emphasis>
|
||
reports an optional symbolic name for the bell and the <emphasis>
|
||
window</emphasis>
|
||
field optionally reports the window for which the bell was generated.
|
||
Otherwise, both fields have the value <emphasis>
|
||
None</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If the <emphasis>
|
||
eventOnly</emphasis>
|
||
field is <emphasis>
|
||
True</emphasis>
|
||
, the server did not generate a sound in response to the request, otherwise the
|
||
server issues the beep before sending the event. The eventOnly field can be
|
||
<emphasis>
|
||
True</emphasis>
|
||
if the <emphasis>
|
||
AudibleBell</emphasis>
|
||
control is disabled or if a client explicitly requests <emphasis>
|
||
eventOnly</emphasis>
|
||
when it issues an <emphasis>
|
||
XkbBell</emphasis>
|
||
request.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Tracking_Messages_Generated_by_Key_Actions'>
|
||
<title>Tracking Messages Generated by Key Actions</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbActionMessage</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>time: TIMESTAMP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
deviceID: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
keycode: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
press: BOOL</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
mods: KEYMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
group: KB_GROUP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
keyEventFollows: BOOL</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
message: LISTofCARD8</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
An <emphasis>
|
||
XkbActionMessage</emphasis>
|
||
event is generated when the user operates a key to which an <emphasis>
|
||
SA_ActionMessage</emphasis>
|
||
message is bound under the appropriate state and group. The server sends an
|
||
<emphasis>
|
||
XkbActionMessage</emphasis>
|
||
event to a client if the appropriate event details field for the client has
|
||
the value <emphasis>
|
||
True</emphasis>
|
||
.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
deviceID</emphasis>
|
||
field specifies the keyboard device that contains the key which activated the
|
||
event. The <emphasis>
|
||
keycode</emphasis>
|
||
field specifies the key whose operation caused the message and press is
|
||
<emphasis>
|
||
True</emphasis>
|
||
if the message was caused by the user pressing the key. The <emphasis>
|
||
mods</emphasis>
|
||
and <emphasis>
|
||
group</emphasis>
|
||
fields report the effective keyboard modifiers and group in effect at the time
|
||
the key was pressed or released.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
keyEventFollows</emphasis>
|
||
is <emphasis>
|
||
True</emphasis>
|
||
, the server will also send a key press or release event, as appropriate, for
|
||
the key that generated the message. If it is <emphasis>
|
||
False</emphasis>
|
||
, the key causes only a message. Note that the key event is delivered normally
|
||
with respect to passive grabs, keyboard focus, and cursor position, so that
|
||
<emphasis>
|
||
keyEventFollows</emphasis>
|
||
does not guarantee that any particular client which receives the <emphasis>
|
||
XkbActionMessage</emphasis>
|
||
notify event will also receive a key press or release event.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
message</emphasis>
|
||
field is <emphasis>
|
||
NULL</emphasis>
|
||
-terminated string of up to <emphasis>
|
||
ActionMessageLength</emphasis>
|
||
(<emphasis>
|
||
6</emphasis>
|
||
) bytes, which reports the contents of the <emphasis>
|
||
message</emphasis>
|
||
field in the action that caused the message notify event.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Tracking_Changes_to_AccessX_State_and_Keys'>
|
||
<title>Tracking Changes to AccessX State and Keys</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbAccessXNotify</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>time: TIMESTAMP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
deviceID: CARD8</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
detail: KB_AXNDETAILMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
keycode: KEYCODE</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
slowKeysDelay: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
debounceDelay: CARD16</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
An <emphasis>
|
||
XkbAccessXNotify</emphasis>
|
||
event reports on some kinds of keyboard activity when any of the <emphasis>
|
||
SlowKeys</emphasis>
|
||
, <emphasis>
|
||
BounceKeys</emphasis>
|
||
or <emphasis>
|
||
AccessXKeys</emphasis>
|
||
controls are active. Compatibility map notify events can only be caused by
|
||
keyboard activity.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The <emphasis>
|
||
deviceID</emphasis>
|
||
and <emphasis>
|
||
keycode</emphasis>
|
||
fields specify the keyboard and key for which the event occurred. The
|
||
<emphasis>
|
||
detail</emphasis>
|
||
field describes the event that occurred and has one of the following values:
|
||
</para>
|
||
|
||
<informaltable frame='topbot'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='3' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<colspec colname='c2' colwidth='1.0*'/>
|
||
<colspec colname='c3' colwidth='2.0*'/>
|
||
<thead>
|
||
<row rowsep='1'>
|
||
<entry>Detail</entry>
|
||
<entry>Control</entry>
|
||
<entry>Meaning</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><emphasis>
|
||
AXN_SKPress</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
SlowKeys</emphasis>
|
||
</entry>
|
||
<entry>Key pressed</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
AXN_SKAccept</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
SlowKeys</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
K</emphasis>
|
||
ey held until it was accepted.</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
AXN_SKReject</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
SlowKeys</emphasis>
|
||
</entry>
|
||
<entry>Key released before it was accepted.</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
AXN_SKRelease</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
SlowKeys</emphasis>
|
||
</entry>
|
||
<entry>Key released after it was accepted.</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
AXN_BKAccept</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
BounceKeys</emphasis>
|
||
</entry>
|
||
<entry>Key pressed while it was active.</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
AXN_BKReject</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
BounceKeys</emphasis>
|
||
</entry>
|
||
<entry>Key pressed while it was still disabled.</entry>
|
||
</row>
|
||
<row>
|
||
<entry><emphasis>
|
||
AXN_AXKWarning</emphasis>
|
||
</entry>
|
||
<entry><emphasis>
|
||
AccessXKeys</emphasis>
|
||
</entry>
|
||
<entry>Shift key held down for four seconds</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
Each subclass of the AccessX notify event is generated only when the control
|
||
specified in the table above is enabled. The server sends an <emphasis>
|
||
XkbAccessXNotify</emphasis>
|
||
event to a client only if the bit which corresponds to the value of the
|
||
<emphasis>
|
||
detail</emphasis>
|
||
field for the event is set in the appropriate event details mask for the
|
||
client.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Regardless of the value of <emphasis>
|
||
detail</emphasis>
|
||
, the <emphasis>
|
||
slowKeysDelay</emphasis>
|
||
and <emphasis>
|
||
debounceDelay</emphasis>
|
||
fields always reports the current slow keys acceptance delay (see
|
||
<link linkend='The_SlowKeys_Control'>The SlowKeys Control</link>) and
|
||
debounce delay (see <link linkend='The_BounceKeys_Control'>The BounceKeys
|
||
Control</link>) for the specified keyboard.
|
||
</para>
|
||
|
||
|
||
</sect2>
|
||
<sect2 id='Tracking_Changes_To_Extension_Devices'>
|
||
<title>Tracking Changes To Extension Devices</title>
|
||
|
||
|
||
<informaltable frame='none' tabstyle='proto'>
|
||
<?dbfo keep-together="always" ?>
|
||
<tgroup cols='1' align='left' colsep='0' rowsep='0'>
|
||
<colspec colname='c1' colwidth='1.0*'/>
|
||
<thead>
|
||
<row>
|
||
<entry role='protoname'>XkbExtensionDeviceNotify</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry role='protoargs'>time: TIMESTAMP</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
deviceID: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
ledClass: { KbdFeedbackClass, LedFeedbackClass }</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
ledID: CARD16</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
reason: KB_XIDETAILMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
supported: KB_XIFEATUREMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
unsupported: KB_XIFEATUREMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
ledsDefined: KB_INDICATORMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
ledState: KB_INDICATORMASK</entry>
|
||
</row>
|
||
<row>
|
||
<entry role='protoname'>
|
||
firstButton, nButtons: CARD8</entry>
|
||
</row>
|
||
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
|
||
<para>
|
||
An <emphasis>
|
||
XkbExtensionDeviceNotify</emphasis>
|
||
event reports:
|
||
</para>
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<para>A change to some part of the XKB information for an extension device.
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>An attempt to use an XKB extension device feature that is not supported
|
||
for the specified device by the current implementation.
|
||
</para>
|
||
</listitem>
|
||
</itemizedlist>
|
||
|
||
<para>
|
||
The <emphasis>
|
||
deviceID</emphasis>
|
||
field specifies the X Input Extension device identifier of some device on
|
||
which an XKB feature was requested, or <emphasis>
|
||
XkbUseCorePtr</emphasis>
|
||
if the request affected the core pointer device. The <emphasis>
|
||
reason</emphasis>
|
||
field explains why the event was generated in response to the request, and can
|
||
contain any combination of <emphasis>
|
||
XkbXI_UnsupportedFeature</emphasis>
|
||
and the values permitted for the change field of the <emphasis>
|
||
XkbSetDeviceInfo</emphasis>
|
||
request.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbXI_ButtonActions</emphasis>
|
||
is set in <emphasis>
|
||
reason</emphasis>
|
||
, this event reports a successful change to the XKB actions bound to one or
|
||
more buttons on the core pointer or an extension device. The <emphasis>
|
||
firstButton</emphasis>
|
||
and <emphasis>
|
||
nButtons</emphasis>
|
||
fields report a range of device buttons that include all of the buttons for
|
||
which actions were changed.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If any combination of <emphasis>
|
||
XkbXI_IndicatorNames</emphasis>
|
||
, <emphasis>
|
||
XkbXI_IndicatorMaps</emphasis>
|
||
, or <emphasis>
|
||
XkbXI_IndicatorState</emphasis>
|
||
is set in either <emphasis>
|
||
reason</emphasis>
|
||
or <emphasis>
|
||
unsupported</emphasis>
|
||
, the <emphasis>
|
||
ledClass</emphasis>
|
||
and <emphasis>
|
||
ledID</emphasis>
|
||
fields specify the X Input Extension feedback class and identifier of the
|
||
feedback for which the change is reported. If this event reports any changes to
|
||
an indicator feedback, the <emphasis>
|
||
ledsDefined</emphasis>
|
||
field reports all indicators on that feedback for which either a name or a
|
||
indicator map are defined, and <emphasis>
|
||
ledState</emphasis>
|
||
reports the current state of all of the indicators on the specified feedback.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbXI_IndicatorNames</emphasis>
|
||
is set in <emphasis>
|
||
reason</emphasis>
|
||
, this event reports a successful change to the symbolic names bound to one or
|
||
more extension device indicators by XKB. If <emphasis>
|
||
XkbXI_IndicatorMaps</emphasis>
|
||
is set in <emphasis>
|
||
reason</emphasis>
|
||
, this event reports a successful change to the indicator maps bound to one or
|
||
more extension device indicators by XKB. If <emphasis>
|
||
XkbXI_IndicatorState</emphasis>
|
||
is set in reason, this event reports that one or more indicators in the
|
||
specified device and feedback have changed state.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
If <emphasis>
|
||
XkbXI_UnsupportedFeature</emphasis>
|
||
is set in reason, this event reports an unsuccessful attempt to use some XKB
|
||
extension device feature that is not supported by the XKB implementation in the
|
||
server for the specified device. The <emphasis>
|
||
unsupported</emphasis>
|
||
mask reports the requested features that are not available on the specified
|
||
device. See <link linkend='Interactions_Between_XKB_and_the_X_Input_Extension'>Interactions Between
|
||
XKB and the X Input Extension</link> for more information about possible XKB
|
||
interactions with the X Input Extension.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
The server sends an <emphasis>
|
||
XkbExtensionDeviceNotify</emphasis>
|
||
event to a client only if at least one of the bits that is set in the
|
||
<emphasis>
|
||
reason</emphasis>
|
||
field of the event is also set in the appropriate event details mask for the
|
||
client.
|
||
</para>
|
||
|
||
|
||
<para>
|
||
Events that report a successful change to some extension device feature are
|
||
reported to all clients that have expressed interest in the event; events that
|
||
report an attempt to use an unsupported feature are reported only to the client
|
||
which issued the request. Events which report a partial success are reported to
|
||
all interested clients, but only the client that issued the request is informed
|
||
of the attempt to use unsupported features.
|
||
</para>
|
||
</sect2>
|
||
</sect1>
|
||
</chapter>
|