mirror of
https://gitlab.freedesktop.org/xorg/proto/xcbproto.git
synced 2026-05-09 07:08:08 +02:00
Add support for X Generic Extension events
With these patches, we are able to mark an XGE event as such and generate the correct header for it. XGE events can be found in the X Input Extension v2++. Signed-off-by: Daniel Martin <consume.noise@gmail.com> Reviewed-by: Keith Packard <keithp@keithp.com> Signed-off-by: Peter Harris <pharris@opentext.com>
This commit is contained in:
parent
e6a246e50e
commit
56a82005ac
3 changed files with 29 additions and 6 deletions
|
|
@ -128,7 +128,8 @@ Top-Level Elements
|
|||
requests of the same type may be combined into a single request without
|
||||
affecting the semantics of the requests.
|
||||
|
||||
<event name="identifier" number="integer" [no-sequence-number="true"]>
|
||||
<event name="identifier" number="integer"
|
||||
[[no-sequence-number="true"] | [xge="true"]]>
|
||||
structure contents
|
||||
</event>
|
||||
|
||||
|
|
@ -142,6 +143,11 @@ Top-Level Elements
|
|||
include a sequence number. This is a special-case for the KeymapNotify
|
||||
event in the core protocol, and should not be used in any other event.
|
||||
|
||||
If the optional xge attribute is true, the event is an X Generic Event and
|
||||
will be treated as such.
|
||||
|
||||
The no-sequence-number and xge attribute can not be combined.
|
||||
|
||||
<error name="identifier" number="integer">
|
||||
structure contents
|
||||
</error>
|
||||
|
|
|
|||
|
|
@ -324,6 +324,7 @@ authorization from the authors.
|
|||
</xsd:sequence>
|
||||
<xsd:attribute name="no-sequence-number" type="xsd:boolean"
|
||||
use="optional" />
|
||||
<xsd:attribute name="xge" type="xsd:boolean" use="optional" />
|
||||
</xsd:extension>
|
||||
</xsd:complexContent>
|
||||
</xsd:complexType>
|
||||
|
|
|
|||
|
|
@ -602,25 +602,41 @@ class Event(ComplexType):
|
|||
|
||||
self.has_seq = not bool(elt.get('no-sequence-number'))
|
||||
|
||||
self.is_ge_event = bool(elt.get('xge'))
|
||||
|
||||
self.doc = None
|
||||
for item in list(elt):
|
||||
if item.tag == 'doc':
|
||||
self.doc = Doc(name, item)
|
||||
|
||||
|
||||
def add_opcode(self, opcode, name, main):
|
||||
self.opcodes[name] = opcode
|
||||
if main:
|
||||
self.name = name
|
||||
|
||||
def resolve(self, module):
|
||||
def add_event_header():
|
||||
self.fields.append(Field(tcard8, tcard8.name, 'response_type', False, True, True))
|
||||
if self.has_seq:
|
||||
self.fields.append(_placeholder_byte)
|
||||
self.fields.append(Field(tcard16, tcard16.name, 'sequence', False, True, True))
|
||||
|
||||
def add_ge_event_header():
|
||||
self.fields.append(Field(tcard8, tcard8.name, 'response_type', False, True, True))
|
||||
self.fields.append(Field(tcard8, tcard8.name, 'extension', False, True, True))
|
||||
self.fields.append(Field(tcard16, tcard16.name, 'sequence', False, True, True))
|
||||
self.fields.append(Field(tcard32, tcard32.name, 'length', False, True, True))
|
||||
self.fields.append(Field(tcard16, tcard16.name, 'event_type', False, True, True))
|
||||
|
||||
if self.resolved:
|
||||
return
|
||||
|
||||
# Add the automatic protocol fields
|
||||
self.fields.append(Field(tcard8, tcard8.name, 'response_type', False, True, True))
|
||||
if self.has_seq:
|
||||
self.fields.append(_placeholder_byte)
|
||||
self.fields.append(Field(tcard16, tcard16.name, 'sequence', False, True, True))
|
||||
if self.is_ge_event:
|
||||
add_ge_event_header()
|
||||
else:
|
||||
add_event_header()
|
||||
|
||||
ComplexType.resolve(self, module)
|
||||
|
||||
out = __main__.output['event']
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue