diff --git a/.compat-libxcb.metadata b/.compat-libxcb.metadata new file mode 100644 index 0000000..9220aa4 --- /dev/null +++ b/.compat-libxcb.metadata @@ -0,0 +1 @@ +ad2fb95eeec41ba3d39502a4f7460c3b64fdf061 SOURCES/libxcb-1.9.tar.bz2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..10ffa8d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/libxcb-1.9.tar.bz2 diff --git a/README.md b/README.md deleted file mode 100644 index 98f42b4..0000000 --- a/README.md +++ /dev/null @@ -1,4 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/0001-c_client.py-Handle-multiple-expr.-in-a-bitcase.patch b/SOURCES/0001-c_client.py-Handle-multiple-expr.-in-a-bitcase.patch new file mode 100644 index 0000000..3f5c588 --- /dev/null +++ b/SOURCES/0001-c_client.py-Handle-multiple-expr.-in-a-bitcase.patch @@ -0,0 +1,47 @@ +From e602b653c191e18cbb63db6526aac77c368ed70b Mon Sep 17 00:00:00 2001 +From: Daniel Martin <consume.noise@gmail.com> +Date: Mon, 13 May 2013 23:33:04 +0200 +Subject: [PATCH] c_client.py: Handle multiple expr. in a bitcase + +Adopt a change from xcbgen. With that modification the expression in a +bitcase became a list of expressions to support multiple <enumref> in a +<bitcase>. + +Signed-off-by: Daniel Martin <consume.noise@gmail.com> +Signed-off-by: Peter Harris <pharris@opentext.com> +--- + src/c_client.py | 18 ++++++++++++++---- + 1 file changed, 14 insertions(+), 4 deletions(-) + +diff --git a/src/c_client.py b/src/c_client.py +index ec66223..942e78a 100644 +--- a/src/c_client.py ++++ b/src/c_client.py +@@ -687,10 +687,20 @@ def _c_serialize_helper_switch(context, self, complex_name, + switch_expr = _c_accessor_get_expr(self.expr, None) + + for b in self.bitcases: +- bitcase_expr = _c_accessor_get_expr(b.type.expr, None) +- code_lines.append(' if(%s & %s) {' % (switch_expr, bitcase_expr)) +-# code_lines.append(' printf("switch %s: entering bitcase section %s (mask=%%%%d)...\\n", %s);' % +-# (self.name[-1], b.type.name[-1], bitcase_expr)) ++ len_expr = len(b.type.expr) ++ for n, expr in enumerate(b.type.expr): ++ bitcase_expr = _c_accessor_get_expr(expr, None) ++ # only one <enumref> in the <bitcase> ++ if len_expr == 1: ++ code_lines.append(' if(%s & %s) {' % (switch_expr, bitcase_expr)) ++ # multiple <enumref> in the <bitcase> ++ elif n == 0: # first ++ code_lines.append(' if((%s & %s) ||' % (switch_expr, bitcase_expr)) ++ elif len_expr == (n + 1): # last ++ code_lines.append(' (%s & %s)) {' % (switch_expr, bitcase_expr)) ++ else: # between first and last ++ code_lines.append(' (%s & %s) ||' % (switch_expr, bitcase_expr)) ++ + b_prefix = prefix + if b.type.has_name: + b_prefix = prefix + [(b.c_field_name, '.', b.type)] +-- +2.1.0 + diff --git a/SOURCES/0001-integer-overflow-in-read_packet-CVE-2013-2064.patch b/SOURCES/0001-integer-overflow-in-read_packet-CVE-2013-2064.patch new file mode 100644 index 0000000..0c98d6d --- /dev/null +++ b/SOURCES/0001-integer-overflow-in-read_packet-CVE-2013-2064.patch @@ -0,0 +1,48 @@ +From 1b33867fa996034deb50819ae54640be501f8d20 Mon Sep 17 00:00:00 2001 +From: Alan Coopersmith <alan.coopersmith@oracle.com> +Date: Wed, 1 May 2013 17:59:31 -0700 +Subject: [PATCH] integer overflow in read_packet() [CVE-2013-2064] + +Ensure that when calculating the size of the incoming response from the +Xserver, we don't overflow the integer used in the calculations when we +multiply the int32_t length by 4 and add it to the default response size. + +Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> +--- + src/xcb_in.c | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +diff --git a/src/xcb_in.c b/src/xcb_in.c +index b810783..8a7af92 100644 +--- a/src/xcb_in.c ++++ b/src/xcb_in.c +@@ -93,8 +93,9 @@ static void remove_finished_readers(reader_list **prev_reader, uint64_t complete + static int read_packet(xcb_connection_t *c) + { + xcb_generic_reply_t genrep; +- int length = 32; +- int eventlength = 0; /* length after first 32 bytes for GenericEvents */ ++ uint64_t length = 32; ++ uint64_t eventlength = 0; /* length after first 32 bytes for GenericEvents */ ++ uint64_t bufsize; + void *buf; + pending_reply *pend = 0; + struct event_list *event; +@@ -169,8 +170,12 @@ static int read_packet(xcb_connection_t *c) + if ((genrep.response_type & 0x7f) == XCB_XGE_EVENT) + eventlength = genrep.length * 4; + +- buf = malloc(length + eventlength + +- (genrep.response_type == XCB_REPLY ? 0 : sizeof(uint32_t))); ++ bufsize = length + eventlength + ++ (genrep.response_type == XCB_REPLY ? 0 : sizeof(uint32_t)); ++ if (bufsize < INT32_MAX) ++ buf = malloc((size_t) bufsize); ++ else ++ buf = NULL; + if(!buf) + { + _xcb_conn_shutdown(c, XCB_CONN_CLOSED_MEM_INSUFFICIENT); +-- +1.8.1.4 + diff --git a/SOURCES/xkb.patch b/SOURCES/xkb.patch new file mode 100644 index 0000000..8f08554 --- /dev/null +++ b/SOURCES/xkb.patch @@ -0,0 +1,2837 @@ +diff -up libxcb-1.9/src/Makefile.am.jx libxcb-1.9/src/Makefile.am +--- libxcb-1.9/src/Makefile.am.jx 2012-10-05 05:20:06.000000000 -0400 ++++ libxcb-1.9/src/Makefile.am 2015-04-13 14:37:49.967302939 -0400 +@@ -168,7 +168,6 @@ libxcb_xinput_la_LIBADD = $(XCB_LIBS) + nodist_libxcb_xinput_la_SOURCES = xinput.c xinput.h + endif + +-EXTSOURCES += xkb.c + if BUILD_XKB + lib_LTLIBRARIES += libxcb-xkb.la + libxcb_xkb_la_LDFLAGS = -version-info 0:0:0 -no-undefined +@@ -217,7 +216,7 @@ nodist_libxcb_xvmc_la_SOURCES = xvmc.c x + endif + + +-EXTHEADERS=$(EXTSOURCES:.c=.h) ++EXTHEADERS=$(EXTSOURCES:.c=.h) xkb.h + xcbinclude_HEADERS = xcb.h xcbext.h + if XCB_HAVE_WIN32 + xcbinclude_HEADERS += xcb_windefs.h +@@ -230,8 +229,11 @@ BUILT_MANS = man/xcb_*.3 + man_MANS = $(STATIC_MANS) $(BUILT_MANS) + EXTRA_DIST = $(STATIC_MANS) + +-BUILT_SOURCES = $(EXTSOURCES) $(BUILT_MANS) +-CLEANFILES = $(EXTSOURCES) $(EXTHEADERS) $(BUILT_MANS) ++BUILT_SOURCES = $(EXTSOURCES) $(BUILT_MANS) xkb.c ++CLEANFILES = $(EXTSOURCES) $(EXTHEADERS) $(BUILT_MANS) xkb.c xkb.h ++ ++xkb.c: c_client.py ++ $(PYTHON) $(srcdir)/c_client.py -p $(XCBPROTO_XCBPYTHONDIR) $(top_srcdir)/xkb.xml + + $(EXTSOURCES): c_client.py + $(PYTHON) $(srcdir)/c_client.py -p $(XCBPROTO_XCBPYTHONDIR) $(XCBPROTO_XCBINCLUDEDIR)/$(@:.c=.xml) +diff -up libxcb-1.9/xkb.xml.jx libxcb-1.9/xkb.xml +--- libxcb-1.9/xkb.xml.jx 2015-04-13 14:36:31.093765130 -0400 ++++ libxcb-1.9/xkb.xml 2015-04-13 14:36:31.093765130 -0400 +@@ -0,0 +1,2799 @@ ++<?xml version="1.0" encoding="utf-8" ?> ++<!-- ++Copyright (C) 2009 Open Text Corporation. All Rights Reserved. ++ ++Permission is hereby granted, free of charge, to any person obtaining a copy ++of this software and associated documentation files (the "Software"), to deal ++in the Software without restriction, including without limitation the rights ++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++copies of the Software, and to permit persons to whom the Software is ++furnished to do so, subject to the following conditions: ++ ++The above copyright notice and this permission notice shall be included in all ++copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ++ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++Except as contained in this notice, the names of the authors or their ++institutions shall not be used in advertising or otherwise to promote the ++sale, use or other dealings in this Software without prior written ++authorization from the authors. ++--> ++<xcb header="xkb" extension-xname="XKEYBOARD" extension-name="xkb" ++ major-version="1" minor-version="0"> ++ ++ <import>xproto</import> ++ ++ <!-- Common Types --> ++ <enum name="Const"> ++ <item name="MaxLegalKeyCode"> <value>255</value> </item> ++ <item name="PerKeyBitArraySize"> ++ <value>32</value> ++ </item> ++ <item name="KeyNameLength"> ++ <value>4</value> ++ </item> ++ </enum> ++ ++ <enum name="EventType"> ++ <item name="NewKeyboardNotify"> <bit>0</bit> </item> ++ <item name="MapNotify"> <bit>1</bit> </item> ++ <item name="StateNotify"> <bit>2</bit> </item> ++ <item name="ControlsNotify"> <bit>3</bit> </item> ++ <item name="IndicatorStateNotify"> <bit>4</bit> </item> ++ <item name="IndicatorMapNotify"> <bit>5</bit> </item> ++ <item name="NamesNotify"> <bit>6</bit> </item> ++ <item name="CompatMapNotify"> <bit>7</bit> </item> ++ <item name="BellNotify"> <bit>8</bit> </item> ++ <item name="ActionMessage"> <bit>9</bit> </item> ++ <item name="AccessXNotify"> <bit>10</bit> </item> ++ <item name="ExtensionDeviceNotify"> <bit>11</bit> </item> ++ </enum> ++ ++ <enum name="NKNDetail"> ++ <item name="Keycodes"> <bit>0</bit> </item> ++ <item name="Geometry"> <bit>1</bit> </item> ++ <item name="DeviceID"> <bit>2</bit> </item> ++ </enum> ++ ++ <enum name="AXNDetail"> ++ <item name="SKPress"> <bit>0</bit> </item> ++ <item name="SKAccept"> <bit>1</bit> </item> ++ <item name="SKReject"> <bit>2</bit> </item> ++ <item name="SKRelease"> <bit>3</bit> </item> ++ <item name="BKAccept"> <bit>4</bit> </item> ++ <item name="BKReject"> <bit>5</bit> </item> ++ <item name="AXKWarning"> <bit>6</bit> </item> ++ </enum> ++ ++ <enum name="MapPart"> ++ <item name="KeyTypes"> <bit>0</bit> </item> ++ <item name="KeySyms"> <bit>1</bit> </item> ++ <item name="ModifierMap"> <bit>2</bit> </item> ++ <item name="ExplicitComponents"> <bit>3</bit> </item> ++ <item name="KeyActions"> <bit>4</bit> </item> ++ <item name="KeyBehaviors"> <bit>5</bit> </item> ++ <item name="VirtualMods"> <bit>6</bit> </item> ++ <item name="VirtualModMap"> <bit>7</bit> </item> ++ </enum> ++ ++ <enum name="SetMapFlags"> ++ <item name="ResizeTypes"> <bit>0</bit> </item> ++ <item name="RecomputeActions"> <bit>1</bit> </item> ++ </enum> ++ ++ <enum name="StatePart"> ++ <item name="ModifierState"> <bit>0</bit> </item> ++ <item name="ModifierBase"> <bit>1</bit> </item> ++ <item name="ModifierLatch"> <bit>2</bit> </item> ++ <item name="ModifierLock"> <bit>3</bit> </item> ++ <item name="GroupState"> <bit>4</bit> </item> ++ <item name="GroupBase"> <bit>5</bit> </item> ++ <item name="GroupLatch"> <bit>6</bit> </item> ++ <item name="GroupLock"> <bit>7</bit> </item> ++ <item name="CompatState"> <bit>8</bit> </item> ++ <item name="GrabMods"> <bit>9</bit> </item> ++ <item name="CompatGrabMods"> <bit>10</bit> </item> ++ <item name="LookupMods"> <bit>11</bit> </item> ++ <item name="CompatLookupMods"> <bit>12</bit> </item> ++ <item name="PointerButtons"> <bit>13</bit> </item> ++ </enum> ++ ++ <enum name="BoolCtrl"> ++ <item name="RepeatKeys"> <bit>0</bit> </item> ++ <item name="SlowKeys"> <bit>1</bit> </item> ++ <item name="BounceKeys"> <bit>2</bit> </item> ++ <item name="StickyKeys"> <bit>3</bit> </item> ++ <item name="MouseKeys"> <bit>4</bit> </item> ++ <item name="MouseKeysAccel"> <bit>5</bit> </item> ++ <item name="AccessXKeys"> <bit>6</bit> </item> ++ <item name="AccessXTimeoutMask"> <bit>7</bit> </item> ++ <item name="AccessXFeedbackMask"> <bit>8</bit> </item> ++ <item name="AudibleBellMask"> <bit>9</bit> </item> ++ <item name="Overlay1Mask"> <bit>10</bit> </item> ++ <item name="Overlay2Mask"> <bit>11</bit> </item> ++ <item name="IgnoreGroupLockMask"> <bit>12</bit> </item> ++ </enum> ++ ++ <!-- XXX: one zero less than XKB specification says, ++ uses the same values as libX11 --> ++ <enum name="Control" > ++ <item name="GroupsWrap"> <bit>27</bit> </item> ++ <item name="InternalMods"> <bit>28</bit> </item> ++ <item name="IgnoreLockMods"> <bit>29</bit> </item> ++ <item name="PerKeyRepeat"> <bit>30</bit> </item> ++ <item name="ControlsEnabled"> <bit>31</bit> </item> ++ </enum> ++ ++ <enum name="AXFBOpt"> ++ <item name="SKPressFB"> <bit>0</bit> </item> ++ <item name="SKAcceptFB"> <bit>1</bit> </item> ++ <item name="FeatureFB"> <bit>2</bit> </item> ++ <item name="SlowWarnFB"> <bit>3</bit> </item> ++ <item name="IndicatorFB"> <bit>4</bit> </item> ++ <item name="StickyKeysFB"> <bit>5</bit> </item> ++ <item name="SKReleaseFB"> <bit>6</bit> </item> ++ <item name="SKRejectFB"> <bit>7</bit> </item> ++ <item name="BKRejectFB"> <bit>8</bit> </item> ++ <item name="DumbBell"> <bit>9</bit> </item> ++ </enum> ++ ++ <enum name="AXSKOpt"> ++ <item name="TwoKeys"> <bit>6</bit> </item> ++ <item name="LatchToLock"> <bit>7</bit> </item> ++ </enum> ++ ++ <union name="AXOption"> ++ <field name="fbopt" type="CARD16" enum="AXFBOpt" /> ++ <field name="skopt" type="CARD16" enum="AXSKOpt" /> ++ </union> ++ ++ <typedef oldname="CARD16" newname="DeviceSpec" /> ++ ++ <enum name="LedClassResult"> ++ <item name="KbdFeedbackClass"> <value>0</value> </item> ++ <item name="LedFeedbackClass"> <value>4</value> </item> ++ </enum> ++ ++ <enum name="LedClass"> ++ <item name="DfltXIClass"> <value>768</value> </item> <!--0x300--> ++ <item name="AllXIClasses"> <value>1280</value> </item> <!--0x500--> ++ </enum> ++ <typedef oldname="CARD16" newname="LedClassSpec" /> ++ ++ <enum name="BellClassResult"> ++ <item name="KbdFeedbackClass"> <value>0</value> </item> ++ <item name="BellFeedbackClass"> <value>5</value> </item> ++ </enum> ++ ++ <enum name="BellClass"> ++ <item name="DfltXIClass"> <value>768</value> </item> <!--0x300--> ++ </enum> ++ <typedef oldname="CARD16" newname="BellClassSpec" /> ++ ++ <enum name="ID"> ++ <item name="UseCoreKbd"> <value>256</value> </item> <!-- 0x100 --> ++ <item name="UseCorePtr"> <value>512</value> </item> <!-- 0x200 --> ++ <item name="DfltXIClass"> <value>768</value> </item> <!-- 0x300 --> ++ <item name="DfltXIId"> <value>1024</value> </item> <!-- 0x400 --> ++ <item name="AllXIClass"> <value>1280</value> </item> <!-- 0x500 --> ++ <item name="AllXIId"> <value>1536</value> </item> <!-- 0x600 --> ++ <item name="XINone"> <value>65280</value> </item> <!--0xff00--> ++ </enum> ++ <typedef oldname="CARD16" newname="IDSpec" /> ++ ++ <enum name="Group"> ++ <item name="1"> <value>0</value> </item> ++ <item name="2"> <value>1</value> </item> ++ <item name="3"> <value>2</value> </item> ++ <item name="4"> <value>3</value> </item> ++ </enum> ++ ++ <enum name="Groups"> ++ <item name="Any"> <value>254</value> </item> ++ <item name="All"> <value>255</value> </item> ++ </enum> ++ ++ <enum name="SetOfGroup"> ++ <item name="Group1"> <bit>0</bit> </item> ++ <item name="Group2"> <bit>1</bit> </item> ++ <item name="Group3"> <bit>2</bit> </item> ++ <item name="Group4"> <bit>3</bit> </item> ++ </enum> ++ ++ <enum name="SetOfGroups"> ++ <item name="Any"> <bit>7</bit> </item> ++ </enum> ++ ++ <enum name="GroupsWrap"> ++ <item name="WrapIntoRange"> <value>0</value> </item> ++ <item name="ClampIntoRange"> <bit>6</bit> </item> ++ <item name="RedirectIntoRange"> <bit>7</bit> </item> ++ </enum> ++ ++ <enum name="VModsHigh"> ++ <item name="15"> <bit>7</bit> </item> ++ <item name="14"> <bit>6</bit> </item> ++ <item name="13"> <bit>5</bit> </item> ++ <item name="12"> <bit>4</bit> </item> ++ <item name="11"> <bit>3</bit> </item> ++ <item name="10"> <bit>2</bit> </item> ++ <item name="9"> <bit>1</bit> </item> ++ <item name="8"> <bit>0</bit> </item> ++ </enum> ++ ++ <enum name="VModsLow"> ++ <item name="7"> <bit>7</bit> </item> ++ <item name="6"> <bit>6</bit> </item> ++ <item name="5"> <bit>5</bit> </item> ++ <item name="4"> <bit>4</bit> </item> ++ <item name="3"> <bit>3</bit> </item> ++ <item name="2"> <bit>2</bit> </item> ++ <item name="1"> <bit>1</bit> </item> ++ <item name="0"> <bit>0</bit> </item> ++ </enum> ++ ++ <enum name="VMod"> ++ <item name="15"> <bit>15</bit> </item> ++ <item name="14"> <bit>14</bit> </item> ++ <item name="13"> <bit>13</bit> </item> ++ <item name="12"> <bit>12</bit> </item> ++ <item name="11"> <bit>11</bit> </item> ++ <item name="10"> <bit>10</bit> </item> ++ <item name="9"> <bit>9</bit> </item> ++ <item name="8"> <bit>8</bit> </item> ++ <item name="7"> <bit>7</bit> </item> ++ <item name="6"> <bit>6</bit> </item> ++ <item name="5"> <bit>5</bit> </item> ++ <item name="4"> <bit>4</bit> </item> ++ <item name="3"> <bit>3</bit> </item> ++ <item name="2"> <bit>2</bit> </item> ++ <item name="1"> <bit>1</bit> </item> ++ <item name="0"> <bit>0</bit> </item> ++ </enum> ++ ++ <enum name="Explicit"> ++ <item name="VModMap"> <bit>7</bit> </item> ++ <item name="Behavior"> <bit>6</bit> </item> ++ <item name="AutoRepeat"> <bit>5</bit> </item> ++ <item name="Interpret"> <bit>4</bit> </item> ++ <item name="KeyType4"> <bit>3</bit> </item> ++ <item name="KeyType3"> <bit>2</bit> </item> ++ <item name="KeyType2"> <bit>1</bit> </item> ++ <item name="KeyType1"> <bit>0</bit> </item> ++ </enum> ++ ++ <enum name="SymInterpret"> ++ <item name="NoneOf"> <value>0</value> </item> ++ <item name="AnyOfOrNone"> <value>1</value> </item> ++ <item name="AnyOf"> <value>2</value> </item> ++ <item name="AllOf"> <value>3</value> </item> ++ <item name="Exactly"> <value>4</value> </item> ++ </enum> ++ ++ <enum name="SymInterpMatch"> ++ <item name="LevelOneOnly"> <bit>7</bit> </item> ++ <item name="OpMask"> <value>127</value> </item> <!--0x7f--> ++ </enum> ++ ++ <enum name="IMFlag"> ++ <item name="NoExplicit"> <bit>7</bit> </item> ++ <item name="NoAutomatic"> <bit>6</bit> </item> ++ <item name="LEDDrivesKB"> <bit>5</bit> </item> ++ </enum> ++ ++ <enum name="IMModsWhich"> ++ <item name="UseCompat"> <bit>4</bit> </item> ++ <item name="UseEffective"> <bit>3</bit> </item> ++ <item name="UseLocked"> <bit>2</bit> </item> ++ <item name="UseLatched"> <bit>1</bit> </item> ++ <item name="UseBase"> <bit>0</bit> </item> ++ </enum> ++ ++ <enum name="IMGroupsWhich"> ++ <item name="UseCompat"> <bit>4</bit> </item> ++ <item name="UseEffective"> <bit>3</bit> </item> ++ <item name="UseLocked"> <bit>2</bit> </item> ++ <item name="UseLatched"> <bit>1</bit> </item> ++ <item name="UseBase"> <bit>0</bit> </item> ++ </enum> ++ ++ <struct name="IndicatorMap"> ++ <field name="flags" type="CARD8" enum="IMFlag" /> ++ <field name="whichGroups" type="CARD8" enum="IMGroupsWhich" /> ++ <field name="groups" type="CARD8" enum="SetOfGroup" /> ++ <field name="whichMods" type="CARD8" enum="IMModsWhich" /> ++ <field name="mods" type="CARD8" mask="ModMask" /> ++ <field name="realMods" type="CARD8" mask="ModMask" /> ++ <field name="vmods" type="CARD16" mask="VMod" /> ++ <field name="ctrls" type="CARD32" enum="BoolCtrl" /> ++ </struct> ++ ++ <enum name="CMDetail"> ++ <item name="SymInterp"> <bit>0</bit> </item> ++ <item name="GroupCompat"> <bit>1</bit> </item> ++ </enum> ++ ++ <enum name="NameDetail"> ++ <item name="Keycodes"> <bit>0</bit> </item> ++ <item name="Geometry"> <bit>1</bit> </item> ++ <item name="Symbols"> <bit>2</bit> </item> ++ <item name="PhysSymbols"> <bit>3</bit> </item> ++ <item name="Types"> <bit>4</bit> </item> ++ <item name="Compat"> <bit>5</bit> </item> ++ <item name="KeyTypeNames"> <bit>6</bit> </item> ++ <item name="KTLevelNames"> <bit>7</bit> </item> ++ <item name="IndicatorNames"> <bit>8</bit> </item> ++ <item name="KeyNames"> <bit>9</bit> </item> ++ <item name="KeyAliases"> <bit>10</bit> </item> ++ <item name="VirtualModNames"> <bit>11</bit> </item> ++ <item name="GroupNames"> <bit>12</bit> </item> ++ <item name="RGNames"> <bit>13</bit> </item> ++ </enum> ++ ++ <enum name="GBNDetail"> ++ <item name="Types"> <bit>0</bit> </item> ++ <item name="CompatMap"> <bit>1</bit> </item> ++ <item name="ClientSymbols"> <bit>2</bit> </item> ++ <item name="ServerSymbols"> <bit>3</bit> </item> ++ <item name="IndicatorMaps"> <bit>4</bit> </item> ++ <item name="KeyNames"> <bit>5</bit> </item> ++ <item name="Geometry"> <bit>6</bit> </item> ++ <item name="OtherNames"> <bit>7</bit> </item> ++ </enum> ++ ++ <enum name="XIFeature"> ++ <item name="Keyboards"> <bit>0</bit> </item> ++ <item name="ButtonActions"> <bit>1</bit> </item> ++ <item name="IndicatorNames"> <bit>2</bit> </item> ++ <item name="IndicatorMaps"> <bit>3</bit> </item> ++ <item name="IndicatorState"> <bit>4</bit> </item> ++ </enum> ++ ++ <enum name="PerClientFlag"> ++ <item name="DetectableAutoRepeat"> <bit>0</bit> </item> ++ <item name="GrabsUseXKBState"> <bit>1</bit> </item> ++ <item name="AutoResetControls"> <bit>2</bit> </item> ++ <item name="LookupStateWhenGrabbed"> <bit>3</bit> </item> ++ <item name="SendEventUsesXKBState"> <bit>4</bit> </item> ++ </enum> ++ ++ <struct name="ModDef"> ++ <field name="mask" type="CARD8" mask="ModMask" /> ++ <field name="realMods" type="CARD8" mask="ModMask" /> ++ <field name="vmods" type="CARD16" mask="VMod" /> ++ </struct> ++ ++ <struct name="KeyName"> ++ <list name="name" type="CARD8"> ++ <value>4</value> ++ </list> ++ </struct> ++ ++ <struct name="KeyAlias"> ++ <list name="real" type="CARD8"> ++ <value>4</value> ++ </list> ++ <list name="alias" type="CARD8"> ++ <value>4</value> ++ </list> ++ </struct> ++ ++ <struct name="CountedString8"> ++ <field name="length" type="CARD8" /> ++ <list name="string" type="CARD8"> ++ <fieldref>length</fieldref> ++ </list> ++ </struct> ++ ++ <struct name="CountedString16"> ++ <field name="length" type="CARD16" /> ++ <list name="string" type="CARD8"> ++ <fieldref>length</fieldref> ++ </list> ++ <pad bytes="1" /> ++ </struct> ++ ++ <struct name="KTMapEntry"> ++ <field name="active" type="BOOL" /> ++ <!-- Xlib uses a different arrangement of fields ++ <field name="mods_mask" type="CARD8" mask="ModMask" /> ++ <field name="level" type="CARD8" /> ++ --> ++ <field name="level" type="CARD8" /> ++ <field name="mods_mask" type="CARD8" mask="ModMask" /> ++ <field name="mods_mods" type="CARD8" mask="ModMask" /> ++ <field name="mods_vmods" type="CARD16" mask="VMod" /> ++ <pad bytes="2" /> ++ </struct> ++ ++ <struct name="KeyType"> ++ <field name="mods_mask" type="CARD8" mask="ModMask" /> ++ <field name="mods_mods" type="CARD8" mask="ModMask" /> ++ <field name="mods_vmods" type="CARD16" mask="VMod" /> ++ <field name="numLevels" type="CARD8" /> ++ <field name="nMapEntries" type="CARD8" /> ++ <field name="hasPreserve" type="BOOL" /> ++ <pad bytes="1" /> ++ <list name="map" type="KTMapEntry"> ++ <fieldref>nMapEntries</fieldref> ++ </list> ++ <list name="preserve" type="ModDef"> ++ <op op="*"> ++ <fieldref>hasPreserve</fieldref> ++ <fieldref>nMapEntries</fieldref> ++ </op> ++ </list> ++ </struct> ++ ++ <struct name="KeySymMap"> ++ <list name="kt_index" type="CARD8"> ++ <value>4</value> ++ </list> ++ <field name="groupInfo" type="CARD8" /> ++ <field name="width" type="CARD8" /> ++ <field name="nSyms" type="CARD16" /> ++ <list name="syms" type="KEYSYM"> ++ <fieldref>nSyms</fieldref> ++ </list> ++ </struct> ++ ++ <!-- Key Behaviors --> ++ ++ <struct name="CommonBehavior"> ++ <field name="type" type="CARD8" /> ++ <field name="data" type="CARD8" /> ++ </struct> ++ ++ <struct name="DefaultBehavior"> ++ <field name="type" type="CARD8" /> ++ <pad bytes="1" /> ++ </struct> ++ ++ <typedef oldname="DefaultBehavior" newname="LockBehavior" /> ++ ++ <struct name="RadioGroupBehavior"> ++ <field name="type" type="CARD8" /> ++ <field name="group" type="CARD8" /> ++ </struct> ++ ++ <struct name="Overlay1Behavior"> ++ <field name="type" type="CARD8" /> ++ <field name="key" type="KEYCODE" /> ++ </struct> ++ ++ <struct name="Overlay2Behavior"> ++ <field name="type" type="CARD8" /> ++ <field name="key" type="CARD8" /> ++ </struct> ++ ++ <typedef oldname="LockBehavior" newname="PermamentLockBehavior" /> ++ <typedef oldname="RadioGroupBehavior" newname="PermamentRadioGroupBehavior" /> ++ <typedef oldname="Overlay1Behavior" newname="PermamentOverlay1Behavior" /> ++ <typedef oldname="Overlay2Behavior" newname="PermamentOverlay2Behavior" /> ++ ++ <union name="Behavior"> ++ <field name="common" type="CommonBehavior" /> ++ <field name="default" type="DefaultBehavior" /> ++ <field name="lock" type="LockBehavior" /> ++ <field name="radioGroup" type="RadioGroupBehavior" /> ++ <field name="overlay1" type="Overlay1Behavior" /> ++ <field name="overlay2" type="Overlay2Behavior" /> ++ <field name="permamentLock" type="PermamentLockBehavior" /> ++ <field name="permamentRadioGroup" type="PermamentRadioGroupBehavior" /> ++ <field name="permamentOverlay1" type="PermamentOverlay1Behavior" /> ++ <field name="permamentOverlay2" type="PermamentOverlay2Behavior" /> ++ <field name="type" type="CARD8" /> ++ </union> ++ ++ <enum name="BehaviorType"> ++ <item name="Default"> <value>0</value> </item> <!--0x00--> ++ <item name="Lock"> <value>1</value> </item> <!--0x01--> ++ <item name="RadioGroup"> <value>2</value> </item> <!--0x02--> ++ <item name="Overlay1"> <value>3</value> </item> <!--0x03--> ++ <item name="Overlay2"> <value>4</value> </item> <!--0x04--> ++ <item name="PermamentLock"> <value>129</value> </item> <!--0x81--> ++ <item name="PermamentRadioGroup"> <value>130</value> </item> <!--0x82--> ++ <item name="PermamentOverlay1"> <value>131</value> </item> <!--0x83--> ++ <item name="PermamentOverlay2"> <value>132</value> </item> <!--0x84--> ++ </enum> ++ ++ <struct name="SetBehavior"> ++ <field name="keycode" type="KEYCODE" /> ++ <field name="behavior" type="Behavior" /> ++ <pad bytes="1" /> ++ </struct> ++ ++ <struct name="SetExplicit"> ++ <field name="keycode" type="KEYCODE" /> ++ <field name="explicit" type="CARD8" mask="Explicit" /> ++ </struct> ++ ++ <struct name="KeyModMap"> ++ <field name="keycode" type="KEYCODE" /> ++ <field name="mods" type="CARD8" mask="ModMask" /> ++ </struct> ++ ++ <struct name="KeyVModMap"> ++ <field name="keycode" type="KEYCODE" /> ++ <pad bytes="1" /> ++ <field name="vmods" type="CARD16" mask="VMod" /> ++ </struct> ++ ++ <struct name="KTSetMapEntry"> ++ <field name="level" type="CARD8" /> ++ <field name="realMods" type="CARD8" mask="ModMask" /> ++ <field name="virtualMods" type="CARD16" mask="VMod" /> ++ </struct> ++ ++ <struct name="SetKeyType"> ++ <field name="mask" type="CARD8" mask="ModMask" /> ++ <field name="realMods" type="CARD8" mask="ModMask" /> ++ <field name="virtualMods" type="CARD16" mask="VMod" /> ++ <field name="numLevels" type="CARD8" /> ++ <field name="nMapEntries" type="CARD8" /> ++ <field name="preserve" type="BOOL" /> ++ <pad bytes="1" /> ++ <list name="entries" type="KTSetMapEntry"> ++ <fieldref>nMapEntries</fieldref> ++ </list> ++ <list name="preserve_entries" type="KTSetMapEntry"> ++ <op op = "*"> ++ <fieldref>preserve</fieldref> ++ <fieldref>nMapEntries</fieldref> ++ </op> ++ </list> ++ </struct> ++ ++ <typedef oldname="char" newname="STRING8" /> ++ ++ <struct name="Property"> ++ <field name="nameLength" type="CARD16" /> ++ <list name="name" type="STRING8"> ++ <fieldref>nameLength</fieldref> ++ </list> ++ <field name="valueLength" type="CARD16" /> ++ <list name="value" type="STRING8"> ++ <fieldref>valueLength</fieldref> ++ </list> ++ </struct> ++ ++ <struct name="Outline"> ++ <field name="nPoints" type="CARD8" /> ++ <field name="cornerRadius" type="CARD8" /> ++ <pad bytes="2" /> ++ <list name="points" type="POINT"> ++ <fieldref>nPoints</fieldref> ++ </list> ++ </struct> ++ ++ <struct name="Shape"> ++ <field name="name" type="ATOM" /> ++ <field name="nOutlines" type="CARD8" /> ++ <field name="primaryNdx" type="CARD8" /> ++ <field name="approxNdx" type="CARD8" /> ++ <pad bytes="1" /> ++ <list name="outlines" type="Outline"> ++ <fieldref>nOutlines</fieldref> ++ </list> ++ </struct> ++ ++ <struct name="Key"> ++ <list name="name" type="STRING8"> ++ <value>4</value> ++ </list> ++ <field name="gap" type="INT16" /> ++ <field name="shapeNdx" type="CARD8" /> ++ <field name="colorNdx" type="CARD8" /> ++ </struct> ++ ++ <struct name="OverlayKey"> ++ <list name="over" type="STRING8"> ++ <value>4</value> ++ </list> ++ <list name="under" type="STRING8"> ++ <value>4</value> ++ </list> ++ </struct> ++ ++ <struct name="OverlayRow"> ++ <field name="rowUnder" type="CARD8" /> ++ <field name="nKeys" type="CARD8" /> ++ <pad bytes="2" /> ++ <list name="keys" type="OverlayKey"> ++ <fieldref>nKeys</fieldref> ++ </list> ++ </struct> ++ ++ <struct name="Overlay"> ++ <field name="name" type="ATOM" /> ++ <field name="nRows" type="CARD8" /> ++ <pad bytes="3" /> ++ <list name="rows" type="OverlayRow"> ++ <fieldref>nRows</fieldref> ++ </list> ++ </struct> ++ ++ <struct name="Row"> ++ <field name="top" type="INT16" /> ++ <field name="left" type="INT16" /> ++ <field name="nKeys" type="CARD8" /> ++ <field name="vertical" type="BOOL" /> ++ <pad bytes="2" /> ++ <list name="keys" type="Key"> ++ <fieldref>nKeys</fieldref> ++ </list> ++ </struct> ++ ++ <enum name="DoodadType"> ++ <item name="Outline"> <value>1</value> </item> ++ <item name="Solid"> <value>2</value> </item> ++ <item name="Text"> <value>3</value> </item> ++ <item name="Indicator"> <value>4</value> </item> ++ <item name="Logo"> <value>5</value> </item> ++ </enum> ++ ++ <struct name="CommonDoodad"> ++ <field name="name" type="ATOM" /> ++ <field name="type" type="CARD8" enum="DoodadType" /> ++ <field name="priority" type="CARD8" /> ++ <field name="top" type="INT16" /> ++ <field name="left" type="INT16" /> ++ <field name="angle" type="INT16" /> ++ </struct> ++ ++ <struct name="ShapeDoodad"> ++ <field name="name" type="ATOM" /> ++ <field name="type" type="CARD8" enum="DoodadType" /> ++ <field name="priority" type="CARD8" /> ++ <field name="top" type="INT16" /> ++ <field name="left" type="INT16" /> ++ <field name="angle" type="INT16" /> ++ <field name="colorNdx" type="CARD8" /> ++ <field name="shapeNdx" type="CARD8" /> ++ <pad bytes="6" /> ++ </struct> ++ ++ <struct name="TextDoodad"> ++ <field name="name" type="ATOM" /> ++ <field name="type" type="CARD8" enum="DoodadType" /> ++ <field name="priority" type="CARD8" /> ++ <field name="top" type="INT16" /> ++ <field name="left" type="INT16" /> ++ <field name="angle" type="INT16" /> ++ <field name="width" type="CARD16" /> ++ <field name="height" type="CARD16" /> ++ <field name="colorNdx" type="CARD8" /> ++ <pad bytes="3" /> ++ <field name="text" type="CountedString16" /> ++ <field name="font" type="CountedString16" /> ++ </struct> ++ ++ <struct name="IndicatorDoodad"> ++ <field name="name" type="ATOM" /> ++ <field name="type" type="CARD8" enum="DoodadType" /> ++ <field name="priority" type="CARD8" /> ++ <field name="top" type="INT16" /> ++ <field name="left" type="INT16" /> ++ <field name="angle" type="INT16" /> ++ <field name="shapeNdx" type="CARD8" /> ++ <field name="onColorNdx" type="CARD8" /> ++ <field name="offColorNdx" type="CARD8" /> ++ <pad bytes="5" /> ++ </struct> ++ ++ <struct name="LogoDoodad"> ++ <field name="name" type="ATOM" /> ++ <field name="type" type="CARD8" enum="DoodadType" /> ++ <field name="priority" type="CARD8" /> ++ <field name="top" type="INT16" /> ++ <field name="left" type="INT16" /> ++ <field name="angle" type="INT16" /> ++ <field name="colorNdx" type="CARD8" /> ++ <field name="shapeNdx" type="CARD8" /> ++ <pad bytes="6" /> ++ <field name="logoName" type="CountedString16" /> ++ </struct> ++ ++ <union name="Doodad"> ++ <field name="common" type="CommonDoodad" /> ++ <field name="shape" type="ShapeDoodad" /> ++ <field name="text" type="TextDoodad" /> ++ <field name="indicator" type="IndicatorDoodad" /> ++ <field name="logo" type="LogoDoodad" /> ++ </union> ++ ++ <struct name="Section"> ++ <field name="name" type="ATOM" /> ++ <field name="top" type="INT16" /> ++ <field name="left" type="INT16" /> ++ <field name="width" type="CARD16" /> ++ <field name="height" type="CARD16" /> ++ <field name="angle" type="INT16" /> ++ <field name="priority" type="CARD8" /> ++ <field name="nRows" type="CARD8" /> ++ <field name="nDoodads" type="CARD8" /> ++ <field name="nOverlays" type="CARD8" /> ++ <pad bytes="2" /> ++ <list name="rows" type="Row"> ++ <fieldref>nRows</fieldref> ++ </list> ++ <list name="doodads" type="Doodad"> ++ <fieldref>nDoodads</fieldref> ++ </list> ++ <list name="overlays" type="Overlay"> ++ <fieldref>nOverlays</fieldref> ++ </list> ++ </struct> ++ ++ <struct name="Listing"> ++ <field name="flags" type="CARD16" /> ++ <field name="length" type="CARD16" /> ++ <list name="string" type="STRING8"> ++ <fieldref>length</fieldref> ++ </list> ++ </struct> ++ ++ <struct name="DeviceLedInfo"> ++ <field name="ledClass" type="LedClassSpec" enum="LedClass" /> ++ <field name="ledID" type="IDSpec" altenum="ID" /> ++ <field name="namesPresent" type="CARD32" /> ++ <field name="mapsPresent" type="CARD32" /> ++ <field name="physIndicators" type="CARD32" /> ++ <field name="state" type="CARD32" /> ++ <list name="names" type="ATOM"> ++ <popcount> ++ <fieldref>namesPresent</fieldref> ++ </popcount> ++ </list> ++ <list name="maps" type="IndicatorMap"> ++ <popcount> ++ <fieldref>mapsPresent</fieldref> ++ </popcount> ++ </list> ++ </struct> ++ ++ <!-- Errors --> ++ ++ <enum name="Error"> ++ <item name="BadDevice"> <value>255</value> </item> <!--0xff--> ++ <item name="BadClass"> <value>254</value> </item> <!--0xfe--> ++ <item name="BadId"> <value>253</value> </item> <!--0xfd--> ++ </enum> ++ ++ <error name="Keyboard" number="0"> ++ <field name="value" type="CARD32" /> ++ <field name="minorOpcode" type="CARD16" /> ++ <field name="majorOpcode" type="CARD8" /> ++ <pad bytes="21" /> ++ </error> ++ ++ <!-- Key Actions --> ++ ++ <enum name="SA"> ++ <item name="ClearLocks"> <bit>0</bit> </item> ++ <item name="LatchToLock"> <bit>1</bit> </item> ++ <item name="UseModMapMods"> <bit>2</bit> </item> ++ <item name="GroupAbsolute"> <bit>2</bit> </item> ++ </enum> ++ ++ <enum name="SAType"> ++ <item name="NoAction"> <value>0</value> </item> ++ <item name="SetMods"> <value>1</value> </item> ++ <item name="LatchMods"> <value>2</value> </item> ++ <item name="LockMods"> <value>3</value> </item> ++ <item name="SetGroup"> <value>4</value> </item> ++ <item name="LatchGroup"> <value>5</value> </item> ++ <item name="LockGroup"> <value>6</value> </item> ++ <item name="MovePtr"> <value>7</value> </item> ++ <item name="PtrBtn"> <value>8</value> </item> ++ <item name="LockPtrBtn"> <value>9</value> </item> ++ <item name="SetPtrDflt"> <value>10</value> </item> ++ <item name="ISOLock"> <value>11</value> </item> ++ <item name="Terminate"> <value>12</value> </item> ++ <item name="SwitchScreen"> <value>13</value> </item> ++ <item name="SetControls"> <value>14</value> </item> ++ <item name="LockControls"> <value>15</value> </item> ++ <item name="ActionMessage"> <value>16</value> </item> ++ <item name="RedirectKey"> <value>17</value> </item> ++ <item name="DeviceBtn"> <value>18</value> </item> ++ <item name="LockDeviceBtn"> <value>19</value> </item> ++ <item name="DeviceValuator"> <value>20</value> </item> ++ </enum> ++ ++ <struct name="SANoAction"> ++ <field name="type" type="CARD8" enum="SAType" /> ++ <pad bytes="7" /> ++ </struct> ++ ++ <struct name="SASetMods"> ++ <field name="type" type="CARD8" enum="SAType" /> ++ <field name="flags" type="CARD8" mask="SA" /> ++ <field name="mask" type="CARD8" mask="ModMask" /> ++ <field name="realMods" type="CARD8" mask="ModMask" /> ++ <field name="vmodsHigh" type="CARD8" mask="VModsHigh" /> ++ <field name="vmodsLow" type="CARD8" mask="VModsLow" /> ++ <pad bytes="2" /> ++ </struct> ++ ++ <typedef oldname="SASetMods" newname="SALatchMods" /> ++ ++ <typedef oldname="SASetMods" newname="SALockMods" /> ++ ++ <struct name="SASetGroup"> ++ <field name="type" type="CARD8" enum="SAType" /> ++ <field name="flags" type="CARD8" mask="SA" /> ++ <field name="group" type="INT8" /> ++ <pad bytes="5" /> ++ </struct> ++ ++ <typedef oldname="SASetGroup" newname="SALatchGroup" /> ++ ++ <typedef oldname="SASetGroup" newname="SALockGroup" /> ++ ++ <enum name="SAMovePtrFlag"> ++ <item name="NoAcceleration"> <bit>0</bit> </item> ++ <item name="MoveAbsoluteX"> <bit>1</bit> </item> ++ <item name="MoveAbsoluteY"> <bit>2</bit> </item> ++ </enum> ++ ++ <struct name="SAMovePtr"> ++ <field name="type" type="CARD8" enum="SAType" /> ++ <field name="flags" type="CARD8" mask="SAMovePtrFlag" /> ++ <field name="xHigh" type="INT8" /> ++ <field name="xLow" type="CARD8" /> ++ <field name="yHigh" type="INT8" /> ++ <field name="yLow" type="CARD8" /> ++ <pad bytes="2" /> ++ </struct> ++ ++ <struct name="SAPtrBtn"> ++ <field name="type" type="CARD8" enum="SAType" /> ++ <field name="flags" type="CARD8" /> ++ <field name="count" type="CARD8" /> ++ <field name="button" type="CARD8" /> ++ <pad bytes="4" /> ++ </struct> ++ ++ <struct name="SALockPtrBtn"> ++ <field name="type" type="CARD8" enum="SAType" /> ++ <field name="flags" type="CARD8" /> ++ <pad bytes="1" /> ++ <field name="button" type="CARD8" /> ++ <pad bytes="4" /> ++ </struct> ++ ++ <enum name="SASetPtrDfltFlag"> ++ <item name="DfltBtnAbsolute"> <bit>1</bit> </item> ++ <item name="AffectDfltButton"> <bit>0</bit> </item> ++ </enum> ++ ++ <struct name="SASetPtrDflt"> ++ <field name="type" type="CARD8" enum="SAType" /> ++ <field name="flags" type="CARD8" mask="SASetPtrDfltFlag" /> ++ <field name="affect" type="CARD8" mask="SASetPtrDfltFlag" /> ++ <field name="value" type="INT8" /> ++ <pad bytes="4" /> ++ </struct> ++ ++ <enum name="SAIsoLockFlag"> ++ <item name="NoLock"> <bit>0</bit> </item> ++ <item name="NoUnlock"> <bit>1</bit> </item> ++ <item name="UseModMapMods"> <bit>2</bit> </item> ++ <item name="GroupAbsolute"> <bit>2</bit> </item> ++ <item name="ISODfltIsGroup"> <bit>3</bit> </item> ++ </enum> ++ ++ <enum name="SAIsoLockNoAffect"> ++ <item name="Ctrls"> <bit>3</bit> </item> ++ <item name="Ptr"> <bit>4</bit> </item> ++ <item name="Group"> <bit>5</bit> </item> ++ <item name="Mods"> <bit>6</bit> </item> ++ </enum> ++ ++ <struct name="SAIsoLock"> ++ <field name="type" type="CARD8" enum="SAType" /> ++ <field name="flags" type="CARD8" mask="SAIsoLockFlag" /> ++ <field name="mask" type="CARD8" mask="ModMask" /> ++ <field name="realMods" type="CARD8" mask="ModMask" /> ++ <field name="group" type="INT8" /> ++ <field name="affect" type="CARD8" mask="SAIsoLockNoAffect" /> ++ <field name="vmodsHigh" type="CARD8" mask="VModsHigh" /> ++ <field name="vmodsLow" type="CARD8" mask="VModsLow" /> ++ </struct> ++ ++ <struct name="SATerminate"> ++ <field name="type" type="CARD8" enum="SAType" /> ++ <pad bytes="7" /> ++ </struct> ++ ++ <enum name="SwitchScreenFlag"> ++ <item name="Application"> <bit>0</bit> </item> ++ <item name="Absolute" > <bit>2</bit> </item> ++ </enum> ++ ++ <struct name="SASwitchScreen"> ++ <field name="type" type="CARD8" enum="SAType" /> ++ <field name="flags" type="CARD8" /> ++ <field name="newScreen" type="INT8" /> ++ <pad bytes="5" /> ++ </struct> ++ ++ <enum name="BoolCtrlsHigh"> ++ <item name="AccessXFeedback"> <bit>0</bit> </item> ++ <item name="AudibleBell"> <bit>1</bit> </item> ++ <item name="Overlay1"> <bit>2</bit> </item> ++ <item name="Overlay2"> <bit>3</bit> </item> ++ <item name="IgnoreGroupLock"> <bit>4</bit> </item> ++ </enum> ++ ++ <enum name="BoolCtrlsLow"> ++ <item name="RepeatKeys"> <bit>0</bit> </item> ++ <item name="SlowKeys"> <bit>1</bit> </item> ++ <item name="BounceKeys"> <bit>2</bit> </item> ++ <item name="StickyKeys"> <bit>3</bit> </item> ++ <item name="MouseKeys"> <bit>4</bit> </item> ++ <item name="MouseKeysAccel"> <bit>5</bit> </item> ++ <item name="AccessXKeys"> <bit>6</bit> </item> ++ <item name="AccessXTimeout"> <bit>7</bit> </item> ++ </enum> ++ ++ <struct name="SASetControls"> ++ <field name="type" type="CARD8" enum="SAType" /> ++ <pad bytes="3" /> ++ <field name="boolCtrlsHigh" type="CARD8" mask="BoolCtrlsHigh" /> ++ <field name="boolCtrlsLow" type="CARD8" mask="BoolCtrlsLow" /> ++ <pad bytes="2" /> ++ </struct> ++ ++ <typedef oldname="SASetControls" newname="SALockControls" /> ++ ++ <enum name="ActionMessageFlag"> ++ <item name="OnPress"> <bit>0</bit> </item> ++ <item name="OnRelease"> <bit>1</bit> </item> ++ <item name="GenKeyEvent"> <bit>2</bit> </item> ++ </enum> ++ ++ <struct name="SAActionMessage"> ++ <field name="type" type="CARD8" enum="SAType" /> ++ <field name="flags" type="CARD8" mask="ActionMessageFlag" /> ++ <list name="message" type="CARD8"> ++ <value>6</value> ++ </list> ++ </struct> ++ ++ <struct name="SARedirectKey"> ++ <field name="type" type="CARD8" enum="SAType" /> ++ <field name="newkey" type="KEYCODE" /> ++ <field name="mask" type="CARD8" mask="ModMask" /> ++ <field name="realModifiers" type="CARD8" mask="ModMask" /> ++ <field name="vmodsMaskHigh" type="CARD8" mask="VModsHigh"/> ++ <field name="vmodsMaskLow" type="CARD8" mask="VModsLow"/> ++ <field name="vmodsHigh" type="CARD8" mask="VModsHigh"/> ++ <field name="vmodsLow" type="CARD8" mask="VModsLow"/> ++ </struct> ++ ++ <struct name="SADeviceBtn"> ++ <field name="type" type="CARD8" enum="SAType" /> ++ <field name="flags" type="CARD8" /> ++ <field name="count" type="CARD8" /> ++ <field name="button" type="CARD8" /> ++ <field name="device" type="CARD8" /> ++ <pad bytes="3" /> ++ </struct> ++ ++ <enum name="LockDeviceFlags"> ++ <item name="NoLock"> <bit>0</bit> </item> ++ <item name="NoUnlock"> <bit>1</bit> </item> ++ </enum> ++ ++ <struct name="SALockDeviceBtn"> ++ <field name="type" type="CARD8" enum="SAType" /> ++ <field name="flags" type="CARD8" mask="LockDeviceFlags" /> ++ <pad bytes="1" /> ++ <field name="button" type="CARD8" /> ++ <field name="device" type="CARD8" /> ++ </struct> ++ ++ <enum name="SAValWhat"> ++ <item name="IgnoreVal"> <value>0</value> </item> ++ <item name="SetValMin"> <value>1</value> </item> ++ <item name="SetValCenter"> <value>2</value> </item> ++ <item name="SetValMax"> <value>3</value> </item> ++ <item name="SetValRelative"> <value>4</value> </item> ++ <item name="SetValAbsolute"> <value>5</value> </item> ++ </enum> ++ ++ <struct name="SADeviceValuator"> ++ <field name="type" type="CARD8" enum="SAType" /> ++ <field name="device" type="CARD8" /> ++ <field name="val1what" type="CARD8" enum="SAValWhat" /> ++ <field name="val1index" type="CARD8" /> ++ <field name="val1value" type="CARD8" /> ++ <field name="val2what" type="CARD8" enum="SAValWhat" /> ++ <field name="val2index" type="CARD8" /> ++ <field name="val2value" type="CARD8" /> ++ </struct> ++ ++ <union name="Action"> ++ <field name="noaction" type="SANoAction" /> ++ <field name="setmods" type="SASetMods" /> ++ <field name="latchmods" type="SALatchMods" /> ++ <field name="lockmods" type="SALockMods" /> ++ <field name="setgroup" type="SASetGroup" /> ++ <field name="latchgroup" type="SALatchGroup" /> ++ <field name="lockgroup" type="SALockGroup" /> ++ <field name="moveptr" type="SAMovePtr" /> ++ <field name="ptrbtn" type="SAPtrBtn" /> ++ <field name="lockptrbtn" type="SALockPtrBtn" /> ++ <field name="setptrdflt" type="SASetPtrDflt" /> ++ <field name="isolock" type="SAIsoLock" /> ++ <field name="terminate" type="SATerminate" /> ++ <field name="switchscreen" type="SASwitchScreen" /> ++ <field name="setcontrols" type="SASetControls" /> ++ <field name="lockcontrols" type="SALockControls" /> ++ <field name="message" type="SAActionMessage" /> ++ <field name="redirect" type="SARedirectKey" /> ++ <field name="devbtn" type="SADeviceBtn" /> ++ <field name="lockdevbtn" type="SALockDeviceBtn" /> ++ <field name="devval" type="SADeviceValuator" /> ++ <field name="type" type="CARD8" enum="SAType" /> ++ </union> ++ ++ <!-- Requests --> ++ ++ <request name="UseExtension" opcode="0"> ++ <field name="wantedMajor" type="CARD16" /> ++ <field name="wantedMinor" type="CARD16" /> ++ <reply> ++ <field name="supported" type="BOOL" /> ++ <field name="serverMajor" type="CARD16" /> ++ <field name="serverMinor" type="CARD16" /> ++ <pad bytes="20" /> ++ </reply> ++ </request> ++ ++ <request name="SelectEvents" opcode="1"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <field name="affectWhich" type="CARD16" enum="EventType" /> ++ <field name="clear" type="CARD16" enum="EventType" /> ++ <field name="selectAll" type="CARD16" enum="EventType" /> ++ <field name="affectMap" type="CARD16" enum="MapPart" /> ++ <field name="map" type="CARD16" enum="MapPart" /> ++ <switch name="details"> ++ <op op="&"> ++ <fieldref>affectWhich</fieldref> ++ <op op="&"> ++ <unop op="~"><fieldref>clear</fieldref></unop> ++ <unop op="~"><fieldref>selectAll</fieldref></unop> ++ </op> ++ </op> ++ <bitcase> ++ <enumref ref="EventType">NewKeyboardNotify</enumref> ++ <field name="affectNewKeyboard" type="CARD16" mask="NKNDetail" /> ++ <field name="newKeyboardDetails" type="CARD16" mask="NKNDetail" /> ++ </bitcase> ++ <bitcase> ++ <enumref ref="EventType">StateNotify</enumref> ++ <field name="affectState" type="CARD16" mask="StatePart" /> ++ <field name="stateDetails" type="CARD16" mask="StatePart" /> ++ </bitcase> ++ <bitcase> ++ <enumref ref="EventType">ControlsNotify</enumref> ++ <field name="affectCtrls" type="CARD32" mask="Control" /> ++ <field name="ctrlDetails" type="CARD32" mask="Control" /> ++ </bitcase> ++ <bitcase> ++ <enumref ref="EventType">IndicatorStateNotify</enumref> ++ <field name="affectIndicatorState" type="CARD32" /> ++ <field name="indicatorStateDetails" type="CARD32" /> ++ </bitcase> ++ <bitcase> ++ <enumref ref="EventType">IndicatorMapNotify</enumref> ++ <field name="affectIndicatorMap" type="CARD32" /> ++ <field name="indicatorMapDetails" type="CARD32" /> ++ </bitcase> ++ <bitcase> ++ <enumref ref="EventType">NamesNotify</enumref> ++ <field name="affectNames" type="CARD16" mask="NameDetail" /> ++ <field name="namesDetails" type="CARD16" mask="NameDetail" /> ++ </bitcase> ++ <bitcase> ++ <enumref ref="EventType">CompatMapNotify</enumref> ++ <field name="affectCompat" type="CARD8" mask="CMDetail" /> ++ <field name="compatDetails" type="CARD8" mask="CMDetail" /> ++ </bitcase> ++ <bitcase> ++ <enumref ref="EventType">BellNotify</enumref> ++ <field name="affectBell" type="CARD8" /> ++ <field name="bellDetails" type="CARD8" /> ++ </bitcase> ++ <bitcase> ++ <enumref ref="EventType">ActionMessage</enumref> ++ <field name="affectMsgDetails" type="CARD8" /> ++ <field name="msgDetails" type="CARD8" /> ++ </bitcase> ++ <bitcase> ++ <enumref ref="EventType">AccessXNotify</enumref> ++ <field name="affectAccessX" type="CARD16" mask="AXNDetail" /> ++ <field name="accessXDetails" type="CARD16" mask="AXNDetail" /> ++ </bitcase> ++ <bitcase> ++ <enumref ref="EventType">ExtensionDeviceNotify</enumref> ++ <field name="affectExtDev" type="CARD16" mask="XIFeature" /> ++ <field name="extdevDetails" type="CARD16" mask="XIFeature" /> ++ </bitcase> ++ </switch> ++ </request> ++ ++ <request name="Bell" opcode="3"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <field name="bellClass" type="BellClassSpec" /> ++ <field name="bellID" type="IDSpec" /> ++ <field name="percent" type="INT8" /> ++ <field name="forceSound" type="BOOL" /> ++ <field name="eventOnly" type="BOOL" /> ++ <pad bytes="1" /> ++ <field name="pitch" type="INT16" /> ++ <field name="duration" type="INT16" /> ++ <pad bytes="2" /> ++ <field name="name" type="ATOM" /> ++ <field name="window" type="WINDOW" /> ++ </request> ++ ++ <request name="GetState" opcode="4"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <pad bytes="2" /> ++ <reply> ++ <field name="deviceID" type="CARD8" /> ++ <field name="mods" type="CARD8" mask="ModMask" /> ++ <field name="baseMods" type="CARD8" mask="ModMask" /> ++ <field name="latchedMods" type="CARD8" mask="ModMask" /> ++ <field name="lockedMods" type="CARD8" mask="ModMask" /> ++ <field name="group" type="CARD8" enum="Group" /> ++ <field name="lockedGroup" type="CARD8" enum="Group" /> ++ <field name="baseGroup" type="INT16" /> ++ <field name="latchedGroup" type="INT16" /> ++ <field name="compatState" type="CARD8" mask="ModMask" /> ++ <field name="grabMods" type="CARD8" mask="ModMask" /> ++ <field name="compatGrabMods" type="CARD8" mask="ModMask" /> ++ <field name="lookupMods" type="CARD8" mask="ModMask" /> ++ <field name="compatLookupMods" type="CARD8" mask="ModMask" /> ++ <pad bytes="1" /> ++ <field name="ptrBtnState" type="CARD16" mask="KeyButMask" /> ++ <pad bytes="6" /> ++ </reply> ++ </request> ++ ++ <request name="LatchLockState" opcode="5"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <field name="affectModLocks" type="CARD8" mask="ModMask" /> ++ <field name="modLocks" type="CARD8" mask="ModMask" /> ++ <field name="lockGroup" type="BOOL" /> ++ <field name="groupLock" type="CARD8" enum="Group" /> ++ <field name="affectModLatches" type="CARD8" mask="ModMask" /> ++ <pad bytes="1" /> ++ <field name="latchGroup" type="BOOL" /> ++ <field name="groupLatch" type="CARD16" /> ++ </request> ++ ++ <request name="GetControls" opcode="6"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <pad bytes="2" /> ++ <reply> ++ <field name="deviceID" type="CARD8" /> ++ <field name="mouseKeysDfltBtn" type="CARD8" /> ++ <field name="numGroups" type="CARD8" /> ++ <field name="groupsWrap" type="CARD8" /> ++ <field name="internalModsMask" type="CARD8" mask="ModMask" /> ++ <field name="ignoreLockModsMask" type="CARD8" mask="ModMask" /> ++ <field name="internalModsRealMods" type="CARD8" mask="ModMask" /> ++ <field name="ignoreLockModsRealMods" type="CARD8" mask="ModMask" /> ++ <pad bytes="1" /> ++ <field name="internalModsVmods" type="CARD16" mask="VMod" /> ++ <field name="ignoreLockModsVmods" type="CARD16" mask="VMod" /> ++ <field name="repeatDelay" type="CARD16" /> ++ <field name="repeatInterval" type="CARD16" /> ++ <field name="slowKeysDelay" type="CARD16" /> ++ <field name="debounceDelay" type="CARD16" /> ++ <field name="mouseKeysDelay" type="CARD16" /> ++ <field name="mouseKeysInterval" type="CARD16" /> ++ <field name="mouseKeysTimeToMax" type="CARD16" /> ++ <field name="mouseKeysMaxSpeed" type="CARD16" /> ++ <field name="mouseKeysCurve" type="INT16" /> ++ <field name="accessXOption" type="AXOption" /> ++ <field name="accessXTimeout" type="CARD16" /> ++ <field name="accessXTimeoutOptionsMask" type="AXOption" /> ++ <field name="accessXTimeoutOptionsValues" type="AXOption" /> ++ <pad bytes="2" /> ++ <field name="accessXTimeoutMask" type="CARD32" enum="BoolCtrl" /> ++ <field name="accessXTimeoutValues" type="CARD32" enum="BoolCtrl" /> ++ <field name="enabledControls" type="CARD32" enum="BoolCtrl" /> ++ <list name="perKeyRepeat" type="CARD8"> ++ <value>32</value> ++ </list> ++ </reply> ++ </request> ++ ++ <request name="SetControls" opcode="7"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <field name="affectInternalRealMods" type="CARD8" mask="ModMask" /> ++ <field name="internalRealMods" type="CARD8" mask="ModMask" /> ++ <field name="affectIgnoreLockRealMods" type="CARD8" mask="ModMask" /> ++ <field name="ignoreLockRealMods" type="CARD8" mask="ModMask" /> ++ <field name="affectInternalVirtualMods" type="CARD16" mask="VMod" /> ++ <field name="internalVirtualMods" type="CARD16" mask="VMod" /> ++ <field name="affectIgnoreLockVirtualMods" type="CARD16" mask="VMod" /> ++ <field name="ignoreLockVirtualMods" type="CARD16" mask="VMod" /> ++ <field name="mouseKeysDfltBtn" type="CARD8" /> ++ <field name="groupsWrap" type="CARD8" /> ++ <field name="accessXOptions" type="AXOption" /> ++ <pad bytes="2" /> ++ <field name="affectEnabledControls" type="CARD32" enum="BoolCtrl" /> ++ <field name="enabledControls" type="CARD32" enum="BoolCtrl" /> ++ <field name="changeControls" type="CARD32" mask="Control" /> ++ <field name="repeatDelay" type="CARD16" /> ++ <field name="repeatInterval" type="CARD16" /> ++ <field name="slowKeysDelay" type="CARD16" /> ++ <field name="debounceDelay" type="CARD16" /> ++ <field name="mouseKeysDelay" type="CARD16" /> ++ <field name="mouseKeysInterval" type="CARD16" /> ++ <field name="mouseKeysTimeToMax" type="CARD16" /> ++ <field name="mouseKeysMaxSpeed" type="CARD16" /> ++ <field name="mouseKeysCurve" type="INT16" /> ++ <field name="accessXTimeout" type="CARD16" /> ++ <field name="accessXTimeoutMask" type="CARD32" enum="BoolCtrl" /> ++ <field name="accessXTimeoutValues" type="CARD32" enum="BoolCtrl" /> ++ <field name="accessXTimeoutOptionsMask" type="AXOption" /> ++ <field name="accessXTimeoutOptionsValues" type="AXOption" /> ++ <list name="perKeyRepeat" type="CARD8"> ++ <value>32</value> ++ </list> ++ </request> ++ ++ <request name="GetMap" opcode="8"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <field name="full" type="CARD16" enum="MapPart" /> ++ <field name="partial" type="CARD16" enum="MapPart" /> ++ <field name="firstType" type="CARD8" /> ++ <field name="nTypes" type="CARD8" /> ++ <field name="firstKeySym" type="KEYCODE" /> ++ <field name="nKeySyms" type="CARD8" /> ++ <field name="firstKeyAction" type="KEYCODE" /> ++ <field name="nKeyActions" type="CARD8" /> ++ <field name="firstKeyBehavior" type="KEYCODE" /> ++ <field name="nKeyBehaviors" type="CARD8" /> ++ <field name="virtualMods" type="CARD16" mask="VMod" /> ++ <field name="firstKeyExplicit" type="KEYCODE" /> ++ <field name="nKeyExplicit" type="CARD8" /> ++ <field name="firstModMapKey" type="KEYCODE" /> ++ <field name="nModMapKeys" type="CARD8" /> ++ <field name="firstVModMapKey" type="KEYCODE" /> ++ <field name="nVModMapKeys" type="CARD8" /> ++ <pad bytes="2" /> ++ <reply> ++ <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" /> ++ <field name="nTypes" type="CARD8" /> ++ <field name="totalTypes" type="CARD8" /> ++ <field name="firstKeySym" type="KEYCODE" /> ++ <field name="totalSyms" type="CARD16" /> ++ <field name="nKeySyms" type="CARD8" /> ++ <field name="firstKeyAction" type="KEYCODE" /> ++ <field name="totalActions" type="CARD16" /> ++ <field name="nKeyActions" type="CARD8" /> ++ <field name="firstKeyBehavior" type="KEYCODE" /> ++ <field name="nKeyBehaviors" type="CARD8" /> ++ <field name="totalKeyBehaviors" type="CARD8" /> ++ <field name="firstKeyExplicit" type="KEYCODE" /> ++ <field name="nKeyExplicit" type="CARD8" /> ++ <field name="totalKeyExplicit" type="CARD8" /> ++ <field name="firstModMapKey" type="KEYCODE" /> ++ <field name="nModMapKeys" type="CARD8" /> ++ <field name="totalModMapKeys" type="CARD8" /> ++ <field name="firstVModMapKey" type="KEYCODE" /> ++ <field name="nVModMapKeys" type="CARD8" /> ++ <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"> ++ <fieldref>nKeySyms</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">KeyActions</enumref> ++ <list name="acts_rtrn_count" type="CARD8"> ++ <fieldref>nKeyActions</fieldref> ++ </list> ++ <list name="acts_rtrn_acts" type="Action"> ++ <fieldref>totalActions</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">KeyBehaviors</enumref> ++ <list name="behaviors_rtrn" type="SetBehavior"> ++ <fieldref>totalKeyBehaviors</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">VirtualMods</enumref> ++ <list name="vmods_rtrn" type="CARD8" mask="ModMask"> ++ <fieldref>nVModMapKeys</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">ExplicitComponents</enumref> ++ <list name="explicit_rtrn" type="SetExplicit"> ++ <fieldref>totalKeyExplicit</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">ModifierMap</enumref> ++ <list name="modmap_rtrn" type="KeyModMap"> ++ <fieldref>totalModMapKeys</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">VirtualModMap</enumref> ++ <list name="vmodmap_rtrn" type="KeyVModMap"> ++ <fieldref>totalVModMapKeys</fieldref> ++ </list> ++ </bitcase> ++ </switch> ++ </reply> ++ </request> ++ ++ <request name="SetMap" opcode="9"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <field name="present" type="CARD16" enum="MapPart" /> ++ <field name="flags" type="CARD16" mask="SetMapFlags" /> ++ <field name="minKeyCode" type="KEYCODE" /> ++ <field name="maxKeyCode" type="KEYCODE" /> ++ <field name="firstType" type="CARD8" /> ++ <field name="nTypes" type="CARD8" /> ++ <field name="firstKeySym" type="KEYCODE" /> ++ <field name="nKeySyms" type="CARD8" /> ++ <field name="totalSyms" type="CARD16" /> ++ <field name="firstKeyAction" type="KEYCODE" /> ++ <field name="nKeyActions" type="CARD8" /> ++ <field name="totalActions" type="CARD16" /> ++ <field name="firstKeyBehavior" type="KEYCODE" /> ++ <field name="nKeyBehaviors" type="CARD8" /> ++ <field name="totalKeyBehaviors" type="CARD8" /> ++ <field name="firstKeyExplicit" type="KEYCODE" /> ++ <field name="nKeyExplicit" type="CARD8" /> ++ <field name="totalKeyExplicit" type="CARD8" /> ++ <field name="firstModMapKey" type="KEYCODE" /> ++ <field name="nModMapKeys" type="CARD8" /> ++ <field name="totalModMapKeys" type="CARD8" /> ++ <field name="firstVModMapKey" type="KEYCODE" /> ++ <field name="nVModMapKeys" type="CARD8" /> ++ <field name="totalVModMapKeys" type="CARD8" /> ++ <field name="virtualMods" type="CARD16" mask="VMod" /> ++ <switch name="values"> ++ <fieldref>present</fieldref> ++ <bitcase> ++ <enumref ref="MapPart">KeyTypes</enumref> ++ <list name="types" type="SetKeyType"> ++ <fieldref>nTypes</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">KeySyms</enumref> ++ <list name="syms" type="KeySymMap"> ++ <fieldref>nKeySyms</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">KeyActions</enumref> ++ <list name="actionsCount" type="CARD8"> ++ <fieldref>nKeyActions</fieldref> ++ </list> ++ <list name="actions" type="Action"> ++ <fieldref>totalActions</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">KeyBehaviors</enumref> ++ <list name="behaviors" type="SetBehavior"> ++ <fieldref>totalKeyBehaviors</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">VirtualMods</enumref> ++ <list name="vmods" type="CARD8"> ++ <fieldref>nVModMapKeys</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">ExplicitComponents</enumref> ++ <list name="explicit" type="SetExplicit"> ++ <fieldref>totalKeyExplicit</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">ModifierMap</enumref> ++ <list name="modmap" type="KeyModMap"> ++ <fieldref>totalModMapKeys</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">VirtualModMap</enumref> ++ <list name="vmodmap" type="KeyVModMap"> ++ <fieldref>totalVModMapKeys</fieldref> ++ </list> ++ </bitcase> ++ </switch> ++ </request> ++ ++ <request name="GetCompatMap" opcode="10"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <field name="groups" type="CARD8" mask="SetOfGroup" /> ++ <field name="getAllSI" type="BOOL" /> ++ <field name="firstSI" type="CARD16" /> ++ <field name="nSI" type="CARD16" /> ++ <reply> ++ <field name="deviceID" type="CARD8" /> ++ <field name="groupsRtrn" type="CARD8" mask="SetOfGroup" /> ++ <pad bytes="1" /> ++ <field name="firstSIRtrn" type="CARD16" /> ++ <field name="nSIRtrn" type="CARD16" /> ++ <field name="nTotalSI" type="CARD16" /> ++ <pad bytes="16" /> ++ <list name="si_rtrn" type="CARD8" mask="SymInterpret"> ++ <op op="*"> ++ <value>16</value> ++ <fieldref>nSIRtrn</fieldref> ++ </op> ++ </list> ++ <list name="group_rtrn" type="ModDef"> ++ <popcount> ++ <fieldref>groupsRtrn</fieldref> ++ </popcount> ++ </list> ++ </reply> ++ </request> ++ ++ <request name="SetCompatMap" opcode="11"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <pad bytes="1" /> ++ <field name="recomputeActions" type="BOOL" /> ++ <field name="truncateSI" type="BOOL" /> ++ <field name="groups" type="CARD8" mask="SetOfGroup" /> ++ <field name="firstSI" type="CARD16" /> ++ <field name="nSI" type="CARD16" /> ++ <pad bytes="2"/> ++ <list name="si" type="CARD8" mask="SymInterpret"> ++ <op op="*"> ++ <value>16</value> ++ <fieldref>nSI</fieldref> ++ </op> ++ </list> ++ <list name="groupMaps" type="ModDef"> ++ <popcount> ++ <fieldref>groups</fieldref> ++ </popcount> ++ </list> ++ </request> ++ ++ <request name="GetIndicatorState" opcode="12"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <pad bytes="2" /> ++ <reply> ++ <field name="deviceID" type="CARD8" /> ++ <field name="state" type="CARD32" /> ++ <pad bytes="20" /> ++ </reply> ++ </request> ++ ++ <request name="GetIndicatorMap" opcode="13"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <pad bytes="2" /> ++ <field name="which" type="CARD32" /> ++ <reply> ++ <field name="deviceID" type="CARD8" /> ++ <field name="which" type="CARD32" /> ++ <field name="realIndicators" type="CARD32" /> ++ <field name="nIndicators" type="CARD8" /> ++ <pad bytes="15" /> ++ <list name="maps" type="IndicatorMap"> ++ <fieldref>nIndicators</fieldref> ++ </list> ++ </reply> ++ </request> ++ ++ <request name="SetIndicatorMap" opcode="14"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <pad bytes="2" /> ++ <field name="which" type="CARD32" /> ++ <list name="maps" type="IndicatorMap"> ++ <popcount> ++ <fieldref>which</fieldref> ++ </popcount> ++ </list> ++ </request> ++ ++ <request name="GetNamedIndicator" opcode="15"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <field name="ledClass" type="LedClassSpec" enum="LedClass" /> ++ <field name="ledID" type="IDSpec" altenum="ID" /> ++ <pad bytes="2" /> ++ <field name="indicator" type="ATOM" /> ++ <reply> ++ <field name="deviceID" type="CARD8" /> ++ <field name="indicator" type="ATOM" /> ++ <field name="found" type="BOOL" /> ++ <field name="on" type="BOOL" /> ++ <field name="realIndicator" type="BOOL" /> ++ <field name="ndx" type="CARD8" /> ++ <field name="map_flags" type="CARD8" mask="IMFlag" /> ++ <field name="map_whichGroups" type="CARD8" mask="IMGroupsWhich" /> ++ <field name="map_groups" type="CARD8" mask="SetOfGroups" /> ++ <field name="map_whichMods" type="CARD8" mask="IMModsWhich" /> ++ <field name="map_mods" type="CARD8" mask="ModMask" /> ++ <field name="map_realMods" type="CARD8" mask="ModMask" /> ++ <field name="map_vmod" type="CARD16" mask="VMod" /> ++ <field name="map_ctrls" type="CARD32" mask="BoolCtrl" /> ++ <pad bytes="3" /> ++ </reply> ++ </request> ++ ++ <request name="SetNamedIndicator" opcode="16" > ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <field name="ledClass" type="LedClassSpec" enum="LedClass" /> ++ <field name="ledID" type="IDSpec" altenum="ID" /> ++ <pad bytes="2" /> ++ <field name="indicator" type="ATOM" /> ++ <field name="setState" type="BOOL" /> ++ <field name="on" type="BOOL" /> ++ <field name="setMap" type="BOOL" /> ++ <field name="createMap" type="BOOL" /> ++ <pad bytes="1" /> ++ <field name="map_flags" type="CARD8" mask="IMFlag" /> ++ <field name="map_whichGroups" type="CARD8" mask="IMGroupsWhich" /> ++ <field name="map_groups" type="CARD8" mask="SetOfGroups" /> ++ <field name="map_whichMods" type="CARD8" mask="IMModsWhich" /> ++ <field name="map_realMods" type="CARD8" mask="ModMask" /> ++ <field name="map_vmods" type="CARD16" mask="VMod" /> ++ <field name="map_ctrls" type="CARD32" mask="BoolCtrl" /> ++ </request> ++ ++ <request name="GetNames" opcode="17"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <pad bytes="2" /> ++ <field name="which" type="CARD32" mask="NameDetail" /> ++ <reply> ++ <field name="deviceID" type="CARD8" /> ++ <field name="which" type="CARD32" mask="NameDetail" /> ++ <field name="minKeyCode" type="KEYCODE" /> ++ <field name="maxKeyCode" type="KEYCODE" /> ++ <field name="nTypes" type="CARD8" /> ++ <field name="groupNames" type="CARD8" mask="SetOfGroup" /> ++ <field name="virtualMods" type="CARD16" mask="VMod" /> ++ <field name="firstKey" type="KEYCODE" /> ++ <field name="nKeys" type="CARD8" /> ++ <field name="indicators" type="CARD32" /> ++ <field name="nRadioGroups" type="CARD8" /> ++ <field name="nKeyAliases" type="CARD8" /> ++ <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">PhysSymbols</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"> ++ <fieldref>nTypes</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">KTLevelNames</enumref> ++ <list name="nLevelsPerType" type="CARD8"> ++ <!-- Xlib uses NTypes here - ++ the spec says nKTLevels is correct, but ++ it does not work in reality ++ <fieldref>nKTLevels</fieldref> --> ++ <fieldref>nTypes</fieldref> ++ </list> ++ <list name="ktLevelNames" type="ATOM"> ++ <sumof ref="nLevelsPerType" /> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">IndicatorNames</enumref> ++ <list name="indicatorNames" type="ATOM"> ++ <popcount> ++ <fieldref>indicators</fieldref> ++ </popcount> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">VirtualModNames</enumref> ++ <list name="virtualModNames" type="ATOM"> ++ <popcount> ++ <fieldref>virtualMods</fieldref> ++ </popcount> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">GroupNames</enumref> ++ <list name="groups" type="ATOM"> ++ <popcount> ++ <fieldref>groupNames</fieldref> ++ </popcount> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">KeyNames</enumref> ++ <list name="keyNames" type="KeyName"> ++ <fieldref>nKeys</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">KeyAliases</enumref> ++ <list name="keyAliases" type="KeyAlias"> ++ <fieldref>nKeyAliases</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">RGNames</enumref> ++ <list name="radioGroupNames" type="ATOM"> ++ <fieldref>nRadioGroups</fieldref> ++ </list> ++ </bitcase> ++ </switch> ++ </reply> ++ </request> ++ ++ <request name="SetNames" opcode="18"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <field name="virtualMods" type="CARD16" mask="VMod" /> ++ <field name="which" type="CARD32" mask="NameDetail" /> ++ <field name="firstType" type="CARD8" /> ++ <field name="nTypes" type="CARD8" /> ++ <field name="firstKTLevelt" type="CARD8" /> ++ <field name="nKTLevels" type="CARD8" /> ++ <field name="indicators" type="CARD32" /> ++ <field name="groupNames" type="CARD8" mask="SetOfGroup" /> ++ <field name="nRadioGroups" type="CARD8" /> ++ <field name="firstKey" type="KEYCODE" /> ++ <field name="nKeys" type="CARD8" /> ++ <field name="nKeyAliases" type="CARD8"/> ++ <pad bytes="1" /> ++ <field name="totalKTLevelNames" type="CARD16" /> ++ <switch name="values"> ++ <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">PhysSymbols</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"> ++ <fieldref>nTypes</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">KTLevelNames</enumref> ++ <list name="nLevelsPerType" type="CARD8"> ++ <fieldref>nKTLevels</fieldref> ++ </list> ++ <list name="ktLevelNames" type="ATOM"> ++ <sumof ref="nLevelsPerType" /> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">IndicatorNames</enumref> ++ <list name="indicatorNames" type="ATOM"> ++ <popcount> ++ <fieldref>indicators</fieldref> ++ </popcount> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">VirtualModNames</enumref> ++ <list name="virtualModNames" type="ATOM"> ++ <popcount> ++ <fieldref>virtualMods</fieldref> ++ </popcount> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">GroupNames</enumref> ++ <list name="groups" type="ATOM"> ++ <popcount> ++ <fieldref>groupNames</fieldref> ++ </popcount> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">KeyNames</enumref> ++ <list name="keyNames" type="KeyName"> ++ <fieldref>nKeys</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">KeyAliases</enumref> ++ <list name="keyAliases" type="KeyAlias"> ++ <fieldref>nKeyAliases</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">RGNames</enumref> ++ <list name="radioGroupNames" type="ATOM"> ++ <fieldref>nRadioGroups</fieldref> ++ </list> ++ </bitcase> ++ </switch> ++ </request> ++ ++ <request name="GetGeometry" opcode="19"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <pad bytes="2" /> ++ <field name="name" type="ATOM" /> ++ <reply> ++ <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" /> ++ <field name="nProperties" type="CARD16" /> ++ <field name="nColors" type="CARD16" /> ++ <field name="nShapes" type="CARD16" /> ++ <field name="nSections" type="CARD16" /> ++ <field name="nDoodads" type="CARD16" /> ++ <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"> ++ <fieldref>nProperties</fieldref> ++ </list> ++ <list name="colors" type="CountedString16"> ++ <fieldref>nColors</fieldref> ++ </list> ++ <list name="shapes" type="Shape"> ++ <fieldref>nShapes</fieldref> ++ </list> ++ <list name="sections" type="Section"> ++ <fieldref>nSections</fieldref> ++ </list> ++ <list name="doodads" type="Doodad"> ++ <fieldref>nDoodads</fieldref> ++ </list> ++ <list name="keyAliases" type="KeyAlias"> ++ <fieldref>nKeyAliases</fieldref> ++ </list> ++ </reply> ++ </request> ++ ++ <request name="SetGeometry" opcode="20"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <field name="nShapes" type="CARD8" /> ++ <field name="nSections" type="CARD8" /> ++ <field name="name" type="ATOM" /> ++ <field name="widthMM" type="CARD16" /> ++ <field name="heightMM" type="CARD16" /> ++ <field name="nProperties" type="CARD16" /> ++ <field name="nColors" type="CARD16" /> ++ <field name="nDoodads" type="CARD16" /> ++ <field name="nKeyAliases" type="CARD16" /> ++ <field name="baseColorNdx" type="CARD8" /> ++ <field name="labelColorNdx" type="CARD8" /> ++ <pad bytes="2" /> ++ <field name="labelFont" type="CountedString16" /> ++ <list name="properties" type="Property"> ++ <fieldref>nProperties</fieldref> ++ </list> ++ <list name="colors" type="CountedString16"> ++ <fieldref>nColors</fieldref> ++ </list> ++ <list name="shapes" type="Shape"> ++ <fieldref>nShapes</fieldref> ++ </list> ++ <list name="sections" type="Section"> ++ <fieldref>nSections</fieldref> ++ </list> ++ <list name="doodads" type="Doodad"> ++ <fieldref>nDoodads</fieldref> ++ </list> ++ <list name="keyAliases" type="KeyAlias"> ++ <fieldref>nKeyAliases</fieldref> ++ </list> ++ </request> ++ ++ <request name="PerClientFlags" opcode="21"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <pad bytes="2" /> ++ <field name="change" type="CARD32" mask="PerClientFlag" /> ++ <field name="value" type="CARD32" mask="PerClientFlag" /> ++ <field name="ctrlsToChange" type="CARD32" mask="BoolCtrl" /> ++ <field name="autoCtrls" type="CARD32" mask="BoolCtrl" /> ++ <field name="autoCtrlsValues" type="CARD32" mask="BoolCtrl" /> ++ <reply> ++ <field name="deviceID" type="CARD8"/> ++ <field name="supported" type="CARD32" mask="PerClientFlag" /> ++ <field name="value" type="CARD32" mask="PerClientFlag" /> ++ <field name="autoCtrls" type="CARD32" mask="BoolCtrl" /> ++ <field name="autoCtrlsValues" type="CARD32" mask="BoolCtrl" /> ++ <pad bytes="8" /> ++ </reply> ++ </request> ++ ++ <request name="ListComponents" opcode="22"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <field name="maxNames" type="CARD16" /> ++ <field name="keymapsSpecLen" type="CARD8" /> ++ <list name="keymapsSpec" type="STRING8"> ++ <fieldref>keymapsSpecLen</fieldref> ++ </list> ++ <field name="keycodesSpecLen" type="CARD8" /> ++ <list name="keycodesSpec" type="STRING8"> ++ <fieldref>keycodesSpecLen</fieldref> ++ </list> ++ <field name="typesSpecLen" type="CARD8" /> ++ <list name="typesSpec" type="STRING8"> ++ <fieldref>typesSpecLen</fieldref> ++ </list> ++ <field name="compatMapSpecLen" type="CARD8" /> ++ <list name="compatMapSpec" type="STRING8"> ++ <fieldref>compatMapSpecLen</fieldref> ++ </list> ++ <field name="symbolsSpecLen" type="CARD8" /> ++ <list name="symbolsSpec" type="STRING8"> ++ <fieldref>symbolsSpecLen</fieldref> ++ </list> ++ <field name="geometrySpecLen" type="CARD8" /> ++ <list name="geometrySpec" type="STRING8"> ++ <fieldref>geometrySpecLen</fieldref> ++ </list> ++ <reply> ++ <field name="deviceID" type="CARD8" /> ++ <field name="nKeymaps" type="CARD16" /> ++ <field name="nKeycodes" type="CARD16" /> ++ <field name="nTypes" type="CARD16" /> ++ <field name="nCompatMaps" type="CARD16" /> ++ <field name="nSymbols" type="CARD16" /> ++ <field name="nGeometries" type="CARD16" /> ++ <field name="extra" type="CARD16" /> ++ <pad bytes="10" /> ++ <list name="keymaps" type="Listing"> ++ <fieldref>nKeymaps</fieldref> ++ </list> ++ <list name="keycodes" type="Listing"> ++ <fieldref>nKeycodes</fieldref> ++ </list> ++ <list name="types" type="Listing"> ++ <fieldref>nTypes</fieldref> ++ </list> ++ <list name="compatMaps" type="Listing"> ++ <fieldref>nCompatMaps</fieldref> ++ </list> ++ <list name="symbols" type="Listing"> ++ <fieldref>nSymbols</fieldref> ++ </list> ++ <list name="geometries" type="Listing"> ++ <fieldref>nGeometries</fieldref> ++ </list> ++ </reply> ++ </request> ++ ++ <request name="GetKbdByName" opcode="23"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <field name="need" type="CARD16" mask="GBNDetail" /> ++ <field name="want" type="CARD16" mask="GBNDetail" /> ++ <field name="load" type="BOOL" /> ++ <pad bytes="1" /> ++ <field name="keymapsSpecLen" type="CARD8" /> ++ <list name="keymapsSpec" type="STRING8"> ++ <fieldref>keymapsSpecLen</fieldref> ++ </list> ++ <field name="keycodesSpecLen" type="CARD8" /> ++ <list name="keycodesSpec" type="STRING8"> ++ <fieldref>keycodesSpecLen</fieldref> ++ </list> ++ <field name="typesSpecLen" type="CARD8" /> ++ <list name="typesSpec" type="STRING8"> ++ <fieldref>typesSpecLen</fieldref> ++ </list> ++ <field name="compatMapSpecLen" type="CARD8" /> ++ <list name="compatMapSpec" type="STRING8"> ++ <fieldref>compatMapSpecLen</fieldref> ++ </list> ++ <field name="symbolsSpecLen" type="CARD8" /> ++ <list name="symbolsSpec" type="STRING8"> ++ <fieldref>symbolsSpecLen</fieldref> ++ </list> ++ <field name="geometrySpecLen" type="CARD8" /> ++ <list name="geometrySpec" type="STRING8"> ++ <fieldref>geometrySpecLen</fieldref> ++ </list> ++ <reply> ++ <field name="deviceID" type="CARD8" /> ++ <field name="minKeyCode" type="KEYCODE" /> ++ <field name="maxKeyCode" type="KEYCODE" /> ++ <field name="loaded" type="BOOL" /> ++ <field name="newKeyboard" type="BOOL" /> ++ <field name="found" type="CARD16" mask="GBNDetail" /> ++ <field name="reported" type="CARD16" mask="GBNDetail" /> ++ <pad bytes="16" /> ++ <switch name="replies"> ++ <fieldref>reported</fieldref> ++ <bitcase name="types"> ++ <enumref ref="GBNDetail">Types</enumref> ++ <!-- from the spec, this has to be a GetMap reply --> ++ <field name="getmap_type" type="CARD8" /> ++ <!-- done 'emulating' GetMap reply header--> ++ <field name="typeDeviceID" type="CARD8" /> ++ <!-- from the spec, this has to be a GetMap reply --> ++ <field name="getmap_sequence" type="CARD16" /> ++ <field name="getmap_length" type="CARD32" /> ++ <!-- done 'emulating' GetMap reply header--> ++ <pad bytes="2" /> ++ <field name="typeMinKeyCode" type="KEYCODE" /> ++ <field name="typeMaxKeyCode" type="KEYCODE" /> ++ <field name="present" type="CARD16" enum="MapPart" /> ++ <field name="firstType" type="CARD8" /> ++ <field name="nTypes" type="CARD8" /> ++ <field name="totalTypes" type="CARD8" /> ++ <field name="firstKeySym" type="KEYCODE" /> ++ <field name="totalSyms" type="CARD16" /> ++ <field name="nKeySyms" type="CARD8" /> ++ <field name="firstKeyAction" type="KEYCODE" /> ++ <field name="totalActions" type="CARD16" /> ++ <field name="nKeyActions" type="CARD8" /> ++ <field name="firstKeyBehavior" type="KEYCODE" /> ++ <field name="nKeyBehaviors" type="CARD8" /> ++ <field name="totalKeyBehaviors" type="CARD8" /> ++ <field name="firstKeyExplicit" type="KEYCODE" /> ++ <field name="nKeyExplicit" type="CARD8" /> ++ <field name="totalKeyExplicit" type="CARD8" /> ++ <field name="firstModMapKey" type="KEYCODE" /> ++ <field name="nModMapKeys" type="CARD8" /> ++ <field name="totalModMapKeys" type="CARD8" /> ++ <field name="firstVModMapKey" type="KEYCODE" /> ++ <field name="nVModMapKeys" type="CARD8" /> ++ <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"> ++ <fieldref>nKeySyms</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">KeyActions</enumref> ++ <list name="acts_rtrn_count" type="CARD8"> ++ <fieldref>nKeyActions</fieldref> ++ </list> ++ <list name="acts_rtrn_acts" type="Action"> ++ <fieldref>totalActions</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">KeyBehaviors</enumref> ++ <list name="behaviors_rtrn" type="SetBehavior"> ++ <fieldref>totalKeyBehaviors</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">VirtualMods</enumref> ++ <list name="vmods_rtrn" type="CARD8" mask="ModMask"> ++ <fieldref>nVModMapKeys</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">ExplicitComponents</enumref> ++ <list name="explicit_rtrn" type="SetExplicit"> ++ <fieldref>totalKeyExplicit</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">ModifierMap</enumref> ++ <list name="modmap_rtrn" type="KeyModMap"> ++ <fieldref>totalModMapKeys</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">VirtualModMap</enumref> ++ <list name="vmodmap_rtrn" type="KeyVModMap"> ++ <fieldref>totalVModMapKeys</fieldref> ++ </list> ++ </bitcase> ++ </switch> ++ </bitcase> ++ <bitcase name="compat_map"> ++ <enumref ref="GBNDetail">CompatMap</enumref> ++ <field name="compatDeviceID" type="CARD8" /> ++ <field name="groupsRtrn" type="CARD8" mask="SetOfGroup" /> ++ <pad bytes="1" /> ++ <field name="firstSIRtrn" type="CARD16" /> ++ <field name="nSIRtrn" type="CARD16" /> ++ <field name="nTotalSI" type="CARD16" /> ++ <pad bytes="16" /> ++ <list name="si_rtrn" type="CARD8" mask="SymInterpret"> ++ <op op="*"> ++ <value>16</value> ++ <fieldref>nSIRtrn</fieldref> ++ </op> ++ </list> ++ <list name="group_rtrn" type="ModDef"> ++ <popcount> ++ <fieldref>groupsRtrn</fieldref> ++ </popcount> ++ </list> ++ </bitcase> ++ <bitcase name="client_symbols"> ++ <enumref ref="GBNDetail">ClientSymbols</enumref> ++ <field name="clientDeviceID" type="CARD8" /> ++ <pad bytes="2" /> ++ <field name="clientMinKeyCode" type="KEYCODE" /> ++ <field name="clientMaxKeyCode" type="KEYCODE" /> ++ <field name="present" type="CARD16" enum="MapPart" /> ++ <field name="firstType" type="CARD8" /> ++ <field name="nTypes" type="CARD8" /> ++ <field name="totalTypes" type="CARD8" /> ++ <field name="firstKeySym" type="KEYCODE" /> ++ <field name="totalSyms" type="CARD16" /> ++ <field name="nKeySyms" type="CARD8" /> ++ <field name="firstKeyAction" type="KEYCODE" /> ++ <field name="totalActions" type="CARD16" /> ++ <field name="nKeyActions" type="CARD8" /> ++ <field name="firstKeyBehavior" type="KEYCODE" /> ++ <field name="nKeyBehaviors" type="CARD8" /> ++ <field name="totalKeyBehaviors" type="CARD8" /> ++ <field name="firstKeyExplicit" type="KEYCODE" /> ++ <field name="nKeyExplicit" type="CARD8" /> ++ <field name="totalKeyExplicit" type="CARD8" /> ++ <field name="firstModMapKey" type="KEYCODE" /> ++ <field name="nModMapKeys" type="CARD8" /> ++ <field name="totalModMapKeys" type="CARD8" /> ++ <field name="firstVModMapKey" type="KEYCODE" /> ++ <field name="nVModMapKeys" type="CARD8" /> ++ <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"> ++ <fieldref>nKeySyms</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">KeyActions</enumref> ++ <list name="acts_rtrn_count" type="CARD8"> ++ <fieldref>nKeyActions</fieldref> ++ </list> ++ <list name="acts_rtrn_acts" type="Action"> ++ <fieldref>totalActions</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">KeyBehaviors</enumref> ++ <list name="behaviors_rtrn" type="SetBehavior"> ++ <fieldref>totalKeyBehaviors</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">VirtualMods</enumref> ++ <list name="vmods_rtrn" type="CARD8" mask="ModMask"> ++ <fieldref>nVModMapKeys</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">ExplicitComponents</enumref> ++ <list name="explicit_rtrn" type="SetExplicit"> ++ <fieldref>totalKeyExplicit</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">ModifierMap</enumref> ++ <list name="modmap_rtrn" type="KeyModMap"> ++ <fieldref>totalModMapKeys</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">VirtualModMap</enumref> ++ <list name="vmodmap_rtrn" type="KeyVModMap"> ++ <fieldref>totalVModMapKeys</fieldref> ++ </list> ++ </bitcase> ++ </switch> ++ </bitcase> ++ <bitcase name="server_symbols"> ++ <enumref ref="GBNDetail">ServerSymbols</enumref> ++ <field name="serverDeviceID" type="CARD8" /> ++ <pad bytes="2" /> ++ <field name="serverMinKeyCode" type="KEYCODE" /> ++ <field name="serverMaxKeyCode" type="KEYCODE" /> ++ <field name="present" type="CARD16" enum="MapPart" /> ++ <field name="firstType" type="CARD8" /> ++ <field name="nTypes" type="CARD8" /> ++ <field name="totalTypes" type="CARD8" /> ++ <field name="firstKeySym" type="KEYCODE" /> ++ <field name="totalSyms" type="CARD16" /> ++ <field name="nKeySyms" type="CARD8" /> ++ <field name="firstKeyAction" type="KEYCODE" /> ++ <field name="totalActions" type="CARD16" /> ++ <field name="nKeyActions" type="CARD8" /> ++ <field name="firstKeyBehavior" type="KEYCODE" /> ++ <field name="nKeyBehaviors" type="CARD8" /> ++ <field name="totalKeyBehaviors" type="CARD8" /> ++ <field name="firstKeyExplicit" type="KEYCODE" /> ++ <field name="nKeyExplicit" type="CARD8" /> ++ <field name="totalKeyExplicit" type="CARD8" /> ++ <field name="firstModMapKey" type="KEYCODE" /> ++ <field name="nModMapKeys" type="CARD8" /> ++ <field name="totalModMapKeys" type="CARD8" /> ++ <field name="firstVModMapKey" type="KEYCODE" /> ++ <field name="nVModMapKeys" type="CARD8" /> ++ <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"> ++ <fieldref>nKeySyms</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">KeyActions</enumref> ++ <list name="acts_rtrn_count" type="CARD8"> ++ <fieldref>nKeyActions</fieldref> ++ </list> ++ <list name="acts_rtrn_acts" type="Action"> ++ <fieldref>totalActions</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">KeyBehaviors</enumref> ++ <list name="behaviors_rtrn" type="SetBehavior"> ++ <fieldref>totalKeyBehaviors</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">VirtualMods</enumref> ++ <list name="vmods_rtrn" type="CARD8" mask="ModMask"> ++ <fieldref>nVModMapKeys</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">ExplicitComponents</enumref> ++ <list name="explicit_rtrn" type="SetExplicit"> ++ <fieldref>totalKeyExplicit</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">ModifierMap</enumref> ++ <list name="modmap_rtrn" type="KeyModMap"> ++ <fieldref>totalModMapKeys</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="MapPart">VirtualModMap</enumref> ++ <list name="vmodmap_rtrn" type="KeyVModMap"> ++ <fieldref>totalVModMapKeys</fieldref> ++ </list> ++ </bitcase> ++ </switch> ++ </bitcase> ++ <bitcase name="indicator_maps"> ++ <enumref ref="GBNDetail">IndicatorMaps</enumref> ++ <field name="indicatorDeviceID" type="CARD8" /> ++ <field name="which" type="CARD32" /> ++ <field name="realIndicators" type="CARD32" /> ++ <field name="nIndicators" type="CARD8" /> ++ <pad bytes="15" /> ++ <list name="maps" type="IndicatorMap"> ++ <fieldref>nIndicators</fieldref> ++ </list> ++ </bitcase> ++ <bitcase name="key_names"> ++ <enumref ref="GBNDetail">KeyNames</enumref> ++ <field name="keyDeviceID" type="CARD8" /> ++ <field name="which" type="CARD32" mask="NameDetail" /> ++ <field name="keyMinKeyCode" type="KEYCODE" /> ++ <field name="keyMaxKeyCode" type="KEYCODE" /> ++ <field name="nTypes" type="CARD8" /> ++ <field name="groupNames" type="CARD8" mask="SetOfGroup" /> ++ <field name="virtualMods" type="CARD16" mask="VMod" /> ++ <field name="firstKey" type="KEYCODE" /> ++ <field name="nKeys" type="CARD8" /> ++ <field name="indicators" type="CARD32" /> ++ <field name="nRadioGroups" type="CARD8" /> ++ <field name="nKeyAliases" type="CARD8" /> ++ <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">PhysSymbols</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"> ++ <fieldref>nTypes</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">KTLevelNames</enumref> ++ <list name="nLevelsPerType" type="CARD8"> ++ <fieldref>nKTLevels</fieldref> ++ </list> ++ <list name="ktLevelNames" type="ATOM"> ++ <sumof ref="nLevelsPerType" /> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">IndicatorNames</enumref> ++ <list name="indicatorNames" type="ATOM"> ++ <popcount> ++ <fieldref>indicators</fieldref> ++ </popcount> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">VirtualModNames</enumref> ++ <list name="virtualModNames" type="ATOM"> ++ <popcount> ++ <fieldref>virtualMods</fieldref> ++ </popcount> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">GroupNames</enumref> ++ <list name="groups" type="ATOM"> ++ <popcount> ++ <fieldref>groupNames</fieldref> ++ </popcount> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">KeyNames</enumref> ++ <list name="keyNames" type="KeyName"> ++ <fieldref>nKeys</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">KeyAliases</enumref> ++ <list name="keyAliases" type="KeyAlias"> ++ <fieldref>nKeyAliases</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">RGNames</enumref> ++ <list name="radioGroupNames" type="ATOM"> ++ <fieldref>nRadioGroups</fieldref> ++ </list> ++ </bitcase> ++ </switch> ++ </bitcase> ++ <bitcase name="other_names"> ++ <enumref ref="GBNDetail">OtherNames</enumref> ++ <field name="otherDeviceID" type="CARD8" /> ++ <field name="which" type="CARD32" mask="NameDetail" /> ++ <field name="otherMinKeyCode" type="KEYCODE" /> ++ <field name="otherMaxKeyCode" type="KEYCODE" /> ++ <field name="nTypes" type="CARD8" /> ++ <field name="groupNames" type="CARD8" mask="SetOfGroup" /> ++ <field name="virtualMods" type="CARD16" mask="VMod" /> ++ <field name="firstKey" type="KEYCODE" /> ++ <field name="nKeys" type="CARD8" /> ++ <field name="indicators" type="CARD32" /> ++ <field name="nRadioGroups" type="CARD8" /> ++ <field name="nKeyAliases" type="CARD8" /> ++ <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">PhysSymbols</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"> ++ <fieldref>nTypes</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">KTLevelNames</enumref> ++ <list name="nLevelsPerType" type="CARD8"> ++ <fieldref>nKTLevels</fieldref> ++ </list> ++ <list name="ktLevelNames" type="ATOM"> ++ <sumof ref="nLevelsPerType" /> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">IndicatorNames</enumref> ++ <list name="indicatorNames" type="ATOM"> ++ <popcount> ++ <fieldref>indicators</fieldref> ++ </popcount> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">VirtualModNames</enumref> ++ <list name="virtualModNames" type="ATOM"> ++ <popcount> ++ <fieldref>virtualMods</fieldref> ++ </popcount> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">GroupNames</enumref> ++ <list name="groups" type="ATOM"> ++ <popcount> ++ <fieldref>groupNames</fieldref> ++ </popcount> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">KeyNames</enumref> ++ <list name="keyNames" type="KeyName"> ++ <fieldref>nKeys</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">KeyAliases</enumref> ++ <list name="keyAliases" type="KeyAlias"> ++ <fieldref>nKeyAliases</fieldref> ++ </list> ++ </bitcase> ++ <bitcase> ++ <enumref ref="NameDetail">RGNames</enumref> ++ <list name="radioGroupNames" type="ATOM"> ++ <fieldref>nRadioGroups</fieldref> ++ </list> ++ </bitcase> ++ </switch> ++ </bitcase> ++ <bitcase name="geometry"> ++ <enumref ref="GBNDetail">Geometry</enumref> ++ <field name="geometryDeviceID" type="CARD8" /> ++ <field name="name" type="ATOM" /> ++ <field name="geometryFound" type="BOOL" /> ++ <pad bytes="1" /> ++ <field name="widthMM" type="CARD16" /> ++ <field name="heightMM" type="CARD16" /> ++ <field name="nProperties" type="CARD16" /> ++ <field name="nColors" type="CARD16" /> ++ <field name="nShapes" type="CARD16" /> ++ <field name="nSections" type="CARD16" /> ++ <field name="nDoodads" type="CARD16" /> ++ <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"> ++ <fieldref>nProperties</fieldref> ++ </list> ++ <list name="colors" type="CountedString16"> ++ <fieldref>nColors</fieldref> ++ </list> ++ <list name="shapes" type="Shape"> ++ <fieldref>nShapes</fieldref> ++ </list> ++ <list name="sections" type="Section"> ++ <fieldref>nSections</fieldref> ++ </list> ++ <list name="doodads" type="Doodad"> ++ <fieldref>nDoodads</fieldref> ++ </list> ++ <list name="keyAliases" type="KeyAlias"> ++ <fieldref>nKeyAliases</fieldref> ++ </list> ++ </bitcase> ++ </switch> ++ </reply> ++ </request> ++ ++ <request name="GetDeviceInfo" opcode="24"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <field name="wanted" type="CARD16" mask="XIFeature" /> ++ <field name="allButtons" type="BOOL" /> ++ <field name="firstButton" type="CARD8" /> ++ <field name="nButtons" type="CARD8" /> ++ <pad bytes="1" /> ++ <field name="ledClass" type="LedClassSpec" enum="LedClass" /> ++ <field name="ledID" type="IDSpec" altenum="ID" /> ++ <reply> ++ <field name="deviceID" type="CARD8" /> ++ <field name="present" type="CARD16" mask="XIFeature" /> ++ <field name="supported" type="CARD16" mask="XIFeature" /> ++ <field name="unsupported" type="CARD16" mask="XIFeature" /> ++ <field name="nDeviceLedFBs" type="CARD16" /> ++ <field name="firstBtnWanted" type="CARD8" /> ++ <field name="nBtnsWanted" type="CARD8" /> ++ <field name="firstBtnRtrn" type="CARD8" /> ++ <field name="nBtnsRtrn" type="CARD8" /> ++ <field name="totalBtns" type="CARD8" /> ++ <field name="hasOwnState" type="BOOL" /> ++ <field name="dfltKbdFB" type="CARD16" altenum="ID" /> ++ <field name="dfltLedFB" type="CARD16" altenum="ID" /> ++ <pad bytes="2" /> ++ <field name="devType" type="ATOM" /> ++ <field name="nameLen" type="CARD16" /> ++ <list name="name" type="STRING8"> ++ <fieldref>nameLen</fieldref> ++ </list> ++ <list name="btnActions" type="Action"> ++ <fieldref>nBtnsRtrn</fieldref> ++ </list> ++ <list name="leds" type="DeviceLedInfo"> ++ <fieldref>nDeviceLedFBs</fieldref> ++ </list> ++ </reply> ++ </request> ++ ++ ++ <request name="SetDeviceInfo" opcode="25"> ++ <field name="deviceSpec" type="DeviceSpec" /> ++ <field name="firstBtn" type="CARD8" /> ++ <field name="nBtns" type="CARD8" /> ++ <field name="change" type="CARD16" mask="XIFeature" /> ++ <field name="nDeviceLedFBs" type="CARD16" /> ++ <list name="btnActions" type="Action"> ++ <fieldref>nBtns</fieldref> ++ </list> ++ <list name="leds" type="DeviceLedInfo"> ++ <fieldref>nDeviceLedFBs</fieldref> ++ </list> ++ </request> ++ ++ <request name="SetDebuggingFlags" opcode="101"> ++ <field name="msgLength" type="CARD16" /> ++ <pad bytes="2" /> ++ <field name="affectFlags" type="CARD32" /> ++ <field name="flags" type="CARD32" /> ++ <field name="affectCtrls" type="CARD32" /> ++ <field name="ctrls" type="CARD32" /> ++ <list name="message" type="STRING8"> ++ <fieldref>msgLength</fieldref> ++ </list> ++ <reply> ++ <pad bytes="1" /> ++ <field name="currentFlags" type="CARD32" /> ++ <field name="currentCtrls" type="CARD32" /> ++ <field name="supportedFlags" type="CARD32" /> ++ <field name="supportedCtrls" type="CARD32" /> ++ <pad bytes="8" /> ++ </reply> ++ </request> ++ ++ <!-- Events --> ++ ++ <event name="NewKeyboardNotify" number="0" no-sequence-number="true"> ++ <field name="xkbType" type="CARD8" /> ++ <field name="sequence" type="CARD16" /> ++ <field name="time" type="TIMESTAMP" /> ++ <field name="deviceID" type="CARD8" /> ++ <field name="oldDeviceID" type="CARD8" /> ++ <field name="minKeyCode" type="KEYCODE" /> ++ <field name="maxKeyCode" type="KEYCODE" /> ++ <field name="oldMinKeyCode" type="KEYCODE" /> ++ <field name="oldMaxKeyCode" type="KEYCODE" /> ++ <field name="requestMajor" type="CARD8" /> ++ <field name="requestMinor" type="CARD8" /> ++ <field name="changed" type="CARD16" mask="NKNDetail" /> ++ <pad bytes="14" /> ++ </event> ++ ++ <event name="MapNotify" number="1" no-sequence-number="true"> ++ <field name="xkbType" type="CARD8" /> ++ <field name="sequence" type="CARD16" /> ++ <field name="time" type="TIMESTAMP" /> ++ <field name="deviceID" type="CARD8" /> ++ <field name="ptrBtnActions" type="CARD8" /> ++ <field name="changed" type="CARD16" mask="MapPart" /> ++ <field name="minKeyCode" type="KEYCODE" /> ++ <field name="maxKeyCode" type="KEYCODE" /> ++ <field name="firstType" type="CARD8" /> ++ <field name="nTypes" type="CARD8" /> ++ <field name="firstKeySym" type="KEYCODE" /> ++ <field name="nKeySyms" type="CARD8" /> ++ <field name="firstKeyAct" type="KEYCODE" /> ++ <field name="nKeyActs" type="CARD8" /> ++ <field name="firstKeyBehavior" type="KEYCODE" /> ++ <field name="nKeyBehavior" type="CARD8" /> ++ <field name="firstKeyExplicit" type="KEYCODE" /> ++ <field name="nKeyExplicit" type="CARD8" /> ++ <field name="firstModMapKey" type="KEYCODE" /> ++ <field name="nModMapKeys" type="CARD8" /> ++ <field name="firstVModMapKey" type="KEYCODE" /> ++ <field name="nVModMapKeys" type="CARD8" /> ++ <field name="virtualMods" type="CARD16" mask="VMod" /> ++ <pad bytes="2" /> ++ </event> ++ ++ <event name="StateNotify" number="2" no-sequence-number="true"> ++ <field name="xkbType" type="CARD8" /> ++ <field name="sequence" type="CARD16" /> ++ <field name="time" type="TIMESTAMP" /> ++ <field name="deviceID" type="CARD8" /> ++ <field name="mods" type="CARD8" mask="ModMask" /> ++ <field name="baseMods" type="CARD8" mask="ModMask" /> ++ <field name="latchedMods" type="CARD8" mask="ModMask" /> ++ <field name="lockedMods" type="CARD8" mask="ModMask" /> ++ <field name="group" type="CARD8" enum="Group" /> ++ <field name="baseGroup" type="INT16" /> ++ <field name="latchedGroup" type="INT16" /> ++ <field name="lockedGroup" type="CARD8" enum="Group" /> ++ <field name="compatState" type="CARD8" mask="ModMask" /> ++ <field name="grabMods" type="CARD8" mask="ModMask" /> ++ <field name="compatGrabMods" type="CARD8" mask="ModMask" /> ++ <field name="lookupMods" type="CARD8" mask="ModMask" /> ++ <field name="compatLoockupMods" type="CARD8" mask="ModMask" /> ++ <field name="ptrBtnState" type="CARD16" mask="KeyButMask" /> ++ <field name="changed" type="CARD16" mask="StatePart" /> ++ <field name="keycode" type="KEYCODE" /> ++ <field name="eventType" type="CARD8" /> ++ <field name="requestMajor" type="CARD8" /> ++ <field name="requestMinor" type="CARD8" /> ++ </event> ++ ++ <event name="ControlsNotify" number="3" no-sequence-number="true"> ++ <field name="xkbType" type="CARD8" /> ++ <field name="sequence" type="CARD16" /> ++ <field name="time" type="TIMESTAMP" /> ++ <field name="deviceID" type="CARD8" /> ++ <field name="numGroups" type="CARD8" /> ++ <pad bytes="2" /> ++ <field name="changedControls" type="CARD32" mask="Control" /> ++ <field name="enabledControls" type="CARD32" mask="BoolCtrl" /> ++ <field name="enabledControlChanges" type="CARD32" mask="BoolCtrl" /> ++ <field name="keycode" type="KEYCODE" /> ++ <field name="eventType" type="CARD8" /> ++ <field name="requestMajor" type="CARD8" /> ++ <field name="requestMinor" type="CARD8" /> ++ <pad bytes="4" /> ++ </event> ++ ++ <event name="IndicatorStateNotify" number="4" no-sequence-number="true"> ++ <field name="xkbType" type="CARD8" /> ++ <field name="sequence" type="CARD16" /> ++ <field name="time" type="TIMESTAMP" /> ++ <field name="deviceID" type="CARD8" /> ++ <pad bytes="3" /> ++ <field name="state" type="CARD32" /> ++ <field name="stateChanged" type="CARD32" /> ++ <pad bytes="12" /> ++ </event> ++ ++ <event name="IndicatorMapNotify" number="5" no-sequence-number="true"> ++ <field name="xkbType" type="CARD8" /> ++ <field name="sequence" type="CARD16" /> ++ <field name="time" type="TIMESTAMP" /> ++ <field name="deviceID" type="CARD8" /> ++ <pad bytes="3" /> ++ <field name="state" type="CARD32" /> ++ <field name="mapChanged" type="CARD32" /> ++ <pad bytes="12" /> ++ </event> ++ ++ <event name="NamesNotify" number="6" no-sequence-number="true"> ++ <field name="xkbType" type="CARD8" /> ++ <field name="sequence" type="CARD16" /> ++ <field name="time" type="TIMESTAMP" /> ++ <field name="deviceID" type="CARD8" /> ++ <pad bytes="1" /> ++ <field name="changed" type="CARD16" mask="NameDetail" /> ++ <field name="firstType" type="CARD8" /> ++ <field name="nTypes" type="CARD8" /> ++ <field name="firstLevelName" type="CARD8" /> ++ <field name="nLevelNames" type="CARD8" /> ++ <pad bytes="1" /> ++ <field name="nRadioGroups" type="CARD8" /> ++ <field name="nKeyAliases" type="CARD8" /> ++ <field name="changedGroupNames" type="CARD8" mask="SetOfGroup" /> ++ <field name="changedVirtualMods" type="CARD16" mask="VMod" /> ++ <field name="firstKey" type="KEYCODE" /> ++ <field name="nKeys" type="CARD8" /> ++ <field name="changedIndicators" type="CARD32" /> ++ <pad bytes="4" /> ++ </event> ++ ++ <event name="CompatMapNotify" number="7" no-sequence-number="true"> ++ <field name="xkbType" type="CARD8" /> ++ <field name="sequence" type="CARD16" /> ++ <field name="time" type="TIMESTAMP" /> ++ <field name="deviceID" type="CARD8" /> ++ <field name="changedGroups" type="CARD8" mask="SetOfGroup" /> ++ <field name="firstSI" type="CARD16" /> ++ <field name="nSI" type="CARD16" /> ++ <field name="nTotalSI" type="CARD16" /> ++ <pad bytes="16" /> ++ </event> ++ ++ <event name="BellNotify" number="8" no-sequence-number="true"> ++ <field name="xkbType" type="CARD8" /> ++ <field name="sequence" type="CARD16" /> ++ <field name="time" type="TIMESTAMP" /> ++ <field name="deviceID" type="CARD8" /> ++ <field name="bellClass" type="CARD8" enum="BellClassResult" /> ++ <field name="bellID" type="CARD8" /> ++ <field name="percent" type="CARD8" /> ++ <field name="pitch" type="CARD16" /> ++ <field name="duration" type="CARD16" /> ++ <field name="name" type="ATOM" /> ++ <field name="window" type="WINDOW" /> ++ <field name="eventOnly" type="BOOL" /> ++ <pad bytes="7" /> ++ </event> ++ ++ <event name="ActionMessage" number="9" no-sequence-number="true"> ++ <field name="xkbType" type="CARD8" /> ++ <field name="sequence" type="CARD16" /> ++ <field name="time" type="TIMESTAMP" /> ++ <field name="deviceID" type="CARD8" /> ++ <field name="keycode" type="KEYCODE" /> ++ <field name="press" type="BOOL" /> ++ <field name="keyEventFollows" type="BOOL" /> ++ <field name="mods" type="CARD8" mask="ModMask" /> ++ <field name="group" type="CARD8" enum="Group" /> ++ <list name="message" type="STRING8"> ++ <value>8</value> ++ </list> ++ <pad bytes="10" /> ++ </event> ++ ++ <event name="AccessXNotify" number="10" no-sequence-number="true"> ++ <field name="xkbType" type="CARD8" /> ++ <field name="sequence" type="CARD16" /> ++ <field name="time" type="TIMESTAMP" /> ++ <field name="deviceID" type="CARD8" /> ++ <field name="keycode" type="KEYCODE" /> ++ <field name="detailt" type="CARD16" mask="AXNDetail" /> ++ <field name="slowKeysDelay" type="CARD16" /> ++ <field name="debounceDelay" type="CARD16" /> ++ <pad bytes="16" /> ++ </event> ++ ++ <event name="ExtensionDeviceNotify" number="11" no-sequence-number="true"> ++ <field name="xkbType" type="CARD8" /> ++ <field name="sequence" type="CARD16" /> ++ <field name="time" type="TIMESTAMP" /> ++ <field name="deviceID" type="CARD8" /> ++ <pad bytes="1" /> ++ <field name="reason" type="CARD16" mask="XIFeature" /> ++ <field name="ledClass" type="CARD16" enum="LedClassResult" /> ++ <field name="ledID" type="CARD8" /> ++ <field name="ledsDefined" type="CARD32" /> ++ <field name="ledState" type="CARD32" /> ++ <field name="firstButton" type="CARD8" /> ++ <field name="nButtons" type="CARD8" /> ++ <field name="supported" type="CARD16" mask="XIFeature" /> ++ <field name="unsupported" type="CARD16" mask="XIFeature" /> ++ <pad bytes="2" /> ++ </event> ++</xcb> diff --git a/SPECS/compat-libxcb.spec b/SPECS/compat-libxcb.spec new file mode 100644 index 0000000..c2ee14c --- /dev/null +++ b/SPECS/compat-libxcb.spec @@ -0,0 +1,67 @@ +Name: compat-libxcb +Version: 1.9 +Release: 1%{?dist} +Summary: A C binding to the X11 protocol + +Group: System Environment/Libraries +License: MIT +URL: http://xcb.freedesktop.org/ +Source0: http://xcb.freedesktop.org/dist/libxcb-%{version}.tar.bz2 +BuildRoot: %{_tmppath}/libxcb-%{version}-%{release}-root-%(%{__id_u} -n) + +Patch1: 0001-integer-overflow-in-read_packet-CVE-2013-2064.patch +Patch2: 0001-c_client.py-Handle-multiple-expr.-in-a-bitcase.patch +Patch3: xkb.patch + +BuildRequires: autoconf automake libtool pkgconfig +BuildRequires: libXau-devel +BuildRequires: libxslt +BuildRequires: xcb-proto >= 1.7-3 +BuildRequires: xorg-x11-proto-devel +BuildRequires: xorg-x11-util-macros + +%description +The X protocol C-language Binding (XCB) is a replacement for Xlib featuring a +small footprint, latency hiding, direct access to the protocol, improved +threading support, and extensibility. + +%prep +%setup -q -n libxcb-%{version} +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 -b .jx + +%build +sed -i 's/pthread-stubs //' configure.ac +autoreconf -v --install +%configure --disable-static --disable-build-docs --enable-xkb --enable-sync \ + --disable-{composite,damage,dpms,dri2,glx,randr,record,render} \ + --disable-{resource,screensaver,shape,shm,xevie,xfixes,xfree86-dri} \ + --disable-{xprint,xinerama,selinux,xtest,xv,xvmc} +ln -s %{_datadir}/xcb/xproto.xml . +make %{?_smp_mflags} V=1 + +%install +rm -rf $RPM_BUILD_ROOT +make install DESTDIR=$RPM_BUILD_ROOT + +find $RPM_BUILD_ROOT -name '*.la' -delete +rm -rf $RPM_BUILD_ROOT{%{_datadir},%{_includedir},%{_libdir}/pkgconfig} +rm -f $RPM_BUILD_ROOT%{_libdir}/*.so +rm -f $RPM_BUILD_ROOT%{_libdir}/libxcb.so* + +%clean +rm -rf $RPM_BUILD_ROOT + +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig + +%files +%defattr(-,root,root,-) +%doc COPYING +%{_libdir}/libxcb-sync.so.0* +%{_libdir}/libxcb-xkb.so.0* + +%changelog +* Tue Apr 07 2015 Adam Jackson <ajax@redhat.com> 1.9-1 +- Compatibility build for libxcb-sync.so.0 and libxcb-xkb.so.0