xinput: rep QueryDeviceState struct InputState: full support QueryDeviceState-V3 master
authorChristian Linhart <chris@DemoRecorder.com>
Fri, 29 Aug 2014 17:35:50 +0000 (19:35 +0200)
committerChristian Linhart <chris@demorecorder.com>
Tue, 9 Sep 2014 21:54:45 +0000 (23:54 +0200)
Full support for the QueryDeviceState reply.
This has been done by changing the struct InputState
with using switch-case and implicit-padding="false".

Also fixed the type of field valuators of struct ValuatorState
from CARD32 to INT32.

V2: patch revised:
* removed the implicit-padding="false" attribute, according
  to the discussion in this thread.
* give names to the cases, which generates more beautiful code.

spec:
http://cgit.freedesktop.org/xorg/proto/inputproto/tree/specs/XIproto.txt?id=inputproto-2.3.1#n2082
http://cgit.freedesktop.org/xorg/lib/libXi/tree/specs/encoding.xml?id=libXi-1.7.4#n1728

Message-ID: <5400B9F6.5000208@DemoRecorder.com>
Patch-Thread-Subject: [Xcb] xinput:QueryDeviceState: full-support: generator and xml-changes
Patch-Set: QueryDeviceState
Patch-Number: proto 2/2
Patch-Version: V2
Signed-off-by: Christian Linhart <chris@DemoRecorder.com>
Reviewed-By: Ran Benita <ran234@gmail.com>
src/xinput.xml

index dc87e78..7f7b0a6 100644 (file)
@@ -862,7 +862,7 @@ in struct DeviceTimeCoord.
         <field type="CARD8" name="len" />
         <field type="CARD8" name="num_valuators" />
         <field type="CARD8" name="mode" mask="ValuatorStateModeMask" />
-        <list type="CARD32" name="valuators">
+        <list type="INT32" name="valuators">
             <fieldref>num_valuators</fieldref>
         </list>
     </struct>
@@ -870,14 +870,33 @@ in struct DeviceTimeCoord.
     <struct name="InputState">
         <field type="CARD8" name="class_id" enum="InputClass" />
         <field type="CARD8" name="len" />
-        <field type="CARD8" name="num_items" />
-        <pad bytes="1" />
-        <list type="CARD8" name="uninterpreted_data">
-            <op op="-">
-                <fieldref>len</fieldref>
-                <value>4</value>
-            </op>
-        </list>
+        <switch name="data">
+            <fieldref>class_id</fieldref>
+            <case name="key">
+                <enumref ref="InputClass">Key</enumref>
+                <field type="CARD8" name="num_keys" />
+                <pad bytes="1" />
+                <list type="CARD8" name="keys">
+                    <value>32</value>
+                </list>
+            </case>
+            <case name="button">
+                <enumref ref="InputClass">Button</enumref>
+                <field type="CARD8" name="num_buttons" />
+                <pad bytes="1" />
+                <list type="CARD8" name="buttons">
+                    <value>32</value>
+                </list>
+            </case>
+            <case name="valuator">
+                <enumref ref="InputClass">Valuator</enumref>
+                <field type="CARD8" name="num_valuators" />
+                <field type="CARD8" name="mode" mask="ValuatorStateModeMask" />
+                <list type="INT32" name="valuators">
+                    <fieldref>num_valuators</fieldref>
+                </list>
+            </case>
+        </switch>
     </struct>
 
     <request name="QueryDeviceState" opcode="30">