[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