[Xcb] GSoC 2009: XKB and XI2 support
Barton C Massey
bart at cs.pdx.edu
Wed Sep 16 10:47:59 PDT 2009
We should add an "xml-version" attribute to the <xcb> tag,
in fact we should have done this long ago. Then things that
don't yet understand new syntax can simply ignore files with
too-new version. This means that wireshark wouldn't
immediately be able to decode XKB, but it can't do that now
AFAIK.
Bart
In message <4AB10064.8020400 at gmail.com> you wrote:
> Peter Harris pisze:
> > On Tue, Sep 15, 2009 at 5:55 AM, Mariusz Ceier wrote:
> >> I would nee d some RFC on new tags that I introduced for XKB, from the
> >> point of view of code generators of different languages.
> >
> > I'll try to do a more thorough review later, but this one stuck out:
> >
> >> - replyof - makes copy of reply of given request a field of other
> >> request, e.g.
> >> <replyof request="GetMap" name="map" />
> >
> > Why? Can this not be done using the copy/paste function in your
> > editor? Or did I misunderstand the purpose of this syntax?
> >
> Everything can be done this way :) If attached diff is acceptable I can
> merge it.
> replyof is something like field with type of reply of some request,
> instead of some structure. Don't you think that these fields could be
> also replaced by fields of referenced structure ?
> Referencing replies of requests can be done another way, by explicitly
> naming replies ( I think that change would require change in all xml's,
> not to mention ensuring backwards compatibility ).
>
> > Every single piece of syntax you add is another piece of syntax that
> > *every* generator must support. In particular, this one looks like a
> > real pain to add to the Wireshark dissector (now on trunk -
> > http://anonsvn.wireshark.org/viewvc/trunk/tools/process-x11-xcb.pl?view=markup&pathrev=29871
> > ).
> Right, every time the syntax changes, every generator should be updated,
> but it doesn't mean that syntax can't change. XKB needs syntax changes (
> at least conditional tags ), so why not think about what tags/changes
> are needed and feasible now ?
>
> Mariusz Ceier
>
>
> --------------080205030500020001040104
> Content-Type: text/plain;
> name="replyof.diff"
> Content-Transfer-Encoding: 7bit
> Content-Disposition: inline;
> filename="replyof.diff"
>
> --- xkb.xml 2009-09-16 12:56:17.000000000 +0200
> +++ xkb2.xml 2009-09-16 16:43:25.000000000 +0200
> @@ -2456,35 +2456,774 @@
> <fieldref>reported</fieldref>
> <bitcase>
> <enumref ref="GBNDetail">Types</enumref>
> - <replyof request="GetMap" name="map" />
> + <field name="deviceID" type="CARD8" />
> + <pad bytes="2" />
> + <field name="minKeyCode" type="KEYCODE" />
> + <field name="maxKeyCode" type="KEYCODE" />
> + <field name="present" type="CARD16" enum="MapPart" />
> + <field name="firstType" type="CARD8" />
> + <!-- t -->
> + <field name="nTypes" type="CARD8" />
> + <field name="totalTypes" type="CARD8" />
> + <field name="firstKeySym" type="KEYCODE" />
> + <!-- S -->
> + <field name="totalSyms" type="CARD16" />
> + <!-- s -->
> + <field name="nKeySyms" type="CARD8" />
> + <field name="firstKeyAction" type="KEYCODE" />
> + <!-- A -->
> + <field name="totalActions" type="CARD16" />
> + <!-- a -->
> + <field name="nKeyActions" type="CARD8" />
> + <field name="firstKeyBehavior" type="KEYCODE" />
> + <!-- b -->
> + <field name="nKeyBehaviors" type="CARD8" />
> + <!-- B -->
> + <field name="totalKeyBehaviors" type="CARD8" />
> + <field name="firstKeyExplicit" type="KEYCODE" />
> + <!-- e -->
> + <field name="nKeyExplicit" type="CARD8" />
> + <!-- E -->
> + <field name="totalKeyExplicit" type="CARD8" />
> + <field name="firstModMapKey" type="KEYCODE" />
> + <!-- m -->
> + <field name="nModMapKeys" type="CARD8" />
> + <!-- M -->
> + <field name="totalModMapKeys" type="CARD8" />
> + <field name="firstVModMapKey" type="KEYCODE" />
> + <!-- v -->
> + <field name="nVModMapKeys" type="CARD8" />
> + <!-- V -->
> + <field name="totalVModMapKeys" type="CARD8" />
> + <pad bytes="1" />
> + <field name="virtualMods" type="CARD16" mask="VMod" />
> + <switch name="map">
> + <fieldref>present</fieldref>
> + <bitcase>
> + <enumref ref="MapPart">KeyTypes</enumref>
> + <list name="types_rtrn" type="KeyType">
> + <fieldref>nTypes</fieldref>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">KeySyms</enumref>
> + <list name="syms_rtrn" type="KeySymMap">
> + <!-- 8s + 4S -->
> + <op op="+">
> + <op op="*">
> + <value>8</value>
> + <fieldref>nKeySyms</fieldref>
> + </op>
> + <op op="*">
> + <value>4</value>
> + <fieldref>totalSyms</fieldref>
> + </op>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">KeyActions</enumref>
> + <list name="acts_rtrn_count" type="CARD8">
> + <!-- a -->
> + <fieldref>nKeyActions</fieldref>
> + </list>
> + <list name="acts_rtrn_acts" type="Action">
> + <!-- 8A -->
> + <op op="*">
> + <value>8</value>
> + <fieldref>totalActions</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">KeyBehaviors</enumref>
> + <list name="behaviors_rtrn" type="SetBehavior">
> + <!-- 4B -->
> + <op op="*">
> + <value>4</value>
> + <fieldref>totalKeyBehaviors</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">VirtualMods</enumref>
> + <list name="vmods_rtrn" type="CARD8" mask="KeyMask">
> + <!-- v -->
> + <fieldref>nVModMapKeys</fieldref>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">ExplicitComponents</enumref>
> + <list name="explicit_rtrn" type="SetExplicit">
> + <!-- 2E -->
> + <op op="*">
> + <value>2</value>
> + <fieldref>totalKeyExplicit</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">ModifierMap</enumref>
> + <list name="modmap_rtrn" type="KeyModMap">
> + <!-- 2M -->
> + <op op="*">
> + <value>2</value>
> + <fieldref>totalModMapKeys</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">VirtualModMap</enumref>
> + <list name="vmodmap_rtrn" type="KeyVModMap">
> + <!-- 4V -->
> + <op op="*">
> + <value>4</value>
> + <fieldref>totalVModMapKeys</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + </switch>
> </bitcase>
> <bitcase>
> <enumref ref="GBNDetail">CompatMap</enumref>
> - <replyof request="GetCompatMap" name="compat" />
> + <field name="deviceID" type="CARD8" />
> + <field name="groupsRtrn" type="CARD8" mask="SetOfGroup" />
> + <pad bytes="1" />
> + <field name="firstSIRtrn" type="CARD16" />
> + <!-- n -->
> + <field name="nSIRtrn" type="CARD16" />
> + <field name="nTotalSI" type="CARD16" />
> + <pad bytes="16" />
> + <list name="si_rtrn" type="SymInterpret">
> + <!-- 16n -->
> + <op op="*">
> + <value>16</value>
> + <fieldref>nSIRtrn</fieldref>
> + </op>
> + </list>
> + <list name="group_rtrn" type="ModDef">
> + <!-- 4g -->
> + <!-- g = popcount(groupsRtrn) -->
> + <op op="*">
> + <value>4</value>
> + <popcount>
> + <fieldref>groupsRtrn</fieldref>
> + </popcount>
> + </op>
> + </list>
> </bitcase>
> <bitcase>
> <enumref ref="GBNDetail">ClientSymbols</enumref>
> - <replyof request="GetMap" name="clientmap" />
> + <field name="deviceID" type="CARD8" />
> + <pad bytes="2" />
> + <field name="minKeyCode" type="KEYCODE" />
> + <field name="maxKeyCode" type="KEYCODE" />
> + <field name="present" type="CARD16" enum="MapPart" />
> + <field name="firstType" type="CARD8" />
> + <!-- t -->
> + <field name="nTypes" type="CARD8" />
> + <field name="totalTypes" type="CARD8" />
> + <field name="firstKeySym" type="KEYCODE" />
> + <!-- S -->
> + <field name="totalSyms" type="CARD16" />
> + <!-- s -->
> + <field name="nKeySyms" type="CARD8" />
> + <field name="firstKeyAction" type="KEYCODE" />
> + <!-- A -->
> + <field name="totalActions" type="CARD16" />
> + <!-- a -->
> + <field name="nKeyActions" type="CARD8" />
> + <field name="firstKeyBehavior" type="KEYCODE" />
> + <!-- b -->
> + <field name="nKeyBehaviors" type="CARD8" />
> + <!-- B -->
> + <field name="totalKeyBehaviors" type="CARD8" />
> + <field name="firstKeyExplicit" type="KEYCODE" />
> + <!-- e -->
> + <field name="nKeyExplicit" type="CARD8" />
> + <!-- E -->
> + <field name="totalKeyExplicit" type="CARD8" />
> + <field name="firstModMapKey" type="KEYCODE" />
> + <!-- m -->
> + <field name="nModMapKeys" type="CARD8" />
> + <!-- M -->
> + <field name="totalModMapKeys" type="CARD8" />
> + <field name="firstVModMapKey" type="KEYCODE" />
> + <!-- v -->
> + <field name="nVModMapKeys" type="CARD8" />
> + <!-- V -->
> + <field name="totalVModMapKeys" type="CARD8" />
> + <pad bytes="1" />
> + <field name="virtualMods" type="CARD16" mask="VMod" />
> + <switch name="map">
> + <fieldref>present</fieldref>
> + <bitcase>
> + <enumref ref="MapPart">KeyTypes</enumref>
> + <list name="types_rtrn" type="KeyType">
> + <fieldref>nTypes</fieldref>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">KeySyms</enumref>
> + <list name="syms_rtrn" type="KeySymMap">
> + <!-- 8s + 4S -->
> + <op op="+">
> + <op op="*">
> + <value>8</value>
> + <fieldref>nKeySyms</fieldref>
> + </op>
> + <op op="*">
> + <value>4</value>
> + <fieldref>totalSyms</fieldref>
> + </op>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">KeyActions</enumref>
> + <list name="acts_rtrn_count" type="CARD8">
> + <!-- a -->
> + <fieldref>nKeyActions</fieldref>
> + </list>
> + <list name="acts_rtrn_acts" type="Action">
> + <!-- 8A -->
> + <op op="*">
> + <value>8</value>
> + <fieldref>totalActions</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">KeyBehaviors</enumref>
> + <list name="behaviors_rtrn" type="SetBehavior">
> + <!-- 4B -->
> + <op op="*">
> + <value>4</value>
> + <fieldref>totalKeyBehaviors</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">VirtualMods</enumref>
> + <list name="vmods_rtrn" type="CARD8" mask="KeyMask">
> + <!-- v -->
> + <fieldref>nVModMapKeys</fieldref>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">ExplicitComponents</enumref>
> + <list name="explicit_rtrn" type="SetExplicit">
> + <!-- 2E -->
> + <op op="*">
> + <value>2</value>
> + <fieldref>totalKeyExplicit</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">ModifierMap</enumref>
> + <list name="modmap_rtrn" type="KeyModMap">
> + <!-- 2M -->
> + <op op="*">
> + <value>2</value>
> + <fieldref>totalModMapKeys</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">VirtualModMap</enumref>
> + <list name="vmodmap_rtrn" type="KeyVModMap">
> + <!-- 4V -->
> + <op op="*">
> + <value>4</value>
> + <fieldref>totalVModMapKeys</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + </switch>
> </bitcase>
> <bitcase>
> <enumref ref="GBNDetail">ServerSymbols</enumref>
> - <replyof request="GetMap" name="servermap" />
> + <field name="deviceID" type="CARD8" />
> + <pad bytes="2" />
> + <field name="minKeyCode" type="KEYCODE" />
> + <field name="maxKeyCode" type="KEYCODE" />
> + <field name="present" type="CARD16" enum="MapPart" />
> + <field name="firstType" type="CARD8" />
> + <!-- t -->
> + <field name="nTypes" type="CARD8" />
> + <field name="totalTypes" type="CARD8" />
> + <field name="firstKeySym" type="KEYCODE" />
> + <!-- S -->
> + <field name="totalSyms" type="CARD16" />
> + <!-- s -->
> + <field name="nKeySyms" type="CARD8" />
> + <field name="firstKeyAction" type="KEYCODE" />
> + <!-- A -->
> + <field name="totalActions" type="CARD16" />
> + <!-- a -->
> + <field name="nKeyActions" type="CARD8" />
> + <field name="firstKeyBehavior" type="KEYCODE" />
> + <!-- b -->
> + <field name="nKeyBehaviors" type="CARD8" />
> + <!-- B -->
> + <field name="totalKeyBehaviors" type="CARD8" />
> + <field name="firstKeyExplicit" type="KEYCODE" />
> + <!-- e -->
> + <field name="nKeyExplicit" type="CARD8" />
> + <!-- E -->
> + <field name="totalKeyExplicit" type="CARD8" />
> + <field name="firstModMapKey" type="KEYCODE" />
> + <!-- m -->
> + <field name="nModMapKeys" type="CARD8" />
> + <!-- M -->
> + <field name="totalModMapKeys" type="CARD8" />
> + <field name="firstVModMapKey" type="KEYCODE" />
> + <!-- v -->
> + <field name="nVModMapKeys" type="CARD8" />
> + <!-- V -->
> + <field name="totalVModMapKeys" type="CARD8" />
> + <pad bytes="1" />
> + <field name="virtualMods" type="CARD16" mask="VMod" />
> + <switch name="map">
> + <fieldref>present</fieldref>
> + <bitcase>
> + <enumref ref="MapPart">KeyTypes</enumref>
> + <list name="types_rtrn" type="KeyType">
> + <fieldref>nTypes</fieldref>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">KeySyms</enumref>
> + <list name="syms_rtrn" type="KeySymMap">
> + <!-- 8s + 4S -->
> + <op op="+">
> + <op op="*">
> + <value>8</value>
> + <fieldref>nKeySyms</fieldref>
> + </op>
> + <op op="*">
> + <value>4</value>
> + <fieldref>totalSyms</fieldref>
> + </op>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">KeyActions</enumref>
> + <list name="acts_rtrn_count" type="CARD8">
> + <!-- a -->
> + <fieldref>nKeyActions</fieldref>
> + </list>
> + <list name="acts_rtrn_acts" type="Action">
> + <!-- 8A -->
> + <op op="*">
> + <value>8</value>
> + <fieldref>totalActions</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">KeyBehaviors</enumref>
> + <list name="behaviors_rtrn" type="SetBehavior">
> + <!-- 4B -->
> + <op op="*">
> + <value>4</value>
> + <fieldref>totalKeyBehaviors</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">VirtualMods</enumref>
> + <list name="vmods_rtrn" type="CARD8" mask="KeyMask">
> + <!-- v -->
> + <fieldref>nVModMapKeys</fieldref>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">ExplicitComponents</enumref>
> + <list name="explicit_rtrn" type="SetExplicit">
> + <!-- 2E -->
> + <op op="*">
> + <value>2</value>
> + <fieldref>totalKeyExplicit</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">ModifierMap</enumref>
> + <list name="modmap_rtrn" type="KeyModMap">
> + <!-- 2M -->
> + <op op="*">
> + <value>2</value>
> + <fieldref>totalModMapKeys</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="MapPart">VirtualModMap</enumref>
> + <list name="vmodmap_rtrn" type="KeyVModMap">
> + <!-- 4V -->
> + <op op="*">
> + <value>4</value>
> + <fieldref>totalVModMapKeys</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + </switch>
> </bitcase>
> <bitcase>
> <enumref ref="GBNDetail">IndicatorMap</enumref>
> - <replyof request="GetIndicatorMap" name="indicators" />
> + <field name="deviceID" type="CARD8" />
> + <field name="which" type="CARD32" />
> + <field name="realIndicators" type="CARD32" />
> + <!-- n -->
> + <field name="nIndicators" type="CARD8" />
> + <pad bytes="15" />
> + <list name="maps" type="IndicatorMap">
> + <!-- 12n -->
> + <op op="*">
> + <value>12</value>
> + <fieldref>nIndicators</fieldref>
> + </op>
> + </list>
> </bitcase>
> <bitcase>
> <enumref ref="GBNDetail">KeyNames</enumref>
> - <replyof request="GetNames" name="keynames" />
> + <field name="deviceID" type="CARD8" />
> + <field name="which" type="CARD32" mask="NameDetail" />
> + <field name="minKeyCode" type="KEYCODE" />
> + <field name="maxKeyCode" type="KEYCODE" />
> + <!-- t -->
> + <field name="nTypes" type="CARD8" />
> + <!-- has g bits set to 1 -->
> + <field name="groupNames" type="CARD8" mask="Group" />
> + <!-- has v bits set to 1 -->
> + <field name="virtualMods" type="CARD16" mask="VMod" />
> + <field name="firstKey" type="KEYCODE" />
> + <!-- k -->
> + <field name="nKeys" type="CARD8" />
> + <!-- has i bits set to 1 -->
> + <field name="indicators" type="CARD32" />
> + <!-- r -->
> + <field name="nRadioGroups" type="CARD8" />
> + <!-- a -->
> + <field name="nKeyAliases" type="CARD8" />
> + <!-- l -->
> + <field name="nKTLevels" type="CARD16" />
> + <pad bytes="4" />
> + <switch name="valueList">
> + <fieldref>which</fieldref>
> + <bitcase>
> + <enumref ref="NameDetail">Keycodes</enumref>
> + <field name="keycodesName" type="ATOM" />
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">Geometry</enumref>
> + <field name="geometryName" type="ATOM" />
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">Symbols</enumref>
> + <field name="symbolsName" type="ATOM" />
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">PhySymbols</enumref>
> + <field name="physSymbolsName" type="ATOM" />
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">Types</enumref>
> + <field name="typesName" type="ATOM" />
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">Compat</enumref>
> + <field name="compatName" type="ATOM" />
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">KeyTypeNames</enumref>
> + <list name="typeNames" type="ATOM">
> + <!-- 4t -->
> + <op op="*">
> + <value>4</value>
> + <fieldref>nTypes</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">KTLevelNames</enumref>
> + <list name="nLevelsPerType" type="CARD8">
> + <!-- l -->
> + <fieldref>nKTLevels</fieldref>
> + </list>
> + <list name="ktLevelNames" type="ATOM">
> + <!-- 4L -->
> + <!-- L = sum of all elements of nLevelsPerType -->
> + <op op="*">
> + <value>4</value>
> + <sumof ref="nLevelsPerType" type="CARD16" />
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">IndicatorNames</enumref>
> + <list name="indicatorNames" type="ATOM">
> + <!-- 4i -->
> + <op op="*">
> + <value>4</value>
> + <popcount>
> + <fieldref>indicators</fieldref>
> + </popcount>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">VirtualModNames</enumref>
> + <list name="virtualModNames" type="ATOM">
> + <!-- 4v -->
> + <op op="*">
> + <value>4</value>
> + <popcount>
> + <fieldref>virtualMods</fieldref>
> + </popcount>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">GroupNames</enumref>
> + <list name="groupNames" type="ATOM">
> + <!-- 4g -->
+ <op op="*">
> + <value>4</value>
> + <popcount>
> + <fieldref>groupNames</fieldref>
> + </popcount>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">KeyNames</enumref>
> + <list name="keyNames" type="KeyName">
> + <!-- 4k -->
> + <op op="*">
> + <value>4</value>
> + <fieldref>nKeys</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">KeyAliases</enumref>
> + <list name="keyAliases" type="KeyAlias">
> + <!-- 8a -->
> + <op op="*">
> + <value>8</value>
> + <fieldref>nKeyAliases</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">RGNames</enumref>
> + <list name="radioGroupNames" type="ATOM">
> + <!-- 4r -->
> + <op op="*">
> + <value>4</value>
> + <fieldref>nRadioGroups</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + </switch>
> </bitcase>
> <bitcase>
> <enumref ref="GBNDetail">OtherNames</enumref>
> - <replyof request="GetNames" name="othernames" />
> + <field name="deviceID" type="CARD8" />
> + <field name="which" type="CARD32" mask="NameDetail" />
> + <field name="minKeyCode" type="KEYCODE" />
> + <field name="maxKeyCode" type="KEYCODE" />
> + <!-- t -->
> + <field name="nTypes" type="CARD8" />
> + <!-- has g bits set to 1 -->
> + <field name="groupNames" type="CARD8" mask="Group" />
> + <!-- has v bits set to 1 -->
> + <field name="virtualMods" type="CARD16" mask="VMod" />
> + <field name="firstKey" type="KEYCODE" />
> + <!-- k -->
> + <field name="nKeys" type="CARD8" />
> + <!-- has i bits set to 1 -->
> + <field name="indicators" type="CARD32" />
> + <!-- r -->
> + <field name="nRadioGroups" type="CARD8" />
> + <!-- a -->
> + <field name="nKeyAliases" type="CARD8" />
> + <!-- l -->
> + <field name="nKTLevels" type="CARD16" />
> + <pad bytes="4" />
> + <switch name="valueList">
> + <fieldref>which</fieldref>
> + <bitcase>
> + <enumref ref="NameDetail">Keycodes</enumref>
> + <field name="keycodesName" type="ATOM" />
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">Geometry</enumref>
> + <field name="geometryName" type="ATOM" />
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">Symbols</enumref>
> + <field name="symbolsName" type="ATOM" />
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">PhySymbols</enumref>
> + <field name="physSymbolsName" type="ATOM" />
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">Types</enumref>
> + <field name="typesName" type="ATOM" />
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">Compat</enumref>
> + <field name="compatName" type="ATOM" />
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">KeyTypeNames</enumref>
> + <list name="typeNames" type="ATOM">
> + <!-- 4t -->
> + <op op="*">
> + <value>4</value>
> + <fieldref>nTypes</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">KTLevelNames</enumref>
> + <list name="nLevelsPerType" type="CARD8">
> + <!-- l -->
> + <fieldref>nKTLevels</fieldref>
> + </list>
> + <list name="ktLevelNames" type="ATOM">
> + <!-- 4L -->
> + <!-- L = sum of all elements of nLevelsPerType -->
> + <op op="*">
> + <value>4</value>
> + <sumof ref="nLevelsPerType" type="CARD16" />
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">IndicatorNames</enumref>
> + <list name="indicatorNames" type="ATOM">
> + <!-- 4i -->
> + <op op="*">
> + <value>4</value>
> + <popcount>
> + <fieldref>indicators</fieldref>
> + </popcount>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">VirtualModNames</enumref>
> + <list name="virtualModNames" type="ATOM">
> + <!-- 4v -->
> + <op op="*">
> + <value>4</value>
> + <popcount>
> + <fieldref>virtualMods</fieldref>
> + </popcount>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">GroupNames</enumref>
> + <list name="groupNames" type="ATOM">
> + <!-- 4g -->
> + <op op="*">
> + <value>4</value>
> + <popcount>
> + <fieldref>groupNames</fieldref>
> + </popcount>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">KeyNames</enumref>
> + <list name="keyNames" type="KeyName">
> + <!-- 4k -->
> + <op op="*">
> + <value>4</value>
> + <fieldref>nKeys</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">KeyAliases</enumref>
> + <list name="keyAliases" type="KeyAlias">
> + <!-- 8a -->
> + <op op="*">
> + <value>8</value>
> + <fieldref>nKeyAliases</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + <bitcase>
> + <enumref ref="NameDetail">RGNames</enumref>
> + <list name="radioGroupNames" type="ATOM">
> + <!-- 4r -->
> + <op op="*">
> + <value>4</value>
> + <fieldref>nRadioGroups</fieldref>
> + </op>
> + </list>
> + </bitcase>
> + </switch>
> </bitcase>
> <bitcase>
> <enumref ref="GBNDetail">Geometry</enumref>
> - <replyof request="GetGeometry" name="geometry" />
> + <field name="deviceID" type="CARD8" />
> + <field name="name" type="ATOM" />
> + <field name="found" type="BOOL" />
> + <pad bytes="1" />
> + <field name="widthMM" type="CARD16" />
> + <field name="heightMM" type="CARD16" />
> + <!-- p -->
> + <field name="nProperties" type="CARD16" />
> + <!-- c -->
> + <field name="nColors" type="CARD16" />
> + <!-- h -->
> + <field name="nShapes" type="CARD16" />
> + <!-- s -->
> + <field name="nSections" type="CARD16" />
> + <!-- d -->
> + <field name="nDoodads" type="CARD16" />
> + <!-- a -->
> + <field name="nKeyAliases" type="CARD16" />
> + <field name="baseColorNdx" type="CARD8" />
> + <field name="labelColorNdx" type="CARD8" />
> + <field name="labelFont" type="CountedString16" />
> + <list name="properties" type="Property">
> + <!-- 8p -->
> + <op op="*">
> + <value>8</value>
> + <fieldref>nProperties</fieldref>
> + </op>
> + </list>
> + <list name="colors" type="CountedString16">
> + <!-- c -->
> + <fieldref>nColors</fieldref>
> + </list>
> + <list name="shapes" type="Shape">
> + <!-- h -->
> + <fieldref>nShapes</fieldref>
> + </list>
> + <list name="sections" type="Section">
> + <!-- s -->
> + <fieldref>nSections</fieldref>
> + </list>
> + <list name="doodads" type="Doodad">
> + <!-- d -->
> + <fieldref>nDoodads</fieldref>
> + </list>
> + <list name="keyAliases" type="KeyAlias">
> + <!-- a -->
> + <fieldref>nKeyAliases</fieldref>
> + </list>
> </bitcase>
> </switch>
> </reply>
>
> --------------080205030500020001040104
> Content-Type: text/plain; charset="us-ascii"
> MIME-Version: 1.0
> Content-Transfer-Encoding: 7bit
> Content-Disposition: inline
>
> _______________________________________________
> Xcb mailing list
> Xcb at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/xcb
> --------------080205030500020001040104--
More information about the Xcb
mailing list