diff --git a/docs/reference/gio/gio-sections.txt b/docs/reference/gio/gio-sections.txt index 31744f5c4..9264424b4 100644 --- a/docs/reference/gio/gio-sections.txt +++ b/docs/reference/gio/gio-sections.txt @@ -86,6 +86,7 @@ g_file_get_path g_file_get_uri g_file_get_parse_name g_file_get_parent +g_file_has_parent g_file_get_child g_file_get_child_for_display_name g_file_has_prefix diff --git a/gio/gfile.c b/gio/gfile.c index c4a72e35d..36c043946 100644 --- a/gio/gfile.c +++ b/gio/gfile.c @@ -653,6 +653,49 @@ g_file_get_parent (GFile *file) return (* iface->get_parent) (file); } +/** + * g_file_has_parent: + * @file: input #GFile + * @parent: the parent to check for, or %NULL + * + * Checks if @file has a parent, and optionally, if it is @parent. + * + * If @parent is %NULL then this function returns %TRUE if @file has any + * parent at all. If @parent is non-%NULL then %TRUE is only returned + * if @file is a child of @parent. + * + * Returns: %TRUE if @file is a child of @parent (or any parent in the + * case that @parent is %NULL). + * + * Since: 2.24 + **/ +gboolean +g_file_has_parent (GFile *file, + GFile *parent) +{ + GFile *actual_parent; + gboolean result; + + g_return_val_if_fail (G_IS_FILE (file), FALSE); + g_return_val_if_fail (parent == NULL || G_IS_FILE (parent), FALSE); + + actual_parent = g_file_get_parent (file); + + if (actual_parent != NULL) + { + if (parent != NULL) + result = g_file_equal (parent, actual_parent); + else + result = TRUE; + + g_object_unref (actual_parent); + } + else + result = FALSE; + + return result; +} + /** * g_file_get_child: * @file: input #GFile. diff --git a/gio/gfile.h b/gio/gfile.h index 611639e1e..918f26a55 100644 --- a/gio/gfile.h +++ b/gio/gfile.h @@ -560,6 +560,8 @@ char * g_file_get_path (GFile char * g_file_get_uri (GFile *file); char * g_file_get_parse_name (GFile *file); GFile * g_file_get_parent (GFile *file); +gboolean g_file_has_parent (GFile *file, + GFile *parent); GFile * g_file_get_child (GFile *file, const char *name); GFile * g_file_get_child_for_display_name (GFile *file, diff --git a/gio/gio.symbols b/gio/gio.symbols index 47ad861f9..204436e5e 100644 --- a/gio/gio.symbols +++ b/gio/gio.symbols @@ -257,6 +257,7 @@ g_file_get_path g_file_get_uri g_file_get_parse_name g_file_get_parent +g_file_has_parent g_file_get_child g_file_get_child_for_display_name g_file_has_prefix