<?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:doc="http://www.gtk.org/introspection/doc/1.0"
            xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
  <include name="GObject" version="2.0"/>
  <include name="Gtk" version="3.0"/>
  <doc:format name="unknown"/>
  <namespace name="Thunarx"
             version="3.0"
             shared-library="libthunarx-3.so.0.2"
             c:identifier-prefixes="Thunarx"
             c:symbol-prefixes="thunarx">
    <function-macro name="CHECK_VERSION"
                    c:identifier="THUNARX_CHECK_VERSION"
                    introspectable="0">
      <source-position filename="thunarx-config.h" line="36"/>
      <parameters>
        <parameter name="major">
        </parameter>
        <parameter name="minor">
        </parameter>
        <parameter name="micro">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DEFINE_ABSTRACT_TYPE"
                    c:identifier="THUNARX_DEFINE_ABSTRACT_TYPE"
                    introspectable="0">
      <source-position filename="thunarx.h" line="42"/>
      <parameters>
        <parameter name="TN">
        </parameter>
        <parameter name="t_n">
        </parameter>
        <parameter name="T_P">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DEFINE_ABSTRACT_TYPE_WITH_CODE"
                    c:identifier="THUNARX_DEFINE_ABSTRACT_TYPE_WITH_CODE"
                    introspectable="0">
      <source-position filename="thunarx.h" line="43"/>
      <parameters>
        <parameter name="TN">
        </parameter>
        <parameter name="t_n">
        </parameter>
        <parameter name="T_P">
        </parameter>
        <parameter name="_C_">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DEFINE_TYPE"
                    c:identifier="THUNARX_DEFINE_TYPE"
                    introspectable="0">
      <source-position filename="thunarx.h" line="40"/>
      <parameters>
        <parameter name="TN">
        </parameter>
        <parameter name="t_n">
        </parameter>
        <parameter name="T_P">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DEFINE_TYPE_EXTENDED"
                    c:identifier="THUNARX_DEFINE_TYPE_EXTENDED"
                    introspectable="0">
      <source-position filename="thunarx.h" line="45"/>
      <parameters>
        <parameter name="TypeName">
        </parameter>
        <parameter name="type_name">
        </parameter>
        <parameter name="TYPE_PARENT">
        </parameter>
        <parameter name="flags">
        </parameter>
        <parameter name="CODE">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DEFINE_TYPE_WITH_CODE"
                    c:identifier="THUNARX_DEFINE_TYPE_WITH_CODE"
                    introspectable="0">
      <source-position filename="thunarx.h" line="41"/>
      <parameters>
        <parameter name="TN">
        </parameter>
        <parameter name="t_n">
        </parameter>
        <parameter name="T_P">
        </parameter>
        <parameter name="_C_">
        </parameter>
      </parameters>
    </function-macro>
    <constant name="FILESYSTEM_INFO_NAMESPACE"
              value="filesystem::*"
              c:type="THUNARX_FILESYSTEM_INFO_NAMESPACE">
      <source-position filename="thunarx-file-info.h" line="46"/>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <function-macro name="FILE_INFO"
                    c:identifier="THUNARX_FILE_INFO"
                    introspectable="0">
      <source-position filename="thunarx-file-info.h" line="52"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="FILE_INFO_GET_IFACE"
                    c:identifier="THUNARX_FILE_INFO_GET_IFACE"
                    introspectable="0">
      <source-position filename="thunarx-file-info.h" line="54"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <constant name="FILE_INFO_NAMESPACE"
              value="access::*,id::filesystem,mountable::can-mount,standard::target-uri,preview::*,standard::type,standard::is-hidden,standard::is-backup,standard::is-symlink,standard::name,standard::display-name,standard::size,standard::allocated-size,standard::symlink-target,time::*,trash::*,recent::*,unix::gid,unix::uid,unix::mode,unix::is-mountpoint,metadata::emblems,metadata::thunar-view-type,metadata::thunar-sort-column,metadata::thunar-sort-order,metadata::thunar-zoom-level,metadata::thunar-zoom-level-ThunarDetailsView,metadata::thunar-zoom-level-ThunarIconView,metadata::thunar-zoom-level-ThunarCompactView,metadata::thunar-highlight-color-background,metadata::thunar-highlight-color-foreground"
              c:type="THUNARX_FILE_INFO_NAMESPACE">
      <source-position filename="thunarx-file-info.h" line="39"/>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <interface name="FileInfo"
               c:symbol-prefix="file_info"
               c:type="ThunarxFileInfo"
               glib:type-name="ThunarxFileInfo"
               glib:get-type="thunarx_file_info_get_type"
               glib:type-struct="FileInfoIface">
      <source-position filename="thunarx-file-info.h" line="137"/>
      <virtual-method name="changed" invoker="changed">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="363">Emits the ::changed signal on @file_info. This method should not
be invoked by Thunar plugins, instead the file manager itself
will use this method to emit ::changed whenever it notices a
change on @file_info.</doc>
        <source-position filename="thunarx-file-info.h" line="130"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="365">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_file_info" invoker="get_file_info">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="298">Returns the #GFileInfo associated with @file_info,
which includes additional information about the @file_info
as queried from GIO earlier. The caller is responsible to free the
returned #GFileInfo object using g_object_unref() when
no longer needed.</doc>
        <source-position filename="thunarx-file-info.h" line="114"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="308">the #GFileInfo object associated with @file_info,
         which MUST be freed using g_object_unref().</doc>
          <type name="Gio.FileInfo" c:type="GFileInfo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="300">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_filesystem_info" invoker="get_filesystem_info">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="320">Returns the #GFileInfo which includes additional information about
the filesystem @file_info resides on. The caller is responsible to
free the returned #GFileInfo object using g_object_unref() when
no longer needed.</doc>
        <source-position filename="thunarx-file-info.h" line="115"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="329">the #GFileInfo containing information about the
         filesystem of @file_info or %NULL if no filesystem information is
         available. It MUST be released using g_object_unref().</doc>
          <type name="Gio.FileInfo" c:type="GFileInfo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="322">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_location" invoker="get_location">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="342">Returns the #GFile @file_info points to. The #GFile is a more
powerful tool than just the URI or the path. The caller
is responsible to release the returned #GFile using g_object_unref()
when no longer needed.</doc>
        <source-position filename="thunarx-file-info.h" line="116"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="351">the #GFile to which @file_info points. It MUST be
         released using g_object_unref().</doc>
          <type name="Gio.File" c:type="GFile*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="344">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_mime_type" invoker="get_mime_type">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="221">Returns the MIME-type of the file represented by
@file_info or %NULL if no MIME-type is known for
@file_info.

The caller is responsible to free the returned
string using g_free() when no longer needed.</doc>
        <source-position filename="thunarx-file-info.h" line="108"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="232">the MIME-type for @file_info or
              %NULL.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="223">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_name" invoker="get_name">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="122">Returns the real name of the file represented
by @file_info in the local file system encoding.
You can use g_filename_display_name() or similar
functions to generate an UTF-8 version of the
name, which is suitable for use in the user
interface.

The caller is responsible to free the returned
string using g_free() when no longer needed.</doc>
        <source-position filename="thunarx-file-info.h" line="102"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="136">the real name of the file represented
              by @file_info.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="124">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_parent_uri" invoker="get_parent_uri">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="171">Returns the URI to the parent file of
@file_info or %NULL if @file_info has
no parent. Note that the parent URI
may be of a different type than the
URI of @file_info. For example, the
parent of "file:///" is "computer:///".

The caller is responsible to free the
returned string using g_free() when no
longer needed.</doc>
        <source-position filename="thunarx-file-info.h" line="105"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="186">the parent URI for @file_info
              or %NULL.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="173">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_uri" invoker="get_uri">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="148">Returns the escaped, fully qualified URI
of the file object represented by @file_info.
You may use g_filename_from_uri() and similar
functions to work with the returned URI.

The caller is responsible to free the returned
string using g_free() when no longer needed.</doc>
        <source-position filename="thunarx-file-info.h" line="104"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="160">the fully qualified URI of @file_info.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="150">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_uri_scheme" invoker="get_uri_scheme">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="198">Returns the URI scheme of the file represented
by @file_info. E.g. if @file_info refers to the
file "file:///usr/home", the return value will
be "file".

The caller is responsible to free the returned
string using g_free() when no longer needed.</doc>
        <source-position filename="thunarx-file-info.h" line="106"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="210">the URI scheme for @file_info.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="200">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="has_mime_type" invoker="has_mime_type">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="244">Checks whether @file_info is of the given @mime_type
or whether the MIME-type of @file_info is a subclass
of @mime_type.

This is the preferred way for most extensions to check
whether they support a given file or not, and you should
consider using this method rather than
thunarx_file_info_get_mime_type(). A simple example would
be a menu extension that performs a certain action on
text files. In this case you want to check whether a given
#ThunarxFileInfo refers to any kind of text file, not only
to "text/plain" (e.g. this also includes "text/xml" and
"application/x-desktop").

But you should be aware that this method may take some
time to test whether @mime_type is valid for @file_info,
so don't call it too often.</doc>
        <source-position filename="thunarx-file-info.h" line="109"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="267">%TRUE if @mime_type is valid for @file_info,
              else %FALSE.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="246">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
          <parameter name="mime_type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="247">a MIME-type (e.g. "text/plain").</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="is_directory" invoker="is_directory">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="281">Checks whether @file_info refers to a directory.</doc>
        <source-position filename="thunarx-file-info.h" line="112"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="287">%TRUE if @file_info is a directory.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="283">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="renamed" invoker="renamed">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="381">Emits the ::renamed signal on @file_info. This method should
not be invoked by Thunar plugins, instead the file manager
will emit this signal whenever the user renamed the @file_info.

The plugins should instead connect to the ::renamed signal
and update it's internal state and it's user interface
after the file manager renamed a file.</doc>
        <source-position filename="thunarx-file-info.h" line="131"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="383">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <method name="changed" c:identifier="thunarx_file_info_changed">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="363">Emits the ::changed signal on @file_info. This method should not
be invoked by Thunar plugins, instead the file manager itself
will use this method to emit ::changed whenever it notices a
change on @file_info.</doc>
        <source-position filename="thunarx-file-info.h" line="168"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="365">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_file_info"
              c:identifier="thunarx_file_info_get_file_info">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="298">Returns the #GFileInfo associated with @file_info,
which includes additional information about the @file_info
as queried from GIO earlier. The caller is responsible to free the
returned #GFileInfo object using g_object_unref() when
no longer needed.</doc>
        <source-position filename="thunarx-file-info.h" line="161"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="308">the #GFileInfo object associated with @file_info,
         which MUST be freed using g_object_unref().</doc>
          <type name="Gio.FileInfo" c:type="GFileInfo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="300">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_filesystem_info"
              c:identifier="thunarx_file_info_get_filesystem_info">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="320">Returns the #GFileInfo which includes additional information about
the filesystem @file_info resides on. The caller is responsible to
free the returned #GFileInfo object using g_object_unref() when
no longer needed.</doc>
        <source-position filename="thunarx-file-info.h" line="163"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="329">the #GFileInfo containing information about the
         filesystem of @file_info or %NULL if no filesystem information is
         available. It MUST be released using g_object_unref().</doc>
          <type name="Gio.FileInfo" c:type="GFileInfo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="322">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_location"
              c:identifier="thunarx_file_info_get_location">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="342">Returns the #GFile @file_info points to. The #GFile is a more
powerful tool than just the URI or the path. The caller
is responsible to release the returned #GFile using g_object_unref()
when no longer needed.</doc>
        <source-position filename="thunarx-file-info.h" line="165"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="351">the #GFile to which @file_info points. It MUST be
         released using g_object_unref().</doc>
          <type name="Gio.File" c:type="GFile*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="344">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_mime_type"
              c:identifier="thunarx_file_info_get_mime_type">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="221">Returns the MIME-type of the file represented by
@file_info or %NULL if no MIME-type is known for
@file_info.

The caller is responsible to free the returned
string using g_free() when no longer needed.</doc>
        <source-position filename="thunarx-file-info.h" line="152"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="232">the MIME-type for @file_info or
              %NULL.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="223">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_name" c:identifier="thunarx_file_info_get_name">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="122">Returns the real name of the file represented
by @file_info in the local file system encoding.
You can use g_filename_display_name() or similar
functions to generate an UTF-8 version of the
name, which is suitable for use in the user
interface.

The caller is responsible to free the returned
string using g_free() when no longer needed.</doc>
        <source-position filename="thunarx-file-info.h" line="143"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="136">the real name of the file represented
              by @file_info.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="124">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_parent_uri"
              c:identifier="thunarx_file_info_get_parent_uri">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="171">Returns the URI to the parent file of
@file_info or %NULL if @file_info has
no parent. Note that the parent URI
may be of a different type than the
URI of @file_info. For example, the
parent of "file:///" is "computer:///".

The caller is responsible to free the
returned string using g_free() when no
longer needed.</doc>
        <source-position filename="thunarx-file-info.h" line="147"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="186">the parent URI for @file_info
              or %NULL.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="173">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_uri" c:identifier="thunarx_file_info_get_uri">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="148">Returns the escaped, fully qualified URI
of the file object represented by @file_info.
You may use g_filename_from_uri() and similar
functions to work with the returned URI.

The caller is responsible to free the returned
string using g_free() when no longer needed.</doc>
        <source-position filename="thunarx-file-info.h" line="145"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="160">the fully qualified URI of @file_info.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="150">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_uri_scheme"
              c:identifier="thunarx_file_info_get_uri_scheme">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="198">Returns the URI scheme of the file represented
by @file_info. E.g. if @file_info refers to the
file "file:///usr/home", the return value will
be "file".

The caller is responsible to free the returned
string using g_free() when no longer needed.</doc>
        <source-position filename="thunarx-file-info.h" line="149"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="210">the URI scheme for @file_info.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="200">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="has_mime_type"
              c:identifier="thunarx_file_info_has_mime_type">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="244">Checks whether @file_info is of the given @mime_type
or whether the MIME-type of @file_info is a subclass
of @mime_type.

This is the preferred way for most extensions to check
whether they support a given file or not, and you should
consider using this method rather than
thunarx_file_info_get_mime_type(). A simple example would
be a menu extension that performs a certain action on
text files. In this case you want to check whether a given
#ThunarxFileInfo refers to any kind of text file, not only
to "text/plain" (e.g. this also includes "text/xml" and
"application/x-desktop").

But you should be aware that this method may take some
time to test whether @mime_type is valid for @file_info,
so don't call it too often.</doc>
        <source-position filename="thunarx-file-info.h" line="154"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="267">%TRUE if @mime_type is valid for @file_info,
              else %FALSE.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="246">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
          <parameter name="mime_type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="247">a MIME-type (e.g. "text/plain").</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="is_directory"
              c:identifier="thunarx_file_info_is_directory">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="281">Checks whether @file_info refers to a directory.</doc>
        <source-position filename="thunarx-file-info.h" line="158"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="287">%TRUE if @file_info is a directory.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="283">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="renamed" c:identifier="thunarx_file_info_renamed">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="381">Emits the ::renamed signal on @file_info. This method should
not be invoked by Thunar plugins, instead the file manager
will emit this signal whenever the user renamed the @file_info.

The plugins should instead connect to the ::renamed signal
and update it's internal state and it's user interface
after the file manager renamed a file.</doc>
        <source-position filename="thunarx-file-info.h" line="170"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="file_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="383">a #ThunarxFileInfo.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <glib:signal name="changed" when="first">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="74">Emitted whenever the system notices a change to @file_info.

Thunar plugins should use this signal to stay informed about
changes to a @file_info for which they currently display
information (i.e. in a #ThunarxPropertyPage), and update
it's user interface whenever a change is noticed on @file_info.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="renamed" when="first">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="94">Emitted when the @file_info is renamed to another
name.

For example, within Thunar, #ThunarFolder uses this
signal to reregister it's VFS directory monitor, after
the corresponding file was renamed.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </interface>
    <record name="FileInfoIface"
            c:type="ThunarxFileInfoIface"
            glib:is-gtype-struct-for="FileInfo">
      <doc xml:space="preserve"
           filename="thunarx-file-info.h"
           line="75">Interface with virtual methods implemented by the file manager and accessible
from the extensions.</doc>
      <source-position filename="thunarx-file-info.h" line="137"/>
      <field name="__parent__" readable="0" private="1">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="get_name">
        <doc xml:space="preserve"
             filename="thunarx-file-info.h"
             line="77">See thunarx_file_info_get_name().</doc>
        <callback name="get_name">
          <source-position filename="thunarx-file-info.h" line="102"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="136">the real name of the file represented
              by @file_info.</doc>
            <type name="utf8" c:type="gchar*"/>
          </return-value>
          <parameters>
            <parameter name="file_info" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-file-info.c"
                   line="124">a #ThunarxFileInfo.</doc>
              <type name="FileInfo" c:type="ThunarxFileInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_uri">
        <doc xml:space="preserve"
             filename="thunarx-file-info.h"
             line="78">See thunarx_file_info_get_uri().</doc>
        <callback name="get_uri">
          <source-position filename="thunarx-file-info.h" line="104"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="160">the fully qualified URI of @file_info.</doc>
            <type name="utf8" c:type="gchar*"/>
          </return-value>
          <parameters>
            <parameter name="file_info" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-file-info.c"
                   line="150">a #ThunarxFileInfo.</doc>
              <type name="FileInfo" c:type="ThunarxFileInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_parent_uri">
        <doc xml:space="preserve"
             filename="thunarx-file-info.h"
             line="79">See thunarx_file_info_get_parent_uri().</doc>
        <callback name="get_parent_uri">
          <source-position filename="thunarx-file-info.h" line="105"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="186">the parent URI for @file_info
              or %NULL.</doc>
            <type name="utf8" c:type="gchar*"/>
          </return-value>
          <parameters>
            <parameter name="file_info" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-file-info.c"
                   line="173">a #ThunarxFileInfo.</doc>
              <type name="FileInfo" c:type="ThunarxFileInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_uri_scheme">
        <doc xml:space="preserve"
             filename="thunarx-file-info.h"
             line="80">See thunarx_file_info_get_uri_scheme().</doc>
        <callback name="get_uri_scheme">
          <source-position filename="thunarx-file-info.h" line="106"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="210">the URI scheme for @file_info.</doc>
            <type name="utf8" c:type="gchar*"/>
          </return-value>
          <parameters>
            <parameter name="file_info" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-file-info.c"
                   line="200">a #ThunarxFileInfo.</doc>
              <type name="FileInfo" c:type="ThunarxFileInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_mime_type">
        <doc xml:space="preserve"
             filename="thunarx-file-info.h"
             line="81">See thunarx_file_info_get_mime_type().</doc>
        <callback name="get_mime_type">
          <source-position filename="thunarx-file-info.h" line="108"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="232">the MIME-type for @file_info or
              %NULL.</doc>
            <type name="utf8" c:type="gchar*"/>
          </return-value>
          <parameters>
            <parameter name="file_info" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-file-info.c"
                   line="223">a #ThunarxFileInfo.</doc>
              <type name="FileInfo" c:type="ThunarxFileInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="has_mime_type">
        <doc xml:space="preserve"
             filename="thunarx-file-info.h"
             line="82">See thunarx_file_info_has_mime_type().</doc>
        <callback name="has_mime_type">
          <source-position filename="thunarx-file-info.h" line="109"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="267">%TRUE if @mime_type is valid for @file_info,
              else %FALSE.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="file_info" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-file-info.c"
                   line="246">a #ThunarxFileInfo.</doc>
              <type name="FileInfo" c:type="ThunarxFileInfo*"/>
            </parameter>
            <parameter name="mime_type" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-file-info.c"
                   line="247">a MIME-type (e.g. "text/plain").</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="is_directory">
        <doc xml:space="preserve"
             filename="thunarx-file-info.h"
             line="83">See thunarx_file_info_is_directory().</doc>
        <callback name="is_directory">
          <source-position filename="thunarx-file-info.h" line="112"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="287">%TRUE if @file_info is a directory.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="file_info" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-file-info.c"
                   line="283">a #ThunarxFileInfo.</doc>
              <type name="FileInfo" c:type="ThunarxFileInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_file_info">
        <doc xml:space="preserve"
             filename="thunarx-file-info.h"
             line="84">See thunarx_file_info_get_file_info().</doc>
        <callback name="get_file_info">
          <source-position filename="thunarx-file-info.h" line="114"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="308">the #GFileInfo object associated with @file_info,
         which MUST be freed using g_object_unref().</doc>
            <type name="Gio.FileInfo" c:type="GFileInfo*"/>
          </return-value>
          <parameters>
            <parameter name="file_info" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-file-info.c"
                   line="300">a #ThunarxFileInfo.</doc>
              <type name="FileInfo" c:type="ThunarxFileInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_filesystem_info">
        <doc xml:space="preserve"
             filename="thunarx-file-info.h"
             line="85">See thunarx_filesystem_info_get_filesystem_info().</doc>
        <callback name="get_filesystem_info">
          <source-position filename="thunarx-file-info.h" line="115"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="329">the #GFileInfo containing information about the
         filesystem of @file_info or %NULL if no filesystem information is
         available. It MUST be released using g_object_unref().</doc>
            <type name="Gio.FileInfo" c:type="GFileInfo*"/>
          </return-value>
          <parameters>
            <parameter name="file_info" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-file-info.c"
                   line="322">a #ThunarxFileInfo.</doc>
              <type name="FileInfo" c:type="ThunarxFileInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_location">
        <doc xml:space="preserve"
             filename="thunarx-file-info.h"
             line="86">See thunarx_location_get_location().</doc>
        <callback name="get_location">
          <source-position filename="thunarx-file-info.h" line="116"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="351">the #GFile to which @file_info points. It MUST be
         released using g_object_unref().</doc>
            <type name="Gio.File" c:type="GFile*"/>
          </return-value>
          <parameters>
            <parameter name="file_info" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-file-info.c"
                   line="344">a #ThunarxFileInfo.</doc>
              <type name="FileInfo" c:type="ThunarxFileInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reserved0">
        <callback name="reserved0">
          <source-position filename="thunarx-file-info.h" line="119"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved1">
        <callback name="reserved1">
          <source-position filename="thunarx-file-info.h" line="120"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved2">
        <callback name="reserved2">
          <source-position filename="thunarx-file-info.h" line="121"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved3">
        <callback name="reserved3">
          <source-position filename="thunarx-file-info.h" line="122"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved4">
        <callback name="reserved4">
          <source-position filename="thunarx-file-info.h" line="123"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved5">
        <callback name="reserved5">
          <source-position filename="thunarx-file-info.h" line="124"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved6">
        <callback name="reserved6">
          <source-position filename="thunarx-file-info.h" line="125"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="changed">
        <doc xml:space="preserve"
             filename="thunarx-file-info.h"
             line="87">See thunarx_file_info_changed().</doc>
        <callback name="changed">
          <source-position filename="thunarx-file-info.h" line="130"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="file_info" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-file-info.c"
                   line="365">a #ThunarxFileInfo.</doc>
              <type name="FileInfo" c:type="ThunarxFileInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="renamed">
        <doc xml:space="preserve"
             filename="thunarx-file-info.h"
             line="88">See thunarx_file_info_renamed().</doc>
        <callback name="renamed">
          <source-position filename="thunarx-file-info.h" line="131"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="file_info" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-file-info.c"
                   line="383">a #ThunarxFileInfo.</doc>
              <type name="FileInfo" c:type="ThunarxFileInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reserved7">
        <callback name="reserved7">
          <source-position filename="thunarx-file-info.h" line="134"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved8">
        <callback name="reserved8">
          <source-position filename="thunarx-file-info.h" line="135"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved9">
        <callback name="reserved9">
          <source-position filename="thunarx-file-info.h" line="136"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <glib:boxed glib:name="FileInfoList"
                c:symbol-prefix="file_info_list"
                glib:type-name="ThunarxFileInfoList"
                glib:get-type="thunarx_file_info_list_get_type">
      <function name="copy" c:identifier="thunarx_file_info_list_copy">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="419">Does a deep copy of @file_infos and returns the
new list.</doc>
        <source-position filename="thunarx-file-info.h" line="179"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="426">a copy of @file_infos.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="FileInfo"/>
          </type>
        </return-value>
        <parameters>
          <parameter name="file_infos" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="421">a #GList of #ThunarxFileInfo&lt;!----&gt;s.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="FileInfo"/>
            </type>
          </parameter>
        </parameters>
      </function>
      <function name="free" c:identifier="thunarx_file_info_list_free">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="436">Frees the resources allocated for the @file_infos
list and decreases the reference count on the
#ThunarxFileInfo&lt;!----&gt;s contained within.</doc>
        <source-position filename="thunarx-file-info.h" line="181"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="file_infos" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-file-info.c"
                 line="438">a #GList of #ThunarxFileInfo&lt;!----&gt;s.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="FileInfo"/>
            </type>
          </parameter>
        </parameters>
      </function>
    </glib:boxed>
    <function-macro name="IMPLEMENT_INTERFACE"
                    c:identifier="THUNARX_IMPLEMENT_INTERFACE"
                    introspectable="0">
      <source-position filename="thunarx.h" line="87"/>
      <parameters>
        <parameter name="TYPE_IFACE">
        </parameter>
        <parameter name="iface_init">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_FILE_INFO"
                    c:identifier="THUNARX_IS_FILE_INFO"
                    introspectable="0">
      <source-position filename="thunarx-file-info.h" line="53"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_MENU"
                    c:identifier="THUNARX_IS_MENU"
                    introspectable="0">
      <source-position filename="thunarx-menu.h" line="46"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_MENU_CLASS"
                    c:identifier="THUNARX_IS_MENU_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-menu.h" line="47"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_MENU_ITEM"
                    c:identifier="THUNARX_IS_MENU_ITEM"
                    introspectable="0">
      <source-position filename="thunarx-menu.h" line="54"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_MENU_ITEM_CLASS"
                    c:identifier="THUNARX_IS_MENU_ITEM_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-menu.h" line="55"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_MENU_PROVIDER"
                    c:identifier="THUNARX_IS_MENU_PROVIDER"
                    introspectable="0">
      <source-position filename="thunarx-menu-provider.h" line="39"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_PREFERENCES_PROVIDER"
                    c:identifier="THUNARX_IS_PREFERENCES_PROVIDER"
                    introspectable="0">
      <source-position filename="thunarx-preferences-provider.h" line="37"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_PROPERTY_PAGE"
                    c:identifier="THUNARX_IS_PROPERTY_PAGE"
                    introspectable="0">
      <source-position filename="thunarx-property-page.h" line="39"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_PROPERTY_PAGE_CLASS"
                    c:identifier="THUNARX_IS_PROPERTY_PAGE_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-property-page.h" line="40"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_PROPERTY_PAGE_PROVIDER"
                    c:identifier="THUNARX_IS_PROPERTY_PAGE_PROVIDER"
                    introspectable="0">
      <source-position filename="thunarx-property-page-provider.h" line="37"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_PROVIDER_FACTORY"
                    c:identifier="THUNARX_IS_PROVIDER_FACTORY"
                    introspectable="0">
      <source-position filename="thunarx-provider-factory.h" line="38"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_PROVIDER_FACTORY_CLASS"
                    c:identifier="THUNARX_IS_PROVIDER_FACTORY_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-provider-factory.h" line="39"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_PROVIDER_MODULE"
                    c:identifier="THUNARX_IS_PROVIDER_MODULE"
                    introspectable="0">
      <source-position filename="thunarx-provider-module.h" line="36"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_PROVIDER_MODULE_CLASS"
                    c:identifier="THUNARX_IS_PROVIDER_MODULE_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-provider-module.h" line="37"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_PROVIDER_PLUGIN"
                    c:identifier="THUNARX_IS_PROVIDER_PLUGIN"
                    introspectable="0">
      <source-position filename="thunarx-provider-plugin.h" line="35"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_RENAMER"
                    c:identifier="THUNARX_IS_RENAMER"
                    introspectable="0">
      <source-position filename="thunarx-renamer.h" line="41"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_RENAMER_CLASS"
                    c:identifier="THUNARX_IS_RENAMER_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-renamer.h" line="42"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_RENAMER_PROVIDER"
                    c:identifier="THUNARX_IS_RENAMER_PROVIDER"
                    introspectable="0">
      <source-position filename="thunarx-renamer-provider.h" line="37"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <constant name="MAJOR_VERSION" value="4" c:type="THUNARX_MAJOR_VERSION">
      <source-position filename="thunarx-config.h" line="32"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <function-macro name="MENU" c:identifier="THUNARX_MENU" introspectable="0">
      <source-position filename="thunarx-menu.h" line="44"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="MENU_CLASS"
                    c:identifier="THUNARX_MENU_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-menu.h" line="45"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="MENU_GET_CLASS"
                    c:identifier="THUNARX_MENU_GET_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-menu.h" line="48"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="MENU_ITEM"
                    c:identifier="THUNARX_MENU_ITEM"
                    introspectable="0">
      <source-position filename="thunarx-menu.h" line="52"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="MENU_ITEM_CLASS"
                    c:identifier="THUNARX_MENU_ITEM_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-menu.h" line="53"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="MENU_ITEM_GET_CLASS"
                    c:identifier="THUNARX_MENU_ITEM_GET_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-menu.h" line="56"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="MENU_PROVIDER"
                    c:identifier="THUNARX_MENU_PROVIDER"
                    introspectable="0">
      <source-position filename="thunarx-menu-provider.h" line="38"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="MENU_PROVIDER_GET_IFACE"
                    c:identifier="THUNARX_MENU_PROVIDER_GET_IFACE"
                    introspectable="0">
      <source-position filename="thunarx-menu-provider.h" line="40"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <constant name="MICRO_VERSION" value="9" c:type="THUNARX_MICRO_VERSION">
      <source-position filename="thunarx-config.h" line="34"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <constant name="MINOR_VERSION" value="20" c:type="THUNARX_MINOR_VERSION">
      <source-position filename="thunarx-config.h" line="33"/>
      <type name="gint" c:type="gint"/>
    </constant>
    <class name="Menu"
           c:symbol-prefix="menu"
           c:type="ThunarxMenu"
           parent="GObject.Object"
           glib:type-name="ThunarxMenu"
           glib:get-type="thunarx_menu_get_type"
           glib:type-struct="MenuClass">
      <source-position filename="thunarx-menu.h" line="64"/>
      <constructor name="new" c:identifier="thunarx_menu_new">
        <doc xml:space="preserve"
             filename="thunarx-menu.c"
             line="92">Creates a new menu that can be added to the toolbar or to a contextual menu.</doc>
        <source-position filename="thunarx-menu.h" line="92"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-menu.c"
               line="97">a newly created #ThunarxMenu</doc>
          <type name="Menu" c:type="ThunarxMenu*"/>
        </return-value>
      </constructor>
      <method name="append_item" c:identifier="thunarx_menu_append_item">
        <source-position filename="thunarx-menu.h" line="95"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="menu" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu.c"
                 line="109">a #ThunarxMenu</doc>
            <type name="Menu" c:type="ThunarxMenu*"/>
          </instance-parameter>
          <parameter name="item" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu.c"
                 line="110">a #ThunarxMenuItem</doc>
            <type name="MenuItem" c:type="ThunarxMenuItem*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_items" c:identifier="thunarx_menu_get_items">
        <source-position filename="thunarx-menu.h" line="103"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-menu.c"
               line="143">the provided #ThunarxMenuItem list
Must be freed with thunarx_menu_item_list_free() after usage</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="MenuItem"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="menu" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu.c"
                 line="141">a #ThunarxMenu</doc>
            <type name="Menu" c:type="ThunarxMenu*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="prepend_item" c:identifier="thunarx_menu_prepend_item">
        <source-position filename="thunarx-menu.h" line="99"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="menu" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu.c"
                 line="125">a #ThunarxMenu</doc>
            <type name="Menu" c:type="ThunarxMenu*"/>
          </instance-parameter>
          <parameter name="item" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu.c"
                 line="126">a #ThunarxMenuItem</doc>
            <type name="MenuItem" c:type="ThunarxMenuItem*"/>
          </parameter>
        </parameters>
      </method>
      <field name="__parent__">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="MenuPrivate" c:type="ThunarxMenuPrivate*"/>
      </field>
    </class>
    <record name="MenuClass"
            c:type="ThunarxMenuClass"
            glib:is-gtype-struct-for="Menu">
      <source-position filename="thunarx-menu.h" line="64"/>
      <field name="__parent__">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <class name="MenuItem"
           c:symbol-prefix="menu_item"
           c:type="ThunarxMenuItem"
           parent="GObject.Object"
           glib:type-name="ThunarxMenuItem"
           glib:get-type="thunarx_menu_item_get_type"
           glib:type-struct="MenuItemClass">
      <source-position filename="thunarx-menu.h" line="77"/>
      <constructor name="new" c:identifier="thunarx_menu_item_new">
        <doc xml:space="preserve"
             filename="thunarx-menu-item.c"
             line="309">Creates a new menu item that can be added to the toolbar or to a contextual menu.</doc>
        <source-position filename="thunarx-menu.h" line="110"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-menu-item.c"
               line="320">a newly created #ThunarxMenuItem</doc>
          <type name="MenuItem" c:type="ThunarxMenuItem*"/>
        </return-value>
        <parameters>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-item.c"
                 line="311">identifier for the menu item</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="label" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-item.c"
                 line="312">user-visible label of the menu item</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="tooltip" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-item.c"
                 line="313">tooltip of the menu item</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="icon" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-item.c"
                 line="314">textual representation of the icon to display in the menu
       item, as returned by g_icon_to_string(). A path or icon name
       are valid representations too.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <function name="list_free" c:identifier="thunarx_menu_item_list_free">
        <source-position filename="thunarx-menu.h" line="125"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="items" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-item.c"
                 line="409">a list of #ThunarxMenuItem</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="MenuItem"/>
            </type>
          </parameter>
        </parameters>
      </function>
      <virtual-method name="activate">
        <source-position filename="thunarx-menu.h" line="76"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="item" transfer-ownership="none">
            <type name="MenuItem" c:type="ThunarxMenuItem*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <method name="activate" c:identifier="thunarx_menu_item_activate">
        <doc xml:space="preserve"
             filename="thunarx-menu-item.c"
             line="341">Emits the activate signal.</doc>
        <source-position filename="thunarx-menu.h" line="116"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="item" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-item.c"
                 line="343">pointer to a #ThunarxMenuItem instance</doc>
            <type name="MenuItem" c:type="ThunarxMenuItem*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_sensitive"
              c:identifier="thunarx_menu_item_get_sensitive"
              glib:get-property="sensitive">
        <doc xml:space="preserve"
             filename="thunarx-menu-item.c"
             line="356">Returns whether the menu item is sensitive.</doc>
        <source-position filename="thunarx-menu.h" line="119"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="item" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-item.c"
                 line="358">pointer to a #ThunarxMenuItem instance</doc>
            <type name="MenuItem" c:type="ThunarxMenuItem*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_menu"
              c:identifier="thunarx_menu_item_set_menu"
              glib:set-property="menu">
        <doc xml:space="preserve"
             filename="thunarx-menu-item.c"
             line="388">Attaches @menu to menu item.</doc>
        <source-position filename="thunarx-menu.h" line="128"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="item" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-item.c"
                 line="390">pointer to a #ThunarxMenuItem instance</doc>
            <type name="MenuItem" c:type="ThunarxMenuItem*"/>
          </instance-parameter>
          <parameter name="menu" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-item.c"
                 line="391">pointer to a #ThunarxMenu instance</doc>
            <type name="Menu" c:type="ThunarxMenu*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_sensitive"
              c:identifier="thunarx_menu_item_set_sensitive"
              glib:set-property="sensitive">
        <doc xml:space="preserve"
             filename="thunarx-menu-item.c"
             line="371">Sets the ::sensitive property of the menu item to @sensitive.</doc>
        <source-position filename="thunarx-menu.h" line="121"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="item" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-item.c"
                 line="373">pointer to a #ThunarxMenuItem instance</doc>
            <type name="MenuItem" c:type="ThunarxMenuItem*"/>
          </instance-parameter>
          <parameter name="sensitive" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-item.c"
                 line="374">%TRUE to make the menu item sensitive</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <property name="icon"
                writable="1"
                transfer-ownership="none"
                default-value="NULL">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="label"
                writable="1"
                transfer-ownership="none"
                default-value="NULL">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="menu"
                writable="1"
                transfer-ownership="none"
                setter="set_menu">
        <type name="Menu"/>
      </property>
      <property name="name"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                default-value="NULL">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="priority"
                writable="1"
                transfer-ownership="none"
                default-value="TRUE">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="sensitive"
                writable="1"
                transfer-ownership="none"
                setter="set_sensitive"
                getter="get_sensitive"
                default-value="TRUE">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <property name="tooltip"
                writable="1"
                transfer-ownership="none"
                default-value="NULL">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <field name="__parent__">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="MenuItemPrivate" c:type="ThunarxMenuItemPrivate*"/>
      </field>
      <glib:signal name="activate" when="last">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </class>
    <record name="MenuItemClass"
            c:type="ThunarxMenuItemClass"
            glib:is-gtype-struct-for="MenuItem">
      <source-position filename="thunarx-menu.h" line="77"/>
      <field name="__parent__">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="activate">
        <callback name="activate">
          <source-position filename="thunarx-menu.h" line="76"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="item" transfer-ownership="none">
              <type name="MenuItem" c:type="ThunarxMenuItem*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <record name="MenuItemPrivate"
            c:type="ThunarxMenuItemPrivate"
            disguised="1"
            opaque="1">
      <source-position filename="thunarx-menu.h" line="36"/>
    </record>
    <record name="MenuPrivate"
            c:type="ThunarxMenuPrivate"
            disguised="1"
            opaque="1">
      <source-position filename="thunarx-menu.h" line="31"/>
    </record>
    <interface name="MenuProvider"
               c:symbol-prefix="menu_provider"
               c:type="ThunarxMenuProvider"
               glib:type-name="ThunarxMenuProvider"
               glib:get-type="thunarx_menu_provider_get_type"
               glib:type-struct="MenuProviderIface">
      <source-position filename="thunarx-menu-provider.h" line="77"/>
      <virtual-method name="get_dnd_menu_items"
                      invoker="get_dnd_menu_items"
                      version="0.4.1"
                      introspectable="0">
        <doc xml:space="preserve"
             filename="thunarx-menu-provider.c"
             line="196">Returns the list of #ThunarxMenuItem&lt;!----&gt;s that @provider has to offer for
dropping the @files into the @folder. For example, the thunar-archive-plugin
provides &lt;guilabel&gt;Extract Here&lt;/guilabel&gt; menu items when dropping archive
files into a folder that is writable by the user.

As a special note, this method automatically takes a reference on the
@provider for every #ThunarxMenuItem object returned from the real implementation
of this method in @provider. This is to make sure that the extension stays
in memory for at least the time that the menu items are used. If the extension
wants to stay in memory for a longer time, it'll need to take care of this
itself (e.g. by taking an additional reference on the @provider itself,
that's released at a later time).

The caller is responsible to free the returned list of menu items using
something like this when no longer needed:
&lt;informalexample&gt;&lt;programlisting&gt;
g_list_free_full (list, g_object_unref);
&lt;/programlisting&gt;&lt;/informalexample&gt;</doc>
        <source-position filename="thunarx-menu-provider.h" line="68"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-menu-provider.c"
               line="223">the list of #ThunarxMenuItem&lt;!----&gt;s
         that @provider has to offer for dropping @files to @folder.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="MenuItem"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="provider" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="198">a #ThunarxMenuProvider.</doc>
            <type name="MenuProvider" c:type="ThunarxMenuProvider*"/>
          </instance-parameter>
          <parameter name="window" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="199">the #GtkWindow within which the menu items will be used.</doc>
            <type name="Gtk.Widget" c:type="GtkWidget*"/>
          </parameter>
          <parameter name="folder" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="200">the folder into which the @files are being dropped</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </parameter>
          <parameter name="files" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="201">the list of #ThunarxFileInfo&lt;!----&gt;s
        for the files that are being dropped to @folder in @window.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="FileInfo"/>
            </type>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_file_menu_items"
                      invoker="get_file_menu_items"
                      introspectable="0">
        <doc xml:space="preserve"
             filename="thunarx-menu-provider.c"
             line="84">Returns the list of #ThunarxMenuItem&lt;!----&gt;s that @provider has to offer for
@files.

As a special note, this method automatically takes a reference on the
@provider for every #ThunarxMenuItem object returned from the real implementation
of this method in @provider. This is to make sure that the extension stays
in memory for at least the time that the menu items are used. If the extension
wants to stay in memory for a longer time, it'll need to take care of this
itself (e.g. by taking an additional reference on the @provider itself,
that's released at a later time).

The caller is responsible to free the returned list of menu items using
something like this when no longer needed:
&lt;informalexample&gt;&lt;programlisting&gt;
g_list_free_full (list, g_object_unref);
&lt;/programlisting&gt;&lt;/informalexample&gt;</doc>
        <source-position filename="thunarx-menu-provider.h" line="60"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-menu-provider.c"
               line="108">the list of #ThunarxMenuItem&lt;!----&gt;s
         that @provider has to offer for @files.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="MenuItem"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="provider" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="86">a #ThunarxMenuProvider.</doc>
            <type name="MenuProvider" c:type="ThunarxMenuProvider*"/>
          </instance-parameter>
          <parameter name="window" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="87">the #GtkWindow within which the menu items will be used.</doc>
            <type name="Gtk.Widget" c:type="GtkWidget*"/>
          </parameter>
          <parameter name="files" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="88">the list of #ThunarxFileInfo&lt;!----&gt;s
        to which the menu items will be applied.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="FileInfo"/>
            </type>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_folder_menu_items"
                      invoker="get_folder_menu_items"
                      introspectable="0">
        <doc xml:space="preserve"
             filename="thunarx-menu-provider.c"
             line="140">Returns the list of #ThunarxMenuItem&lt;!----&gt;s that @provider has to offer for
@folder.

As a special note, this method automatically takes a reference on the
@provider for every #ThunarxMenuItem object returned from the real implementation
of this method in @provider. This is to make sure that the extension stays
in memory for at least the time that the menu items are used. If the extension
wants to stay in memory for a longer time, it'll need to take care of this
itself (e.g. by taking an additional reference on the @provider itself,
that's released at a later time).

The caller is responsible to free the returned list of menu items using
something like this when no longer needed:
&lt;informalexample&gt;&lt;programlisting&gt;
g_list_free_full (list, g_object_unref);
&lt;/programlisting&gt;&lt;/informalexample&gt;</doc>
        <source-position filename="thunarx-menu-provider.h" line="64"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-menu-provider.c"
               line="163">the list of #ThunarxMenuItem&lt;!----&gt;s
         that @provider has to offer for @folder.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="MenuItem"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="provider" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="142">a #ThunarxMenuProvider.</doc>
            <type name="MenuProvider" c:type="ThunarxMenuProvider*"/>
          </instance-parameter>
          <parameter name="window" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="143">the #GtkWindow within which the menu items will be used.</doc>
            <type name="Gtk.Widget" c:type="GtkWidget*"/>
          </parameter>
          <parameter name="folder" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="144">the folder to which the menu items should will be applied.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="get_dnd_menu_items"
              c:identifier="thunarx_menu_provider_get_dnd_menu_items"
              version="0.4.1"
              introspectable="0">
        <doc xml:space="preserve"
             filename="thunarx-menu-provider.c"
             line="196">Returns the list of #ThunarxMenuItem&lt;!----&gt;s that @provider has to offer for
dropping the @files into the @folder. For example, the thunar-archive-plugin
provides &lt;guilabel&gt;Extract Here&lt;/guilabel&gt; menu items when dropping archive
files into a folder that is writable by the user.

As a special note, this method automatically takes a reference on the
@provider for every #ThunarxMenuItem object returned from the real implementation
of this method in @provider. This is to make sure that the extension stays
in memory for at least the time that the menu items are used. If the extension
wants to stay in memory for a longer time, it'll need to take care of this
itself (e.g. by taking an additional reference on the @provider itself,
that's released at a later time).

The caller is responsible to free the returned list of menu items using
something like this when no longer needed:
&lt;informalexample&gt;&lt;programlisting&gt;
g_list_free_full (list, g_object_unref);
&lt;/programlisting&gt;&lt;/informalexample&gt;</doc>
        <source-position filename="thunarx-menu-provider.h" line="93"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-menu-provider.c"
               line="223">the list of #ThunarxMenuItem&lt;!----&gt;s
         that @provider has to offer for dropping @files to @folder.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="MenuItem"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="provider" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="198">a #ThunarxMenuProvider.</doc>
            <type name="MenuProvider" c:type="ThunarxMenuProvider*"/>
          </instance-parameter>
          <parameter name="window" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="199">the #GtkWindow within which the menu items will be used.</doc>
            <type name="Gtk.Widget" c:type="GtkWidget*"/>
          </parameter>
          <parameter name="folder" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="200">the folder into which the @files are being dropped</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </parameter>
          <parameter name="files" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="201">the list of #ThunarxFileInfo&lt;!----&gt;s
        for the files that are being dropped to @folder in @window.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="FileInfo"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="get_file_menu_items"
              c:identifier="thunarx_menu_provider_get_file_menu_items"
              introspectable="0">
        <doc xml:space="preserve"
             filename="thunarx-menu-provider.c"
             line="84">Returns the list of #ThunarxMenuItem&lt;!----&gt;s that @provider has to offer for
@files.

As a special note, this method automatically takes a reference on the
@provider for every #ThunarxMenuItem object returned from the real implementation
of this method in @provider. This is to make sure that the extension stays
in memory for at least the time that the menu items are used. If the extension
wants to stay in memory for a longer time, it'll need to take care of this
itself (e.g. by taking an additional reference on the @provider itself,
that's released at a later time).

The caller is responsible to free the returned list of menu items using
something like this when no longer needed:
&lt;informalexample&gt;&lt;programlisting&gt;
g_list_free_full (list, g_object_unref);
&lt;/programlisting&gt;&lt;/informalexample&gt;</doc>
        <source-position filename="thunarx-menu-provider.h" line="83"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-menu-provider.c"
               line="108">the list of #ThunarxMenuItem&lt;!----&gt;s
         that @provider has to offer for @files.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="MenuItem"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="provider" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="86">a #ThunarxMenuProvider.</doc>
            <type name="MenuProvider" c:type="ThunarxMenuProvider*"/>
          </instance-parameter>
          <parameter name="window" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="87">the #GtkWindow within which the menu items will be used.</doc>
            <type name="Gtk.Widget" c:type="GtkWidget*"/>
          </parameter>
          <parameter name="files" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="88">the list of #ThunarxFileInfo&lt;!----&gt;s
        to which the menu items will be applied.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="FileInfo"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="get_folder_menu_items"
              c:identifier="thunarx_menu_provider_get_folder_menu_items"
              introspectable="0">
        <doc xml:space="preserve"
             filename="thunarx-menu-provider.c"
             line="140">Returns the list of #ThunarxMenuItem&lt;!----&gt;s that @provider has to offer for
@folder.

As a special note, this method automatically takes a reference on the
@provider for every #ThunarxMenuItem object returned from the real implementation
of this method in @provider. This is to make sure that the extension stays
in memory for at least the time that the menu items are used. If the extension
wants to stay in memory for a longer time, it'll need to take care of this
itself (e.g. by taking an additional reference on the @provider itself,
that's released at a later time).

The caller is responsible to free the returned list of menu items using
something like this when no longer needed:
&lt;informalexample&gt;&lt;programlisting&gt;
g_list_free_full (list, g_object_unref);
&lt;/programlisting&gt;&lt;/informalexample&gt;</doc>
        <source-position filename="thunarx-menu-provider.h" line="88"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-menu-provider.c"
               line="163">the list of #ThunarxMenuItem&lt;!----&gt;s
         that @provider has to offer for @folder.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="MenuItem"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="provider" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="142">a #ThunarxMenuProvider.</doc>
            <type name="MenuProvider" c:type="ThunarxMenuProvider*"/>
          </instance-parameter>
          <parameter name="window" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="143">the #GtkWindow within which the menu items will be used.</doc>
            <type name="Gtk.Widget" c:type="GtkWidget*"/>
          </parameter>
          <parameter name="folder" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="144">the folder to which the menu items should will be applied.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </parameter>
        </parameters>
      </method>
    </interface>
    <record name="MenuProviderIface"
            c:type="ThunarxMenuProviderIface"
            glib:is-gtype-struct-for="MenuProvider">
      <doc xml:space="preserve"
           filename="thunarx-menu-provider.h"
           line="42">Interface with virtual methods implemented by extensions that provide
additional menu items for the file manager's context menus.
Providers don't need to implement all of the virtual methods listed in
the interface.</doc>
      <source-position filename="thunarx-menu-provider.h" line="77"/>
      <field name="__parent__" readable="0" private="1">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="get_file_menu_items">
        <doc xml:space="preserve"
             filename="thunarx-menu-provider.h"
             line="44">See thunarx_menu_provider_get_file_menu_items().</doc>
        <callback name="get_file_menu_items">
          <source-position filename="thunarx-menu-provider.h" line="60"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="108">the list of #ThunarxMenuItem&lt;!----&gt;s
         that @provider has to offer for @files.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="MenuItem"/>
            </type>
          </return-value>
          <parameters>
            <parameter name="provider" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-menu-provider.c"
                   line="86">a #ThunarxMenuProvider.</doc>
              <type name="MenuProvider" c:type="ThunarxMenuProvider*"/>
            </parameter>
            <parameter name="window" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-menu-provider.c"
                   line="87">the #GtkWindow within which the menu items will be used.</doc>
              <type name="Gtk.Widget" c:type="GtkWidget*"/>
            </parameter>
            <parameter name="files" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-menu-provider.c"
                   line="88">the list of #ThunarxFileInfo&lt;!----&gt;s
        to which the menu items will be applied.</doc>
              <type name="GLib.List" c:type="GList*">
                <type name="FileInfo"/>
              </type>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_folder_menu_items">
        <doc xml:space="preserve"
             filename="thunarx-menu-provider.h"
             line="45">See thunarx_menu_provider_get_folder_menu_items().</doc>
        <callback name="get_folder_menu_items">
          <source-position filename="thunarx-menu-provider.h" line="64"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="163">the list of #ThunarxMenuItem&lt;!----&gt;s
         that @provider has to offer for @folder.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="MenuItem"/>
            </type>
          </return-value>
          <parameters>
            <parameter name="provider" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-menu-provider.c"
                   line="142">a #ThunarxMenuProvider.</doc>
              <type name="MenuProvider" c:type="ThunarxMenuProvider*"/>
            </parameter>
            <parameter name="window" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-menu-provider.c"
                   line="143">the #GtkWindow within which the menu items will be used.</doc>
              <type name="Gtk.Widget" c:type="GtkWidget*"/>
            </parameter>
            <parameter name="folder" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-menu-provider.c"
                   line="144">the folder to which the menu items should will be applied.</doc>
              <type name="FileInfo" c:type="ThunarxFileInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_dnd_menu_items">
        <doc xml:space="preserve"
             filename="thunarx-menu-provider.h"
             line="46">See thunarx_menu_provider_get_dnd_menu_items().</doc>
        <callback name="get_dnd_menu_items">
          <source-position filename="thunarx-menu-provider.h" line="68"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="thunarx-menu-provider.c"
                 line="223">the list of #ThunarxMenuItem&lt;!----&gt;s
         that @provider has to offer for dropping @files to @folder.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="MenuItem"/>
            </type>
          </return-value>
          <parameters>
            <parameter name="provider" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-menu-provider.c"
                   line="198">a #ThunarxMenuProvider.</doc>
              <type name="MenuProvider" c:type="ThunarxMenuProvider*"/>
            </parameter>
            <parameter name="window" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-menu-provider.c"
                   line="199">the #GtkWindow within which the menu items will be used.</doc>
              <type name="Gtk.Widget" c:type="GtkWidget*"/>
            </parameter>
            <parameter name="folder" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-menu-provider.c"
                   line="200">the folder into which the @files are being dropped</doc>
              <type name="FileInfo" c:type="ThunarxFileInfo*"/>
            </parameter>
            <parameter name="files" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-menu-provider.c"
                   line="201">the list of #ThunarxFileInfo&lt;!----&gt;s
        for the files that are being dropped to @folder in @window.</doc>
              <type name="GLib.List" c:type="GList*">
                <type name="FileInfo"/>
              </type>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reserved1">
        <callback name="reserved1">
          <source-position filename="thunarx-menu-provider.h" line="74"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved2">
        <callback name="reserved2">
          <source-position filename="thunarx-menu-provider.h" line="75"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved3">
        <callback name="reserved3">
          <source-position filename="thunarx-menu-provider.h" line="76"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <function-macro name="PREFERENCES_PROVIDER"
                    c:identifier="THUNARX_PREFERENCES_PROVIDER"
                    introspectable="0">
      <source-position filename="thunarx-preferences-provider.h" line="36"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PREFERENCES_PROVIDER_GET_IFACE"
                    c:identifier="THUNARX_PREFERENCES_PROVIDER_GET_IFACE"
                    introspectable="0">
      <source-position filename="thunarx-preferences-provider.h" line="38"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PROPERTY_PAGE"
                    c:identifier="THUNARX_PROPERTY_PAGE"
                    introspectable="0">
      <source-position filename="thunarx-property-page.h" line="37"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PROPERTY_PAGE_CLASS"
                    c:identifier="THUNARX_PROPERTY_PAGE_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-property-page.h" line="38"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PROPERTY_PAGE_GET_CLASS"
                    c:identifier="THUNARX_PROPERTY_PAGE_GET_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-property-page.h" line="41"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PROPERTY_PAGE_PROVIDER"
                    c:identifier="THUNARX_PROPERTY_PAGE_PROVIDER"
                    introspectable="0">
      <source-position filename="thunarx-property-page-provider.h" line="36"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PROPERTY_PAGE_PROVIDER_GET_IFACE"
                    c:identifier="THUNARX_PROPERTY_PAGE_PROVIDER_GET_IFACE"
                    introspectable="0">
      <source-position filename="thunarx-property-page-provider.h" line="38"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PROVIDER_FACTORY"
                    c:identifier="THUNARX_PROVIDER_FACTORY"
                    introspectable="0">
      <source-position filename="thunarx-provider-factory.h" line="36"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PROVIDER_FACTORY_CLASS"
                    c:identifier="THUNARX_PROVIDER_FACTORY_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-provider-factory.h" line="37"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PROVIDER_FACTORY_GET_CLASS"
                    c:identifier="THUNARX_PROVIDER_FACTORY_GET_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-provider-factory.h" line="40"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PROVIDER_MODULE"
                    c:identifier="THUNARX_PROVIDER_MODULE"
                    introspectable="0">
      <source-position filename="thunarx-provider-module.h" line="34"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PROVIDER_MODULE_CLASS"
                    c:identifier="THUNARX_PROVIDER_MODULE_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-provider-module.h" line="35"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PROVIDER_MODULE_GET_CLASS"
                    c:identifier="THUNARX_PROVIDER_MODULE_GET_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-provider-module.h" line="38"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PROVIDER_PLUGIN"
                    c:identifier="THUNARX_PROVIDER_PLUGIN"
                    introspectable="0">
      <source-position filename="thunarx-provider-plugin.h" line="34"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="PROVIDER_PLUGIN_GET_IFACE"
                    c:identifier="THUNARX_PROVIDER_PLUGIN_GET_IFACE"
                    introspectable="0">
      <source-position filename="thunarx-provider-plugin.h" line="36"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <interface name="PreferencesProvider"
               c:symbol-prefix="preferences_provider"
               c:type="ThunarxPreferencesProvider"
               glib:type-name="ThunarxPreferencesProvider"
               glib:get-type="thunarx_preferences_provider_get_type"
               glib:type-struct="PreferencesProviderIface">
      <source-position filename="thunarx-preferences-provider.h" line="65"/>
      <virtual-method name="get_menu_items"
                      invoker="get_menu_items"
                      introspectable="0">
        <doc xml:space="preserve"
             filename="thunarx-preferences-provider.c"
             line="80">Returns the list of #ThunarxMenuItem&lt;!----&gt;s that @provider has to offer
as preferences within @window. These menu items will usually be added
to the builtin list of preferences in the "Edit" menu of the file
manager's @window.

Plugin writers that implement this interface should make sure to
choose descriptive names and tooltips, and not to crowd the
"Edit" menu too much. That said, think twice before implementing
this interface, as too many preference menu items will render the
file manager useless over time!

The caller is responsible to free the returned list of menu items using
something like this when no longer needed:
&lt;informalexample&gt;&lt;programlisting&gt;
g_list_free_full (list, g_object_unref);
&lt;/programlisting&gt;&lt;/informalexample&gt;</doc>
        <source-position filename="thunarx-preferences-provider.h" line="56"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-preferences-provider.c"
               line="102">the list of
         #ThunarxMenuItem&lt;!----&gt;s that @provider has to offer as preferences
         within @window.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="MenuItem"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="provider" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-preferences-provider.c"
                 line="82">a #ThunarxPreferencesProvider.</doc>
            <type name="PreferencesProvider"
                  c:type="ThunarxPreferencesProvider*"/>
          </instance-parameter>
          <parameter name="window" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-preferences-provider.c"
                 line="83">the #GtkWindow within which the menu items will be used.</doc>
            <type name="Gtk.Widget" c:type="GtkWidget*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="get_menu_items"
              c:identifier="thunarx_preferences_provider_get_menu_items"
              introspectable="0">
        <doc xml:space="preserve"
             filename="thunarx-preferences-provider.c"
             line="80">Returns the list of #ThunarxMenuItem&lt;!----&gt;s that @provider has to offer
as preferences within @window. These menu items will usually be added
to the builtin list of preferences in the "Edit" menu of the file
manager's @window.

Plugin writers that implement this interface should make sure to
choose descriptive names and tooltips, and not to crowd the
"Edit" menu too much. That said, think twice before implementing
this interface, as too many preference menu items will render the
file manager useless over time!

The caller is responsible to free the returned list of menu items using
something like this when no longer needed:
&lt;informalexample&gt;&lt;programlisting&gt;
g_list_free_full (list, g_object_unref);
&lt;/programlisting&gt;&lt;/informalexample&gt;</doc>
        <source-position filename="thunarx-preferences-provider.h" line="71"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-preferences-provider.c"
               line="102">the list of
         #ThunarxMenuItem&lt;!----&gt;s that @provider has to offer as preferences
         within @window.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="MenuItem"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="provider" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-preferences-provider.c"
                 line="82">a #ThunarxPreferencesProvider.</doc>
            <type name="PreferencesProvider"
                  c:type="ThunarxPreferencesProvider*"/>
          </instance-parameter>
          <parameter name="window" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-preferences-provider.c"
                 line="83">the #GtkWindow within which the menu items will be used.</doc>
            <type name="Gtk.Widget" c:type="GtkWidget*"/>
          </parameter>
        </parameters>
      </method>
    </interface>
    <record name="PreferencesProviderIface"
            c:type="ThunarxPreferencesProviderIface"
            glib:is-gtype-struct-for="PreferencesProvider">
      <doc xml:space="preserve"
           filename="thunarx-preferences-provider.h"
           line="40">Interface with virtual methods implementation by extensions that
want to install preferences items in the file managers menu.
Providers don't need to implement all of the virtual methods listed
in the interface.</doc>
      <source-position filename="thunarx-preferences-provider.h" line="65"/>
      <field name="__parent__" readable="0" private="1">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="get_menu_items">
        <doc xml:space="preserve"
             filename="thunarx-preferences-provider.h"
             line="42">See thunarx_preferences_provider_get_menu_items().</doc>
        <callback name="get_menu_items">
          <source-position filename="thunarx-preferences-provider.h"
                           line="56"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="thunarx-preferences-provider.c"
                 line="102">the list of
         #ThunarxMenuItem&lt;!----&gt;s that @provider has to offer as preferences
         within @window.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="MenuItem"/>
            </type>
          </return-value>
          <parameters>
            <parameter name="provider" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-preferences-provider.c"
                   line="82">a #ThunarxPreferencesProvider.</doc>
              <type name="PreferencesProvider"
                    c:type="ThunarxPreferencesProvider*"/>
            </parameter>
            <parameter name="window" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-preferences-provider.c"
                   line="83">the #GtkWindow within which the menu items will be used.</doc>
              <type name="Gtk.Widget" c:type="GtkWidget*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reserved1">
        <callback name="reserved1">
          <source-position filename="thunarx-preferences-provider.h"
                           line="60"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved2">
        <callback name="reserved2">
          <source-position filename="thunarx-preferences-provider.h"
                           line="61"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved3">
        <callback name="reserved3">
          <source-position filename="thunarx-preferences-provider.h"
                           line="62"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved4">
        <callback name="reserved4">
          <source-position filename="thunarx-preferences-provider.h"
                           line="63"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved5">
        <callback name="reserved5">
          <source-position filename="thunarx-preferences-provider.h"
                           line="64"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <class name="PropertyPage"
           c:symbol-prefix="property_page"
           c:type="ThunarxPropertyPage"
           parent="Gtk.Bin"
           glib:type-name="ThunarxPropertyPage"
           glib:get-type="thunarx_property_page_get_type"
           glib:type-struct="PropertyPageClass">
      <source-position filename="thunarx-property-page.h" line="52"/>
      <implements name="Atk.ImplementorIface"/>
      <implements name="Gtk.Buildable"/>
      <constructor name="new" c:identifier="thunarx_property_page_new">
        <doc xml:space="preserve"
             filename="thunarx-property-page.c"
             line="213">Allocates a new #ThunarxPropertyPage widget and sets its label to the
specified @label. If @label is %NULL, the label is omitted.</doc>
        <source-position filename="thunarx-property-page.h" line="66"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-property-page.c"
               line="220">the newly allocated #ThunarxPropertyPage
              widget.</doc>
          <type name="Gtk.Widget" c:type="GtkWidget*"/>
        </return-value>
        <parameters>
          <parameter name="label" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-property-page.c"
                 line="215">the text to use as the label of the page.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_with_label_widget"
                   c:identifier="thunarx_property_page_new_with_label_widget">
        <doc xml:space="preserve"
             filename="thunarx-property-page.c"
             line="231">Allocates a new #ThunarxPropertyPage widget and sets its label to
the specified @label_widget.</doc>
        <source-position filename="thunarx-property-page.h" line="68"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-property-page.c"
               line="238">the newly allocated #ThunarxPropertyPage widget.</doc>
          <type name="Gtk.Widget" c:type="GtkWidget*"/>
        </return-value>
        <parameters>
          <parameter name="label_widget" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-property-page.c"
                 line="233">a #GtkWidget, which should be used as label.</doc>
            <type name="Gtk.Widget" c:type="GtkWidget*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_label"
              c:identifier="thunarx_property_page_get_label"
              glib:get-property="label">
        <doc xml:space="preserve"
             filename="thunarx-property-page.c"
             line="248">If the @property_page's label widget is a #GtkLabel, returns the text
in the label widget (the @property_page will have a #GtkLabel for the
label widget if a non-%NULL argument was passed to thunarx_property_page_new()).</doc>
        <source-position filename="thunarx-property-page.h" line="71"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-property-page.c"
               line="256">the text in the label or %NULL if there was no label widget or
              the label widget was not a #GtkLabel. The returned string is
              owned by the @property_page and must not be modified or freed.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="property_page" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-property-page.c"
                 line="250">a #ThunarxPropertyPage.</doc>
            <type name="PropertyPage" c:type="ThunarxPropertyPage*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_label_widget"
              c:identifier="thunarx_property_page_get_label_widget"
              glib:get-property="label-widget">
        <doc xml:space="preserve"
             filename="thunarx-property-page.c"
             line="303">Returns the label widget for the @property_page. See
thunarx_property_page_set_label_widget().</doc>
        <source-position filename="thunarx-property-page.h" line="77"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-property-page.c"
               line="310">the label widget or %NULL if there is none.</doc>
          <type name="Gtk.Widget" c:type="GtkWidget*"/>
        </return-value>
        <parameters>
          <instance-parameter name="property_page" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-property-page.c"
                 line="305">a #ThunarxPropertyPage.</doc>
            <type name="PropertyPage" c:type="ThunarxPropertyPage*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="set_label"
              c:identifier="thunarx_property_page_set_label"
              glib:set-property="label">
        <doc xml:space="preserve"
             filename="thunarx-property-page.c"
             line="273">Sets the text of the label. If @label is %NULL, the current label is
removed.</doc>
        <source-position filename="thunarx-property-page.h" line="73"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="property_page" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-property-page.c"
                 line="275">a #ThunarxPropertyPage.</doc>
            <type name="PropertyPage" c:type="ThunarxPropertyPage*"/>
          </instance-parameter>
          <parameter name="label" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-property-page.c"
                 line="276">the text to use as the label of the page.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_label_widget"
              c:identifier="thunarx_property_page_set_label_widget"
              glib:set-property="label-widget">
        <doc xml:space="preserve"
             filename="thunarx-property-page.c"
             line="321">Sets the label widget for the @property_page. This is the widget
that will appear in the notebook header for the @property_page.</doc>
        <source-position filename="thunarx-property-page.h" line="79"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="property_page" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-property-page.c"
                 line="323">a #ThunarxPropertyPage.</doc>
            <type name="PropertyPage" c:type="ThunarxPropertyPage*"/>
          </instance-parameter>
          <parameter name="label_widget" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-property-page.c"
                 line="324">the new label widget.</doc>
            <type name="Gtk.Widget" c:type="GtkWidget*"/>
          </parameter>
        </parameters>
      </method>
      <property name="label"
                writable="1"
                transfer-ownership="none"
                setter="set_label"
                getter="get_label"
                default-value="NULL">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="label-widget"
                writable="1"
                transfer-ownership="none"
                setter="set_label_widget"
                getter="get_label_widget">
        <type name="Gtk.Widget"/>
      </property>
      <field name="__parent__">
        <type name="Gtk.Bin" c:type="GtkBin"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="PropertyPagePrivate" c:type="ThunarxPropertyPagePrivate*"/>
      </field>
    </class>
    <record name="PropertyPageClass"
            c:type="ThunarxPropertyPageClass"
            glib:is-gtype-struct-for="PropertyPage">
      <source-position filename="thunarx-property-page.h" line="52"/>
      <field name="__parent__">
        <type name="Gtk.BinClass" c:type="GtkBinClass"/>
      </field>
      <field name="reserved1">
        <callback name="reserved1">
          <source-position filename="thunarx-property-page.h" line="48"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved2">
        <callback name="reserved2">
          <source-position filename="thunarx-property-page.h" line="49"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved3">
        <callback name="reserved3">
          <source-position filename="thunarx-property-page.h" line="50"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved4">
        <callback name="reserved4">
          <source-position filename="thunarx-property-page.h" line="51"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <record name="PropertyPagePrivate"
            c:type="ThunarxPropertyPagePrivate"
            disguised="1"
            opaque="1">
      <source-position filename="thunarx-property-page.h" line="32"/>
    </record>
    <interface name="PropertyPageProvider"
               c:symbol-prefix="property_page_provider"
               c:type="ThunarxPropertyPageProvider"
               glib:type-name="ThunarxPropertyPageProvider"
               glib:get-type="thunarx_property_page_provider_get_type"
               glib:type-struct="PropertyPageProviderIface">
      <source-position filename="thunarx-property-page-provider.h" line="62"/>
      <virtual-method name="get_pages" invoker="get_pages" introspectable="0">
        <doc xml:space="preserve"
             filename="thunarx-property-page-provider.c"
             line="69">Returns the list of #ThunarxPropertyPage&lt;!----&gt;s that @provider has to offer for @files.

Extensions that implement this interface, must first check whether they support all the
#ThunarxFileInfo&lt;!----&gt;s in the list of @files. Most extensions will probably only support
#ThunarxPropertyPage&lt;!----&gt;s for exactly one file of a certain type. For example an MP3-Tag
editor property page will most probably support only a single audio file, and so the method
would be implemented like this
&lt;informalexample&gt;&lt;programlisting&gt;
GList*
tag_provider_get_pages (ThunarxPropertyPageProvider *property_page_provider,
                        GList                       *files)
{
  if (g_list_length (files) != 1)
    return NULL;
  else if (!thunarx_file_info_has_mime_type (files-&gt;data, "audio/mp3"))
    return NULL;
  else
    return g_list_append (NULL, tag_page_new (files-&gt;data));
}
&lt;/programlisting&gt;&lt;/informalexample&gt;
where tag_page_new() allocates a new #TagPage instance for a #ThunarxFileInfo object
passed to it. See the description of the #ThunarxPropertyPage class for additional
information about the #TagPage example class.

As a special note, this method automatically takes a reference on the
@provider for every #ThunarxPropertyPage object returned from the real implementation
of this method in @provider. This is to make sure that the extension stays
in memory for atleast the time that the pages are used. If the extension
wants to stay in memory for a longer time, it'll need to take care of this
itself (e.g. by taking an additional reference on the @provider itself,
that's released at a later time).

The caller is responsible to free the returned list of pages using
something like this when no longer needed:
&lt;informalexample&gt;&lt;programlisting&gt;
g_list_foreach (list, (GFunc) g_object_ref_sink, NULL);
g_list_free_full (list, g_object_unref);
&lt;/programlisting&gt;&lt;/informalexample&gt;</doc>
        <source-position filename="thunarx-property-page-provider.h"
                         line="53"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-property-page-provider.c"
               line="114">the list of
         #ThunarxPropertyPage&lt;!----&gt;s that @provider has to offer for @files.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="PropertyPage"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="provider" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-property-page-provider.c"
                 line="71">a #ThunarxPropertyPageProvider.</doc>
            <type name="PropertyPageProvider"
                  c:type="ThunarxPropertyPageProvider*"/>
          </instance-parameter>
          <parameter name="files" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-property-page-provider.c"
                 line="72">the list of #ThunarxFileInfo&lt;!----&gt;s
        for which a properties dialog will be displayed.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="FileInfo"/>
            </type>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="get_pages"
              c:identifier="thunarx_property_page_provider_get_pages"
              introspectable="0">
        <doc xml:space="preserve"
             filename="thunarx-property-page-provider.c"
             line="69">Returns the list of #ThunarxPropertyPage&lt;!----&gt;s that @provider has to offer for @files.

Extensions that implement this interface, must first check whether they support all the
#ThunarxFileInfo&lt;!----&gt;s in the list of @files. Most extensions will probably only support
#ThunarxPropertyPage&lt;!----&gt;s for exactly one file of a certain type. For example an MP3-Tag
editor property page will most probably support only a single audio file, and so the method
would be implemented like this
&lt;informalexample&gt;&lt;programlisting&gt;
GList*
tag_provider_get_pages (ThunarxPropertyPageProvider *property_page_provider,
                        GList                       *files)
{
  if (g_list_length (files) != 1)
    return NULL;
  else if (!thunarx_file_info_has_mime_type (files-&gt;data, "audio/mp3"))
    return NULL;
  else
    return g_list_append (NULL, tag_page_new (files-&gt;data));
}
&lt;/programlisting&gt;&lt;/informalexample&gt;
where tag_page_new() allocates a new #TagPage instance for a #ThunarxFileInfo object
passed to it. See the description of the #ThunarxPropertyPage class for additional
information about the #TagPage example class.

As a special note, this method automatically takes a reference on the
@provider for every #ThunarxPropertyPage object returned from the real implementation
of this method in @provider. This is to make sure that the extension stays
in memory for atleast the time that the pages are used. If the extension
wants to stay in memory for a longer time, it'll need to take care of this
itself (e.g. by taking an additional reference on the @provider itself,
that's released at a later time).

The caller is responsible to free the returned list of pages using
something like this when no longer needed:
&lt;informalexample&gt;&lt;programlisting&gt;
g_list_foreach (list, (GFunc) g_object_ref_sink, NULL);
g_list_free_full (list, g_object_unref);
&lt;/programlisting&gt;&lt;/informalexample&gt;</doc>
        <source-position filename="thunarx-property-page-provider.h"
                         line="68"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-property-page-provider.c"
               line="114">the list of
         #ThunarxPropertyPage&lt;!----&gt;s that @provider has to offer for @files.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="PropertyPage"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="provider" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-property-page-provider.c"
                 line="71">a #ThunarxPropertyPageProvider.</doc>
            <type name="PropertyPageProvider"
                  c:type="ThunarxPropertyPageProvider*"/>
          </instance-parameter>
          <parameter name="files" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-property-page-provider.c"
                 line="72">the list of #ThunarxFileInfo&lt;!----&gt;s
        for which a properties dialog will be displayed.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="FileInfo"/>
            </type>
          </parameter>
        </parameters>
      </method>
    </interface>
    <record name="PropertyPageProviderIface"
            c:type="ThunarxPropertyPageProviderIface"
            glib:is-gtype-struct-for="PropertyPageProvider">
      <doc xml:space="preserve"
           filename="thunarx-property-page-provider.h"
           line="40">Interface with virtual methods implemented by extensions that provide
additional pages for the file properties dialog.</doc>
      <source-position filename="thunarx-property-page-provider.h" line="62"/>
      <field name="__parent__" readable="0" private="1">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="get_pages">
        <doc xml:space="preserve"
             filename="thunarx-property-page-provider.h"
             line="42">see thunarx_property_page_provider_get_pages().</doc>
        <callback name="get_pages">
          <source-position filename="thunarx-property-page-provider.h"
                           line="53"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="thunarx-property-page-provider.c"
                 line="114">the list of
         #ThunarxPropertyPage&lt;!----&gt;s that @provider has to offer for @files.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="PropertyPage"/>
            </type>
          </return-value>
          <parameters>
            <parameter name="provider" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-property-page-provider.c"
                   line="71">a #ThunarxPropertyPageProvider.</doc>
              <type name="PropertyPageProvider"
                    c:type="ThunarxPropertyPageProvider*"/>
            </parameter>
            <parameter name="files" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-property-page-provider.c"
                   line="72">the list of #ThunarxFileInfo&lt;!----&gt;s
        for which a properties dialog will be displayed.</doc>
              <type name="GLib.List" c:type="GList*">
                <type name="FileInfo"/>
              </type>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reserved1">
        <callback name="reserved1">
          <source-position filename="thunarx-property-page-provider.h"
                           line="57"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved2">
        <callback name="reserved2">
          <source-position filename="thunarx-property-page-provider.h"
                           line="58"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved3">
        <callback name="reserved3">
          <source-position filename="thunarx-property-page-provider.h"
                           line="59"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved4">
        <callback name="reserved4">
          <source-position filename="thunarx-property-page-provider.h"
                           line="60"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved5">
        <callback name="reserved5">
          <source-position filename="thunarx-property-page-provider.h"
                           line="61"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <class name="ProviderFactory"
           c:symbol-prefix="provider_factory"
           c:type="ThunarxProviderFactory"
           parent="GObject.Object"
           glib:type-name="ThunarxProviderFactory"
           glib:get-type="thunarx_provider_factory_get_type"
           glib:type-struct="ProviderFactoryClass">
      <source-position filename="thunarx-provider-factory.h" line="32"/>
      <function name="get_default"
                c:identifier="thunarx_provider_factory_get_default">
        <doc xml:space="preserve"
             filename="thunarx-provider-factory.c"
             line="256">Returns a reference to the default #ThunarxProviderFactory
instance.

The caller is responsible to free the returned object
using g_object_unref() when no longer needed.</doc>
        <source-position filename="thunarx-provider-factory.h" line="46"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-provider-factory.c"
               line="265">a reference to the default #ThunarxProviderFactory
         instance.</doc>
          <type name="ProviderFactory" c:type="ThunarxProviderFactory*"/>
        </return-value>
      </function>
      <method name="list_providers"
              c:identifier="thunarx_provider_factory_list_providers">
        <doc xml:space="preserve"
             filename="thunarx-provider-factory.c"
             line="290">Returns all providers of the given @type.

The caller is responsible to release the returned
list of providers using code like this:
&lt;informalexample&gt;&lt;programlisting&gt;
g_list_free_full (list, g_object_unref);
&lt;/programlisting&gt;&lt;/informalexample&gt;</doc>
        <source-position filename="thunarx-provider-factory.h" line="49"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-provider-factory.c"
               line="303">the of providers for @type.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="GObject.Object"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="factory" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-factory.c"
                 line="292">a #ThunarxProviderFactory instance.</doc>
            <type name="ProviderFactory" c:type="ThunarxProviderFactory*"/>
          </instance-parameter>
          <parameter name="type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-factory.c"
                 line="293">the provider #GType.</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
        </parameters>
      </method>
    </class>
    <record name="ProviderFactoryClass"
            c:type="ThunarxProviderFactoryClass"
            disguised="1"
            opaque="1"
            glib:is-gtype-struct-for="ProviderFactory">
      <source-position filename="thunarx-provider-factory.h" line="32"/>
    </record>
    <class name="ProviderModule"
           c:symbol-prefix="provider_module"
           c:type="ThunarxProviderModule"
           parent="GObject.TypeModule"
           glib:type-name="ThunarxProviderModule"
           glib:get-type="thunarx_provider_module_get_type"
           glib:type-struct="ProviderModuleClass">
      <source-position filename="thunarx-provider-module.h" line="30"/>
      <implements name="GObject.TypePlugin"/>
      <implements name="ProviderPlugin"/>
      <constructor name="new" c:identifier="thunarx_provider_module_new">
        <doc xml:space="preserve"
             filename="thunarx-provider-module.c"
             line="282">Allocates a new #ThunarxProviderModule for @filename.</doc>
        <source-position filename="thunarx-provider-module.h" line="44"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-provider-module.c"
               line="288">the newly allocated #ThunarxProviderModule.</doc>
          <type name="ProviderModule" c:type="ThunarxProviderModule*"/>
        </return-value>
        <parameters>
          <parameter name="filename" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-module.c"
                 line="284">the name of the library file.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="list_types"
              c:identifier="thunarx_provider_module_list_types">
        <doc xml:space="preserve"
             filename="thunarx-provider-module.c"
             line="306">Determines the #GType&lt;!----&gt;s provided by @module and returns
them in @types and @n_types.</doc>
        <source-position filename="thunarx-provider-module.h" line="47"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="module" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-module.c"
                 line="308">a #ThunarxProviderModule.</doc>
            <type name="ProviderModule" c:type="const ThunarxProviderModule*"/>
          </instance-parameter>
          <parameter name="types" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-module.c"
                 line="309">return location for the #GType array pointer.</doc>
            <type name="GType" c:type="const GType**"/>
          </parameter>
          <parameter name="n_types" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-module.c"
                 line="310">return location for the number of types.</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="unuse" c:identifier="thunarx_provider_module_unuse">
        <doc xml:space="preserve"
             filename="thunarx-provider-module.c"
             line="335">Wrapper for 'g_type_module_unuse' which first checks if the module is in use</doc>
        <source-position filename="thunarx-provider-module.h" line="51"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="module" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-module.c"
                 line="337">a #ThunarxProviderModule.</doc>
            <type name="ProviderModule" c:type="ThunarxProviderModule*"/>
          </instance-parameter>
        </parameters>
      </method>
    </class>
    <record name="ProviderModuleClass"
            c:type="ThunarxProviderModuleClass"
            disguised="1"
            opaque="1"
            glib:is-gtype-struct-for="ProviderModule">
      <source-position filename="thunarx-provider-module.h" line="30"/>
    </record>
    <interface name="ProviderPlugin"
               c:symbol-prefix="provider_plugin"
               c:type="ThunarxProviderPlugin"
               glib:type-name="ThunarxProviderPlugin"
               glib:get-type="thunarx_provider_plugin_get_type"
               glib:type-struct="ProviderPluginIface">
      <source-position filename="thunarx-provider-plugin.h" line="82"/>
      <virtual-method name="add_interface" invoker="add_interface">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.c"
             line="173">Registers an additional interface for a type, whose interface lives in the given type @plugin.
If the interface was already registered for the type in this @plugin, nothing will be done.

As long as any instances of the type exist, the type @plugin will not be unloaded.</doc>
        <source-position filename="thunarx-provider-plugin.h" line="66"/>
        <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"
                 filename="thunarx-provider-plugin.c"
                 line="175">a #ThunarxProviderPlugin.</doc>
            <type name="ProviderPlugin" c:type="ThunarxProviderPlugin*"/>
          </instance-parameter>
          <parameter name="instance_type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="176">type to which to add the interface.</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="interface_type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="177">interface type to add.</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="interface_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="178">type information structure.</doc>
            <type name="GObject.InterfaceInfo" c:type="const GInterfaceInfo*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_resident" invoker="get_resident">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.c"
             line="91">Determines whether the application is allowed to unload @plugin
from memory when no longer needed and reload it on demand. If
%FALSE is returned, then the application may unload @plugin, else
if %TRUE is returned the application will take care that @plugin
is never unloaded from memory during the lifetime of the application.</doc>
        <source-position filename="thunarx-provider-plugin.h" line="57"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-provider-plugin.c"
               line="101">%TRUE if @plugin will be kept in memory once loaded
              for the first time.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="93">a #ThunarxProviderPlugin.</doc>
            <type name="ProviderPlugin" c:type="const ThunarxProviderPlugin*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="register_enum" invoker="register_enum">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.c"
             line="200">Looks up or registers an enumeration that is implemented with a particular type @plugin. If a type
with name @name was previously registered, the #GType identifier for the type is returned,
otherwise the type is newly registered, and the resulting #GType identifier returned.

As long as any instances of the type exist, the type @plugin will not be unloaded.</doc>
        <source-position filename="thunarx-provider-plugin.h" line="70"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-provider-plugin.c"
               line="213">the new or existing type id.</doc>
          <type name="GType" c:type="GType"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="202">a #ThunarxProviderPlugin.</doc>
            <type name="ProviderPlugin" c:type="ThunarxProviderPlugin*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="203">the name for the type.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="const_static_values" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="204">an array of #GEnumValue structs for the possible enumeration values.
                       The array is terminated by a struct with all members being %0.</doc>
            <type name="GObject.EnumValue" c:type="const GEnumValue*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="register_flags" invoker="register_flags">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.c"
             line="229">Looks up or registers a flags type that is implemented with a particular type @plugin. If a type with name
qname was previously registered, the #GType identifier for the type is returned, otherwise the type is newly
registered, and the resulting #GType identifier returned.

As long as any instances of the type exist, the type @plugin will not be unloaded.</doc>
        <source-position filename="thunarx-provider-plugin.h" line="73"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-provider-plugin.c"
               line="242">the new or existing type id.</doc>
          <type name="GType" c:type="GType"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="231">a #ThunarxProviderPlugin.</doc>
            <type name="ProviderPlugin" c:type="ThunarxProviderPlugin*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="232">name for the type.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="const_static_values" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="233">an array of #GFlagsValue structs for the possible flags values.
                       The array is terminated by a struct with all members being %0.</doc>
            <type name="GObject.FlagsValue" c:type="const GFlagsValue*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="register_type" invoker="register_type">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.c"
             line="139">Looks up or registers a type that is implemented with a particular type @plugin. If a type with name @type_name
was previously registered, the #GType identifier for the type is returned, otherwise the type is newly registered,
and the resulting #GType identifier returned.

When reregistering a type (typically because a module is unloaded then reloaded, and reinitialized), module and
@type_parent must be the same as they were previously.</doc>
        <source-position filename="thunarx-provider-plugin.h" line="61"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-provider-plugin.c"
               line="154">the new or existing type id.</doc>
          <type name="GType" c:type="GType"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="141">a #ThunarxProviderPlugin.</doc>
            <type name="ProviderPlugin" c:type="ThunarxProviderPlugin*"/>
          </instance-parameter>
          <parameter name="type_parent" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="142">the type for the parent class.</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="type_name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="143">name for the type.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="type_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="144">type information structure.</doc>
            <type name="GObject.TypeInfo" c:type="const GTypeInfo*"/>
          </parameter>
          <parameter name="type_flags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="145">flags field providing details about the type.</doc>
            <type name="GObject.TypeFlags" c:type="GTypeFlags"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_resident" invoker="set_resident">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.c"
             line="114">This method is used to instruct the application that @plugin must be
kept in memory during the lifetime of the application. The default
is to allow the application to unload @plugin from the memory when
no longer needed. If this method is invoked with a @resident value
of %TRUE then the application will never try to unload @plugin.

This method has no effect unless called from the
%thunar_extension_initialize method of the @plugin.</doc>
        <source-position filename="thunarx-provider-plugin.h" line="58"/>
        <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"
                 filename="thunarx-provider-plugin.c"
                 line="116">a #ThunarxProviderPlugin.</doc>
            <type name="ProviderPlugin" c:type="ThunarxProviderPlugin*"/>
          </instance-parameter>
          <parameter name="resident" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="117">%TRUE to make @plugin resident in memory.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="add_interface"
              c:identifier="thunarx_provider_plugin_add_interface">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.c"
             line="173">Registers an additional interface for a type, whose interface lives in the given type @plugin.
If the interface was already registered for the type in this @plugin, nothing will be done.

As long as any instances of the type exist, the type @plugin will not be unloaded.</doc>
        <source-position filename="thunarx-provider-plugin.h" line="100"/>
        <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"
                 filename="thunarx-provider-plugin.c"
                 line="175">a #ThunarxProviderPlugin.</doc>
            <type name="ProviderPlugin" c:type="ThunarxProviderPlugin*"/>
          </instance-parameter>
          <parameter name="instance_type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="176">type to which to add the interface.</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="interface_type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="177">interface type to add.</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="interface_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="178">type information structure.</doc>
            <type name="GObject.InterfaceInfo" c:type="const GInterfaceInfo*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_resident"
              c:identifier="thunarx_provider_plugin_get_resident"
              glib:get-property="resident">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.c"
             line="91">Determines whether the application is allowed to unload @plugin
from memory when no longer needed and reload it on demand. If
%FALSE is returned, then the application may unload @plugin, else
if %TRUE is returned the application will take care that @plugin
is never unloaded from memory during the lifetime of the application.</doc>
        <source-position filename="thunarx-provider-plugin.h" line="88"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-provider-plugin.c"
               line="101">%TRUE if @plugin will be kept in memory once loaded
              for the first time.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="93">a #ThunarxProviderPlugin.</doc>
            <type name="ProviderPlugin" c:type="const ThunarxProviderPlugin*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="register_enum"
              c:identifier="thunarx_provider_plugin_register_enum">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.c"
             line="200">Looks up or registers an enumeration that is implemented with a particular type @plugin. If a type
with name @name was previously registered, the #GType identifier for the type is returned,
otherwise the type is newly registered, and the resulting #GType identifier returned.

As long as any instances of the type exist, the type @plugin will not be unloaded.</doc>
        <source-position filename="thunarx-provider-plugin.h" line="105"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-provider-plugin.c"
               line="213">the new or existing type id.</doc>
          <type name="GType" c:type="GType"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="202">a #ThunarxProviderPlugin.</doc>
            <type name="ProviderPlugin" c:type="ThunarxProviderPlugin*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="203">the name for the type.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="const_static_values" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="204">an array of #GEnumValue structs for the possible enumeration values.
                       The array is terminated by a struct with all members being %0.</doc>
            <type name="GObject.EnumValue" c:type="const GEnumValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="register_flags"
              c:identifier="thunarx_provider_plugin_register_flags">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.c"
             line="229">Looks up or registers a flags type that is implemented with a particular type @plugin. If a type with name
qname was previously registered, the #GType identifier for the type is returned, otherwise the type is newly
registered, and the resulting #GType identifier returned.

As long as any instances of the type exist, the type @plugin will not be unloaded.</doc>
        <source-position filename="thunarx-provider-plugin.h" line="109"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-provider-plugin.c"
               line="242">the new or existing type id.</doc>
          <type name="GType" c:type="GType"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="231">a #ThunarxProviderPlugin.</doc>
            <type name="ProviderPlugin" c:type="ThunarxProviderPlugin*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="232">name for the type.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="const_static_values" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="233">an array of #GFlagsValue structs for the possible flags values.
                       The array is terminated by a struct with all members being %0.</doc>
            <type name="GObject.FlagsValue" c:type="const GFlagsValue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="register_type"
              c:identifier="thunarx_provider_plugin_register_type">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.c"
             line="139">Looks up or registers a type that is implemented with a particular type @plugin. If a type with name @type_name
was previously registered, the #GType identifier for the type is returned, otherwise the type is newly registered,
and the resulting #GType identifier returned.

When reregistering a type (typically because a module is unloaded then reloaded, and reinitialized), module and
@type_parent must be the same as they were previously.</doc>
        <source-position filename="thunarx-provider-plugin.h" line="94"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-provider-plugin.c"
               line="154">the new or existing type id.</doc>
          <type name="GType" c:type="GType"/>
        </return-value>
        <parameters>
          <instance-parameter name="plugin" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="141">a #ThunarxProviderPlugin.</doc>
            <type name="ProviderPlugin" c:type="ThunarxProviderPlugin*"/>
          </instance-parameter>
          <parameter name="type_parent" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="142">the type for the parent class.</doc>
            <type name="GType" c:type="GType"/>
          </parameter>
          <parameter name="type_name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="143">name for the type.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="type_info" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="144">type information structure.</doc>
            <type name="GObject.TypeInfo" c:type="const GTypeInfo*"/>
          </parameter>
          <parameter name="type_flags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="145">flags field providing details about the type.</doc>
            <type name="GObject.TypeFlags" c:type="GTypeFlags"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_resident"
              c:identifier="thunarx_provider_plugin_set_resident"
              glib:set-property="resident">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.c"
             line="114">This method is used to instruct the application that @plugin must be
kept in memory during the lifetime of the application. The default
is to allow the application to unload @plugin from the memory when
no longer needed. If this method is invoked with a @resident value
of %TRUE then the application will never try to unload @plugin.

This method has no effect unless called from the
%thunar_extension_initialize method of the @plugin.</doc>
        <source-position filename="thunarx-provider-plugin.h" line="90"/>
        <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"
                 filename="thunarx-provider-plugin.c"
                 line="116">a #ThunarxProviderPlugin.</doc>
            <type name="ProviderPlugin" c:type="ThunarxProviderPlugin*"/>
          </instance-parameter>
          <parameter name="resident" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="117">%TRUE to make @plugin resident in memory.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <property name="resident"
                writable="1"
                transfer-ownership="none"
                setter="set_resident"
                getter="get_resident"
                default-value="FALSE">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.c"
             line="74">Tells whether a plugin must reside in memory once loaded for
the first time. See thunarx_provider_plugin_get_resident() and
thunarx_provider_plugin_set_resident() for more details.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </property>
    </interface>
    <record name="ProviderPluginIface"
            c:type="ThunarxProviderPluginIface"
            glib:is-gtype-struct-for="ProviderPlugin">
      <doc xml:space="preserve"
           filename="thunarx-provider-plugin.h"
           line="38">Interface with virtual methods implemented by the file manager and
accessible from the extensions.</doc>
      <source-position filename="thunarx-provider-plugin.h" line="82"/>
      <field name="__parent__" readable="0" private="1">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="get_resident">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.h"
             line="40">see thunarx_provider_plugin_get_resident().</doc>
        <callback name="get_resident">
          <source-position filename="thunarx-provider-plugin.h" line="57"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="101">%TRUE if @plugin will be kept in memory once loaded
              for the first time.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="plugin" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="93">a #ThunarxProviderPlugin.</doc>
              <type name="ProviderPlugin"
                    c:type="const ThunarxProviderPlugin*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="set_resident">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.h"
             line="41">see thunarx_provider_plugin_set_resident().</doc>
        <callback name="set_resident">
          <source-position filename="thunarx-provider-plugin.h" line="58"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="plugin" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="116">a #ThunarxProviderPlugin.</doc>
              <type name="ProviderPlugin" c:type="ThunarxProviderPlugin*"/>
            </parameter>
            <parameter name="resident" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="117">%TRUE to make @plugin resident in memory.</doc>
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="register_type">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.h"
             line="42">see thunarx_provider_plugin_register_type().</doc>
        <callback name="register_type">
          <source-position filename="thunarx-provider-plugin.h" line="61"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="154">the new or existing type id.</doc>
            <type name="GType" c:type="GType"/>
          </return-value>
          <parameters>
            <parameter name="plugin" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="141">a #ThunarxProviderPlugin.</doc>
              <type name="ProviderPlugin" c:type="ThunarxProviderPlugin*"/>
            </parameter>
            <parameter name="type_parent" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="142">the type for the parent class.</doc>
              <type name="GType" c:type="GType"/>
            </parameter>
            <parameter name="type_name" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="143">name for the type.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="type_info" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="144">type information structure.</doc>
              <type name="GObject.TypeInfo" c:type="const GTypeInfo*"/>
            </parameter>
            <parameter name="type_flags" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="145">flags field providing details about the type.</doc>
              <type name="GObject.TypeFlags" c:type="GTypeFlags"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="add_interface">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.h"
             line="43">see thunarx_provider_plugin_add_interface().</doc>
        <callback name="add_interface">
          <source-position filename="thunarx-provider-plugin.h" line="66"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="plugin" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="175">a #ThunarxProviderPlugin.</doc>
              <type name="ProviderPlugin" c:type="ThunarxProviderPlugin*"/>
            </parameter>
            <parameter name="instance_type" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="176">type to which to add the interface.</doc>
              <type name="GType" c:type="GType"/>
            </parameter>
            <parameter name="interface_type" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="177">interface type to add.</doc>
              <type name="GType" c:type="GType"/>
            </parameter>
            <parameter name="interface_info" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="178">type information structure.</doc>
              <type name="GObject.InterfaceInfo"
                    c:type="const GInterfaceInfo*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="register_enum">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.h"
             line="44">see thunarx_provider_plugin_register_enum().</doc>
        <callback name="register_enum">
          <source-position filename="thunarx-provider-plugin.h" line="70"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="213">the new or existing type id.</doc>
            <type name="GType" c:type="GType"/>
          </return-value>
          <parameters>
            <parameter name="plugin" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="202">a #ThunarxProviderPlugin.</doc>
              <type name="ProviderPlugin" c:type="ThunarxProviderPlugin*"/>
            </parameter>
            <parameter name="name" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="203">the name for the type.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="const_static_values" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="204">an array of #GEnumValue structs for the possible enumeration values.
                       The array is terminated by a struct with all members being %0.</doc>
              <type name="GObject.EnumValue" c:type="const GEnumValue*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="register_flags">
        <doc xml:space="preserve"
             filename="thunarx-provider-plugin.h"
             line="45">see thunarx_provider_plugin_register_flags().</doc>
        <callback name="register_flags">
          <source-position filename="thunarx-provider-plugin.h" line="73"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-provider-plugin.c"
                 line="242">the new or existing type id.</doc>
            <type name="GType" c:type="GType"/>
          </return-value>
          <parameters>
            <parameter name="plugin" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="231">a #ThunarxProviderPlugin.</doc>
              <type name="ProviderPlugin" c:type="ThunarxProviderPlugin*"/>
            </parameter>
            <parameter name="name" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="232">name for the type.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="const_static_values" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-provider-plugin.c"
                   line="233">an array of #GFlagsValue structs for the possible flags values.
                       The array is terminated by a struct with all members being %0.</doc>
              <type name="GObject.FlagsValue" c:type="const GFlagsValue*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reserved1">
        <callback name="reserved1">
          <source-position filename="thunarx-provider-plugin.h" line="78"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved2">
        <callback name="reserved2">
          <source-position filename="thunarx-provider-plugin.h" line="79"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved3">
        <callback name="reserved3">
          <source-position filename="thunarx-provider-plugin.h" line="80"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved4">
        <callback name="reserved4">
          <source-position filename="thunarx-provider-plugin.h" line="81"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <function-macro name="RENAMER"
                    c:identifier="THUNARX_RENAMER"
                    introspectable="0">
      <source-position filename="thunarx-renamer.h" line="39"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="RENAMER_CLASS"
                    c:identifier="THUNARX_RENAMER_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-renamer.h" line="40"/>
      <parameters>
        <parameter name="klass">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="RENAMER_GET_CLASS"
                    c:identifier="THUNARX_RENAMER_GET_CLASS"
                    introspectable="0">
      <source-position filename="thunarx-renamer.h" line="43"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="RENAMER_PROVIDER"
                    c:identifier="THUNARX_RENAMER_PROVIDER"
                    introspectable="0">
      <source-position filename="thunarx-renamer-provider.h" line="36"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="RENAMER_PROVIDER_GET_IFACE"
                    c:identifier="THUNARX_RENAMER_PROVIDER_GET_IFACE"
                    introspectable="0">
      <source-position filename="thunarx-renamer-provider.h" line="38"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <class name="Renamer"
           c:symbol-prefix="renamer"
           c:type="ThunarxRenamer"
           parent="Gtk.Box"
           abstract="1"
           glib:type-name="ThunarxRenamer"
           glib:get-type="thunarx_renamer_get_type"
           glib:type-struct="RenamerClass">
      <source-position filename="thunarx-renamer.h" line="98"/>
      <implements name="Atk.ImplementorIface"/>
      <implements name="Gtk.Buildable"/>
      <implements name="Gtk.Orientable"/>
      <virtual-method name="changed" invoker="changed">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="730">This method should be used by derived classes
to emit the "changed" signal for @renamer. See
the documentation of the "changed" signal for
details.</doc>
        <source-position filename="thunarx-renamer.h" line="91"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="renamer" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="732">a #ThunarxRenamer.</doc>
            <type name="Renamer" c:type="ThunarxRenamer*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_menu_items" invoker="get_menu_items">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="634">Returns the list of #ThunarxMenuItem&lt;!----&gt;s provided by @renamer for
the given list of @files. By default, this method returns %NULL
(the empty list), but derived classes may override this method
to provide additional items for files in the bulk renamer
dialog list.

The returned #ThunarxMenuItem&lt;!----&gt;s will be displayed in the file's
context menu of the bulk renamer dialog, when this @renamer is
active. For example, an ID3-Tag based renamer may add an menu item
"Edit Tags" to the context menus of supported media files and,
when activated, display a dialog (which should be transient and
modal for @window, if not %NULL), which allows the users to edit
media file tags on-the-fly.

Derived classes that override this method should always check
first if all the #ThunarxFileInfo&lt;!----&gt;s in the list of @files
are supported, and only return menu items that can be performed on
this specific list of @files. For example, the ID3-Tag renamer
mentioned above, should first check whether all items in @files
are actually audio files. The thunarx_file_info_has_mime_type()
of the #ThunarxFileInfo interface can be used to easily test
whether a file in the @files list is of a certain MIME type.

Some menu items may only work properly if only a single file is
selected (for example, the ID3-Tag renamer will probably only
supporting editing one file at a time). In this case you have
basicly two options: Either you can return %NULL here if @files
does not contain exactly one item, or you can return the menu items
as usual, but make them insensitive, using:
&lt;informalexample&gt;&lt;programlisting&gt;
thunarx_menu_item_set_sensitive (item, FALSE);
&lt;/programlisting&gt;&lt;/informalexample&gt;
The latter has the advantage that the user will still notice the
existance of the menu item and probably realize that it can only be
applied to a single item at once.

The caller is responsible to free the returned list using something
like the following:
&lt;informalexample&gt;&lt;programlisting&gt;
g_list_free_full (list, g_object_unref);
&lt;/programlisting&gt;&lt;/informalexample&gt;

As a special note, this method automatically takes a reference on the
@renamer for every #ThunarxMenuItem object returned from the real implementation
of this method in @renamer. This is to make sure that the extension stays
in memory for at least the time that the menu items are used.

The name of #ThunarxMenuItem&lt;!----&gt;s returned from this method must be namespaced with
the module to avoid collision with internal file manager menu items and
menu items provided by other extensions. For example, the menu item
provided by the ID3-Tag renamer mentioned above, should be named
&lt;literal&gt;TagRenamer::edit-tags&lt;/literal&gt; (if &lt;literal&gt;TagRenamer&lt;/literal&gt;
is the class name). For additional information about the way #ThunarxMenuItem&lt;!----&gt;s
should be returned from extensions and the way they are used, read the
description of the #ThunarxMenuProvider interface or read the introduction
provided with this reference manual.

A note of warning concerning the @window parameter. Plugins should
avoid taking a reference on @window, as that might introduce a
circular reference and can thereby cause a quite large memory leak.
Instead, if @window is not %NULL, add a weak reference using the
g_object_weak_ref() or g_object_add_weak_pointer() method. But don't
forget to release the weak reference if @window survived the lifetime
of your menu item (which is likely to be the case in most situations).</doc>
        <source-position filename="thunarx-renamer.h" line="77"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-renamer.c"
               line="705">the list of
         #ThunarxMenuItem&lt;!----&gt;s provided by @renamer for the given list of
         @files.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="MenuItem"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="renamer" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="636">a #ThunarxRenamer.</doc>
            <type name="Renamer" c:type="ThunarxRenamer*"/>
          </instance-parameter>
          <parameter name="window" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="637">a #GtkWindow or %NULL.</doc>
            <type name="Gtk.Window" c:type="GtkWindow*"/>
          </parameter>
          <parameter name="files" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="638">a #GList of #ThunarxFileInfo&lt;!----&gt;s.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="FileInfo"/>
            </type>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="load" invoker="load">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="561">Tells @renamer to load its internal settings from the specified
@settings. The @settings hash table contains previously saved
settings, see thunarx_renamer_save(), as key/value pairs of
strings. That is, both the keys and the values are strings.

Implementations of #ThunarxRenamer may decide to override this
method to perform custom loading of settings. If you do not
override this method, the default method of #ThunarxRenamer
will be used, which simply loads all #GObject properties
provided by @renamer&lt;!----&gt;s class (excluding the ones
provided by the parent classes) from the @settings. The
#GObject properties must be transformable to strings and
from strings.

If you decide to override this method for your #ThunarxRenamer
implementation, you should also override thunarx_renamer_save().</doc>
        <source-position filename="thunarx-renamer.h" line="72"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="renamer" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="563">a #ThunarxRenamer.</doc>
            <type name="Renamer" c:type="ThunarxRenamer*"/>
          </instance-parameter>
          <parameter name="settings" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="564">a #GHashTable which contains the previously saved
            settings for @renamer as key/value pairs of strings.</doc>
            <type name="GLib.HashTable" c:type="GHashTable*">
              <type name="gpointer" c:type="gpointer"/>
              <type name="gpointer" c:type="gpointer"/>
            </type>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="process" invoker="process">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="527">Determines the replacement for @text (which is the relevant
part of the full @file name, i.e. either the suffix, the name
or the name and the suffix).

The caller is responsible to free the returned string using
g_free() when no longer needed.</doc>
        <source-position filename="thunarx-renamer.h" line="67"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-renamer.c"
               line="545">the string with which to replace @text.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="renamer" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="529">a #ThunarxRenamer.</doc>
            <type name="Renamer" c:type="ThunarxRenamer*"/>
          </instance-parameter>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="530">the #ThunarxFileInfo for the file whose new
           name - according to @renamer - should be
           determined.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </parameter>
          <parameter name="text" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="533">the part of the filename to which the
           @renamer should be applied.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="535">the index of the file in the list, used
           for renamers that work on numbering.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="save" invoker="save">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="595">Tells @renamer to save its internal settings to the specified
@settings, which can afterwards be loaded by thunarx_renamer_load().

The strings saved to @settings must be allocated by g_strdup(),
both the keys and the values. For example to store the string
&lt;literal&gt;Bar&lt;/literal&gt; for the setting &lt;literal&gt;Foo&lt;/literal&gt;,
you'd use:
&lt;informalexample&gt;&lt;programlisting&gt;
g_hash_table_replace (settings, g_strdup ("Foo"), g_strdup ("Bar"));
&lt;/programlisting&gt;&lt;/informalexample&gt;

Implementations of #ThunarxRenamer may decide to override this
method to perform custom saving of settings. If you do not overrride
this method, the default method of #ThunarxRenamer will be used,
which simply stores all #GObject properties provided by the
@renamer&lt;!----&gt;s class (excluding the ones provided by the parent
classes) to the @settings. The #GObject properties must be transformable
to strings.

If you decide to override this method for your #ThunarxRenamer
implementation, you should also override thunarx_renamer_load().</doc>
        <source-position filename="thunarx-renamer.h" line="74"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="renamer" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="597">a #ThunarxRenamer.</doc>
            <type name="Renamer" c:type="ThunarxRenamer*"/>
          </instance-parameter>
          <parameter name="settings" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="598">a #GHashTable to which the current settings of @renamer
            should be stored as key/value pairs of strings.</doc>
            <type name="GLib.HashTable" c:type="GHashTable*">
              <type name="gpointer" c:type="gpointer"/>
              <type name="gpointer" c:type="gpointer"/>
            </type>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="changed" c:identifier="thunarx_renamer_changed">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="730">This method should be used by derived classes
to emit the "changed" signal for @renamer. See
the documentation of the "changed" signal for
details.</doc>
        <source-position filename="thunarx-renamer.h" line="141"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="renamer" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="732">a #ThunarxRenamer.</doc>
            <type name="Renamer" c:type="ThunarxRenamer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_help_url"
              c:identifier="thunarx_renamer_get_help_url"
              glib:get-property="help-url">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="429">Returns the URL of the documentation for @renamer
or %NULL if no specific documentation is available
for @renamer and the general documentation of the
Thunar renamers should be displayed instead.</doc>
        <source-position filename="thunarx-renamer.h" line="111"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-renamer.c"
               line="438">the URL of the documentation for @renamer.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="renamer" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="431">a #ThunarxRenamer.</doc>
            <type name="Renamer" c:type="ThunarxRenamer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_menu_items"
              c:identifier="thunarx_renamer_get_menu_items">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="634">Returns the list of #ThunarxMenuItem&lt;!----&gt;s provided by @renamer for
the given list of @files. By default, this method returns %NULL
(the empty list), but derived classes may override this method
to provide additional items for files in the bulk renamer
dialog list.

The returned #ThunarxMenuItem&lt;!----&gt;s will be displayed in the file's
context menu of the bulk renamer dialog, when this @renamer is
active. For example, an ID3-Tag based renamer may add an menu item
"Edit Tags" to the context menus of supported media files and,
when activated, display a dialog (which should be transient and
modal for @window, if not %NULL), which allows the users to edit
media file tags on-the-fly.

Derived classes that override this method should always check
first if all the #ThunarxFileInfo&lt;!----&gt;s in the list of @files
are supported, and only return menu items that can be performed on
this specific list of @files. For example, the ID3-Tag renamer
mentioned above, should first check whether all items in @files
are actually audio files. The thunarx_file_info_has_mime_type()
of the #ThunarxFileInfo interface can be used to easily test
whether a file in the @files list is of a certain MIME type.

Some menu items may only work properly if only a single file is
selected (for example, the ID3-Tag renamer will probably only
supporting editing one file at a time). In this case you have
basicly two options: Either you can return %NULL here if @files
does not contain exactly one item, or you can return the menu items
as usual, but make them insensitive, using:
&lt;informalexample&gt;&lt;programlisting&gt;
thunarx_menu_item_set_sensitive (item, FALSE);
&lt;/programlisting&gt;&lt;/informalexample&gt;
The latter has the advantage that the user will still notice the
existance of the menu item and probably realize that it can only be
applied to a single item at once.

The caller is responsible to free the returned list using something
like the following:
&lt;informalexample&gt;&lt;programlisting&gt;
g_list_free_full (list, g_object_unref);
&lt;/programlisting&gt;&lt;/informalexample&gt;

As a special note, this method automatically takes a reference on the
@renamer for every #ThunarxMenuItem object returned from the real implementation
of this method in @renamer. This is to make sure that the extension stays
in memory for at least the time that the menu items are used.

The name of #ThunarxMenuItem&lt;!----&gt;s returned from this method must be namespaced with
the module to avoid collision with internal file manager menu items and
menu items provided by other extensions. For example, the menu item
provided by the ID3-Tag renamer mentioned above, should be named
&lt;literal&gt;TagRenamer::edit-tags&lt;/literal&gt; (if &lt;literal&gt;TagRenamer&lt;/literal&gt;
is the class name). For additional information about the way #ThunarxMenuItem&lt;!----&gt;s
should be returned from extensions and the way they are used, read the
description of the #ThunarxMenuProvider interface or read the introduction
provided with this reference manual.

A note of warning concerning the @window parameter. Plugins should
avoid taking a reference on @window, as that might introduce a
circular reference and can thereby cause a quite large memory leak.
Instead, if @window is not %NULL, add a weak reference using the
g_object_weak_ref() or g_object_add_weak_pointer() method. But don't
forget to release the weak reference if @window survived the lifetime
of your menu item (which is likely to be the case in most situations).</doc>
        <source-position filename="thunarx-renamer.h" line="136"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-renamer.c"
               line="705">the list of
         #ThunarxMenuItem&lt;!----&gt;s provided by @renamer for the given list of
         @files.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="MenuItem"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="renamer" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="636">a #ThunarxRenamer.</doc>
            <type name="Renamer" c:type="ThunarxRenamer*"/>
          </instance-parameter>
          <parameter name="window" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="637">a #GtkWindow or %NULL.</doc>
            <type name="Gtk.Window" c:type="GtkWindow*"/>
          </parameter>
          <parameter name="files" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="638">a #GList of #ThunarxFileInfo&lt;!----&gt;s.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="FileInfo"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="get_name"
              c:identifier="thunarx_renamer_get_name"
              glib:get-property="name">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="482">Returns the user visible name for @renamer, previously
set with thunarx_renamer_set_name().</doc>
        <source-position filename="thunarx-renamer.h" line="117"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-renamer.c"
               line="489">the user visible name for @renamer.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="renamer" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="484">a #ThunarxRenamer.</doc>
            <type name="Renamer" c:type="ThunarxRenamer*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="load" c:identifier="thunarx_renamer_load">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="561">Tells @renamer to load its internal settings from the specified
@settings. The @settings hash table contains previously saved
settings, see thunarx_renamer_save(), as key/value pairs of
strings. That is, both the keys and the values are strings.

Implementations of #ThunarxRenamer may decide to override this
method to perform custom loading of settings. If you do not
override this method, the default method of #ThunarxRenamer
will be used, which simply loads all #GObject properties
provided by @renamer&lt;!----&gt;s class (excluding the ones
provided by the parent classes) from the @settings. The
#GObject properties must be transformable to strings and
from strings.

If you decide to override this method for your #ThunarxRenamer
implementation, you should also override thunarx_renamer_save().</doc>
        <source-position filename="thunarx-renamer.h" line="129"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="renamer" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="563">a #ThunarxRenamer.</doc>
            <type name="Renamer" c:type="ThunarxRenamer*"/>
          </instance-parameter>
          <parameter name="settings" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="564">a #GHashTable which contains the previously saved
            settings for @renamer as key/value pairs of strings.</doc>
            <type name="GLib.HashTable" c:type="GHashTable*">
              <type name="gpointer" c:type="gpointer"/>
              <type name="gpointer" c:type="gpointer"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="process" c:identifier="thunarx_renamer_process">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="527">Determines the replacement for @text (which is the relevant
part of the full @file name, i.e. either the suffix, the name
or the name and the suffix).

The caller is responsible to free the returned string using
g_free() when no longer needed.</doc>
        <source-position filename="thunarx-renamer.h" line="123"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-renamer.c"
               line="545">the string with which to replace @text.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="renamer" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="529">a #ThunarxRenamer.</doc>
            <type name="Renamer" c:type="ThunarxRenamer*"/>
          </instance-parameter>
          <parameter name="file" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="530">the #ThunarxFileInfo for the file whose new
           name - according to @renamer - should be
           determined.</doc>
            <type name="FileInfo" c:type="ThunarxFileInfo*"/>
          </parameter>
          <parameter name="text" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="533">the part of the filename to which the
           @renamer should be applied.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="535">the index of the file in the list, used
           for renamers that work on numbering.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="save" c:identifier="thunarx_renamer_save">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="595">Tells @renamer to save its internal settings to the specified
@settings, which can afterwards be loaded by thunarx_renamer_load().

The strings saved to @settings must be allocated by g_strdup(),
both the keys and the values. For example to store the string
&lt;literal&gt;Bar&lt;/literal&gt; for the setting &lt;literal&gt;Foo&lt;/literal&gt;,
you'd use:
&lt;informalexample&gt;&lt;programlisting&gt;
g_hash_table_replace (settings, g_strdup ("Foo"), g_strdup ("Bar"));
&lt;/programlisting&gt;&lt;/informalexample&gt;

Implementations of #ThunarxRenamer may decide to override this
method to perform custom saving of settings. If you do not overrride
this method, the default method of #ThunarxRenamer will be used,
which simply stores all #GObject properties provided by the
@renamer&lt;!----&gt;s class (excluding the ones provided by the parent
classes) to the @settings. The #GObject properties must be transformable
to strings.

If you decide to override this method for your #ThunarxRenamer
implementation, you should also override thunarx_renamer_load().</doc>
        <source-position filename="thunarx-renamer.h" line="132"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="renamer" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="597">a #ThunarxRenamer.</doc>
            <type name="Renamer" c:type="ThunarxRenamer*"/>
          </instance-parameter>
          <parameter name="settings" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="598">a #GHashTable to which the current settings of @renamer
            should be stored as key/value pairs of strings.</doc>
            <type name="GLib.HashTable" c:type="GHashTable*">
              <type name="gpointer" c:type="gpointer"/>
              <type name="gpointer" c:type="gpointer"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="set_help_url"
              c:identifier="thunarx_renamer_set_help_url"
              glib:set-property="help-url">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="449">The URL to the documentation of this #ThunarxRenamer.
Derived classes can set this property to point to the
documentation for the specific renamer. The documentation
of the specific renamer in turn should contain a link to
the general Thunar renamer documentation.

May also be unset, in which case the general Thunar renamer
documentation will be shown when the user clicks the "Help"
button.</doc>
        <source-position filename="thunarx-renamer.h" line="113"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="renamer" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="451">a #ThunarxRenamer.</doc>
            <type name="Renamer" c:type="ThunarxRenamer*"/>
          </instance-parameter>
          <parameter name="help_url" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="452">the new URL to the documentation of @renamer.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_name" c:identifier="thunarx_renamer_set_name">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="500">Sets the user visible name for @renamer to @name. This method should
only be called by derived classes and prior to returning the @renamer
is returned from thunarx_renamer_provider_get_renamers().</doc>
        <source-position filename="thunarx-renamer.h" line="119"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="renamer" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="502">a #ThunarxRenamer.</doc>
            <type name="Renamer" c:type="ThunarxRenamer*"/>
          </instance-parameter>
          <parameter name="name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="503">the new user visible name for @renamer.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <property name="help-url"
                writable="1"
                transfer-ownership="none"
                setter="set_help_url"
                getter="get_help_url"
                default-value="NULL">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="142">The URL to the documentation of this #ThunarxRenamer.
Derived classes can set this property to point to the
documentation for the specific renamer. The documentation
of the specific renamer in turn should contain a link to
the general Thunar renamer documentation.

May also be unset, in which case the general Thunar renamer
documentation will be shown when the user clicks the "Help"
button.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="name"
                writable="1"
                construct-only="1"
                transfer-ownership="none"
                getter="get_name"
                default-value="NULL">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="163">The user visible name of the renamer, that is displayed
in the bulk rename dialog of the file manager. Derived
classes should set a useful name.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <field name="__parent__" readable="0" private="1">
        <type name="Gtk.VBox" c:type="GtkVBox"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="RenamerPrivate" c:type="ThunarxRenamerPrivate*"/>
      </field>
      <glib:signal name="changed" when="first">
        <doc xml:space="preserve"
             filename="thunarx-renamer.c"
             line="178">Derived classes should emit this signal using the
thunarx_renamer_changed() method whenever the user
changed a setting in the @renamer GUI.

The file manager will then invoke thunarx_renamer_process()
for all files that should be renamed and update the preview.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </class>
    <record name="RenamerClass"
            c:type="ThunarxRenamerClass"
            glib:is-gtype-struct-for="Renamer">
      <doc xml:space="preserve"
           filename="thunarx-renamer.h"
           line="45">Abstract base class with virtual methods implemented by extensions
that provide additional bulk renamers for the integrated bulk
rename module in Thunar.</doc>
      <source-position filename="thunarx-renamer.h" line="98"/>
      <field name="__parent__" readable="0" private="1">
        <type name="Gtk.VBoxClass" c:type="GtkVBoxClass"/>
      </field>
      <field name="process">
        <doc xml:space="preserve"
             filename="thunarx-renamer.h"
             line="47">see thunarx_renamer_process().</doc>
        <callback name="process">
          <source-position filename="thunarx-renamer.h" line="67"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="545">the string with which to replace @text.</doc>
            <type name="utf8" c:type="gchar*"/>
          </return-value>
          <parameters>
            <parameter name="renamer" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-renamer.c"
                   line="529">a #ThunarxRenamer.</doc>
              <type name="Renamer" c:type="ThunarxRenamer*"/>
            </parameter>
            <parameter name="file" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-renamer.c"
                   line="530">the #ThunarxFileInfo for the file whose new
           name - according to @renamer - should be
           determined.</doc>
              <type name="FileInfo" c:type="ThunarxFileInfo*"/>
            </parameter>
            <parameter name="text" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-renamer.c"
                   line="533">the part of the filename to which the
           @renamer should be applied.</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="index" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-renamer.c"
                   line="535">the index of the file in the list, used
           for renamers that work on numbering.</doc>
              <type name="guint" c:type="guint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="load">
        <doc xml:space="preserve"
             filename="thunarx-renamer.h"
             line="48">see thunarx_renamer_load().</doc>
        <callback name="load">
          <source-position filename="thunarx-renamer.h" line="72"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="renamer" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-renamer.c"
                   line="563">a #ThunarxRenamer.</doc>
              <type name="Renamer" c:type="ThunarxRenamer*"/>
            </parameter>
            <parameter name="settings" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-renamer.c"
                   line="564">a #GHashTable which contains the previously saved
            settings for @renamer as key/value pairs of strings.</doc>
              <type name="GLib.HashTable" c:type="GHashTable*">
                <type name="gpointer" c:type="gpointer"/>
                <type name="gpointer" c:type="gpointer"/>
              </type>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="save">
        <doc xml:space="preserve"
             filename="thunarx-renamer.h"
             line="49">see thunarx_renamer_save().</doc>
        <callback name="save">
          <source-position filename="thunarx-renamer.h" line="74"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="renamer" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-renamer.c"
                   line="597">a #ThunarxRenamer.</doc>
              <type name="Renamer" c:type="ThunarxRenamer*"/>
            </parameter>
            <parameter name="settings" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-renamer.c"
                   line="598">a #GHashTable to which the current settings of @renamer
            should be stored as key/value pairs of strings.</doc>
              <type name="GLib.HashTable" c:type="GHashTable*">
                <type name="gpointer" c:type="gpointer"/>
                <type name="gpointer" c:type="gpointer"/>
              </type>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_menu_items">
        <doc xml:space="preserve"
             filename="thunarx-renamer.h"
             line="50">see thunarx_renamer_get_menu_items().</doc>
        <callback name="get_menu_items">
          <source-position filename="thunarx-renamer.h" line="77"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="thunarx-renamer.c"
                 line="705">the list of
         #ThunarxMenuItem&lt;!----&gt;s provided by @renamer for the given list of
         @files.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="MenuItem"/>
            </type>
          </return-value>
          <parameters>
            <parameter name="renamer" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-renamer.c"
                   line="636">a #ThunarxRenamer.</doc>
              <type name="Renamer" c:type="ThunarxRenamer*"/>
            </parameter>
            <parameter name="window" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-renamer.c"
                   line="637">a #GtkWindow or %NULL.</doc>
              <type name="Gtk.Window" c:type="GtkWindow*"/>
            </parameter>
            <parameter name="files" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-renamer.c"
                   line="638">a #GList of #ThunarxFileInfo&lt;!----&gt;s.</doc>
              <type name="GLib.List" c:type="GList*">
                <type name="FileInfo"/>
              </type>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reserved0">
        <callback name="reserved0">
          <source-position filename="thunarx-renamer.h" line="82"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved1">
        <callback name="reserved1">
          <source-position filename="thunarx-renamer.h" line="83"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved2">
        <callback name="reserved2">
          <source-position filename="thunarx-renamer.h" line="84"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved3">
        <callback name="reserved3">
          <source-position filename="thunarx-renamer.h" line="85"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved4">
        <callback name="reserved4">
          <source-position filename="thunarx-renamer.h" line="86"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="changed">
        <doc xml:space="preserve"
             filename="thunarx-renamer.h"
             line="51">see thunarx_renamer_changed().</doc>
        <callback name="changed">
          <source-position filename="thunarx-renamer.h" line="91"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="renamer" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-renamer.c"
                   line="732">a #ThunarxRenamer.</doc>
              <type name="Renamer" c:type="ThunarxRenamer*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reserved6">
        <callback name="reserved6">
          <source-position filename="thunarx-renamer.h" line="94"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved7">
        <callback name="reserved7">
          <source-position filename="thunarx-renamer.h" line="95"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved8">
        <callback name="reserved8">
          <source-position filename="thunarx-renamer.h" line="96"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved9">
        <callback name="reserved9">
          <source-position filename="thunarx-renamer.h" line="97"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <record name="RenamerPrivate"
            c:type="ThunarxRenamerPrivate"
            disguised="1"
            opaque="1">
      <source-position filename="thunarx-renamer.h" line="34"/>
    </record>
    <interface name="RenamerProvider"
               c:symbol-prefix="renamer_provider"
               c:type="ThunarxRenamerProvider"
               glib:type-name="ThunarxRenamerProvider"
               glib:get-type="thunarx_renamer_provider_get_type"
               glib:type-struct="RenamerProviderIface">
      <source-position filename="thunarx-renamer-provider.h" line="62"/>
      <virtual-method name="get_renamers"
                      invoker="get_renamers"
                      introspectable="0">
        <doc xml:space="preserve"
             filename="thunarx-renamer-provider.c"
             line="67">Returns the list of #ThunarxRenamer&lt;!----&gt;s provided by the
specified @provider.

The real implementation of this method MUST return the #ThunarxRenamer&lt;!----&gt;s
with floating references (the default for g_object_new() on #GtkWidget
derived types).

The returned #ThunarxRenamer&lt;!----&gt;s will be reffed and sinked automatically
by this function.

As a special note, this method automatically takes a reference on the
@provider for every #ThunarxRenamer returned from the real implementation
of this method in @provider. This is to make sure that the extension stays
in memory for atleast the time that the renamers are used. If the extension
wants to stay in memory for a longer time, it'll need to take care of this
itself (e.g. by taking an additional reference on the @provider itself,
that's released at a later time).

The caller is responsible to free the returned list of renamers using
something like this when no longer needed:
&lt;informalexample&gt;&lt;programlisting&gt;
g_list_free_full (list, g_object_unref);
&lt;/programlisting&gt;&lt;/informalexample&gt;</doc>
        <source-position filename="thunarx-renamer-provider.h" line="54"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-renamer-provider.c"
               line="95">the list of #ThunarxRenamer&lt;!----&gt;s provided by the
              specified @provider.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="Renamer"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="provider" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer-provider.c"
                 line="69">a #ThunarxRenamerProvider.</doc>
            <type name="RenamerProvider" c:type="ThunarxRenamerProvider*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <method name="get_renamers"
              c:identifier="thunarx_renamer_provider_get_renamers"
              introspectable="0">
        <doc xml:space="preserve"
             filename="thunarx-renamer-provider.c"
             line="67">Returns the list of #ThunarxRenamer&lt;!----&gt;s provided by the
specified @provider.

The real implementation of this method MUST return the #ThunarxRenamer&lt;!----&gt;s
with floating references (the default for g_object_new() on #GtkWidget
derived types).

The returned #ThunarxRenamer&lt;!----&gt;s will be reffed and sinked automatically
by this function.

As a special note, this method automatically takes a reference on the
@provider for every #ThunarxRenamer returned from the real implementation
of this method in @provider. This is to make sure that the extension stays
in memory for atleast the time that the renamers are used. If the extension
wants to stay in memory for a longer time, it'll need to take care of this
itself (e.g. by taking an additional reference on the @provider itself,
that's released at a later time).

The caller is responsible to free the returned list of renamers using
something like this when no longer needed:
&lt;informalexample&gt;&lt;programlisting&gt;
g_list_free_full (list, g_object_unref);
&lt;/programlisting&gt;&lt;/informalexample&gt;</doc>
        <source-position filename="thunarx-renamer-provider.h" line="68"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="thunarx-renamer-provider.c"
               line="95">the list of #ThunarxRenamer&lt;!----&gt;s provided by the
              specified @provider.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="Renamer"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="provider" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="thunarx-renamer-provider.c"
                 line="69">a #ThunarxRenamerProvider.</doc>
            <type name="RenamerProvider" c:type="ThunarxRenamerProvider*"/>
          </instance-parameter>
        </parameters>
      </method>
    </interface>
    <record name="RenamerProviderIface"
            c:type="ThunarxRenamerProviderIface"
            glib:is-gtype-struct-for="RenamerProvider">
      <doc xml:space="preserve"
           filename="thunarx-renamer-provider.h"
           line="40">Interface with virtual methods implemented by extensions that provide
additional bulk renamers for the integrated bulk renamer in Thunar.</doc>
      <source-position filename="thunarx-renamer-provider.h" line="62"/>
      <field name="__parent__" readable="0" private="1">
        <type name="GObject.TypeInterface" c:type="GTypeInterface"/>
      </field>
      <field name="get_renamers">
        <doc xml:space="preserve"
             filename="thunarx-renamer-provider.h"
             line="42">see thunarx_renamer_provider_get_renamers().</doc>
        <callback name="get_renamers">
          <source-position filename="thunarx-renamer-provider.h" line="54"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="thunarx-renamer-provider.c"
                 line="95">the list of #ThunarxRenamer&lt;!----&gt;s provided by the
              specified @provider.</doc>
            <type name="GLib.List" c:type="GList*">
              <type name="Renamer"/>
            </type>
          </return-value>
          <parameters>
            <parameter name="provider" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="thunarx-renamer-provider.c"
                   line="69">a #ThunarxRenamerProvider.</doc>
              <type name="RenamerProvider" c:type="ThunarxRenamerProvider*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reserved1">
        <callback name="reserved1">
          <source-position filename="thunarx-renamer-provider.h" line="57"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved2">
        <callback name="reserved2">
          <source-position filename="thunarx-renamer-provider.h" line="58"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved3">
        <callback name="reserved3">
          <source-position filename="thunarx-renamer-provider.h" line="59"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved4">
        <callback name="reserved4">
          <source-position filename="thunarx-renamer-provider.h" line="60"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
      <field name="reserved5">
        <callback name="reserved5">
          <source-position filename="thunarx-renamer-provider.h" line="61"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
        </callback>
      </field>
    </record>
    <function name="check_version" c:identifier="thunarx_check_version">
      <doc xml:space="preserve"
           filename="thunarx-config.c"
           line="83">Checks that the &lt;systemitem class="library"&gt;thunarx&lt;/systemitem&gt; library
in use is compatible with the given version. Generally you would pass in
the constants #THUNARX_MAJOR_VERSION, #THUNARX_MINOR_VERSION and
#THUNARX_VERSION_MICRO as the three arguments to this function; that produces
a check that the library in use is compatible with the version of
&lt;systemitem class="library"&gt;thunarx&lt;/systemitem&gt; the extension was
compiled against.

This function should be called by extensions in the
thunar_extension_initialize() method to verify that the &lt;systemitem
class="library"&gt;thunarx&lt;/systemitem&gt; library used by file manager is
compatible with the version the extension was compiled with.

&lt;example&gt;
&lt;title&gt;Checking the runtime version of the Thunar Extension library&lt;/title&gt;
&lt;programlisting&gt;
const gchar *mismatch;
mismatch = thunarx_check_version (THUNARX_VERSION_MAJOR,
                                  THUNARX_VERSION_MINOR,
                                  THUNARX_VERSION_MICRO);
if (G_UNLIKELY (mismatch != NULL))
  g_error ("Version mismatch: %&lt;!----&gt;s", mismatch);
&lt;/programlisting&gt;
&lt;/example&gt;</doc>
      <source-position filename="thunarx-config.h" line="48"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="thunarx-config.c"
             line="114">%NULL if the library is compatible with the given version,
              or a string describing the version mismatch. The returned
              string is owned by the library and must not be freed or
              modified by the caller.</doc>
        <type name="utf8" c:type="const gchar*"/>
      </return-value>
      <parameters>
        <parameter name="required_major" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-config.c"
               line="85">the required major version.</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="required_minor" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-config.c"
               line="86">the required minor version.</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
        <parameter name="required_micro" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-config.c"
               line="87">the required micro version.</doc>
          <type name="guint" c:type="guint"/>
        </parameter>
      </parameters>
    </function>
    <function name="file_info_list_copy"
              c:identifier="thunarx_file_info_list_copy"
              moved-to="FileInfoList.copy">
      <doc xml:space="preserve"
           filename="thunarx-file-info.c"
           line="419">Does a deep copy of @file_infos and returns the
new list.</doc>
      <source-position filename="thunarx-file-info.h" line="179"/>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve"
             filename="thunarx-file-info.c"
             line="426">a copy of @file_infos.</doc>
        <type name="GLib.List" c:type="GList*">
          <type name="FileInfo"/>
        </type>
      </return-value>
      <parameters>
        <parameter name="file_infos" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="421">a #GList of #ThunarxFileInfo&lt;!----&gt;s.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="FileInfo"/>
          </type>
        </parameter>
      </parameters>
    </function>
    <function name="file_info_list_free"
              c:identifier="thunarx_file_info_list_free"
              moved-to="FileInfoList.free">
      <doc xml:space="preserve"
           filename="thunarx-file-info.c"
           line="436">Frees the resources allocated for the @file_infos
list and decreases the reference count on the
#ThunarxFileInfo&lt;!----&gt;s contained within.</doc>
      <source-position filename="thunarx-file-info.h" line="181"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="file_infos" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="thunarx-file-info.c"
               line="438">a #GList of #ThunarxFileInfo&lt;!----&gt;s.</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="FileInfo"/>
          </type>
        </parameter>
      </parameters>
    </function>
    <docsection name="thunarx-file-info">
      <doc xml:space="preserve"
           filename="thunarx-file-info.c"
           line="45">The &lt;interface&gt;ThunarxFileInfo&lt;/interface&gt; interface provides extensions with
a way to access information about a file handled within the file manager.</doc>
    </docsection>
    <docsection name="thunarx-menu">
      <doc xml:space="preserve"
           filename="thunarx-menu.c"
           line="30">The class for submenus that can be added to Thunar's context menus. Extensions
can provide ThunarxMenu objects by attaching them to ThunarxMenuItem objects,
using thunarx_menu_item_set_menu().</doc>
    </docsection>
    <docsection name="thunarx-menu-item">
      <doc xml:space="preserve"
           filename="thunarx-menu-item.c"
           line="30">The class for menu items that can be added to Thunar's context menus
by extensions implementing the #ThunarxMenuProvider, #ThunarxPreferencesProvider
or #ThunarxRenamerProvider interfaces. The items returned by extensions from
*_get_menu_items() methods are instances of this class or a derived class.</doc>
    </docsection>
    <docsection name="thunarx-menu-provider">
      <doc xml:space="preserve"
           filename="thunarx-menu-provider.c"
           line="31">The &lt;interface&gt;ThunarxMenuProvider&lt;/interface&gt; interface is implemented by
extensions which provide additional menu items that should be displayed in
the file or folder context menus for certain types of files.

Extensions that implement this interface should do its best to respond as
fast as possible to method invokations by the file manager. That said, when
the file manager calls the thunarx_menu_provider_get_file_menu_items() or the
thunarx_menu_provider_get_folder_menu_items() method, the implementation in the
extension should use only the thunarx_file_info_has_mime_type() and
thunarx_file_info_is_directory() methods to determine the menu items that should
be added to the file manager's context menu. Don't perform any complicated I/O
to determine the menu items list, as that would block the whole file manager process.

The name of &lt;link linkend="ThunarxMenuItem"&gt;ThunarxMenuItem&lt;/link&gt;s returned from the
thunarx_menu_provider_get_file_menu_items() and thunarx_menu_provider_get_folder_menu_items()
methods must be namespaced with the module to avoid collision with internal file manager
menu items and menu items provided by other extensions. For example, the menu item provided
by the &lt;systemitem class="library"&gt;ThunarOpenTerminal&lt;/systemitem&gt; extension should be
called &lt;literal&gt;ThunarOpenTerminal::open-terminal&lt;/literal&gt;.</doc>
    </docsection>
    <docsection name="thunarx-preferences-provider">
      <doc xml:space="preserve"
           filename="thunarx-preferences-provider.c"
           line="30">The ThunarxPreferencesProvider interface is implemented by extensions that
want to register additional items in the preferences menu of the file
manager. In general this should only be done by extensions that are closely
tied to the file manager (for example, the &lt;literal&gt;thunar-uca&lt;/literal&gt; is
such an extension, while an extension that just adds &lt;guimenuitem&gt;Compress
file&lt;/guimenuitem&gt; and &lt;guimenuitem&gt;Uncompress file&lt;/guimenuitem&gt; to the
context menu of compressed files should not add their own preferences to
the file manager menu, because it should use desktop-wide settings for
archive managers instead).

The name of &lt;link linkend="ThunarxMenuItem"&gt;&lt;type&gt;ThunarxMenuItem&lt;/type&gt;&lt;/link&gt;s
returned from the thunarx_preferences_provider_get_menu items() method must be
namespaced with the model to avoid collision with internal file manager menu items
and menu items provided by other extensions. For example, the preferences menu item
provided by the &lt;literal&gt;thunar-uca&lt;/literal&gt; extension is called
&lt;literal&gt;ThunarUca::manage-menu-items&lt;/literal&gt;.</doc>
    </docsection>
    <docsection name="thunarx-property-page">
      <doc xml:space="preserve"
           filename="thunarx-property-page.c"
           line="32">The class for pages that can be added to Thunar's file properties dialog
by extensions implementing the #ThunarxPropertyPageProvider interface. The
pages returned by extensions from thunarx_property_page_provider_get_pages()
method are instances of this class or a derived class. Note that extensions
do not need to subclass #ThunarxPropertyPage, but may also instantiate it
directly and add widgets to it, but I strongly suggest to create a subclass
as it usually leads to better modularization and thereby better maintainability
in the code.

To pick up the #TagPage example from the thunarx_property_page_provider_get_pages()
description again, you'd create a new class #TagPage, that inherits #ThunarxPropertyPage
(using the #THUNARX_DEFINE_TYPE macro), which provides several user interface elements
in the property, and defines atleast one property named &lt;literal&gt;"file"&lt;/literal&gt;, which
is the #ThunarxFileInfo whose tags are displayed in the property page. For example, the
&lt;filename&gt;tag-page.h&lt;/filename&gt; header file would look like this (this is really just
an example of the suggested way to implement property pages, you may of course choose
a different way)</doc>
    </docsection>
    <docsection name="thunarx-property-page-provider">
      <doc xml:space="preserve"
           filename="thunarx-property-page-provider.c"
           line="30">To add a property page to the file properties dialog, extensions must implement the
&lt;type&gt;ThunarxPropertyPageProvider&lt;/type&gt; interface. This interface has only one virtual
method, &lt;function&gt;get_pages&lt;/function&gt;, that is passed a list of &lt;link
linkend="ThunarxFileInfo"&gt;&lt;type&gt;ThunarxFileInfo&lt;/type&gt;&lt;/link&gt; objects and returns a list
of &lt;link linkend="ThunarxPropertyPage"&gt;&lt;type&gt;ThunarxPropertyPage&lt;/type&gt;&lt;/link&gt; objects.</doc>
    </docsection>
    <docsection name="thunarx-provider-factory">
      <doc xml:space="preserve"
           filename="thunarx-provider-factory.c"
           line="51">The #ThunarxProviderFactory class allows applications to use Thunar plugins. It handles
the loading of the installed extensions and instantiates providers for the application.
For example, Thunar uses this class to access the installed extensions.</doc>
    </docsection>
    <docsection name="thunarx-provider-plugin">
      <doc xml:space="preserve"
           filename="thunarx-provider-plugin.c"
           line="36">#ThunarxProviderPlugin is the interface to the file manager's type plugin loader implementation. It
provides methods to extensions - also called &lt;emphasis&gt;provider plugins&lt;/emphasis&gt; - to register dynamic
types and control certain aspects of the plugin (see thunarx_provider_plugin_set_resident()).</doc>
    </docsection>
    <docsection name="thunarx-renamer">
      <doc xml:space="preserve"
           filename="thunarx-renamer.c"
           line="49">The abstract base class &lt;type&gt;ThunarxRenamer&lt;/type&gt; is implemented by
extensions which provide additional bulk renamers that should be used in
the bulk rename dialog.

Derived classes must override the thunarx_renamer_process() method, which
is called by the bulk rename dialog for every file to generate a new name. For
example, the &lt;type&gt;ThunarSbrReplaceRenamer&lt;/type&gt; class included in the
&lt;literal&gt;thunar-sbr&lt;/literal&gt; plugin (which is part of the Thunar distribution)
provides a bulk renamer, named &lt;emphasis&gt;Search &amp;amp; Replace&lt;/emphasis&gt;,
which allows the user to rename multiple files by searching for a pattern in
each file name and, if the pattern is found, replacing it with the specified
replacement text.

The active &lt;type&gt;ThunarxRenamer&lt;/type&gt;s user interface is displayed in a frame
below the file list, as shown in the screenshot above. Derived classes should try
to limit the number of widgets displayed in the main user interface. For example,
if you have more than six settings, you should consider adding an &lt;guibutton&gt;Advanced&lt;/guibutton&gt;,
button which opens a dialog with the additional settings.</doc>
    </docsection>
    <docsection name="thunarx-renamer-provider">
      <doc xml:space="preserve"
           filename="thunarx-renamer-provider.c"
           line="30">The &lt;interface&gt;ThunarxRenamerProvider&lt;/interface&gt; interface is implemented by
extensions which provide additional bulk renamers that should be used by the
bulk rename dialog in Thunar.</doc>
    </docsection>
  </namespace>
</repository>
