summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJasper St. Pierre <jstpierre@mecheye.net>2012-12-12 04:49:28 -0500
committerJasper St. Pierre <jstpierre@mecheye.net>2012-12-13 21:38:18 -0500
commit3c87ab97ffd8735bff78c177e163826484776cd2 (patch)
tree149d56dc757725c91da929972daa17d87d803aec
parent6cce4790b7639656c7701a4ed8495ba50abd7c6e (diff)
downloadglib-3c87ab97ffd8735bff78c177e163826484776cd2.tar.gz
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
-rw-r--r--docs/reference/gio/gio-sections.txt1
-rw-r--r--gio/gfileenumerator.c31
-rw-r--r--gio/gfileenumerator.h3
-rw-r--r--gio/gio.symbols1
-rw-r--r--gio/tests/live-g-file.c4
5 files changed, 38 insertions, 2 deletions
diff --git a/docs/reference/gio/gio-sections.txt b/docs/reference/gio/gio-sections.txt
index 81f613ccf..a39f55fe0 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 d8f622b39..6a8065b2a 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 9cd2f3eca..9fcec1281 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 b1483338a..30967558a 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 c104a9cf8..a9a9c03f7 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);