mirror of
https://gitlab.freedesktop.org/xorg/proto/xcbproto.git
synced 2026-05-08 20:38:07 +02:00
Add support for file descriptor request fields
These are present in the API, but not present on the wire. Signed-off-by: Keith Packard <keithp@keithp.com> Reviewed-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
parent
82263254e1
commit
c57d265a90
2 changed files with 21 additions and 2 deletions
|
|
@ -13,7 +13,7 @@ class Field(object):
|
|||
auto is true iff the field is on the wire but not in the request API (e.g. opcode)
|
||||
enum is the enum name this field refers to, if any.
|
||||
'''
|
||||
def __init__(self, type, field_type, field_name, visible, wire, auto, enum=None):
|
||||
def __init__(self, type, field_type, field_name, visible, wire, auto, enum=None, isfd=False):
|
||||
self.type = type
|
||||
self.field_type = field_type
|
||||
self.field_name = field_name
|
||||
|
|
@ -21,6 +21,7 @@ class Field(object):
|
|||
self.visible = visible
|
||||
self.wire = wire
|
||||
self.auto = auto
|
||||
self.isfd = isfd
|
||||
|
||||
|
||||
class Expression(object):
|
||||
|
|
|
|||
|
|
@ -75,6 +75,18 @@ class Type(object):
|
|||
|
||||
complex_type.fields.append(new_field)
|
||||
|
||||
def make_fd_of(self, module, complex_type, fd_name):
|
||||
'''
|
||||
Method for making a fd member of a structure.
|
||||
'''
|
||||
new_fd = Field(self, module.get_type_name('INT32'), fd_name, True, False, False, None, True)
|
||||
# We dump the _placeholder_byte if any fields are added.
|
||||
for (idx, field) in enumerate(complex_type.fields):
|
||||
if field == _placeholder_byte:
|
||||
complex_type.fields[idx] = new_fd
|
||||
return
|
||||
|
||||
complex_type.fields.append(new_fd)
|
||||
|
||||
class SimpleType(Type):
|
||||
'''
|
||||
|
|
@ -279,6 +291,7 @@ class ComplexType(Type):
|
|||
self.nmemb = 1
|
||||
self.size = 0
|
||||
self.lenfield_parent = [self]
|
||||
self.fds = []
|
||||
|
||||
def resolve(self, module):
|
||||
if self.resolved:
|
||||
|
|
@ -324,9 +337,14 @@ class ComplexType(Type):
|
|||
type.make_member_of(module, self, field_type, field_name, visible, True, False)
|
||||
type.resolve(module)
|
||||
continue
|
||||
elif child.tag == 'fd':
|
||||
fd_name = child.get('name')
|
||||
type = module.get_type('INT32')
|
||||
type.make_fd_of(module, self, fd_name)
|
||||
continue
|
||||
else:
|
||||
# Hit this on Reply
|
||||
continue
|
||||
continue
|
||||
|
||||
# Get the full type name for the field
|
||||
field_type = module.get_type_name(fkey)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue