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>
This commit is contained in:
Christian Linhart 2017-01-25 10:39:38 +01:00
parent 4aa40fbd5e
commit 97fbba25ba

View file

@ -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" />