diff options
author | Christian Linhart <chris@demorecorder.com> | 2017-01-25 10:39:38 +0100 |
---|---|---|
committer | Christian Linhart <chris@demorecorder.com> | 2017-03-11 10:49:49 +0100 |
commit | 97fbba25baf241cbcda882739db423b1d36e440a (patch) | |
tree | 7db462e46a80a31b3e36d78acd5657a22d17738d | |
parent | 4aa40fbd5e05833b72327ea37421b09dff246732 (diff) |
SendExtensionEvent uses eventstruct
Use the eventstruct element to define the SendExtensionEvent request
instead of using a byte-array.
This has the advantage that the structure of the data to be sent
is now defined in the xml definition.
This can be used by generators to make sending events safer.
Such as avoiding type-casts in C.
It can also be useful for protocol analyzers and tools like that
because the structure of the sent events is now defined in the xml-definition.
Tested-by: Christian Linhart <chris@demorecorder.com>
Signed-off-by: Christian Linhart <chris@demorecorder.com>
-rw-r--r-- | src/xinput.xml | 57 |
1 files changed, 38 insertions, 19 deletions
diff --git a/src/xinput.xml b/src/xinput.xml index c0b497e..9a35e9d 100644 --- a/src/xinput.xml +++ b/src/xinput.xml @@ -987,25 +987,8 @@ This affects the following: </reply> </request> - <!-- SendExtensionEvent --> - - <request name="SendExtensionEvent" opcode="31"> - <field type="WINDOW" name="destination" /> - <field type="CARD8" name="device_id" /> - <field type="BOOL" name="propagate" /> - <field type="CARD16" name="num_classes" /> - <field type="CARD8" name="num_events" /> - <pad bytes="3" /> - <list type="CARD8" name="events"> - <op op="*"> - <fieldref>num_events</fieldref> - <value>32</value> - </op> - </list> - <list type="EventClass" name="classes"> - <fieldref>num_classes</fieldref> - </list> - </request> + <!-- SendExtensionEvent (opcode 16) has to be defined after the events + because we do not support backward references --> <!-- DeviceBell --> @@ -2642,6 +2625,42 @@ This affects the following: <eventcopy name="BarrierLeave" number="26" ref="BarrierHit" /> + <!-- ⋅⋅⋅ Requests that depend on events ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ --> + + <!-- SendExtensionEvent --> + <eventstruct name="EventForSend"> + <allowed extension="Input" xge="false" opcode-min="0" opcode-max="16" /> + <!-- We need not allow the newer events which are based on + the GenericEvent extension: + The wire-protocol-spec + https://cgit.freedesktop.org/xorg/lib/libXi/tree/specs/encoding.xml?idĺibXi-1.7.9#n1793 + only allows fixed sized events, which seems + to rule out GenericEvent. + + The xlib-implementation also assumes fixed-sized events. + https://cgit.freedesktop.org/xorg/lib/libXi/tree/src/XSndExEv.c?id=libXi-1.7.9#n106 + + The Xserver also allows only non-GE events: + https:g/xorg/xserver/tree/Xi/sendexev.c?id=xorg-server-1.19.1#n144 + --> + </eventstruct> + + <request name="SendExtensionEvent" opcode="31"> + <field type="WINDOW" name="destination" /> + <field type="CARD8" name="device_id" /> + <field type="BOOL" name="propagate" /> + <field type="CARD16" name="num_classes" /> + <field type="CARD8" name="num_events" /> + <pad bytes="3" /> + <list type="EventForSend" name="events"> + <fieldref>num_events</fieldref> + </list> + <list type="EventClass" name="classes"> + <fieldref>num_classes</fieldref> + </list> + </request> + + <!-- ⋅⋅⋅ Errors (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ --> <error name="Device" number="0" /> |