<?xml version="1.0"?>
<!-- This file was automatically generated from C sources - DO NOT EDIT!
To affect the contents of this file, edit the original C definitions,
and/or use gtk-doc annotations.  -->
<repository version="1.2"
            xmlns="http://www.gtk.org/introspection/core/1.0"
            xmlns:c="http://www.gtk.org/introspection/c/1.0"
            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"/>
  <package name="gobject-2.0"/>
  <c:include name="foo.h"/>
  <namespace name="Foo"
             version="1.0"
             shared-library="libfoo.so"
             c:identifier-prefixes="Foo"
             c:symbol-prefixes="foo">
    <alias name="ObjectCookie" c:type="FooObjectCookie">
      <type name="gpointer" c:type="gpointer"/>
    </alias>
    <alias name="XEvent" c:type="FooXEvent">
      <type name="gpointer" c:type="gpointer"/>
    </alias>
    <enumeration name="ASingle" c:type="FooASingle">
      <member name="some_single_enum"
              value="0"
              c:identifier="FOO_SOME_SINGLE_ENUM">
      </member>
    </enumeration>
    <enumeration name="AddressType" c:type="FooAddressType">
      <member name="invalid" value="0" c:identifier="FOO_ADDRESS_INVALID">
      </member>
      <member name="ipv4" value="1" c:identifier="FOO_ADDRESS_IPV4">
      </member>
      <member name="ipv6" value="2" c:identifier="FOO_ADDRESS_IPV6">
      </member>
    </enumeration>
    <record name="BRect"
            c:type="FooBRect"
            glib:type-name="FooBRect"
            glib:get-type="foo_brect_get_type"
            c:symbol-prefix="brect">
      <field name="x" writable="1">
        <type name="gdouble" c:type="double"/>
      </field>
      <field name="y" writable="1">
        <type name="gdouble" 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="x" transfer-ownership="none">
            <type name="gdouble" c:type="double"/>
          </parameter>
          <parameter name="y" transfer-ownership="none">
            <type name="gdouble" c:type="double"/>
          </parameter>
        </parameters>
      </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="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"
           c:symbol-prefix="bunion">
      <field name="type" writable="1">
        <type name="gint" c:type="int"/>
      </field>
      <field name="v" writable="1">
        <type name="gdouble" 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="gint" c:type="int"/>
        </return-value>
      </method>
    </union>
    <record name="Boxed"
            c:type="FooBoxed"
            glib:type-name="FooBoxed"
            glib:get-type="foo_boxed_get_type"
            c:symbol-prefix="boxed">
      <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:symbol-prefix="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"
            disguised="1"
            glib:is-gtype-struct-for="Buffer">
    </record>
    <callback name="Callback" c:type="FooCallback">
      <return-value transfer-ownership="none">
        <type name="gboolean" 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="gboolean" c:type="gboolean"/>
        </parameter>
        <parameter name="data" transfer-ownership="none">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="DBusData"
            c:type="FooDBusData"
            glib:type-name="FooDBusData"
            glib:get-type="foo_dbus_data_get_type"
            c:symbol-prefix="dbus_data">
      <method name="method" c:identifier="foo_dbus_data_method">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
    </record>
    <constant name="DEFINE_SHOULD_BE_EXPOSED"
              value="should be exposed"
              c:type="FOO_DEFINE_SHOULD_BE_EXPOSED">
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <enumeration name="EnumFullname" c:type="FooEnumFullname">
      <member name="one" value="1" c:identifier="FOO_ENUM_FULLNAME_ONE">
      </member>
      <member name="two" value="2" c:identifier="FOO_ENUM_FULLNAME_TWO">
      </member>
      <member name="three" value="3" c:identifier="FOO_ENUM_FULLNAME_THREE">
      </member>
    </enumeration>
    <enumeration name="EnumNoType" c:type="FooEnumNoType">
      <member name="un" value="1" c:identifier="FOO_ENUM_UN">
      </member>
      <member name="deux" value="2" c:identifier="FOO_ENUM_DEUX">
      </member>
      <member name="trois" value="3" c:identifier="FOO_ENUM_TROIS">
      </member>
      <member name="neuf" value="9" c:identifier="FOO_ENUM_NEUF">
      </member>
    </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>
      <member name="beta"
              value="1"
              c:identifier="FOO_ENUM_BETA"
              glib:nick="beta">
      </member>
      <member name="delta"
              value="2"
              c:identifier="FOO_ENUM_DELTA"
              glib:nick="delta">
      </member>
      <function name="method" c:identifier="foo_enum_type_method">
        <return-value transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </return-value>
        <parameters>
          <parameter name="foo_enum" transfer-ownership="none">
            <type name="EnumType" c:type="FooEnumType"/>
          </parameter>
        </parameters>
      </function>
      <function name="returnv" c:identifier="foo_enum_type_returnv">
        <return-value transfer-ownership="none">
          <type name="EnumType" c:type="FooEnumType"/>
        </return-value>
        <parameters>
          <parameter name="x" transfer-ownership="none">
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </function>
    </enumeration>
    <enumeration name="Error"
                 glib:type-name="FooError"
                 glib:get-type="foo_error_get_type"
                 c:type="FooError"
                 glib:error-domain="foo-error-quark">
      <member name="good"
              value="0"
              c:identifier="FOO_ERROR_GOOD"
              glib:nick="good">
      </member>
      <member name="bad"
              value="1"
              c:identifier="FOO_ERROR_BAD"
              glib:nick="bad">
      </member>
      <member name="ugly"
              value="2"
              c:identifier="FOO_ERROR_UGLY"
              glib:nick="ugly">
      </member>
      <function name="quark" c:identifier="foo_error_quark">
        <return-value transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </return-value>
      </function>
    </enumeration>
    <union name="Event" c:type="FooEvent">
      <field name="type" writable="1">
        <type name="gint" 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="gint8" c:type="gint8"/>
      </field>
    </record>
    <record name="EventExpose" c:type="FooEventExpose">
      <field name="send_event" writable="1">
        <type name="gint8" c:type="gint8"/>
      </field>
      <field name="count" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
    </record>
    <bitfield name="FlagsNoType" c:type="FooFlagsNoType">
      <member name="ett" value="1" c:identifier="FOO_FLAGS_ETT">
      </member>
      <member name="tva" value="2" c:identifier="FOO_FLAGS_TVA">
      </member>
      <member name="fyra" value="4" c:identifier="FOO_FLAGS_FYRA">
      </member>
    </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>
      <member name="second"
              value="2"
              c:identifier="FOO_FLAGS_SECOND"
              glib:nick="second">
      </member>
      <member name="third"
              value="4"
              c:identifier="FOO_FLAGS_THIRD"
              glib:nick="third">
      </member>
    </bitfield>
    <record name="ForeignStruct" c:type="FooForeignStruct" foreign="1">
      <field name="foo" writable="1">
        <type name="gint" c:type="int"/>
      </field>
      <constructor name="new" c:identifier="foo_foreign_struct_new">
        <return-value transfer-ownership="full">
          <type name="ForeignStruct" c:type="FooForeignStruct*"/>
        </return-value>
      </constructor>
      <method name="copy" c:identifier="foo_foreign_struct_copy">
        <return-value transfer-ownership="full">
          <type name="ForeignStruct" c:type="FooForeignStruct*"/>
        </return-value>
      </method>
    </record>
    <interface name="Interface"
               c:symbol-prefix="interface"
               c:type="FooInterface"
               glib:type-name="FooInterface"
               glib:get-type="foo_interface_get_type"
               glib:type-struct="InterfaceIface">
      <function name="static_method"
                c:identifier="foo_interface_static_method">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="x" transfer-ownership="none">
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </function>
      <virtual-method name="do_foo" invoker="do_foo">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="x" transfer-ownership="none">
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </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="x" transfer-ownership="none">
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </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">
          <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="gint" c:type="int"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <class name="Object"
           c:symbol-prefix="object"
           c:type="FooObject"
           parent="GObject.Object"
           glib:type-name="FooObject"
           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">
          <type name="Object" c:type="FooObject*"/>
        </return-value>
      </constructor>
      <constructor name="new_as_super" c:identifier="foo_object_new_as_super">
        <return-value transfer-ownership="full">
          <type name="GObject.Object" c:type="GObject*"/>
        </return-value>
      </constructor>
      <function name="a_global_method"
                c:identifier="foo_object_a_global_method">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="obj" transfer-ownership="none">
            <type name="Utility.Object" c:type="UtilityObject*"/>
          </parameter>
        </parameters>
      </function>
      <function name="get_default" c:identifier="foo_object_get_default">
        <doc xml:whitespace="preserve">This function is intended to match clutter_stage_get_default which
uses a C sugar return type.</doc>
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">The global #FooSubobject</doc>
          <type name="Subobject" c:type="FooObject*"/>
        </return-value>
      </function>
      <function name="static_meth" c:identifier="foo_object_static_meth">
        <return-value transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </return-value>
      </function>
      <virtual-method name="read_fn" invoker="read">
        <doc xml:whitespace="preserve">Read some stuff.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="offset" transfer-ownership="none">
            <doc xml:whitespace="preserve">offset</doc>
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter name="length" transfer-ownership="none">
            <doc xml:whitespace="preserve">length</doc>
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="virtual_method" invoker="virtual_method">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="first_param" transfer-ownership="none">
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="append_new_stack_layer"
              c:identifier="foo_object_append_new_stack_layer">
        <doc xml:whitespace="preserve">This shouldn't be scanned as a constructor.</doc>
        <return-value transfer-ownership="none">
          <type name="OtherObject" c:type="FooOtherObject*"/>
        </return-value>
        <parameters>
          <parameter name="x" transfer-ownership="none">
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </method>
      <method name="dup_name" c:identifier="foo_object_dup_name">
        <return-value transfer-ownership="full">
          <type name="utf8" c:type="char*"/>
        </return-value>
      </method>
      <method name="external_type" c:identifier="foo_object_external_type">
        <return-value transfer-ownership="none">
          <doc xml:whitespace="preserve">%NULL always</doc>
          <type name="Utility.Object" c:type="UtilityObject*"/>
        </return-value>
      </method>
      <method name="get_name" c:identifier="foo_object_get_name">
        <return-value transfer-ownership="none">
          <type name="utf8" c:type="const char*"/>
        </return-value>
      </method>
      <method name="handle_glyph" c:identifier="foo_object_handle_glyph">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="glyph" transfer-ownership="none">
            <type name="Utility.Glyph" c:type="UtilityGlyph"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_it_time_yet" c:identifier="foo_object_is_it_time_yet">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="time" transfer-ownership="none">
            <type name="glong" c:type="time_t"/>
          </parameter>
        </parameters>
      </method>
      <method name="new_cookie"
              c:identifier="foo_object_new_cookie"
              introspectable="0">
        <doc xml:whitespace="preserve">Not sure why this test is here...</doc>
        <return-value>
          <type name="ObjectCookie" c:type="FooObjectCookie"/>
        </return-value>
        <parameters>
          <parameter name="target" transfer-ownership="none">
            <type name="utf8" c:type="const char*"/>
          </parameter>
        </parameters>
      </method>
      <method name="read" c:identifier="foo_object_read">
        <doc xml:whitespace="preserve">Read some stuff.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="offset" transfer-ownership="none">
            <doc xml:whitespace="preserve">offset</doc>
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter name="length" transfer-ownership="none">
            <doc xml:whitespace="preserve">length</doc>
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </method>
      <method name="skipped_method"
              c:identifier="foo_object_skipped_method"
              introspectable="0">
        <doc xml:whitespace="preserve">This is only useful from C.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </method>
      <method name="take_all"
              c:identifier="foo_object_take_all"
              introspectable="0">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="x" transfer-ownership="none">
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter transfer-ownership="none">
            <varargs>
            </varargs>
          </parameter>
        </parameters>
      </method>
      <method name="various" c:identifier="foo_object_various">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="data" transfer-ownership="none">
            <type name="gpointer" c:type="void*"/>
          </parameter>
          <parameter name="some_type" transfer-ownership="none">
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </method>
      <method name="virtual_method" c:identifier="foo_object_virtual_method">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="first_param" transfer-ownership="none">
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </method>
      <property name="hidden"
                introspectable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type/>
      </property>
      <property name="string"
                writable="1"
                construct="1"
                transfer-ownership="none">
        <type name="utf8"/>
      </property>
      <field name="parent_instance">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="some_int">
        <type name="gint" c:type="int"/>
      </field>
      <glib:signal name="signal" when="last">
        <return-value transfer-ownership="full">
          <type name="utf8"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="GObject.Object"/>
          </parameter>
          <parameter name="p0" transfer-ownership="none">
            <type name="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="ObjectClass"
            c:type="FooObjectClass"
            glib:is-gtype-struct-for="Object">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="virtual_method">
        <callback name="virtual_method">
          <return-value transfer-ownership="none">
            <type name="gboolean" 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="gint" c:type="int"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="read_fn">
        <callback name="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">
              <doc xml:whitespace="preserve">offset</doc>
              <type name="gint" c:type="int"/>
            </parameter>
            <parameter name="length" transfer-ownership="none">
              <doc xml:whitespace="preserve">length</doc>
              <type name="gint" c:type="int"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="_reserved">
        <array zero-terminated="0" c:type="GCallback" fixed-size="4">
          <type name="GObject.Callback" c:type="GCallback"/>
        </array>
      </field>
    </record>
    <class name="OtherObject"
           c:symbol-prefix="other_object"
           c:type="FooOtherObject"
           parent="GObject.Object"
           glib:type-name="FooOtherObject"
           glib:get-type="foo_other_object_get_type"
           glib:type-struct="OtherObjectClass">
    </class>
    <record name="OtherObjectClass"
            c:type="FooOtherObjectClass"
            disguised="1"
            glib:is-gtype-struct-for="OtherObject">
    </record>
    <constant name="PIE_IS_TASTY" value="3.141590" c:type="FOO_PIE_IS_TASTY">
      <type name="gdouble" c:type="gdouble"/>
    </constant>
    <record name="Rectangle" c:type="FooRectangle">
      <field name="x" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="y" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="width" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <field name="height" writable="1">
        <type name="gint" c:type="gint"/>
      </field>
      <method name="add" c:identifier="foo_rectangle_add">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="r2" transfer-ownership="none">
            <doc xml:whitespace="preserve">source rectangle</doc>
            <type name="Rectangle" c:type="const FooRectangle*"/>
          </parameter>
        </parameters>
      </method>
      <function name="new" c:identifier="foo_rectangle_new" introspectable="0">
        <doc xml:whitespace="preserve">This is a C convenience constructor; we have to (skip)
it because it's not a boxed type.</doc>
        <return-value>
          <type name="Rectangle" c:type="FooRectangle*"/>
        </return-value>
        <parameters>
          <parameter name="x" transfer-ownership="none">
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter name="y" transfer-ownership="none">
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter name="width" transfer-ownership="none">
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter name="height" transfer-ownership="none">
            <type name="gint" c:type="int"/>
          </parameter>
        </parameters>
      </function>
    </record>
    <constant name="SUCCESS_INT" value="4408" c:type="FOO_SUCCESS_INT">
      <type name="gint" c:type="gint"/>
    </constant>
    <enumeration name="Skippable" introspectable="0" c:type="FooSkippable">
      <doc xml:whitespace="preserve">Some type that is only interesting from C and should not be
exposed to language bindings.</doc>
      <member name="one" value="0" c:identifier="FOO_SKIPPABLE_ONE">
        <doc xml:whitespace="preserve">a skippable enum value</doc>
      </member>
      <member name="two" value="1" c:identifier="FOO_SKIPPABLE_TWO">
        <doc xml:whitespace="preserve">another skippable enum value</doc>
      </member>
    </enumeration>
    <enumeration name="StackLayer" c:type="FooStackLayer">
      <member name="desktop" value="0" c:identifier="FOO_LAYER_DESKTOP">
      </member>
      <member name="bottom" value="1" c:identifier="FOO_LAYER_BOTTOM">
      </member>
      <member name="normal" value="2" c:identifier="FOO_LAYER_NORMAL">
      </member>
      <member name="top" value="4" c:identifier="FOO_LAYER_TOP">
      </member>
      <member name="dock" value="4" c:identifier="FOO_LAYER_DOCK">
      </member>
      <member name="fullscreen" value="5" c:identifier="FOO_LAYER_FULLSCREEN">
      </member>
      <member name="focused_window"
              value="6"
              c:identifier="FOO_LAYER_FOCUSED_WINDOW">
      </member>
      <member name="override_redirect"
              value="7"
              c:identifier="FOO_LAYER_OVERRIDE_REDIRECT">
      </member>
      <member name="last" value="8" c:identifier="FOO_LAYER_LAST">
      </member>
    </enumeration>
    <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="gint" c:type="int"/>
      </field>
    </record>
    <record name="StructPrivate" c:type="FooStructPrivate" disguised="1">
    </record>
    <interface name="SubInterface"
               c:symbol-prefix="sub_interface"
               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="destroy_event">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </virtual-method>
      <virtual-method name="do_bar" invoker="do_bar">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </virtual-method>
      <virtual-method name="do_baz" invoker="do_baz">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="call"
                     closure="1">
            <type name="GObject.Callback" c:type="GCallback"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none" closure="1">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="do_moo" invoker="do_moo">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter transfer-ownership="none">
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter transfer-ownership="none">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </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>
      </method>
      <method name="do_baz" c:identifier="foo_sub_interface_do_baz">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="callback"
                     transfer-ownership="none"
                     scope="call"
                     closure="1">
            <type name="GObject.Callback" c:type="GCallback"/>
          </parameter>
          <parameter name="user_data" transfer-ownership="none">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="do_moo" c:identifier="foo_sub_interface_do_moo">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter transfer-ownership="none">
            <type name="gint" c:type="int"/>
          </parameter>
          <parameter transfer-ownership="none">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <glib:signal name="destroy-event" when="last">
        <return-value transfer-ownership="none">
          <type name="none"/>
        </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="destroy_event">
        <callback name="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="do_bar">
        <callback name="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>
      <field name="do_moo">
        <callback name="do_moo">
          <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>
            <parameter transfer-ownership="none">
              <type name="gint" c:type="int"/>
            </parameter>
            <parameter transfer-ownership="none">
              <type name="gpointer" c:type="gpointer"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="do_baz">
        <callback name="do_baz">
          <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>
            <parameter name="callback"
                       transfer-ownership="none"
                       scope="call"
                       closure="2">
              <type name="GObject.Callback" c:type="GCallback"/>
            </parameter>
            <parameter name="user_data" transfer-ownership="none" closure="2">
              <type name="gpointer" c:type="gpointer"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <class name="Subobject"
           c:symbol-prefix="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="Subobject" c:type="FooSubobject*"/>
        </return-value>
      </constructor>
      <field name="parent_instance">
        <type name="Object" c:type="FooObject"/>
      </field>
    </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">
      <field name="x" writable="1">
        <type name="gint" c:type="int"/>
      </field>
      <field name="y" writable="1">
        <type name="gint" c:type="int"/>
      </field>
      <field name="lines" writable="1">
        <array zero-terminated="0" c:type="char" fixed-size="80">
          <type name="gchar" c:type="char"/>
        </array>
      </field>
      <field name="data" writable="1">
        <type name="guint8" c:type="guchar*"/>
      </field>
    </record>
    <union name="Union" c:type="FooUnion">
      <field name="foo" writable="1">
        <type name="gint" 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"
              introspectable="0">
      <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="const 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" allow-none="1">
          <type name="Gio.Cancellable" c:type="GCancellable*"/>
        </parameter>
        <parameter name="callback"
                   transfer-ownership="none"
                   allow-none="1"
                   scope="async"
                   closure="2">
          <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
        </parameter>
        <parameter name="user_data" transfer-ownership="none">
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <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="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="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="destroy" transfer-ownership="none" scope="async">
          <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
        </parameter>
      </parameters>
    </function>
    <function name="enum_type_method"
              c:identifier="foo_enum_type_method"
              moved-to="EnumType.method">
      <return-value transfer-ownership="none">
        <type name="gint" 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"
              moved-to="EnumType.returnv">
      <return-value transfer-ownership="none">
        <type name="EnumType" c:type="FooEnumType"/>
      </return-value>
      <parameters>
        <parameter name="x" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="error_quark"
              c:identifier="foo_error_quark"
              moved-to="Error.quark">
      <return-value transfer-ownership="none">
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
    </function>
    <function name="init" c:identifier="foo_init">
      <return-value transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </return-value>
    </function>
    <function name="interface_static_method"
              c:identifier="foo_interface_static_method"
              moved-to="Interface.static_method">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="x" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </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="not_a_constructor_new"
              c:identifier="foo_not_a_constructor_new">
      <doc xml:whitespace="preserve">This should be scanned as a top-level function, and shouldn't cause
a "Can't find matching type for constructor" warning.</doc>
      <return-value transfer-ownership="none">
        <type name="Object" c:type="FooObject*"/>
      </return-value>
    </function>
    <function name="rectangle_new"
              c:identifier="foo_rectangle_new"
              moved-to="Rectangle.new"
              introspectable="0">
      <doc xml:whitespace="preserve">This is a C convenience constructor; we have to (skip)
it because it's not a boxed type.</doc>
      <return-value>
        <type name="Rectangle" c:type="FooRectangle*"/>
      </return-value>
      <parameters>
        <parameter name="x" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="y" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="width" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
        <parameter name="height" transfer-ownership="none">
          <type name="gint" c:type="int"/>
        </parameter>
      </parameters>
    </function>
    <function name="skip_me" c:identifier="foo_skip_me" introspectable="0">
      <doc xml:whitespace="preserve">Does something that's only interesting from C and should not be
exposed to language bindings.</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="fs" transfer-ownership="none">
          <doc xml:whitespace="preserve">a #FooSkippable</doc>
          <type name="Skippable" c:type="FooSkippable"/>
        </parameter>
      </parameters>
    </function>
    <function name="some_variant"
              c:identifier="foo_some_variant"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="x" transfer-ownership="none">
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="args" transfer-ownership="none">
          <type name="va_list" c:type="va_list"/>
        </parameter>
      </parameters>
    </function>
    <function name="some_variant_ptr"
              c:identifier="foo_some_variant_ptr"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="x" transfer-ownership="none">
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="args" transfer-ownership="none">
          <type name="va_list" c:type="va_list*"/>
        </parameter>
      </parameters>
    </function>
    <function name="test_array" c:identifier="foo_test_array">
      <return-value transfer-ownership="container">
        <array name="GLib.Array" c:type="GArray*">
          <type name="utf8"/>
        </array>
      </return-value>
    </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="const 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="const 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="const 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="const 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"/>
      </return-value>
      <parameters>
        <parameter name="array" transfer-ownership="none">
          <array c:type="char**">
            <type name="utf8" c:type="char*"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="test_string_array_with_g"
              c:identifier="foo_test_string_array_with_g">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="array" transfer-ownership="none">
          <array c:type="gchar**">
            <type name="utf8" c:type="gchar*"/>
          </array>
        </parameter>
      </parameters>
    </function>
    <function name="test_unsigned_qualifier"
              c:identifier="foo_test_unsigned_qualifier">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="unsigned_param" transfer-ownership="none">
          <type name="guint" c:type="unsigned int"/>
        </parameter>
      </parameters>
    </function>
    <function name="test_unsigned_type" c:identifier="foo_test_unsigned_type">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="unsigned_param" transfer-ownership="none">
          <type name="guint" c:type="unsigned"/>
        </parameter>
      </parameters>
    </function>
    <function name="test_varargs_callback"
              c:identifier="foo_test_varargs_callback"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="i" transfer-ownership="none">
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="callback" transfer-ownership="none">
          <type name="VarargsCallback" c:type="FooVarargsCallback"/>
        </parameter>
      </parameters>
    </function>
    <function name="test_varargs_callback2"
              c:identifier="foo_test_varargs_callback2"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="callback" transfer-ownership="none">
          <type name="VarargsCallback" c:type="FooVarargsCallback"/>
        </parameter>
      </parameters>
    </function>
    <function name="test_varargs_callback3"
              c:identifier="foo_test_varargs_callback3"
              introspectable="0">
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="callback" transfer-ownership="none">
          <type name="VarargsCallback" c:type="FooVarargsCallback"/>
        </parameter>
        <parameter name="callback2" transfer-ownership="none">
          <type name="VarargsCallback" c:type="FooVarargsCallback"/>
        </parameter>
      </parameters>
    </function>
  </namespace>
</repository>
