[glib] gfileenumerator: Add a g_file_enumerator_get_child method



commit 3c87ab97ffd8735bff78c177e163826484776cd2
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Wed Dec 12 04:49:28 2012 -0500

    gfileenumerator: Add a g_file_enumerator_get_child method
    
    This is a new convenience method designed to simplify some use
    cases of GFileEnumerator, by making it easy to get the next file
    from a file enumerator.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=690083

 docs/reference/gio/gio-sections.txt |    1 +
 gio/gfileenumerator.c               |   31 +++++++++++++++++++++++++++++++
 gio/gfileenumerator.h               |    3 +++
 gio/gio.symbols                     |    1 +
 gio/tests/live-g-file.c             |    4 ++--
 5 files changed, 38 insertions(+), 2 deletions(-)
---
diff --git a/docs/reference/gio/gio-sections.txt b/docs/reference/gio/gio-sections.txt
index 81f613c..a39f55f 100644
--- a/docs/reference/gio/gio-sections.txt
+++ b/docs/reference/gio/gio-sections.txt
@@ -213,6 +213,7 @@ g_file_enumerator_is_closed
 g_file_enumerator_has_pending
 g_file_enumerator_set_pending
 g_file_enumerator_get_container
+g_file_enumerator_get_child
 <SUBSECTION Standard>
 GFileEnumeratorClass
 G_FILE_ENUMERATOR
diff --git a/gio/gfileenumerator.c b/gio/gfileenumerator.c
index d8f622b..6a8065b 100644
--- a/gio/gfileenumerator.c
+++ b/gio/gfileenumerator.c
@@ -589,6 +589,37 @@ g_file_enumerator_get_container (GFileEnumerator *enumerator)
   return enumerator->priv->container;
 }
 
+/**
+ * g_file_enumerator_get_child:
+ * @enumerator: a #GFileEnumerator
+ * @info: a #GFileInfo gotten from g_file_enumerator_next_file()
+ *   or the async equivalents.
+ *
+ * Return a new #GFile which refers to the file named by @info in the source
+ * directory of @enumerator.  This function is primarily intended to be used
+ * inside loops with g_file_enumerator_next_file().
+ *
+ * This is a convenience method that's equivalent to:
+ * |[
+ *   gchar *name = g_file_info_get_name (info);
+ *   GFile *child = g_file_get_child (g_file_enumerator_get_container (enumr),
+ *                                    name);
+ * ]|
+ *
+ * Returns: (transfer full): a #GFile for the #GFileInfo passed it.
+ *
+ * Since: 2.36
+ */
+GFile *
+g_file_enumerator_get_child (GFileEnumerator *enumerator,
+                             GFileInfo       *info)
+{
+  g_return_val_if_fail (G_IS_FILE_ENUMERATOR (enumerator), NULL);
+
+  return g_file_get_child (enumerator->priv->container,
+                           g_file_info_get_name (info));
+}
+
 typedef struct {
   int                num_files;
   GList             *files;
diff --git a/gio/gfileenumerator.h b/gio/gfileenumerator.h
index 9cd2f3e..9fcec12 100644
--- a/gio/gfileenumerator.h
+++ b/gio/gfileenumerator.h
@@ -126,6 +126,9 @@ gboolean   g_file_enumerator_has_pending       (GFileEnumerator      *enumerator
 void       g_file_enumerator_set_pending       (GFileEnumerator      *enumerator,
 						gboolean              pending);
 GFile *    g_file_enumerator_get_container     (GFileEnumerator *enumerator);
+GLIB_AVAILABLE_IN_2_36
+GFile *    g_file_enumerator_get_child         (GFileEnumerator *enumerator,
+                                                GFileInfo       *info);
 
 G_END_DECLS
 
diff --git a/gio/gio.symbols b/gio/gio.symbols
index b148333..3096755 100644
--- a/gio/gio.symbols
+++ b/gio/gio.symbols
@@ -384,6 +384,7 @@ g_file_enumerator_close_finish
 g_file_enumerator_is_closed
 g_file_enumerator_has_pending
 g_file_enumerator_set_pending
+g_file_enumerator_get_child
 g_file_enumerator_get_container
 g_file_icon_get_type
 g_file_icon_new
diff --git a/gio/tests/live-g-file.c b/gio/tests/live-g-file.c
index c104a9c..a9a9c03 100644
--- a/gio/tests/live-g-file.c
+++ b/gio/tests/live-g-file.c
@@ -513,7 +513,7 @@ traverse_recurse_dirs (GFile * parent, GFile * root)
   info = g_file_enumerator_next_file (enumerator, NULL, &error);
   while ((info) && (!error))
     {
-      descend = g_file_get_child (parent, g_file_info_get_name (info));
+      descend = g_file_enumerator_get_child (enumerator, info);
       g_assert (descend != NULL);
       relative_path = g_file_get_relative_path (root, descend);
       g_assert (relative_path != NULL);
@@ -1159,7 +1159,7 @@ cleanup_dir_recurse (GFile *parent, GFile *root)
   info = g_file_enumerator_next_file (enumerator, NULL, &error);
   while ((info) && (!error))
     {
-      descend = g_file_get_child (parent, g_file_info_get_name (info));
+      descend = g_file_enumerator_get_child (enumerator, info);
       g_assert (descend != NULL);
       relative_path = g_file_get_relative_path (root, descend);
       g_assert (relative_path != NULL);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]