<?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="Gio" version="2.0"/>
  <package name="gobject-2.0"/>
  <namespace name="Ethos"
             version="1.0"
             shared-library="libethos-1.0.so.1.0"
             c:identifier-prefixes="Ethos"
             c:symbol-prefixes="ethos">
    <enumeration name="Error"
                 glib:type-name="EthosError"
                 glib:get-type="ethos_error_get_type"
                 c:type="EthosError"
                 glib:error-domain="ethos-error-quark">
      <doc xml:space="preserve">#EthosError error enumeration.</doc>
      <member name="FILE_NOT_FOUND"
              value="0"
              c:identifier="ETHOS_ERROR_FILE_NOT_FOUND"
              glib:nick="FILE_NOT_FOUND">
        <doc xml:space="preserve">File did not exist or was invalid.</doc>
      </member>
      <member name="INVALID_KEY_FILE"
              value="1"
              c:identifier="ETHOS_ERROR_INVALID_KEY_FILE"
              glib:nick="INVALID_KEY_FILE">
        <doc xml:space="preserve">The plugin #GKeyFile is invalid.</doc>
      </member>
      <member name="PLUGIN"
              value="2"
              c:identifier="ETHOS_ERROR_PLUGIN"
              glib:nick="PLUGIN">
        <doc xml:space="preserve">An error with a plugin.</doc>
      </member>
      <member name="PLUGIN_LOADER"
              value="3"
              c:identifier="ETHOS_ERROR_PLUGIN_LOADER"
              glib:nick="PLUGIN_LOADER">
        <doc xml:space="preserve">An error with a plugin-loader.</doc>
      </member>
      <function name="quark" c:identifier="ethos_error_quark">
        <doc xml:space="preserve">Retrieves the error domain for ethos.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the #GQuark for ethos</doc>
          <type name="GLib.Quark" c:type="GQuark"/>
        </return-value>
      </function>
    </enumeration>
    <class name="Manager"
           c:symbol-prefix="manager"
           c:type="EthosManager"
           parent="GObject.Object"
           glib:type-name="EthosManager"
           glib:get-type="ethos_manager_get_type"
           glib:type-struct="ManagerClass">
      <constructor name="new" c:identifier="ethos_manager_new">
        <doc xml:space="preserve">Creates a new instance of #EthosManager.  There should only be one of these
created per process.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">the newly created #EthosManager instance.</doc>
          <type name="Manager" c:type="EthosManager*"/>
        </return-value>
      </constructor>
      <constructor name="new_full" c:identifier="ethos_manager_new_full">
        <doc xml:space="preserve">Creates a new #EthosManager instance and sets the application name and
plugin directories to traverse to locate plugins.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">The newly created #EthosManager instance.</doc>
          <type name="Manager" c:type="EthosManager*"/>
        </return-value>
        <parameters>
          <parameter name="app_name" transfer-ownership="none">
            <doc xml:space="preserve">The name of the application (Capitalized)</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="plugin_dirs" transfer-ownership="none">
            <doc xml:space="preserve">An array of strings containing directories to locate plugins</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
        </parameters>
      </constructor>
      <virtual-method name="initialized">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="Manager" c:type="EthosManager*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="load_plugin" invoker="load_plugin" throws="1">
        <doc xml:space="preserve">Attempts to load a plugin using the #EthosPluginInfo.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the plugin was loaded. @error is set in case of failure.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="Manager" c:type="EthosManager*"/>
          </instance-parameter>
          <parameter name="plugin" transfer-ownership="none">
            <type name="Plugin" c:type="EthosPlugin*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="plugin_loaded">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="Manager" c:type="EthosManager*"/>
          </instance-parameter>
          <parameter name="plugin_info" transfer-ownership="none">
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="plugin_unloaded">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="Manager" c:type="EthosManager*"/>
          </instance-parameter>
          <parameter name="plugin_info" transfer-ownership="none">
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="unload_plugin" invoker="unload_plugin" throws="1">
        <doc xml:space="preserve">Attempts to unload the plugin that was created using @plugin_info.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the plugin was unloaded. @error is set in case of failure.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <type name="Manager" c:type="EthosManager*"/>
          </instance-parameter>
          <parameter name="plugin" transfer-ownership="none">
            <type name="Plugin" c:type="EthosPlugin*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="get_app_name" c:identifier="ethos_manager_get_app_name">
        <doc xml:space="preserve">Retrieves the app-name that the #EthosManager should use.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the configured app name used for plugins or %NULL</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosManager</doc>
            <type name="Manager" c:type="EthosManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_plugin"
              c:identifier="ethos_manager_get_plugin"
              introspectable="0">
        <doc xml:space="preserve">Retrieves the created instance of the plugin defined by @plugin_info.  If
no instance of the plugin has been created, then %NULL is returned.</doc>
        <return-value>
          <doc xml:space="preserve">The #EthosPlugin instance or %NULL</doc>
          <type name="Plugin" c:type="EthosPlugin*"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosManager</doc>
            <type name="Manager" c:type="EthosManager*"/>
          </instance-parameter>
          <parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_plugin_dirs"
              c:identifier="ethos_manager_get_plugin_dirs"
              introspectable="0">
        <doc xml:space="preserve">Retrieves the list of plugin directories that are traversed when looking to load plugins.</doc>
        <return-value>
          <doc xml:space="preserve">a %NULL terminated list of strings containing directories that will be traversed to locate plugins.  This reslut should never be modified or freed.</doc>
          <array c:type="const gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosManager</doc>
            <type name="Manager" c:type="EthosManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_plugin_info"
              c:identifier="ethos_manager_get_plugin_info"
              introspectable="0">
        <doc xml:space="preserve">Retreives the list of #EthosPluginInfo that were discovered.</doc>
        <return-value>
          <doc xml:space="preserve">A #GList of #EthosPluginInfo which should be freed using g_list_free().</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="gpointer" c:type="gpointer"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosManager</doc>
            <type name="Manager" c:type="EthosManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_plugin_loaders"
              c:identifier="ethos_manager_get_plugin_loaders"
              introspectable="0">
        <doc xml:space="preserve">Retreives a list of #EthosPluginLoader&lt;!-- --&gt;s that were discovered
when the application was initialized.</doc>
        <return-value>
          <doc xml:space="preserve">A #GList of #EthosPluginLoader&lt;!-- --&gt;s.  The list should be freed using g_list_free().</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="gpointer" c:type="gpointer"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosManager</doc>
            <type name="Manager" c:type="EthosManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="initialize" c:identifier="ethos_manager_initialize">
        <doc xml:space="preserve">Initialize the plugin manager.  This will result in the manager looking for
all of the available plugins that it can find in the registered plugin
directories.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosManager</doc>
            <type name="Manager" c:type="EthosManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="load_plugin"
              c:identifier="ethos_manager_load_plugin"
              throws="1">
        <doc xml:space="preserve">Attempts to load a plugin using the #EthosPluginInfo.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the plugin was loaded. @error is set in case of failure.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosManager</doc>
            <type name="Manager" c:type="EthosManager*"/>
          </instance-parameter>
          <parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_app_name" c:identifier="ethos_manager_set_app_name">
        <doc xml:space="preserve">Sets the app name used for the application.  This should be a single word
to simplify the plugin development process.  The app name is used inside
the plugin description files for the group prefix as well as in the name
of the file.

For example, an application named "Ethos" would have the group
[Ethos Plugin] in the plugin description file which would be named
myplugin.ethos-plugin.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosManager</doc>
            <type name="Manager" c:type="EthosManager*"/>
          </instance-parameter>
          <parameter name="app_name" transfer-ownership="none">
            <doc xml:space="preserve">A single-worded name for the application</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_plugin_dirs"
              c:identifier="ethos_manager_set_plugin_dirs">
        <doc xml:space="preserve">Sets the list of directories to use for locating plugins.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosManager</doc>
            <type name="Manager" c:type="EthosManager*"/>
          </instance-parameter>
          <parameter name="plugin_dirs" transfer-ownership="none">
            <doc xml:space="preserve">A %NULL terminated list of strings of directories</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
        </parameters>
      </method>
      <method name="unload" c:identifier="ethos_manager_unload">
        <doc xml:space="preserve">Unloads all of the plugins.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosManager</doc>
            <type name="Manager" c:type="EthosManager*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unload_plugin"
              c:identifier="ethos_manager_unload_plugin"
              throws="1">
        <doc xml:space="preserve">Attempts to unload the plugin that was created using @plugin_info.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the plugin was unloaded. @error is set in case of failure.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosManager</doc>
            <type name="Manager" c:type="EthosManager*"/>
          </instance-parameter>
          <parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="ManagerPrivate" c:type="EthosManagerPrivate*"/>
      </field>
      <glib:signal name="initialized" when="first">
        <doc xml:space="preserve">The initialized signal is emmitted after the manager has completed
initializing.  This is a good place to load the plugins you want
loaded on startup.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="plugin-loaded" when="first">
        <doc xml:space="preserve">The plugin-loaded signal is emitted when a plugin has been
successfully loaded.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="plugin-unloaded" when="first">
        <doc xml:space="preserve">The plugin-loaded signal is emitted when a plugin has been
successfully unloaded.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="ManagerClass"
            c:type="EthosManagerClass"
            glib:is-gtype-struct-for="Manager">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="initialized">
        <callback name="initialized">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="Manager" c:type="EthosManager*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="load_plugin">
        <callback name="load_plugin" throws="1">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">%TRUE if the plugin was loaded. @error is set in case of failure.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="Manager" c:type="EthosManager*"/>
            </parameter>
            <parameter name="plugin" transfer-ownership="none">
              <type name="Plugin" c:type="EthosPlugin*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="unload_plugin">
        <callback name="unload_plugin" throws="1">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">%TRUE if the plugin was unloaded. @error is set in case of failure.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="Manager" c:type="EthosManager*"/>
            </parameter>
            <parameter name="plugin" transfer-ownership="none">
              <type name="Plugin" c:type="EthosPlugin*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="plugin_loaded">
        <callback name="plugin_loaded">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="Manager" c:type="EthosManager*"/>
            </parameter>
            <parameter name="plugin_info" transfer-ownership="none">
              <type name="PluginInfo" c:type="EthosPluginInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="plugin_unloaded">
        <callback name="plugin_unloaded">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="manager" transfer-ownership="none">
              <type name="Manager" c:type="EthosManager*"/>
            </parameter>
            <parameter name="plugin_info" transfer-ownership="none">
              <type name="PluginInfo" c:type="EthosPluginInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reserved1">
        <callback name="reserved1">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved2">
        <callback name="reserved2">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved3">
        <callback name="reserved3">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved4">
        <callback name="reserved4">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved5">
        <callback name="reserved5">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved6">
        <callback name="reserved6">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved7">
        <callback name="reserved7">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved8">
        <callback name="reserved8">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <record name="ManagerPrivate" c:type="EthosManagerPrivate" disguised="1">
    </record>
    <class name="Plugin"
           c:symbol-prefix="plugin"
           c:type="EthosPlugin"
           parent="GObject.Object"
           glib:type-name="EthosPlugin"
           glib:get-type="ethos_plugin_get_type"
           glib:type-struct="PluginClass">
      <virtual-method name="activated">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <type name="Plugin" c:type="EthosPlugin*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="deactivated">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <type name="Plugin" c:type="EthosPlugin*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <method name="activate" c:identifier="ethos_plugin_activate">
        <doc xml:space="preserve">Activates the plugin so that it may prepare itself for execution.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPlugin</doc>
            <type name="Plugin" c:type="EthosPlugin*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="deactivate" c:identifier="ethos_plugin_deactivate">
        <doc xml:space="preserve">Requests the plugin to deactivate itself so that it may be destroyed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPlugin</doc>
            <type name="Plugin" c:type="EthosPlugin*"/>
          </instance-parameter>
        </parameters>
      </method>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="PluginPrivate" c:type="EthosPluginPrivate*"/>
      </field>
      <glib:signal name="activated" when="first">
        <doc xml:space="preserve">Signal emitted when the plugin has been activated by the #EthosManager
for the process.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="deactivated" when="first">
        <doc xml:space="preserve">Signal emitted when the plugin has been deactivated by the #EthosManager
for the process.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </class>
    <record name="PluginClass"
            c:type="EthosPluginClass"
            glib:is-gtype-struct-for="Plugin">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="activated">
        <callback name="activated">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="plugin" transfer-ownership="none">
              <type name="Plugin" c:type="EthosPlugin*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="deactivated">
        <callback name="deactivated">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="plugin" transfer-ownership="none">
              <type name="Plugin" c:type="EthosPlugin*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reserved1">
        <callback name="reserved1">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved2">
        <callback name="reserved2">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved3">
        <callback name="reserved3">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved4">
        <callback name="reserved4">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <class name="PluginInfo"
           c:symbol-prefix="plugin_info"
           c:type="EthosPluginInfo"
           parent="GObject.Object"
           glib:type-name="EthosPluginInfo"
           glib:get-type="ethos_plugin_info_get_type"
           glib:type-struct="PluginInfoClass">
      <constructor name="new" c:identifier="ethos_plugin_info_new">
        <doc xml:space="preserve">Creates a new #EthosPluginInfo instance.</doc>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve">The newly created #EthosPluginInfo instance.</doc>
          <type name="PluginInfo" c:type="EthosPluginInfo*"/>
        </return-value>
      </constructor>
      <method name="get_active" c:identifier="ethos_plugin_info_get_active">
        <doc xml:space="preserve">Retrieves whether or not the plugin is currently activated.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the plugin is currently active</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_authors"
              c:identifier="ethos_plugin_info_get_authors"
              introspectable="0">
        <doc xml:space="preserve">Retreives the authors of the plugin.</doc>
        <return-value>
          <doc xml:space="preserve">A %NULL terminated array of strings that contain the authors. This value should not be modified or freed.</doc>
          <array c:type="gchar**">
            <type name="utf8"/>
          </array>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_copyright"
              c:identifier="ethos_plugin_info_get_copyright">
        <doc xml:space="preserve">Retrieves the copyright of the plugin</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">A string containing the copyright.  The string should not be modified or freed.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_dependencies"
              c:identifier="ethos_plugin_info_get_dependencies">
        <doc xml:space="preserve">Retrieves the list of dependencies as a string.  The string is a set
of checks that must pass before the plugin can be loaded.

Such as:

 "network &gt;= 0.1 xmpp"

Would require the network plugin 0.1 or greater and any version of the
xmpp plugin.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">A string containing the dependencies or %NULL.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_description"
              c:identifier="ethos_plugin_info_get_description">
        <doc xml:space="preserve">Retrieves the description of the plugin</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">A string containing the description.  The string should not be modified or freed.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_errors"
              c:identifier="ethos_plugin_info_get_errors"
              introspectable="0">
        <doc xml:space="preserve">Retrieves a list of errors that occurred while trying to load the
plugin.  If no errors have occurred, NULL is returned.  The list
is a copy however the #GError&lt;!-- --&gt;s contained are not.  You should
free the list with g_list_free().</doc>
        <return-value>
          <doc xml:space="preserve">A #GList containing #GError&lt;!-- --&gt;s that should be freed with g_list_free().</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="gpointer" c:type="gpointer"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_filename"
              c:identifier="ethos_plugin_info_get_filename">
        <doc xml:space="preserve">Retreives the filename that was used to load the @plugin_info.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">A string or %NULL</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_iage" c:identifier="ethos_plugin_info_get_iage">
        <doc xml:space="preserve">Retreives the interface age that the plugin conforms to.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">a #guint containing the age.</doc>
          <type name="guint" c:type="guint"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_icon_name"
              c:identifier="ethos_plugin_info_get_icon_name">
        <doc xml:space="preserve">Retrieves the icon field for the #EthosPluginInfo</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">A string containing the icon name or %NULL. This value should not be modified or freed.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_id" c:identifier="ethos_plugin_info_get_id">
        <doc xml:space="preserve">Retreives the unique id of the plugin.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The unique id of the plugin which should not be modified or freed.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_loader" c:identifier="ethos_plugin_info_get_loader">
        <doc xml:space="preserve">Retrieves the name of the #EthosPluginLoader that should load the plugin.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The loader to use to load the plugin.  This value should not be modified or freed.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_module" c:identifier="ethos_plugin_info_get_module">
        <doc xml:space="preserve">Retreives the module that implements an #EthosPlugin.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The module of the plugin. This value should not be modified or freed.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_name" c:identifier="ethos_plugin_info_get_name">
        <doc xml:space="preserve">Retrieves the name of the plugin.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The name of the plugin. This value should not be freed or modified.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_version" c:identifier="ethos_plugin_info_get_version">
        <doc xml:space="preserve">Retrieves the version of the plugin</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">the version of the plugin</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_website" c:identifier="ethos_plugin_info_get_website">
        <doc xml:space="preserve">Retrieves the website url of the plugin</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">A string containing the website.  The string should not be modified or freed.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="has_errors" c:identifier="ethos_plugin_info_has_errors">
        <doc xml:space="preserve">Checks whether or not the plugin has had any errors.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the plugin had an error loading.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="load_from_data"
              c:identifier="ethos_plugin_info_load_from_data"
              throws="1">
        <doc xml:space="preserve">Loads the plugin information from a buffer of information. The data
should be in #GKeyFile format.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE on success. @error is set on failure.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">A #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
          <parameter name="group" transfer-ownership="none">
            <doc xml:space="preserve">the group to load information from</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve">a buffer of data</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="length" transfer-ownership="none">
            <doc xml:space="preserve">length of buffer to use</doc>
            <type name="gsize" c:type="gsize"/>
          </parameter>
        </parameters>
      </method>
      <method name="load_from_file"
              c:identifier="ethos_plugin_info_load_from_file"
              throws="1">
        <doc xml:space="preserve">Loads the plugin information found within @filename.  If there is an
error, %FALSE is returned and @error will be set.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE if the data was loaded successfully</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
          <parameter name="group" transfer-ownership="none">
            <doc xml:space="preserve">the keyfile group to extract information from</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="filename" transfer-ownership="none">
            <doc xml:space="preserve">A path to the file containing the plugin info</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="load_from_key_file"
              c:identifier="ethos_plugin_info_load_from_key_file"
              throws="1">
        <doc xml:space="preserve">Loads the plugin information from @key_file.  The information is loaded from the group named
@group within the keyfile.  Therfore, if @group where "Sample Plugin" then the keyfile should
have a group header such as "[Sample Plugin]" within it.

Upon failure, @error is set and %FALSE is returned.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">%TRUE on success</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
          <parameter name="group" transfer-ownership="none">
            <doc xml:space="preserve">the name of the group to load</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="key_file" transfer-ownership="none">
            <doc xml:space="preserve">A #GKeyFile</doc>
            <type name="GLib.KeyFile" c:type="GKeyFile*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_active" c:identifier="ethos_plugin_info_set_active">
        <doc xml:space="preserve">Set the active status of the #EthosPluginInfo.  This is useful so
that gui front-ends can keep track if the plugin is currently in use.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
          <parameter name="active" transfer-ownership="none">
            <doc xml:space="preserve">if the #EthosPluginInfo is active</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_filename"
              c:identifier="ethos_plugin_info_set_filename">
        <doc xml:space="preserve">Sets the filename used to load the plugin-info.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
          <parameter name="filename" transfer-ownership="none">
            <doc xml:space="preserve">The filename</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_id" c:identifier="ethos_plugin_info_set_id">
        <doc xml:space="preserve">Sets the id of the plugin.  This is typically taking from the filename
of the description file.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </instance-parameter>
          <parameter name="id" transfer-ownership="none">
            <doc xml:space="preserve">the id of the plugin</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <property name="active" transfer-ownership="none">
        <doc xml:space="preserve">Whether or not the plugin is currently loaded.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="authors" transfer-ownership="none">
        <doc xml:space="preserve">The list of authors that have contributed to the plugin.</doc>
        <array>
          <type name="utf8"/>
        </array>
      </property>
      <property name="copyright" transfer-ownership="none">
        <doc xml:space="preserve">The copyright the plugin is released under such as "GPL-2".</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="dependencies" transfer-ownership="none">
        <doc xml:space="preserve">Dependencies that must be loaded for the plugin to load.  See
ethos_plugin_info_get_dependencies().</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="description" transfer-ownership="none">
        <doc xml:space="preserve">A short description of the plugin.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="filename" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">The filename that was used to load the plugin.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="icon-name" transfer-ownership="none">
        <doc xml:space="preserve">The name of the icon to display in the manager widgets.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="id" writable="1" transfer-ownership="none">
        <doc xml:space="preserve">Unique identifier for the plugin.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="loader" transfer-ownership="none">
        <doc xml:space="preserve">The name of the #EthosPluginLoader that should be used to load the plugin.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="module" transfer-ownership="none">
        <doc xml:space="preserve">The name of the module that should be used to load the plugin.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="name" transfer-ownership="none">
        <doc xml:space="preserve">The name of the plugin.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="version" transfer-ownership="none">
        <doc xml:space="preserve">The version of the plugin.  See ethos_plugin_info_get_version().</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="website" transfer-ownership="none">
        <doc xml:space="preserve">The website to find more information on the plugin.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="PluginInfoPrivate" c:type="EthosPluginInfoPrivate*"/>
      </field>
      <glib:signal name="loaded" when="first">
        <doc xml:space="preserve">Signal emitted when a new plugin is loaded.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="unloaded" when="first">
        <doc xml:space="preserve">Signal emitted when the plugin is unloaded.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </class>
    <record name="PluginInfoClass"
            c:type="EthosPluginInfoClass"
            glib:is-gtype-struct-for="PluginInfo">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="reserved1">
        <callback name="reserved1">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved2">
        <callback name="reserved2">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved3">
        <callback name="reserved3">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved4">
        <callback name="reserved4">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <record name="PluginInfoPrivate"
            c:type="EthosPluginInfoPrivate"
            disguised="1">
    </record>
    <interface name="PluginLoader"
               c:symbol-prefix="plugin_loader"
               c:type="EthosPluginLoader"
               glib:type-name="EthosPluginLoader"
               glib:get-type="ethos_plugin_loader_get_type"
               glib:type-struct="PluginLoaderIface">
      <virtual-method name="gc" invoker="gc">
        <doc xml:space="preserve">Runs the garbage collector for an associated vm for the plugin loader.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_loader" transfer-ownership="none">
            <type name="PluginLoader" c:type="EthosPluginLoader*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_name" invoker="get_name">
        <doc xml:space="preserve">Retrieves the name of the plugin loader.  The default plugin loader's name
is %NULL.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The name of the plugin loader or %NULL</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_loader" transfer-ownership="none">
            <type name="PluginLoader" c:type="EthosPluginLoader*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="initialize" invoker="initialize">
        <doc xml:space="preserve">Initializes the plugin loader.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_loader" transfer-ownership="none">
            <type name="PluginLoader" c:type="EthosPluginLoader*"/>
          </instance-parameter>
          <parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosManager</doc>
            <type name="Manager" c:type="EthosManager*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="load" invoker="load" introspectable="0" throws="1">
        <doc xml:space="preserve">Creates an instance of the plugin from the information in the
@plugin_info object.

In case of failure, @error is set and %NULL is returned.</doc>
        <return-value>
          <doc xml:space="preserve">The newly created #EthosPlugin instance or %NULL.</doc>
          <type name="Plugin" c:type="EthosPlugin*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_loader" transfer-ownership="none">
            <type name="PluginLoader" c:type="EthosPluginLoader*"/>
          </instance-parameter>
          <parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="register_plugin" invoker="register_plugin">
        <doc xml:space="preserve">For plugin-loaders that do not support creation of #GObjectClass&lt;!-- --&gt;'s during runtime,
this method can be used to instantiate a plugin instance and the plugin-loader will be
notified.  For example, a JavaScript plugin may create an instance of #EthosPlugin and connect
signals rather than creating its own child class.

See ethos_register_runtime_plugin().</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_loader" transfer-ownership="none">
            <type name="PluginLoader" c:type="EthosPluginLoader*"/>
          </instance-parameter>
          <parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPlugin</doc>
            <type name="Plugin" c:type="EthosPlugin*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="unload" invoker="unload">
        <doc xml:space="preserve">Unloads the plugin loader and cleans up related resources.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_loader" transfer-ownership="none">
            <type name="PluginLoader" c:type="EthosPluginLoader*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <method name="gc" c:identifier="ethos_plugin_loader_gc">
        <doc xml:space="preserve">Runs the garbage collector for an associated vm for the plugin loader.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_loader" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginLoader</doc>
            <type name="PluginLoader" c:type="EthosPluginLoader*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_name" c:identifier="ethos_plugin_loader_get_name">
        <doc xml:space="preserve">Retrieves the name of the plugin loader.  The default plugin loader's name
is %NULL.</doc>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve">The name of the plugin loader or %NULL</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_loader" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginLoader</doc>
            <type name="PluginLoader" c:type="EthosPluginLoader*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="initialize" c:identifier="ethos_plugin_loader_initialize">
        <doc xml:space="preserve">Initializes the plugin loader.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_loader" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginLoader</doc>
            <type name="PluginLoader" c:type="EthosPluginLoader*"/>
          </instance-parameter>
          <parameter name="manager" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosManager</doc>
            <type name="Manager" c:type="EthosManager*"/>
          </parameter>
        </parameters>
      </method>
      <method name="load"
              c:identifier="ethos_plugin_loader_load"
              introspectable="0"
              throws="1">
        <doc xml:space="preserve">Creates an instance of the plugin from the information in the
@plugin_info object.

In case of failure, @error is set and %NULL is returned.</doc>
        <return-value>
          <doc xml:space="preserve">The newly created #EthosPlugin instance or %NULL.</doc>
          <type name="Plugin" c:type="EthosPlugin*"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_loader" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginLoader</doc>
            <type name="PluginLoader" c:type="EthosPluginLoader*"/>
          </instance-parameter>
          <parameter name="plugin_info" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginInfo</doc>
            <type name="PluginInfo" c:type="EthosPluginInfo*"/>
          </parameter>
        </parameters>
      </method>
      <method name="register_plugin"
              c:identifier="ethos_plugin_loader_register_plugin">
        <doc xml:space="preserve">For plugin-loaders that do not support creation of #GObjectClass&lt;!-- --&gt;'s during runtime,
this method can be used to instantiate a plugin instance and the plugin-loader will be
notified.  For example, a JavaScript plugin may create an instance of #EthosPlugin and connect
signals rather than creating its own child class.

See ethos_register_runtime_plugin().</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_loader" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginLoader</doc>
            <type name="PluginLoader" c:type="EthosPluginLoader*"/>
          </instance-parameter>
          <parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPlugin</doc>
            <type name="Plugin" c:type="EthosPlugin*"/>
          </parameter>
        </parameters>
      </method>
      <method name="unload" c:identifier="ethos_plugin_loader_unload">
        <doc xml:space="preserve">Unloads the plugin loader and cleans up related resources.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin_loader" transfer-ownership="none">
            <doc xml:space="preserve">An #EthosPluginLoader</doc>
            <type name="PluginLoader" c:type="EthosPluginLoader*"/>
          </instance-parameter>
        </parameters>
      </method>
    </interface>
    <record name="PluginLoaderIface"
            c:type="EthosPluginLoaderIface"
            glib:is-gtype-struct-for="PluginLoader">
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="get_name">
        <callback name="get_name">
          <return-value transfer-ownership="none">
            <doc xml:space="preserve">The name of the plugin loader or %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </return-value>
          <parameters>
            <parameter name="plugin_loader" transfer-ownership="none">
              <type name="PluginLoader" c:type="EthosPluginLoader*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="initialize">
        <callback name="initialize">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="plugin_loader" transfer-ownership="none">
              <type name="PluginLoader" c:type="EthosPluginLoader*"/>
            </parameter>
            <parameter name="manager" transfer-ownership="none">
              <doc xml:space="preserve">An #EthosManager</doc>
              <type name="Manager" c:type="EthosManager*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="unload">
        <callback name="unload">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="plugin_loader" transfer-ownership="none">
              <type name="PluginLoader" c:type="EthosPluginLoader*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="load" introspectable="0">
        <callback name="load" introspectable="0" throws="1">
          <return-value>
            <doc xml:space="preserve">The newly created #EthosPlugin instance or %NULL.</doc>
            <type name="Plugin" c:type="EthosPlugin*"/>
          </return-value>
          <parameters>
            <parameter name="plugin_loader" transfer-ownership="none">
              <type name="PluginLoader" c:type="EthosPluginLoader*"/>
            </parameter>
            <parameter name="plugin_info" transfer-ownership="none">
              <doc xml:space="preserve">An #EthosPluginInfo</doc>
              <type name="PluginInfo" c:type="EthosPluginInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="gc">
        <callback name="gc">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="plugin_loader" transfer-ownership="none">
              <type name="PluginLoader" c:type="EthosPluginLoader*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="register_plugin">
        <callback name="register_plugin">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="plugin_loader" transfer-ownership="none">
              <type name="PluginLoader" c:type="EthosPluginLoader*"/>
            </parameter>
            <parameter name="plugin" transfer-ownership="none">
              <doc xml:space="preserve">An #EthosPlugin</doc>
              <type name="Plugin" c:type="EthosPlugin*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reserved1">
        <callback name="reserved1">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved2">
        <callback name="reserved2">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved3">
        <callback name="reserved3">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved4">
        <callback name="reserved4">
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <record name="PluginPrivate" c:type="EthosPluginPrivate" disguised="1">
    </record>
    <function name="error_quark"
              c:identifier="ethos_error_quark"
              moved-to="Error.quark">
      <doc xml:space="preserve">Retrieves the error domain for ethos.</doc>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve">the #GQuark for ethos</doc>
        <type name="GLib.Quark" c:type="GQuark"/>
      </return-value>
    </function>
    <function name="register_runtime_plugin"
              c:identifier="ethos_register_runtime_plugin">
      <doc xml:space="preserve">This is a helper method that can be used by plugins whom were loaded
by a loader that does not have access to reading into the plugin's
vm.  This will look to see what plugin loader is active and deliver
it to the loader.

See ethos_plugin_loader_register_plugin().</doc>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="plugin" transfer-ownership="none">
          <doc xml:space="preserve">An #EthosPlugin</doc>
          <type name="Plugin" c:type="EthosPlugin*"/>
        </parameter>
      </parameters>
    </function>
  </namespace>
</repository>
