gio: Add g_file_info_set/get_file

Attaching the original GFile to a GFileInfo created
from it useful to avoid having to carry around the
(file, info) pair. In particular, it allows to store
just a self-contained GFileInfo in a list model. This
is going to be used in the GTK file chooser.
This commit is contained in:
Matthias Clasen
2020-07-12 13:54:58 -04:00
parent 570f27a90a
commit 301cf981e3
3 changed files with 48 additions and 0 deletions

View File

@@ -400,6 +400,7 @@ g_file_info_get_symlink_target
g_file_info_get_etag
g_file_info_get_sort_order
g_file_info_get_deletion_date
g_file_info_get_file
g_file_info_set_attribute_mask
g_file_info_unset_attribute_mask
g_file_info_set_file_type
@@ -416,6 +417,7 @@ g_file_info_set_modification_time
g_file_info_set_modification_date_time
g_file_info_set_symlink_target
g_file_info_set_sort_order
g_file_info_set_file
g_file_attribute_matcher_new
g_file_attribute_matcher_ref
g_file_attribute_matcher_subtract

View File

@@ -73,6 +73,8 @@ struct _GFileInfo
{
GObject parent_instance;
GFile *file;
GArray *attributes;
GFileAttributeMatcher *mask;
};
@@ -323,6 +325,8 @@ g_file_info_finalize (GObject *object)
info = G_FILE_INFO (object);
g_clear_object (&info->file);
attrs = (GFileAttribute *)info->attributes->data;
for (i = 0; i < info->attributes->len; i++)
_g_file_attribute_value_clear (&attrs[i].value);
@@ -381,6 +385,8 @@ g_file_info_copy_into (GFileInfo *src_info,
g_return_if_fail (G_IS_FILE_INFO (src_info));
g_return_if_fail (G_IS_FILE_INFO (dest_info));
g_set_object (&dest_info->file, src_info->file);
dest = (GFileAttribute *)dest_info->attributes->data;
for (i = 0; i < dest_info->attributes->len; i++)
_g_file_attribute_value_clear (&dest[i].value);
@@ -2283,6 +2289,41 @@ g_file_info_set_sort_order (GFileInfo *info,
_g_file_attribute_value_set_int32 (value, sort_order);
}
/**
* g_file_info_set_file:
* @info: a #GFileInfo
* @file: the #GFile that @info is for
*
* Sets the file that @info belongs to.
*
* Since: 2.66
*/
void
g_file_info_set_file (GFileInfo *info,
GFile *file)
{
g_return_if_fail (G_IS_FILE_INFO (info));
g_set_object (&info->file, file);
}
/**
* g_file_info_get_file:
* @info: a #GFileInfo
*
* Gets the file that @info belongs to.
*
* Returns: (transfer none): the #GFile
*
* Since: 2.66
*/
GFile *
g_file_info_get_file (GFileInfo *info)
{
g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
return info->file;
}
typedef struct {
guint32 id;

View File

@@ -1113,6 +1113,11 @@ void g_file_info_set_symlink_target (GFileInfo *info,
GLIB_AVAILABLE_IN_ALL
void g_file_info_set_sort_order (GFileInfo *info,
gint32 sort_order);
GLIB_AVAILABLE_IN_2_66
void g_file_info_set_file (GFileInfo *info,
GFile *file);
GLIB_AVAILABLE_IN_2_66
GFile * g_file_info_get_file (GFileInfo *info);
#define G_TYPE_FILE_ATTRIBUTE_MATCHER (g_file_attribute_matcher_get_type ())
GLIB_AVAILABLE_IN_ALL