diff options
Diffstat (limited to 'libxcb')
-rw-r--r-- | libxcb/xcb-proto/src/Makefile.am | 2 | ||||
-rw-r--r-- | libxcb/xcb-proto/src/dri3.xml | 97 | ||||
-rw-r--r-- | libxcb/xcb-proto/src/present.xml | 205 | ||||
-rw-r--r-- | libxcb/xcb-proto/src/shm.xml | 21 | ||||
-rw-r--r-- | libxcb/xcb-proto/src/sync.xml | 24 | ||||
-rw-r--r-- | libxcb/xcb-proto/src/xkb.xml | 34 | ||||
-rw-r--r-- | libxcb/xcb-proto/src/xproto.xml | 16 | ||||
-rw-r--r-- | libxcb/xcb-proto/xcbgen/expr.py | 3 | ||||
-rw-r--r-- | libxcb/xcb-proto/xcbgen/state.py | 2 | ||||
-rw-r--r-- | libxcb/xcb-proto/xcbgen/xtypes.py | 60 |
10 files changed, 427 insertions, 37 deletions
diff --git a/libxcb/xcb-proto/src/Makefile.am b/libxcb/xcb-proto/src/Makefile.am index eef2dbc45..d81d818a6 100644 --- a/libxcb/xcb-proto/src/Makefile.am +++ b/libxcb/xcb-proto/src/Makefile.am @@ -6,8 +6,10 @@ xcbinclude_HEADERS = \ damage.xml \ dpms.xml \ dri2.xml \ + dri3.xml \ ge.xml \ glx.xml \ + present.xml \ randr.xml \ record.xml \ render.xml \ diff --git a/libxcb/xcb-proto/src/dri3.xml b/libxcb/xcb-proto/src/dri3.xml new file mode 100644 index 000000000..608af3157 --- /dev/null +++ b/libxcb/xcb-proto/src/dri3.xml @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright © 2013 Keith Packard + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting documentation, and +that the name of the copyright holders not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. The copyright holders make no representations +about the suitability of this software for any purpose. It is provided "as +is" without express or implied warranty. + +THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. +--> + +<xcb header="dri3" extension-xname="DRI3" extension-name="DRI3" + major-version="1" minor-version="0"> + <import>xproto</import> + + <!-- Types --> + + <!-- Requests --> + <request name="QueryVersion" opcode="0"> + <field type="CARD32" name="major_version" /> + <field type="CARD32" name="minor_version" /> + <reply> + <pad bytes="1" /> + <field type="CARD32" name="major_version" /> + <field type="CARD32" name="minor_version" /> + </reply> + </request> + + <request name="Open" opcode="1"> + <field type="DRAWABLE" name="drawable" /> + <field type="CARD32" name="provider" /> + <reply> + <field type="CARD8" name="nfd"/> + <fd name="device_fd" /> + <pad bytes="24" /> + </reply> + </request> + + <request name="PixmapFromBuffer" opcode="2"> + <field type="PIXMAP" name="pixmap" /> + <field type="DRAWABLE" name="drawable" /> + <field type="CARD32" name="size" /> + <field type="CARD16" name="width" /> + <field type="CARD16" name="height" /> + <field type="CARD16" name="stride" /> + <field type="CARD8" name="depth" /> + <field type="CARD8" name="bpp" /> + <fd name="pixmap_fd" /> + </request> + + <request name="BufferFromPixmap" opcode="3"> + <field type="PIXMAP" name="pixmap" /> + <reply> + <field type="CARD8" name="nfd"/> + <field type="CARD32" name="size" /> + <field type="CARD16" name="width" /> + <field type="CARD16" name="height" /> + <field type="CARD16" name="stride" /> + <field type="CARD8" name="depth" /> + <field type="CARD8" name="bpp" /> + <fd name="pixmap_fd" /> + <pad bytes="12"/> + </reply> + </request> + + <request name="FenceFromFD" opcode="4"> + <field type="DRAWABLE" name="drawable" /> + <field type="CARD32" name="fence"/> + <field type="BOOL" name="initially_triggered"/> + <pad bytes="3"/> + <fd name="fence_fd"/> + </request> + + <request name="FDFromFence" opcode="5"> + <field type="DRAWABLE" name="drawable" /> + <field type="CARD32" name="fence"/> + <reply> + <field type="CARD8" name="nfd"/> + <fd name="fence_fd" /> + <pad bytes="24"/> + </reply> + </request> + +</xcb> diff --git a/libxcb/xcb-proto/src/present.xml b/libxcb/xcb-proto/src/present.xml new file mode 100644 index 000000000..d12ae4879 --- /dev/null +++ b/libxcb/xcb-proto/src/present.xml @@ -0,0 +1,205 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + +Copyright © 2013 Keith Packard + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting documentation, and +that the name of the copyright holders not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. The copyright holders make no representations +about the suitability of this software for any purpose. It is provided "as +is" without express or implied warranty. + +THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. +--> + +<xcb header="present" extension-xname="Present" extension-name="Present" + major-version="1" minor-version="0"> + <import>xproto</import> + <import>randr</import> + <import>xfixes</import> + <import>sync</import> + + <!-- Types --> + + <enum name="Event"> + <item name="ConfigureNotify"><value>0</value></item> + <item name="CompleteNotify"><value>1</value></item> + <item name="IdleNotify"><value>2</value></item> + <item name="RedirectNotify"><value>3</value></item> + </enum> + + <enum name="EventMask"> + <item name="NoEvent"><value>0</value></item> + <item name="ConfigureNotify"><bit>0</bit></item> + <item name="CompleteNotify"><bit>1</bit></item> + <item name="IdleNotify"><bit>2</bit></item> + <item name="RedirectNotify"><bit>3</bit></item> + </enum> + + <enum name="Option"> + <item name="None"><value>0</value></item> + <item name="Async"><bit>0</bit></item> + <item name="Copy"><bit>1</bit></item> + <item name="UST"><bit>2</bit></item> + </enum> + + <enum name="Capability"> + <item name="None"><value>0</value></item> + <item name="Async"><bit>0</bit></item> + <item name="Fence"><bit>1</bit></item> + <item name="UST"><bit>2</bit></item> + </enum> + + <enum name="CompleteKind"> + <item name="Pixmap"><value>0</value></item> + <item name="NotifyMSC"><value>1</value></item> + </enum> + + <enum name="CompleteMode"> + <item name="Copy"><value>0</value></item> + <item name="Flip"><value>1</value></item> + <item name="Skip"><value>2</value></item> + </enum> + + <struct name="Notify"> + <field type="WINDOW" name="window" /> + <field type="CARD32" name="serial" /> + </struct> + + <!-- Requests --> + <request name="QueryVersion" opcode="0"> + <field type="CARD32" name="major_version" /> + <field type="CARD32" name="minor_version" /> + <reply> + <pad bytes="1" /> + <field type="CARD32" name="major_version" /> + <field type="CARD32" name="minor_version" /> + </reply> + </request> + + <request name="Pixmap" opcode="1"> + <field type="WINDOW" name="window" /> + <field type="PIXMAP" name="pixmap" /> + <field type="CARD32" name="serial" /> + <field type="REGION" name="valid" /> + <field type="REGION" name="update" /> + <field type="INT16" name="x_off" /> + <field type="INT16" name="y_off" /> + <field type="CRTC" name="target_crtc" /> + <field type="FENCE" name="wait_fence" /> + <field type="FENCE" name="idle_fence" /> + <field type="CARD32" name="options" /> + <pad bytes="4"/> + <field type="CARD64" name="target_msc" /> + <field type="CARD64" name="divisor" /> + <field type="CARD64" name="remainder" /> + <list type="Notify" name="notifies"/> + </request> + + <request name="NotifyMSC" opcode="2"> + <field type="WINDOW" name="window" /> + <field type="CARD32" name="serial" /> + <pad bytes="4"/> + <field type="CARD64" name="target_msc" /> + <field type="CARD64" name="divisor" /> + <field type="CARD64" name="remainder" /> + </request> + + <xidtype name="EVENT"/> + + <request name="SelectInput" opcode="3"> + <field type="EVENT" name="eid"/> + <field type="WINDOW" name="window" /> + <field type="CARD32" name="event_mask" mask="EventMask" /> + </request> + + <request name="QueryCapabilities" opcode="4"> + <field type="CARD32" name="target" /> + <reply> + <pad bytes="1" /> + <field type="CARD32" name="capabilities" /> + </reply> + </request> + + <!-- Events --> + + <event name="Generic"> + <field type="CARD8" name="extension" /> + <field type="CARD32" name="length" /> + <field type="CARD16" name="evtype" enum="EventType" /> + <pad bytes="2" /> + <field type="EVENT" name="event" /> + </event> + + <event name="ConfigureNotify" number="0" xge="true"> + <pad bytes="2" /> + <field type="EVENT" name="event" /> + <field type="WINDOW" name="window" /> + <field type="INT16" name="x" /> + <field type="INT16" name="y" /> + <field type="CARD16" name="width" /> + <field type="CARD16" name="height" /> + <field type="INT16" name="off_x" /> + <field type="INT16" name="off_y" /> + <field type="CARD16" name="pixmap_width" /> + <field type="CARD16" name="pixmap_height" /> + <field type="CARD32" name="pixmap_flags" /> + </event> + + <event name="CompleteNotify" number="1" xge="true"> + <field type="CARD8" name="kind" enum="CompleteKind" /> + <field type="CARD8" name="mode" enum="CompleteMode" /> + <field type="EVENT" name="event" /> + <field type="WINDOW" name="window" /> + <field type="CARD32" name="serial" /> + <field type="CARD64" name="ust" /> + <field type="CARD64" name="msc" /> + </event> + + <event name="IdleNotify" number="2" xge="true"> + <pad bytes="2"/> + <field type="EVENT" name="event" /> + <field type="WINDOW" name="window" /> + <field type="CARD32" name="serial" /> + <field type="PIXMAP" name="pixmap" /> + <field type="FENCE" name="idle_fence" /> + </event> + + <event name="RedirectNotify" number="3" xge="true"> + <field type="BOOL" name="update_window"/> + <pad bytes="1"/> + <field type="EVENT" name="event" /> + <field type="WINDOW" name="event_window" /> + <field type="WINDOW" name="window" /> + <field type="PIXMAP" name="pixmap" /> + <field type="CARD32" name="serial" /> + + <field type="REGION" name="valid_region" /> + <field type="REGION" name="update_region" /> + <field type="RECTANGLE" name="valid_rect" /> + <field type="RECTANGLE" name="update_rect" /> + + <field type="INT16" name="x_off" /> + <field type="INT16" name="y_off" /> + <field type="CRTC" name="target_crtc" /> + <field type="FENCE" name="wait_fence" /> + <field type="FENCE" name="idle_fence" /> + <field type="CARD32" name="options" /> + <pad bytes="4"/> + <field type="CARD64" name="target_msc" /> + <field type="CARD64" name="divisor" /> + <field type="CARD64" name="remainder" /> + <list type="Notify" name="notifies"/> + </event> + +</xcb> diff --git a/libxcb/xcb-proto/src/shm.xml b/libxcb/xcb-proto/src/shm.xml index adda50957..71fce14fa 100644 --- a/libxcb/xcb-proto/src/shm.xml +++ b/libxcb/xcb-proto/src/shm.xml @@ -26,7 +26,7 @@ sale, use or other dealings in this Software without prior written authorization from the authors. --> <xcb header="shm" extension-xname="MIT-SHM" extension-name="Shm" - major-version="1" minor-version="1"> + major-version="1" minor-version="2"> <import>xproto</import> <xidtype name="SEG" /> @@ -113,4 +113,23 @@ authorization from the authors. <field type="SEG" name="shmseg" /> <field type="CARD32" name="offset" /> </request> + + <request name="AttachFd" opcode="6"> + <field type="SEG" name="shmseg" /> + <fd name="shm_fd" /> + <field type="BOOL" name="read_only" /> + <pad bytes="3" /> + </request> + + <request name="CreateSegment" opcode="7"> + <field type="SEG" name="shmseg" /> + <field type="CARD32" name="size" /> + <field type="BOOL" name="read_only" /> + <pad bytes="3" /> + <reply> + <field type="CARD8" name="nfd" /> + <fd name="shm_fd" /> + <pad bytes="24" /> + </reply> + </request> </xcb> diff --git a/libxcb/xcb-proto/src/sync.xml b/libxcb/xcb-proto/src/sync.xml index 7bcf0ae32..bc07c5b63 100644 --- a/libxcb/xcb-proto/src/sync.xml +++ b/libxcb/xcb-proto/src/sync.xml @@ -48,7 +48,7 @@ for licensing information. <struct name="SYSTEMCOUNTER"> <field type="COUNTER" name="counter" /> - <field type="INT64" name="resolution" /> + <field type="sync:INT64" name="resolution" /> <field type="CARD16" name="name_len" /> <list type="char" name="name"> <fieldref>name_len</fieldref> @@ -58,13 +58,13 @@ for licensing information. <struct name="TRIGGER"> <field type="COUNTER" name="counter" /> <field type="CARD32" name="wait_type" enum="VALUETYPE" /> - <field type="INT64" name="wait_value" /> + <field type="sync:INT64" name="wait_value" /> <field type="CARD32" name="test_type" enum="TESTTYPE" /> </struct> <struct name="WAITCONDITION"> <field type="TRIGGER" name="trigger" /> - <field type="INT64" name="event_threshold" /> + <field type="sync:INT64" name="event_threshold" /> </struct> <error name="Counter" number="0"> @@ -103,7 +103,7 @@ for licensing information. <request name="CreateCounter" opcode="2"> <field type="COUNTER" name="id" /> - <field type="INT64" name="initial_value" /> + <field type="sync:INT64" name="initial_value" /> </request> <request name="DestroyCounter" opcode="6"> @@ -114,7 +114,7 @@ for licensing information. <field type="COUNTER" name="counter" /> <reply> <pad bytes="1" /> - <field type="INT64" name="counter_value" /> + <field type="sync:INT64" name="counter_value" /> </reply> </request> @@ -124,12 +124,12 @@ for licensing information. <request name="ChangeCounter" opcode="4"> <field type="COUNTER" name="counter" /> - <field type="INT64" name="amount" /> + <field type="sync:INT64" name="amount" /> </request> <request name="SetCounter" opcode="3"> <field type="COUNTER" name="counter" /> - <field type="INT64" name="value" /> + <field type="sync:INT64" name="value" /> </request> <request name="CreateAlarm" opcode="8"> @@ -205,7 +205,7 @@ for licensing information. <reply> <pad bytes="1" /> <field type="TRIGGER" name="trigger" /> - <field type="INT64" name="delta" /> + <field type="sync:INT64" name="delta" /> <field type="BOOL" name="events" /> <field type="CARD8" name="state" enum="ALARMSTATE" /> <pad bytes="2" /> @@ -259,8 +259,8 @@ for licensing information. <event name="CounterNotify" number="0"> <field type="CARD8" name="kind" /> <field type="COUNTER" name="counter" /> - <field type="INT64" name="wait_value" /> - <field type="INT64" name="counter_value" /> + <field type="sync:INT64" name="wait_value" /> + <field type="sync:INT64" name="counter_value" /> <field type="TIMESTAMP" name="timestamp" /> <field type="CARD16" name="count" /> <field type="BOOL" name="destroyed" /> @@ -270,8 +270,8 @@ for licensing information. <event name="AlarmNotify" number="1"> <field type="CARD8" name="kind" /> <field type="ALARM" name="alarm" /> - <field type="INT64" name="counter_value" /> - <field type="INT64" name="alarm_value" /> + <field type="sync:INT64" name="counter_value" /> + <field type="sync:INT64" name="alarm_value" /> <field type="TIMESTAMP" name="timestamp" /> <field type="CARD8" name="state" enum="ALARMSTATE" /> <pad bytes="3" /> diff --git a/libxcb/xcb-proto/src/xkb.xml b/libxcb/xcb-proto/src/xkb.xml index 45f64127e..2ea659c29 100644 --- a/libxcb/xcb-proto/src/xkb.xml +++ b/libxcb/xcb-proto/src/xkb.xml @@ -130,29 +130,21 @@ authorization from the authors. <item name="ControlsEnabled"> <bit>31</bit> </item> </enum> - <enum name="AXFBOpt"> + <enum name="AXOption"> <item name="SKPressFB"> <bit>0</bit> </item> <item name="SKAcceptFB"> <bit>1</bit> </item> <item name="FeatureFB"> <bit>2</bit> </item> <item name="SlowWarnFB"> <bit>3</bit> </item> <item name="IndicatorFB"> <bit>4</bit> </item> <item name="StickyKeysFB"> <bit>5</bit> </item> - <item name="SKReleaseFB"> <bit>6</bit> </item> - <item name="SKRejectFB"> <bit>7</bit> </item> - <item name="BKRejectFB"> <bit>8</bit> </item> - <item name="DumbBell"> <bit>9</bit> </item> + <item name="TwoKeys"> <bit>6</bit> </item> + <item name="LatchToLock"> <bit>7</bit> </item> + <item name="SKReleaseFB"> <bit>8</bit> </item> + <item name="SKRejectFB"> <bit>9</bit> </item> + <item name="BKRejectFB"> <bit>10</bit> </item> + <item name="DumbBell"> <bit>11</bit> </item> </enum> - <enum name="AXSKOpt"> - <item name="TwoKeys"> <bit>6</bit> </item> - <item name="LatchToLock"> <bit>7</bit> </item> - </enum> - - <union name="AXOption"> - <field name="fbopt" type="CARD16" enum="AXFBOpt" /> - <field name="skopt" type="CARD16" enum="AXSKOpt" /> - </union> - <typedef oldname="CARD16" newname="DeviceSpec" /> <enum name="LedClassResult"> @@ -1229,10 +1221,10 @@ authorization from the authors. <field name="mouseKeysTimeToMax" type="CARD16" /> <field name="mouseKeysMaxSpeed" type="CARD16" /> <field name="mouseKeysCurve" type="INT16" /> - <field name="accessXOption" type="AXOption" /> + <field name="accessXOption" type="CARD16" mask="AXOption" /> <field name="accessXTimeout" type="CARD16" /> - <field name="accessXTimeoutOptionsMask" type="AXOption" /> - <field name="accessXTimeoutOptionsValues" type="AXOption" /> + <field name="accessXTimeoutOptionsMask" type="CARD16" mask="AXOption" /> + <field name="accessXTimeoutOptionsValues" type="CARD16" mask="AXOption" /> <pad bytes="2" /> <field name="accessXTimeoutMask" type="CARD32" mask="BoolCtrl" /> <field name="accessXTimeoutValues" type="CARD32" mask="BoolCtrl" /> @@ -1255,7 +1247,7 @@ authorization from the authors. <field name="ignoreLockVirtualMods" type="CARD16" mask="VMod" /> <field name="mouseKeysDfltBtn" type="CARD8" /> <field name="groupsWrap" type="CARD8" /> - <field name="accessXOptions" type="AXOption" /> + <field name="accessXOptions" type="CARD16" mask="AXOption" /> <pad bytes="2" /> <field name="affectEnabledControls" type="CARD32" mask="BoolCtrl" /> <field name="enabledControls" type="CARD32" mask="BoolCtrl" /> @@ -1272,8 +1264,8 @@ authorization from the authors. <field name="accessXTimeout" type="CARD16" /> <field name="accessXTimeoutMask" type="CARD32" mask="BoolCtrl" /> <field name="accessXTimeoutValues" type="CARD32" mask="BoolCtrl" /> - <field name="accessXTimeoutOptionsMask" type="AXOption" /> - <field name="accessXTimeoutOptionsValues" type="AXOption" /> + <field name="accessXTimeoutOptionsMask" type="CARD16" mask="AXOption" /> + <field name="accessXTimeoutOptionsValues" type="CARD16" mask="AXOption" /> <list name="perKeyRepeat" type="CARD8"> <value>32</value> </list> diff --git a/libxcb/xcb-proto/src/xproto.xml b/libxcb/xcb-proto/src/xproto.xml index 16e04b442..defa11e6e 100644 --- a/libxcb/xcb-proto/src/xproto.xml +++ b/libxcb/xcb-proto/src/xproto.xml @@ -1080,7 +1080,21 @@ The number of keycodes altered. </doc> </event> - + <event name="ge" number="35" xge="true"> + <pad bytes="22" /> + <doc> + <brief>generic event (with length)</brief> + <field name="extension"><![CDATA[ +The major opcode of the extension creating this event + ]]></field> + <field name="length"><![CDATA[ +The amount (in 4-byte units) of data beyond 32 bytes + ]]></field> + <field name="evtype"><![CDATA[ +The extension-specific event type + ]]></field> + </doc> + </event> <!-- Core error types --> diff --git a/libxcb/xcb-proto/xcbgen/expr.py b/libxcb/xcb-proto/xcbgen/expr.py index 4f8af6f83..f9d5179f0 100644 --- a/libxcb/xcb-proto/xcbgen/expr.py +++ b/libxcb/xcb-proto/xcbgen/expr.py @@ -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): diff --git a/libxcb/xcb-proto/xcbgen/state.py b/libxcb/xcb-proto/xcbgen/state.py index ae3d2d45f..10a8722ea 100644 --- a/libxcb/xcb-proto/xcbgen/state.py +++ b/libxcb/xcb-proto/xcbgen/state.py @@ -74,9 +74,11 @@ class Module(object): self.add_type('CARD8', '', ('uint8_t',), tcard8) self.add_type('CARD16', '', ('uint16_t',), tcard16) self.add_type('CARD32', '', ('uint32_t',), tcard32) + self.add_type('CARD64', '', ('uint64_t',), tcard64) self.add_type('INT8', '', ('int8_t',), tint8) self.add_type('INT16', '', ('int16_t',), tint16) self.add_type('INT32', '', ('int32_t',), tint32) + self.add_type('INT64', '', ('int64_t',), tint64) self.add_type('BYTE', '', ('uint8_t',), tcard8) self.add_type('BOOL', '', ('uint8_t',), tcard8) self.add_type('char', '', ('char',), tchar) diff --git a/libxcb/xcb-proto/xcbgen/xtypes.py b/libxcb/xcb-proto/xcbgen/xtypes.py index a4614d9d2..6150d1818 100644 --- a/libxcb/xcb-proto/xcbgen/xtypes.py +++ b/libxcb/xcb-proto/xcbgen/xtypes.py @@ -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): ''' @@ -103,9 +115,11 @@ class SimpleType(Type): tcard8 = SimpleType(('uint8_t',), 1) tcard16 = SimpleType(('uint16_t',), 2) tcard32 = SimpleType(('uint32_t',), 4) +tcard64 = SimpleType(('uint64_t',), 8) tint8 = SimpleType(('int8_t',), 1) tint16 = SimpleType(('int16_t',), 2) tint32 = SimpleType(('int32_t',), 4) +tint64 = SimpleType(('int64_t',), 8) tchar = SimpleType(('char',), 1) tfloat = SimpleType(('float',), 4) tdouble = SimpleType(('double',), 8) @@ -150,6 +164,44 @@ class Enum(SimpleType): out = __main__.output['enum'] +class FileDescriptor(SimpleType): + ''' + Derived class which represents a file descriptor. Passed via magic kernel stuff + + Public fields added: + values contains a list of (name, value) tuples. value is empty, or a number. + bits contains a list of (name, bitnum) tuples. items only appear if specified as a bit. bitnum is a number. + ''' + def __init__(self, name, elt): + SimpleType.__init__(self, name, 4) + self.values = [] + self.bits = [] + self.doc = None + for item in list(elt): + if item.tag == 'doc': + self.doc = Doc(name, item) + + # First check if we're using a default value + if len(list(item)) == 0: + self.values.append((item.get('name'), '')) + continue + + # An explicit value or bit was specified. + value = list(item)[0] + if value.tag == 'value': + self.values.append((item.get('name'), value.text)) + elif value.tag == 'bit': + self.values.append((item.get('name'), '%u' % (1 << int(value.text, 0)))) + self.bits.append((item.get('name'), value.text)) + + def resolve(self, module): + self.resolved = True + + def fixed_size(self): + return True + + out = __main__.output['enum'] + class ListType(Type): ''' Derived class which represents a list of some other datatype. Fixed- or variable-sized. @@ -277,6 +329,7 @@ class ComplexType(Type): self.nmemb = 1 self.size = 0 self.lenfield_parent = [self] + self.fds = [] def resolve(self, module): if self.resolved: @@ -322,9 +375,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) |