tests: Add the scope for callbacks in expected girs
[gnome.gobject-introspection] / tests / scanner / foo-1.0-expected.gir
index 11a3b4e..bf17146 100644 (file)
@@ -8,82 +8,293 @@ and/or use gtk-doc annotations.  -->
             xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
   <include name="GLib" version="2.0"/>
   <include name="GObject" version="2.0"/>
+  <include name="Gio" version="2.0"/>
   <include name="utility" version="1.0"/>
-  <namespace name="foo" version="1.0" shared-library="foo">
+  <package name="gobject-2.0"/>
+  <c:include name="foo.h"/>
+  <namespace name="foo"
+             version="1.0"
+             shared-library="libfoo.so"
+             c:prefix="foo">
     <alias name="List" target="GLib.SList" c:type="FooList"/>
-    <alias name="XEvent" target="none" c:type="FooXEvent"/>
     <alias name="ObjectCookie" target="any" c:type="FooObjectCookie"/>
-    <interface name="Interface"
-               c:type="FooInterface"
-               glib:type-name="FooInterface"
-               glib:get-type="foo_interface_get_type">
-      <callback name="do_foo" c:type="do_foo">
-        <return-value transfer-ownership="none">
-          <type name="none" c:type="void"/>
+    <alias name="XEvent" target="none" c:type="FooXEvent"/>
+    <enumeration name="ASingle" c:type="FooASingle">
+      <member name="some_single_enum"
+              value="0"
+              c:identifier="FOO_SOME_SINGLE_ENUM"/>
+    </enumeration>
+    <enumeration name="AddressType" c:type="FooAddressType">
+      <member name="invalid" value="0" c:identifier="FOO_ADDRESS_INVALID"/>
+      <member name="ipv4" value="1" c:identifier="FOO_ADDRESS_IPV4"/>
+      <member name="ipv6" value="2" c:identifier="FOO_ADDRESS_IPV6"/>
+    </enumeration>
+    <record name="BRect"
+            c:type="FooBRect"
+            glib:type-name="FooBRect"
+            glib:get-type="foo_brect_get_type">
+      <field name="x" writable="1">
+        <type name="double" c:type="double"/>
+      </field>
+      <field name="y" writable="1">
+        <type name="double" c:type="double"/>
+      </field>
+      <constructor name="new" c:identifier="foo_brect_new">
+        <return-value transfer-ownership="full">
+          <type name="BRect" c:type="FooBRect*"/>
         </return-value>
         <parameters>
-          <parameter name="self" transfer-ownership="none">
-            <type name="Interface" c:type="FooInterface*"/>
+          <parameter name="x" transfer-ownership="none">
+            <type name="double" c:type="double"/>
+          </parameter>
+          <parameter name="y" transfer-ownership="none">
+            <type name="double" c:type="double"/>
           </parameter>
         </parameters>
-      </callback>
-    </interface>
-    <record name="InterfaceIface" c:type="FooInterfaceIface">
-      <field name="parent_iface">
-        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
-      </field>
-      <callback name="do_foo" c:type="do_foo">
+      </constructor>
+      <method name="add" c:identifier="foo_brect_add">
         <return-value transfer-ownership="none">
           <type name="none" c:type="void"/>
         </return-value>
         <parameters>
-          <parameter name="self" transfer-ownership="none">
-            <type name="Interface" c:type="FooInterface*"/>
+          <parameter name="b2" transfer-ownership="none">
+            <type name="BRect" c:type="FooBRect*"/>
           </parameter>
         </parameters>
-      </callback>
+      </method>
     </record>
-    <interface name="SubInterface"
-               c:type="FooSubInterface"
-               glib:type-name="FooSubInterface"
-               glib:get-type="foo_sub_interface_get_type">
-      <prerequisite name="Interface"/>
-      <method name="do_bar" c:identifier="foo_sub_interface_do_bar">
+    <union name="BUnion"
+           c:type="FooBUnion"
+           glib:type-name="FooBUnion"
+           glib:get-type="foo_bunion_get_type">
+      <field name="type" writable="1">
+        <type name="int" c:type="int"/>
+      </field>
+      <field name="v" writable="1">
+        <type name="double" c:type="double"/>
+      </field>
+      <field name="rect" writable="1">
+        <type name="BRect" c:type="FooBRect*"/>
+      </field>
+      <constructor name="new" c:identifier="foo_bunion_new">
+        <return-value transfer-ownership="full">
+          <type name="BUnion" c:type="FooBUnion*"/>
+        </return-value>
+      </constructor>
+      <method name="get_contained_type"
+              c:identifier="foo_bunion_get_contained_type">
+        <return-value transfer-ownership="none">
+          <type name="int" c:type="int"/>
+        </return-value>
+      </method>
+    </union>
+    <record name="Boxed"
+            c:type="FooBoxed"
+            glib:type-name="FooBoxed"
+            glib:get-type="foo_boxed_get_type">
+      <constructor name="new" c:identifier="foo_boxed_new">
+        <return-value transfer-ownership="full">
+          <type name="Boxed" c:type="FooBoxed*"/>
+        </return-value>
+      </constructor>
+      <method name="method" c:identifier="foo_boxed_method">
+        <return-value transfer-ownership="none">
+          <type name="none" c:type="void"/>
+        </return-value>
+      </method>
+    </record>
+    <class name="Buffer"
+           c:type="FooBuffer"
+           parent="Object"
+           glib:type-name="FooBuffer"
+           glib:get-type="foo_buffer_get_type"
+           glib:type-struct="BufferClass">
+      <implements name="Interface"/>
+      <method name="some_method" c:identifier="foo_buffer_some_method">
+        <return-value transfer-ownership="none">
+          <type name="none" c:type="void"/>
+        </return-value>
+      </method>
+    </class>
+    <record name="BufferClass"
+            c:type="FooBufferClass"
+            glib:is-gtype-struct-for="Buffer">
+    </record>
+    <callback name="Callback" c:type="FooCallback">
+      <return-value transfer-ownership="none">
+        <type name="boolean" c:type="gboolean"/>
+      </return-value>
+      <parameters>
+        <parameter name="foo" transfer-ownership="none">
+          <type name="Object" c:type="FooObject*"/>
+        </parameter>
+        <parameter name="b" transfer-ownership="none">
+          <type name="boolean" c:type="gboolean"/>
+        </parameter>
+        <parameter name="data" transfer-ownership="none">
+          <type name="any" c:type="gpointer"/>
+        </parameter>
+      </parameters>
+    </callback>
+    <record name="DBusData"
+            c:type="FooDBusData"
+            glib:type-name="FooDBusData"
+            glib:get-type="foo_dbus_data_get_type">
+      <method name="method" c:identifier="foo_dbus_data_method">
         <return-value transfer-ownership="none">
           <type name="none" c:type="void"/>
         </return-value>
       </method>
-      <callback name="do_bar" c:type="do_bar">
+    </record>
+    <constant name="DEFINE_SHOULD_BE_EXPOSED" value="should be exposed">
+      <type name="utf8"/>
+    </constant>
+    <enumeration name="EnumFullname" c:type="FooEnumFullname">
+      <member name="one" value="1" c:identifier="FOO_ENUM_FULLNAME_ONE"/>
+      <member name="two" value="2" c:identifier="FOO_ENUM_FULLNAME_TWO"/>
+      <member name="three" value="3" c:identifier="FOO_ENUM_FULLNAME_THREE"/>
+    </enumeration>
+    <enumeration name="EnumNoType" c:type="FooEnumNoType">
+      <member name="un" value="1" c:identifier="FOO_ENUM_UN"/>
+      <member name="deux" value="2" c:identifier="FOO_ENUM_DEUX"/>
+      <member name="trois" value="3" c:identifier="FOO_ENUM_TROIS"/>
+      <member name="neuf" value="9" c:identifier="FOO_ENUM_NEUF"/>
+    </enumeration>
+    <enumeration name="EnumType"
+                 glib:type-name="FooEnumType"
+                 glib:get-type="foo_enum_type_get_type"
+                 c:type="FooEnumType">
+      <member name="alpha"
+              value="0"
+              c:identifier="FOO_ENUM_ALPHA"
+              glib:nick="alpha"/>
+      <member name="beta"
+              value="1"
+              c:identifier="FOO_ENUM_BETA"
+              glib:nick="beta"/>
+      <member name="delta"
+              value="2"
+              c:identifier="FOO_ENUM_DELTA"
+              glib:nick="delta"/>
+    </enumeration>
+    <enumeration name="Error"
+                 glib:type-name="FooError"
+                 glib:get-type="foo_error_get_type"
+                 c:type="FooError"
+                 glib:error-quark="foo_error_quark">
+      <member name="good"
+              value="0"
+              c:identifier="FOO_ERROR_GOOD"
+              glib:nick="good"/>
+      <member name="bad"
+              value="1"
+              c:identifier="FOO_ERROR_BAD"
+              glib:nick="bad"/>
+      <member name="ugly"
+              value="2"
+              c:identifier="FOO_ERROR_UGLY"
+              glib:nick="ugly"/>
+    </enumeration>
+    <union name="Event" c:type="FooEvent">
+      <field name="type" writable="1">
+        <type name="int" c:type="int"/>
+      </field>
+      <field name="any" writable="1">
+        <type name="EventAny" c:type="FooEventAny"/>
+      </field>
+      <field name="expose" writable="1">
+        <type name="EventExpose" c:type="FooEventExpose"/>
+      </field>
+    </union>
+    <record name="EventAny" c:type="FooEventAny">
+      <field name="send_event" writable="1">
+        <type name="int8" c:type="gint8"/>
+      </field>
+    </record>
+    <record name="EventExpose" c:type="FooEventExpose">
+      <field name="send_event" writable="1">
+        <type name="int8" c:type="gint8"/>
+      </field>
+      <field name="count" writable="1">
+        <type name="int" c:type="gint"/>
+      </field>
+    </record>
+    <bitfield name="FlagsNoType" c:type="FooFlagsNoType">
+      <member name="ett" value="1" c:identifier="FOO_FLAGS_ETT"/>
+      <member name="tva" value="2" c:identifier="FOO_FLAGS_TVA"/>
+      <member name="fyra" value="4" c:identifier="FOO_FLAGS_FYRA"/>
+    </bitfield>
+    <bitfield name="FlagsType"
+              glib:type-name="FooFlagsType"
+              glib:get-type="foo_flags_type_get_type"
+              c:type="FooFlagsType">
+      <member name="first"
+              value="1"
+              c:identifier="FOO_FLAGS_FIRST"
+              glib:nick="first"/>
+      <member name="second"
+              value="2"
+              c:identifier="FOO_FLAGS_SECOND"
+              glib:nick="second"/>
+      <member name="third"
+              value="4"
+              c:identifier="FOO_FLAGS_THIRD"
+              glib:nick="third"/>
+    </bitfield>
+    <interface name="Interface"
+               c:type="FooInterface"
+               glib:type-name="FooInterface"
+               glib:get-type="foo_interface_get_type"
+               glib:type-struct="InterfaceIface">
+      <virtual-method name="do_foo" invoker="do_foo">
         <return-value transfer-ownership="none">
           <type name="none" c:type="void"/>
         </return-value>
         <parameters>
-          <parameter name="self" transfer-ownership="none">
-            <type name="SubInterface" c:type="FooSubInterface*"/>
+          <parameter name="x" transfer-ownership="none">
+            <type name="int" c:type="int"/>
           </parameter>
         </parameters>
-      </callback>
-    </interface>
-    <record name="SubInterfaceIface" c:type="FooSubInterfaceIface">
-      <field name="parent_iface">
-        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
-      </field>
-      <callback name="do_bar" c:type="do_bar">
+      </virtual-method>
+      <method name="do_foo" c:identifier="foo_interface_do_foo">
         <return-value transfer-ownership="none">
           <type name="none" c:type="void"/>
         </return-value>
         <parameters>
-          <parameter name="self" transfer-ownership="none">
-            <type name="SubInterface" c:type="FooSubInterface*"/>
+          <parameter name="x" transfer-ownership="none">
+            <type name="int" c:type="int"/>
           </parameter>
         </parameters>
-      </callback>
+      </method>
+    </interface>
+    <record name="InterfaceIface"
+            c:type="FooInterfaceIface"
+            glib:is-gtype-struct-for="Interface">
+      <field name="parent_iface">
+        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
+      </field>
+      <field name="do_foo">
+        <callback name="do_foo" c:type="do_foo">
+          <return-value transfer-ownership="none">
+            <type name="none" c:type="void"/>
+          </return-value>
+          <parameters>
+            <parameter name="self" transfer-ownership="none">
+              <type name="Interface" c:type="FooInterface*"/>
+            </parameter>
+            <parameter name="x" transfer-ownership="none">
+              <type name="int" c:type="int"/>
+            </parameter>
+          </parameters>
+        </callback>
+      </field>
     </record>
     <class name="Object"
            c:type="FooObject"
            parent="GObject.Object"
            glib:type-name="FooObject"
-           glib:get-type="foo_object_get_type">
+           glib:get-type="foo_object_get_type"
+           glib:type-struct="ObjectClass">
       <implements name="Interface"/>
       <constructor name="new" c:identifier="foo_object_new">
         <return-value transfer-ownership="full">
@@ -95,6 +306,37 @@ and/or use gtk-doc annotations.  -->
           <type name="int" c:type="int"/>
         </return-value>
       </function>
+      <function name="get_default"
+                c:identifier="foo_object_get_default"
+                doc="This function is intended to match clutter_stage_get_default which
+uses a C sugar return type.">
+        <return-value transfer-ownership="full" doc="The global #FooSubobject">
+          <type name="Subobject" c:type="FooObject*"/>
+        </return-value>
+      </function>
+      <virtual-method name="virtual_method" invoker="virtual_method">
+        <return-value transfer-ownership="none">
+          <type name="boolean" c:type="gboolean"/>
+        </return-value>
+        <parameters>
+          <parameter name="first_param" transfer-ownership="none">
+            <type name="int" c:type="int"/>
+          </parameter>
+        </parameters>
+      </virtual-method>
+      <virtual-method name="read_fn" invoker="read">
+        <return-value transfer-ownership="none">
+          <type name="none" c:type="void"/>
+        </return-value>
+        <parameters>
+          <parameter name="offset" transfer-ownership="none">
+            <type name="int" c:type="int"/>
+          </parameter>
+          <parameter name="length" transfer-ownership="none">
+            <type name="int" c:type="int"/>
+          </parameter>
+        </parameters>
+      </virtual-method>
       <method name="external_type" c:identifier="foo_object_external_type">
         <return-value transfer-ownership="full">
           <type name="utility.Object" c:type="UtilityObject*"/>
@@ -177,6 +419,31 @@ and/or use gtk-doc annotations.  -->
           </parameter>
         </parameters>
       </method>
+      <method name="virtual_method" c:identifier="foo_object_virtual_method">
+        <return-value transfer-ownership="none">
+          <type name="boolean" c:type="gboolean"/>
+        </return-value>
+        <parameters>
+          <parameter name="first_param" transfer-ownership="none">
+            <type name="int" c:type="int"/>
+          </parameter>
+        </parameters>
+      </method>
+      <method name="read"
+              c:identifier="foo_object_read"
+              doc="Read some stuff.">
+        <return-value transfer-ownership="none">
+          <type name="none" c:type="void"/>
+        </return-value>
+        <parameters>
+          <parameter name="offset" transfer-ownership="none">
+            <type name="int" c:type="int"/>
+          </parameter>
+          <parameter name="length" transfer-ownership="none">
+            <type name="int" c:type="int"/>
+          </parameter>
+        </parameters>
+      </method>
       <property name="string" writable="1" construct="1">
         <type name="utf8" c:type="gchararray"/>
       </property>
@@ -200,171 +467,54 @@ and/or use gtk-doc annotations.  -->
         </parameters>
       </glib:signal>
     </class>
-    <record name="ObjectClass" c:type="FooObjectClass">
+    <record name="ObjectClass"
+            c:type="FooObjectClass"
+            glib:is-gtype-struct-for="Object">
       <field name="parent_class">
         <type name="GObject.ObjectClass" c:type="GObjectClass"/>
       </field>
-      <callback name="virtual_method" c:type="virtual_method">
-        <return-value transfer-ownership="none">
-          <type name="boolean" c:type="gboolean"/>
-        </return-value>
-        <parameters>
-          <parameter name="object" transfer-ownership="none">
-            <type name="Object" c:type="FooObject*"/>
-          </parameter>
-          <parameter name="first_param" transfer-ownership="none">
-            <type name="int" c:type="int"/>
-          </parameter>
-        </parameters>
-      </callback>
-    </record>
-    <class name="Subobject"
-           c:type="FooSubobject"
-           parent="Object"
-           abstract="1"
-           glib:type-name="FooSubobject"
-           glib:get-type="foo_subobject_get_type">
-      <implements name="Interface"/>
-      <constructor name="new" c:identifier="foo_subobject_new">
-        <return-value transfer-ownership="full">
-          <type name="Subobject" c:type="FooSubobject*"/>
-        </return-value>
-      </constructor>
-      <field name="parent_instance">
-        <type name="Object" c:type="FooObject"/>
+      <field name="virtual_method">
+        <callback name="virtual_method" c:type="virtual_method">
+          <return-value transfer-ownership="none">
+            <type name="boolean" c:type="gboolean"/>
+          </return-value>
+          <parameters>
+            <parameter name="object" transfer-ownership="none">
+              <type name="Object" c:type="FooObject*"/>
+            </parameter>
+            <parameter name="first_param" transfer-ownership="none">
+              <type name="int" c:type="int"/>
+            </parameter>
+          </parameters>
+        </callback>
       </field>
-    </class>
-    <record name="SubobjectClass" c:type="FooSubobjectClass">
-      <field name="parent_class">
-        <type name="ObjectClass" c:type="FooObjectClass"/>
+      <field name="read_fn">
+        <callback name="read_fn" c:type="read_fn">
+          <return-value transfer-ownership="none">
+            <type name="none" c:type="void"/>
+          </return-value>
+          <parameters>
+            <parameter name="object" transfer-ownership="none">
+              <type name="Object" c:type="FooObject*"/>
+            </parameter>
+            <parameter name="offset" transfer-ownership="none">
+              <type name="int" c:type="int"/>
+            </parameter>
+            <parameter name="length" transfer-ownership="none">
+              <type name="int" c:type="int"/>
+            </parameter>
+          </parameters>
+        </callback>
       </field>
-    </record>
-    <function name="init" c:identifier="foo_init">
-      <return-value transfer-ownership="none">
-        <type name="int" c:type="gint"/>
-      </return-value>
-    </function>
-    <enumeration name="EnumType"
-                 glib:type-name="FooEnumType"
-                 glib:get-type="foo_enum_type_get_type"
-                 c:type="FooEnumType">
-      <member name="alpha"
-              value="0"
-              c:identifier="FOO_ENUM_ALPHA"
-              glib:nick="alpha"/>
-      <member name="beta"
-              value="1"
-              c:identifier="FOO_ENUM_BETA"
-              glib:nick="beta"/>
-      <member name="delta"
-              value="2"
-              c:identifier="FOO_ENUM_DELTA"
-              glib:nick="delta"/>
-    </enumeration>
-    <function name="enum_type_method" c:identifier="foo_enum_type_method">
-      <return-value transfer-ownership="none">
-        <type name="int" c:type="int"/>
-      </return-value>
-      <parameters>
-        <parameter name="foo_enum" transfer-ownership="none">
-          <type name="EnumType" c:type="FooEnumType"/>
-        </parameter>
-      </parameters>
-    </function>
-    <function name="enum_type_returnv" c:identifier="foo_enum_type_returnv">
-      <return-value transfer-ownership="full">
-        <type name="EnumType" c:type="FooEnumType"/>
-      </return-value>
-      <parameters>
-        <parameter name="x" transfer-ownership="none">
-          <type name="int" c:type="int"/>
-        </parameter>
-      </parameters>
-    </function>
-    <bitfield name="FlagsType"
-              glib:type-name="FooFlagsType"
-              glib:get-type="foo_flags_type_get_type"
-              c:type="FooFlagsType">
-      <member name="first"
-              value="1"
-              c:identifier="FOO_FLAGS_FIRST"
-              glib:nick="first"/>
-      <member name="second"
-              value="2"
-              c:identifier="FOO_FLAGS_SECOND"
-              glib:nick="second"/>
-      <member name="third"
-              value="4"
-              c:identifier="FOO_FLAGS_THIRD"
-              glib:nick="third"/>
-    </bitfield>
-    <enumeration name="EnumNoType" c:type="FooEnumNoType">
-      <member name="un" value="1" c:identifier="FOO_ENUM_UN"/>
-      <member name="deux" value="2" c:identifier="FOO_ENUM_DEUX"/>
-      <member name="trois" value="3" c:identifier="FOO_ENUM_TROIS"/>
-      <member name="neuf" value="9" c:identifier="FOO_ENUM_NEUF"/>
-    </enumeration>
-    <bitfield name="FlagsNoType" c:type="FooFlagsNoType">
-      <member name="ett" value="1" c:identifier="FOO_FLAGS_ETT"/>
-      <member name="tva" value="2" c:identifier="FOO_FLAGS_TVA"/>
-      <member name="fyra" value="4" c:identifier="FOO_FLAGS_FYRA"/>
-    </bitfield>
-    <enumeration name="EnumFullname" c:type="FooEnumFullname">
-      <member name="one" value="1" c:identifier="FOO_ENUM_FULLNAME_ONE"/>
-      <member name="two" value="2" c:identifier="FOO_ENUM_FULLNAME_TWO"/>
-      <member name="three" value="3" c:identifier="FOO_ENUM_FULLNAME_THREE"/>
-    </enumeration>
-    <record name="Boxed"
-            c:type="FooBoxed"
-            glib:type-name="FooBoxed"
-            glib:get-type="foo_boxed_get_type">
-      <constructor name="new" c:identifier="foo_boxed_new">
-        <return-value transfer-ownership="full">
-          <type name="Boxed" c:type="FooBoxed*"/>
-        </return-value>
-      </constructor>
-      <method name="method" c:identifier="foo_boxed_method">
-        <return-value transfer-ownership="none">
-          <type name="none" c:type="void"/>
-        </return-value>
-      </method>
-    </record>
-    <record name="DBusData"
-            c:type="FooDBusData"
-            glib:type-name="FooDBusData"
-            glib:get-type="foo_dbus_data_get_type">
-      <method name="method" c:identifier="foo_dbus_data_method">
-        <return-value transfer-ownership="none">
-          <type name="none" c:type="void"/>
-        </return-value>
-      </method>
-    </record>
-    <callback name="Callback" c:type="FooCallback">
-      <return-value transfer-ownership="none">
-        <type name="boolean" c:type="gboolean"/>
-      </return-value>
-      <parameters>
-        <parameter name="foo" transfer-ownership="none">
-          <type name="Object" c:type="FooObject*"/>
-        </parameter>
-        <parameter name="b" transfer-ownership="none">
-          <type name="boolean" c:type="gboolean"/>
-        </parameter>
-        <parameter name="data" transfer-ownership="none">
-          <type name="any" c:type="gpointer"/>
-        </parameter>
-      </parameters>
-    </callback>
-    <record name="Struct" c:type="FooStruct">
-      <field name="priv" writable="1">
-        <type name="StructPrivate" c:type="FooStructPrivate*"/>
-      </field>
-      <field name="member" writable="1">
-        <type name="int" c:type="int"/>
+      <field name="_reserved">
+        <array zero-terminated="0" c:type="GCallback" fixed-size="4">
+          <type name="GObject.Callback"/>
+        </array>
       </field>
     </record>
-    <record name="StructPrivate" c:type="FooStructPrivate">
-    </record>
+    <constant name="PIE_IS_TASTY" value="3.14159">
+      <type name="double"/>
+    </constant>
     <record name="Rectangle" c:type="FooRectangle">
       <field name="x" writable="1">
         <type name="int" c:type="gint"/>
@@ -408,117 +558,109 @@ and/or use gtk-doc annotations.  -->
         </parameters>
       </method>
     </record>
-    <function name="method_external_references"
-              c:identifier="foo_method_external_references">
-      <return-value transfer-ownership="none">
-        <type name="none" c:type="void"/>
-      </return-value>
-      <parameters>
-        <parameter name="object" transfer-ownership="none">
-          <type name="utility.Object" c:type="UtilityObject*"/>
-        </parameter>
-        <parameter name="e" transfer-ownership="none">
-          <type name="utility.EnumType" c:type="UtilityEnumType"/>
-        </parameter>
-        <parameter name="f" transfer-ownership="none">
-          <type name="utility.FlagType" c:type="UtilityFlagType"/>
-        </parameter>
-        <parameter name="s" transfer-ownership="none">
-          <type name="utility.Struct" c:type="UtilityStruct"/>
-        </parameter>
-      </parameters>
-    </function>
-    <record name="EventAny" c:type="FooEventAny">
-      <field name="send_event" writable="1">
-        <type name="int8" c:type="gint8"/>
-      </field>
-    </record>
-    <record name="EventExpose" c:type="FooEventExpose">
-      <field name="send_event" writable="1">
-        <type name="int8" c:type="gint8"/>
-      </field>
-      <field name="count" writable="1">
-        <type name="int" c:type="gint"/>
+    <constant name="SUCCESS_INT" value="4408">
+      <type name="int"/>
+    </constant>
+    <enumeration name="StackLayer" c:type="FooStackLayer">
+      <member name="desktop" value="0" c:identifier="FOO_LAYER_DESKTOP"/>
+      <member name="bottom" value="1" c:identifier="FOO_LAYER_BOTTOM"/>
+      <member name="normal" value="2" c:identifier="FOO_LAYER_NORMAL"/>
+      <member name="top" value="4" c:identifier="FOO_LAYER_TOP"/>
+      <member name="dock" value="4" c:identifier="FOO_LAYER_DOCK"/>
+      <member name="fullscreen" value="5" c:identifier="FOO_LAYER_FULLSCREEN"/>
+      <member name="focused_window"
+              value="6"
+              c:identifier="FOO_LAYER_FOCUSED_WINDOW"/>
+      <member name="override_redirect"
+              value="7"
+              c:identifier="FOO_LAYER_OVERRIDE_REDIRECT"/>
+      <member name="last" value="8" c:identifier="FOO_LAYER_LAST"/>
+    </enumeration>
+    <record name="Struct" c:type="FooStruct">
+      <field name="priv" writable="1">
+        <type name="StructPrivate" c:type="FooStructPrivate*"/>
       </field>
-    </record>
-    <union name="Event" c:type="FooEvent">
-      <field name="type" writable="1">
+      <field name="member" writable="1">
         <type name="int" c:type="int"/>
       </field>
-      <field name="any" writable="1">
-        <type name="EventAny" c:type="FooEventAny"/>
-      </field>
-      <field name="expose" writable="1">
-        <type name="EventExpose" c:type="FooEventExpose"/>
-      </field>
-    </union>
-    <record name="BRect"
-            c:type="FooBRect"
-            glib:type-name="FooBRect"
-            glib:get-type="foo_brect_get_type">
-      <field name="x" writable="1">
-        <type name="double" c:type="double"/>
-      </field>
-      <field name="y" writable="1">
-        <type name="double" c:type="double"/>
-      </field>
-      <constructor name="new" c:identifier="foo_brect_new">
-        <return-value transfer-ownership="full">
-          <type name="BRect" c:type="FooBRect*"/>
+    </record>
+    <record name="StructPrivate" c:type="FooStructPrivate">
+    </record>
+    <interface name="SubInterface"
+               c:type="FooSubInterface"
+               glib:type-name="FooSubInterface"
+               glib:get-type="foo_sub_interface_get_type"
+               glib:type-struct="SubInterfaceIface">
+      <prerequisite name="Interface"/>
+      <virtual-method name="do_bar" invoker="do_bar">
+        <return-value transfer-ownership="none">
+          <type name="none" c:type="void"/>
         </return-value>
-        <parameters>
-          <parameter name="x" transfer-ownership="none">
-            <type name="double" c:type="double"/>
-          </parameter>
-          <parameter name="y" transfer-ownership="none">
-            <type name="double" c:type="double"/>
-          </parameter>
-        </parameters>
-      </constructor>
-      <method name="add" c:identifier="foo_brect_add">
+      </virtual-method>
+      <method name="do_bar" c:identifier="foo_sub_interface_do_bar">
         <return-value transfer-ownership="none">
           <type name="none" c:type="void"/>
         </return-value>
-        <parameters>
-          <parameter name="b2" transfer-ownership="none">
-            <type name="BRect" c:type="FooBRect*"/>
-          </parameter>
-        </parameters>
       </method>
-    </record>
-    <union name="BUnion"
-           c:type="FooBUnion"
-           glib:type-name="FooBUnion"
-           glib:get-type="foo_bunion_get_type">
-      <field name="type" writable="1">
-        <type name="int" c:type="int"/>
+      <glib:signal name="destroy-event">
+        <return-value transfer-ownership="full">
+          <type name="none" c:type="void"/>
+        </return-value>
+      </glib:signal>
+    </interface>
+    <record name="SubInterfaceIface"
+            c:type="FooSubInterfaceIface"
+            glib:is-gtype-struct-for="SubInterface">
+      <field name="parent_iface">
+        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
       </field>
-      <field name="v" writable="1">
-        <type name="double" c:type="double"/>
+      <field name="destroy_event">
+        <callback name="destroy_event" c:type="destroy_event">
+          <return-value transfer-ownership="none">
+            <type name="none" c:type="void"/>
+          </return-value>
+          <parameters>
+            <parameter name="self" transfer-ownership="none">
+              <type name="SubInterface" c:type="FooSubInterface*"/>
+            </parameter>
+          </parameters>
+        </callback>
       </field>
-      <field name="rect" writable="1">
-        <type name="BRect" c:type="FooBRect*"/>
+      <field name="do_bar">
+        <callback name="do_bar" c:type="do_bar">
+          <return-value transfer-ownership="none">
+            <type name="none" c:type="void"/>
+          </return-value>
+          <parameters>
+            <parameter name="self" transfer-ownership="none">
+              <type name="SubInterface" c:type="FooSubInterface*"/>
+            </parameter>
+          </parameters>
+        </callback>
       </field>
-      <constructor name="new" c:identifier="foo_bunion_new">
+    </record>
+    <class name="Subobject"
+           c:type="FooSubobject"
+           parent="Object"
+           abstract="1"
+           glib:type-name="FooSubobject"
+           glib:get-type="foo_subobject_get_type"
+           glib:type-struct="SubobjectClass">
+      <implements name="Interface"/>
+      <constructor name="new" c:identifier="foo_subobject_new">
         <return-value transfer-ownership="full">
-          <type name="BUnion" c:type="FooBUnion*"/>
+          <type name="Subobject" c:type="FooSubobject*"/>
         </return-value>
       </constructor>
-      <method name="get_contained_type"
-              c:identifier="foo_bunion_get_contained_type">
-        <return-value transfer-ownership="none">
-          <type name="int" c:type="int"/>
-        </return-value>
-      </method>
-    </union>
-    <union name="Union" c:type="_FooUnion">
-      <field name="foo" writable="1">
-        <type name="int" c:type="int"/>
+      <field name="parent_instance">
+        <type name="Object" c:type="FooObject"/>
       </field>
-    </union>
-    <record name="UtilityStruct" c:type="FooUtilityStruct">
-      <field name="bar" writable="1">
-        <type name="utility.Struct" c:type="UtilityStruct"/>
+    </class>
+    <record name="SubobjectClass"
+            c:type="FooSubobjectClass"
+            glib:is-gtype-struct-for="Subobject">
+      <field name="parent_class">
+        <type name="ObjectClass" c:type="FooObjectClass"/>
       </field>
     </record>
     <record name="ThingWithArray" c:type="_FooThingWithArray">
@@ -537,27 +679,150 @@ and/or use gtk-doc annotations.  -->
         <type name="any" c:type="guchar*"/>
       </field>
     </record>
-    <function name="test_unsigned_qualifier"
-              c:identifier="foo_test_unsigned_qualifier">
+    <union name="Union" c:type="_FooUnion">
+      <field name="foo" writable="1">
+        <type name="int" c:type="int"/>
+      </field>
+    </union>
+    <record name="UtilityStruct" c:type="FooUtilityStruct">
+      <field name="bar" writable="1">
+        <type name="utility.Struct" c:type="UtilityStruct"/>
+      </field>
+    </record>
+    <callback name="VarargsCallback" c:type="FooVarargsCallback">
       <return-value transfer-ownership="none">
         <type name="none" c:type="void"/>
       </return-value>
       <parameters>
-        <parameter name="unsigned_param" transfer-ownership="none">
-          <type name="uint" c:type="unsigned int"/>
+        <parameter name="param" transfer-ownership="none">
+          <type name="utf8" c:type="char*"/>
+        </parameter>
+        <parameter transfer-ownership="none">
+          <varargs>
+          </varargs>
+        </parameter>
+      </parameters>
+    </callback>
+    <function name="async_ready_callback"
+              c:identifier="foo_async_ready_callback">
+      <return-value transfer-ownership="none">
+        <type name="none" c:type="void"/>
+      </return-value>
+      <parameters>
+        <parameter name="cancellable" transfer-ownership="none">
+          <type name="Gio.Cancellable" c:type="GCancellable*"/>
+        </parameter>
+        <parameter name="callback"
+                   transfer-ownership="none"
+                   scope="async"
+                   closure="2">
+          <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
+        </parameter>
+        <parameter name="user_data" transfer-ownership="none">
+          <type name="any" c:type="gpointer"/>
         </parameter>
       </parameters>
     </function>
-    <function name="test_unsigned_type" c:identifier="foo_test_unsigned_type">
+    <function name="destroy_notify_callback"
+              c:identifier="foo_destroy_notify_callback">
       <return-value transfer-ownership="none">
         <type name="none" c:type="void"/>
       </return-value>
       <parameters>
-        <parameter name="unsigned_param" transfer-ownership="none">
-          <type name="uint" c:type="unsigned"/>
+        <parameter name="callback"
+                   transfer-ownership="none"
+                   scope="notified"
+                   closure="1"
+                   destroy="2">
+          <type name="Callback" c:type="FooCallback"/>
+        </parameter>
+        <parameter name="data" transfer-ownership="none">
+          <type name="any" c:type="gpointer"/>
+        </parameter>
+        <parameter name="destroy" transfer-ownership="none" scope="call">
+          <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="enum_type_method" c:identifier="foo_enum_type_method">
+      <return-value transfer-ownership="none">
+        <type name="int" c:type="int"/>
+      </return-value>
+      <parameters>
+        <parameter name="foo_enum" transfer-ownership="none">
+          <type name="EnumType" c:type="FooEnumType"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="enum_type_returnv" c:identifier="foo_enum_type_returnv">
+      <return-value transfer-ownership="full">
+        <type name="EnumType" c:type="FooEnumType"/>
+      </return-value>
+      <parameters>
+        <parameter name="x" transfer-ownership="none">
+          <type name="int" c:type="int"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="init" c:identifier="foo_init">
+      <return-value transfer-ownership="none">
+        <type name="int" c:type="gint"/>
+      </return-value>
+    </function>
+    <function name="method_external_references"
+              c:identifier="foo_method_external_references">
+      <return-value transfer-ownership="none">
+        <type name="none" c:type="void"/>
+      </return-value>
+      <parameters>
+        <parameter name="object" transfer-ownership="none">
+          <type name="utility.Object" c:type="UtilityObject*"/>
+        </parameter>
+        <parameter name="e" transfer-ownership="none">
+          <type name="utility.EnumType" c:type="UtilityEnumType"/>
+        </parameter>
+        <parameter name="f" transfer-ownership="none">
+          <type name="utility.FlagType" c:type="UtilityFlagType"/>
+        </parameter>
+        <parameter name="s" transfer-ownership="none">
+          <type name="utility.Struct" c:type="UtilityStruct"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="test_const_char_param"
+              c:identifier="foo_test_const_char_param">
+      <return-value transfer-ownership="none">
+        <type name="none" c:type="void"/>
+      </return-value>
+      <parameters>
+        <parameter name="param" transfer-ownership="none">
+          <type name="utf8" c:type="char*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="test_const_char_retval"
+              c:identifier="foo_test_const_char_retval">
+      <return-value transfer-ownership="none">
+        <type name="utf8" c:type="char*"/>
+      </return-value>
+    </function>
+    <function name="test_const_struct_param"
+              c:identifier="foo_test_const_struct_param">
+      <return-value transfer-ownership="none">
+        <type name="none" c:type="void"/>
+      </return-value>
+      <parameters>
+        <parameter name="param" transfer-ownership="none">
+          <type name="Struct" c:type="FooStruct*"/>
         </parameter>
       </parameters>
     </function>
+    <function name="test_const_struct_retval"
+              c:identifier="foo_test_const_struct_retval">
+      <return-value transfer-ownership="none">
+        <type name="Struct" c:type="FooStruct*"/>
+      </return-value>
+    </function>
     <function name="test_string_array" c:identifier="foo_test_string_array">
       <return-value transfer-ownership="none">
         <type name="none" c:type="void"/>
@@ -583,42 +848,65 @@ and/or use gtk-doc annotations.  -->
         </parameter>
       </parameters>
     </function>
-    <function name="test_const_char_retval"
-              c:identifier="foo_test_const_char_retval">
+    <function name="test_unsigned_qualifier"
+              c:identifier="foo_test_unsigned_qualifier">
       <return-value transfer-ownership="none">
-        <type name="utf8" c:type="char*"/>
+        <type name="none" c:type="void"/>
       </return-value>
+      <parameters>
+        <parameter name="unsigned_param" transfer-ownership="none">
+          <type name="uint" c:type="unsigned int"/>
+        </parameter>
+      </parameters>
     </function>
-    <function name="test_const_struct_retval"
-              c:identifier="foo_test_const_struct_retval">
+    <function name="test_unsigned_type" c:identifier="foo_test_unsigned_type">
       <return-value transfer-ownership="none">
-        <type name="Struct" c:type="FooStruct*"/>
+        <type name="none" c:type="void"/>
       </return-value>
+      <parameters>
+        <parameter name="unsigned_param" transfer-ownership="none">
+          <type name="uint" c:type="unsigned"/>
+        </parameter>
+      </parameters>
     </function>
-    <function name="test_const_char_param"
-              c:identifier="foo_test_const_char_param">
+    <function name="test_varargs_callback"
+              c:identifier="foo_test_varargs_callback">
       <return-value transfer-ownership="none">
         <type name="none" c:type="void"/>
       </return-value>
       <parameters>
-        <parameter name="param" transfer-ownership="none">
-          <type name="utf8" c:type="char*"/>
+        <parameter name="i" transfer-ownership="none">
+          <type name="int" c:type="gint"/>
+        </parameter>
+        <parameter name="callback" transfer-ownership="none" scope="call">
+          <type name="VarargsCallback" c:type="FooVarargsCallback"/>
         </parameter>
       </parameters>
     </function>
-    <function name="test_const_struct_param"
-              c:identifier="foo_test_const_struct_param">
+    <function name="test_varargs_callback2"
+              c:identifier="foo_test_varargs_callback2">
       <return-value transfer-ownership="none">
         <type name="none" c:type="void"/>
       </return-value>
       <parameters>
-        <parameter name="param" transfer-ownership="none">
-          <type name="Struct" c:type="FooStruct*"/>
+        <parameter name="callback" transfer-ownership="none" scope="call">
+          <type name="VarargsCallback" c:type="FooVarargsCallback"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="test_varargs_callback3"
+              c:identifier="foo_test_varargs_callback3">
+      <return-value transfer-ownership="none">
+        <type name="none" c:type="void"/>
+      </return-value>
+      <parameters>
+        <parameter name="callback" transfer-ownership="none" scope="call">
+          <type name="VarargsCallback" c:type="FooVarargsCallback"/>
+        </parameter>
+        <parameter name="callback2" transfer-ownership="none" scope="call">
+          <type name="VarargsCallback" c:type="FooVarargsCallback"/>
         </parameter>
       </parameters>
     </function>
-    <constant name="SUCCESS_INT" value="4408">
-      <type name="int"/>
-    </constant>
   </namespace>
 </repository>