Commit addab837 authored by Paolo Bacchilega's avatar Paolo Bacchilega
Browse files

allow to specify more than one metadata attribute in the file list

parent 49df8207
<?xml version="1.0"?>
<interface>
<requires lib="gtk+" version="2.14"/>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkDialog" id="preferences_dialog">
<property name="border_width">6</property>
<property name="title" translatable="yes">gthumb Preferences</property>
<property name="resizable">False</property>
<property name="type_hint">dialog</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
......@@ -342,97 +341,128 @@
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkTable" id="table14">
<object class="GtkCheckButton" id="slow_mime_type_checkbutton">
<property name="label" translatable="yes">D_etermine image type from content (slower)</property>
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">2</property>
<property name="column_spacing">12</property>
<property name="row_spacing">6</property>
<child>
<object class="GtkLabel" id="label113">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Th_umbnail size:</property>
<property name="use_underline">True</property>
<property name="justify">center</property>
</object>
<packing>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frame1">
<property name="visible">True</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="top_padding">6</property>
<property name="left_padding">12</property>
<child>
<object class="GtkHBox" id="hbox113">
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkHBox" id="thumbnail_size_box">
<object class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="spacing">6</property>
<child>
<placeholder/>
<object class="GtkLabel" id="size_label">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">_Size:</property>
<property name="use_underline">True</property>
<property name="justify">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="thumbnail_size_box">
<property name="visible">True</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Thumbnail c_aption:</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="thumbnail_caption_box">
<property name="visible">True</property>
<child>
<placeholder/>
<object class="GtkVBox" id="vbox2">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="caption_label">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">C_aption:</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="caption_scrolledwindow">
<property name="height_request">150</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<property name="shadow_type">in</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="slow_mime_type_checkbutton">
<property name="label" translatable="yes">D_etermine image type from content (slower)</property>
<child type="label">
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
<property name="label" translatable="yes">Thumbnail</property>
<property name="use_markup">True</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
<property name="position">1</property>
</packing>
</child>
</object>
......
......@@ -52,24 +52,24 @@ GthMetadataInfo exiv2_metadata_info[] = {
{ "Exif::Photo::SubSecTime", NULL, "Exif::General", 5, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::DateTimeOriginal", NULL, "Exif::General", 6, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW},
{ "Exif::Photo::SubSecTimeOriginal", NULL, "Exif::General", 7, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::DateTimeDigitized", NULL, "Exif::General", 8, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::DateTimeDigitized", NULL, "Exif::General", 8, GTH_METADATA_ALLOW_EVERYWHERE },
{ "Exif::Photo::SubSecTimeDigitized", NULL, "Exif::General", 9, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Image::Artist", NULL, "Exif::General", 11, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Image::Copyright", NULL, "Exif::General", 12, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::UniqueID", NULL, "Exif::General", 13, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::SoundFile", NULL, "Exif::General", 14, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::ISOSpeedRatings", NULL, "Exif::Conditions", 2, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::BrightnessValue", NULL, "Exif::Conditions", 3, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::FNumber", NULL, "Exif::Conditions", 4, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::ISOSpeedRatings", NULL, "Exif::Conditions", 2, GTH_METADATA_ALLOW_EVERYWHERE },
{ "Exif::Photo::BrightnessValue", NULL, "Exif::Conditions", 3, GTH_METADATA_ALLOW_EVERYWHERE },
{ "Exif::Photo::FNumber", NULL, "Exif::Conditions", 4, GTH_METADATA_ALLOW_EVERYWHERE },
{ "Exif::Photo::ApertureValue", NULL, "Exif::Conditions", 5, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::MaxApertureValue", NULL, "Exif::Conditions", 6, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::ExposureTime", NULL, "Exif::Conditions", 7, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::MaxApertureValue", NULL, "Exif::Conditions", 6, GTH_METADATA_ALLOW_EVERYWHERE },
{ "Exif::Photo::ExposureTime", NULL, "Exif::Conditions", 7, GTH_METADATA_ALLOW_EVERYWHERE },
{ "Exif::Photo::ExposureProgram", NULL, "Exif::Conditions", 8, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::ExposureIndex", NULL, "Exif::Conditions", 9, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::ExposureBiasValue", NULL, "Exif::Conditions", 10, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::ExposureMode", NULL, "Exif::Conditions", 11, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::ShutterSpeedValue", NULL, "Exif::Conditions", 12, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::ShutterSpeedValue", NULL, "Exif::Conditions", 12, GTH_METADATA_ALLOW_EVERYWHERE },
{ "Exif::Photo::MeteringMode", NULL, "Exif::Conditions", 13, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::LightSource", NULL, "Exif::Conditions", 14, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
{ "Exif::Photo::WhiteBalance", NULL, "Exif::Conditions", 15, GTH_METADATA_ALLOW_IN_PROPERTIES_VIEW },
......
......@@ -30,6 +30,7 @@
#include "gth-main.h"
#include "gth-preferences.h"
#include "gtk-utils.h"
#include "glib-utils.h"
#include "typedefs.h"
......@@ -38,6 +39,7 @@
enum {
CAPTION_COLUMN_NAME,
CAPTION_COLUMN_ID,
CAPTION_COLUMN_USED,
CAPTION_COLUMNS
};
......@@ -47,7 +49,7 @@ typedef struct {
GtkWidget *dialog;
GtkWidget *toolbar_style_combobox;
GtkWidget *thumbnail_size_combobox;
GtkWidget *thumbnail_caption_combobox;
GtkWidget *thumbnail_caption_list_view;
} DialogData;
static int thumb_size[] = { 48, 64, 85, 95, 112, 128, 164, 200, 256 };
......@@ -174,27 +176,115 @@ thumbnail_size_changed_cb (GtkOptionMenu *option_menu,
static void
thumbnail_caption_changed_cb (GtkOptionMenu *option_menu,
DialogData *data)
fast_file_type_toggled_cb (GtkToggleButton *button,
DialogData *data)
{
eel_gconf_set_boolean (PREF_FAST_FILE_TYPE, ! gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("slow_mime_type_checkbutton"))));
}
static void
update_caption_from_list_view (DialogData *data)
{
GtkTreeIter iter;
char *attribute;
GtkTreeModel *tree_model;
GtkTreeIter iter;
GString *attributes;
attributes = g_string_new ("");
tree_model = gtk_tree_view_get_model (GTK_TREE_VIEW (data->thumbnail_caption_list_view));
if (gtk_tree_model_get_iter_first (tree_model, &iter)) {
do {
gboolean used;
char *attribute_id;
gtk_tree_model_get (tree_model, &iter,
CAPTION_COLUMN_ID, &attribute_id,
CAPTION_COLUMN_USED, &used,
-1);
if (used) {
if (attributes->len > 0)
g_string_append (attributes, ",");
g_string_append (attributes, attribute_id);
}
g_free (attribute_id);
}
while (gtk_tree_model_iter_next (tree_model, &iter));
}
gtk_combo_box_get_active_iter (GTK_COMBO_BOX (data->thumbnail_caption_combobox), &iter);
gtk_tree_model_get (gtk_combo_box_get_model (GTK_COMBO_BOX (data->thumbnail_caption_combobox)), &iter,
CAPTION_COLUMN_ID, &attribute,
-1);
eel_gconf_set_string (PREF_THUMBNAIL_CAPTION, attribute);
if (attributes->len > 0)
eel_gconf_set_string (PREF_THUMBNAIL_CAPTION, attributes->str);
else
eel_gconf_set_string (PREF_THUMBNAIL_CAPTION, "none");
g_free (attribute);
g_string_free (attributes, TRUE);
}
static void
fast_file_type_toggled_cb (GtkToggleButton *button,
DialogData *data)
cell_renderer_toggle_toggled_cb (GtkCellRendererToggle *cell_renderer,
char *path,
gpointer user_data)
{
eel_gconf_set_boolean (PREF_FAST_FILE_TYPE, ! gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("slow_mime_type_checkbutton"))));
DialogData *data = user_data;
GtkTreePath *tpath;
GtkTreeModel *tree_model;
GtkTreeIter iter;
tpath = gtk_tree_path_new_from_string (path);
if (tpath == NULL)
return;
tree_model = gtk_tree_view_get_model (GTK_TREE_VIEW (data->thumbnail_caption_list_view));
if (gtk_tree_model_get_iter (tree_model, &iter, tpath)) {
gboolean used;
gtk_tree_model_get (tree_model, &iter,
CAPTION_COLUMN_USED, &used,
-1);
gtk_list_store_set (GTK_LIST_STORE (tree_model), &iter,
CAPTION_COLUMN_USED, ! used,
-1);
}
update_caption_from_list_view (data);
gtk_tree_path_free (tpath);
}
static void
caption_list_view_add_columns (GtkTreeView *treeview,
DialogData *data)
{
GtkTreeViewColumn *column;
GtkCellRenderer *renderer;
/* the checkbox column */
column = gtk_tree_view_column_new ();
renderer = gtk_cell_renderer_toggle_new ();
g_signal_connect (renderer,
"toggled",
G_CALLBACK (cell_renderer_toggle_toggled_cb),
data);
gtk_tree_view_column_pack_start (column, renderer, FALSE);
gtk_tree_view_column_set_attributes (column, renderer,
"active", CAPTION_COLUMN_USED,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
/* the name column. */
column = gtk_tree_view_column_new ();
renderer = gtk_cell_renderer_text_new ();
gtk_tree_view_column_pack_start (column, renderer, TRUE);
gtk_tree_view_column_set_attributes (column, renderer,
"text", CAPTION_COLUMN_NAME,
NULL);
gtk_tree_view_column_set_expand (column, TRUE);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
}
......@@ -205,10 +295,10 @@ dlg_preferences (GthBrowser *browser)
char *startup_location;
GthFileSource *file_source;
GtkListStore *caption_store;
GtkCellRenderer *renderer;
GtkTreeIter iter;
char *current_caption;
char **attributes_v;
char **active_attributes_v;
int i;
if (gth_browser_get_dialog (browser, "preferences") != NULL) {
......@@ -231,58 +321,56 @@ dlg_preferences (GthBrowser *browser)
data->toolbar_style_combobox = _gtk_combo_box_new_with_texts (_("System settings"), _("Text below icons"), _("Text beside icons"), _("Icons only"), _("Text only"), NULL);
data->thumbnail_size_combobox = _gtk_combo_box_new_with_texts (_("48"), _("64"), _("85"), _("95"), _("112"), _("128"), _("164"), _("200"), _("256"), NULL);
caption_store = gtk_list_store_new (CAPTION_COLUMNS, G_TYPE_STRING, G_TYPE_STRING);
data->thumbnail_caption_combobox = gtk_combo_box_new_with_model (GTK_TREE_MODEL (caption_store));
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (data->thumbnail_caption_combobox), renderer, TRUE);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (data->thumbnail_caption_combobox),
renderer,
"text", CAPTION_COLUMN_NAME,
NULL);
caption_store = gtk_list_store_new (CAPTION_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);
data->thumbnail_caption_list_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (caption_store));
g_object_unref (caption_store);
current_caption = eel_gconf_get_string (PREF_THUMBNAIL_CAPTION, "standard::display-name");
gtk_tree_view_set_reorderable (GTK_TREE_VIEW (data->thumbnail_caption_list_view), FALSE);
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (data->thumbnail_caption_list_view), FALSE);
/* no caption */
caption_list_view_add_columns (GTK_TREE_VIEW (data->thumbnail_caption_list_view), data);
gtk_list_store_append (caption_store, &iter);
gtk_list_store_set (caption_store, &iter,
CAPTION_COLUMN_NAME, _("None"),
CAPTION_COLUMN_ID, "none",
-1);
if (strcmp (current_caption, "none") == 0)
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (data->thumbnail_caption_combobox), &iter);
gtk_widget_show (data->thumbnail_caption_list_view);
gtk_container_add (GTK_CONTAINER (GET_WIDGET ("caption_scrolledwindow")), data->thumbnail_caption_list_view);
/* other captions */
/* caption list */
current_caption = eel_gconf_get_string (PREF_THUMBNAIL_CAPTION, "standard::display-name");
active_attributes_v = g_strsplit (current_caption, ",", -1);
attributes_v = gth_main_get_metadata_attributes ("*");
for (i = 0; attributes_v[i] != NULL; i++) {
GthMetadataInfo *info;
const char *name;
gboolean used;
info = gth_main_get_metadata_info (attributes_v[i]);
if ((info == NULL) || ((info->flags & GTH_METADATA_ALLOW_IN_FILE_LIST) == 0))
continue;
gtk_list_store_append (caption_store, &iter);
name = info->display_name;
if (name == NULL)
name = info->id;
used = _g_strv_find (active_attributes_v, info->id) != -1;
gtk_list_store_set (caption_store, &iter,
CAPTION_COLUMN_NAME, info->display_name,
CAPTION_COLUMN_NAME, name,
CAPTION_COLUMN_ID, info->id,
CAPTION_COLUMN_USED, used,
-1);
if (strcmp (current_caption, info->id) == 0)
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (data->thumbnail_caption_combobox), &iter);
}
g_strfreev (attributes_v);
g_strfreev (active_attributes_v);
g_free (current_caption);
g_object_unref (caption_store);
gtk_widget_show (data->toolbar_style_combobox);
gtk_widget_show (data->thumbnail_size_combobox);
gtk_widget_show (data->thumbnail_caption_combobox);
gtk_box_pack_start (GTK_BOX (GET_WIDGET ("toolbar_style_combobox_box")), data->toolbar_style_combobox, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (GET_WIDGET ("thumbnail_size_box")), data->thumbnail_size_combobox, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (GET_WIDGET ("thumbnail_caption_box")), data->thumbnail_caption_combobox, FALSE, FALSE, 0);
gtk_label_set_mnemonic_widget (GTK_LABEL (GET_WIDGET ("caption_label")), data->thumbnail_caption_list_view);
gtk_label_set_mnemonic_widget (GTK_LABEL (GET_WIDGET ("size_label")), data->thumbnail_size_combobox);
/* * general */
......@@ -367,10 +455,6 @@ dlg_preferences (GthBrowser *browser)
"changed",
G_CALLBACK (thumbnail_size_changed_cb),
data);
g_signal_connect (G_OBJECT (data->thumbnail_caption_combobox),
"changed",
G_CALLBACK (thumbnail_caption_changed_cb),
data);
g_signal_connect (G_OBJECT (GET_WIDGET ("slow_mime_type_checkbutton")),
"toggled",
G_CALLBACK (fast_file_type_toggled_cb),
......
......@@ -953,6 +953,21 @@ _g_rand_string (int len)
}
int
_g_strv_find (char **v,
const char *s)
{
int i;
for (i = 0; v[i] != NULL; i++) {
if (strcmp (v[i], s) == 0)
return i;
}
return -1;
}
/* Regexp utils */
static char **
......
......@@ -170,6 +170,8 @@ GList * _g_list_insert_list_before (GList *list1,
GList *list2);
const char * get_static_string (const char *s);
char * _g_rand_string (int len);
int _g_strv_find (char **v,
const char *s);
/* Regexp utils */
......
......@@ -106,7 +106,7 @@ struct _GthFileListPrivateData
GtkCellRenderer *thumbnail_renderer;
GtkCellRenderer *text_renderer;
char *caption_attribute;
char **caption_attributes_v;
DoneFunc done_func;
gpointer done_func_data;
......@@ -237,7 +237,7 @@ gth_file_list_finalize (GObject *object)
if (file_list->priv != NULL) {
if (file_list->priv->icon_cache != NULL)
gth_icon_cache_free (file_list->priv->icon_cache);
g_free (file_list->priv->caption_attribute);
g_strfreev (file_list->priv->caption_attributes_v);
g_free (file_list->priv);
file_list->priv = NULL;
}
......@@ -265,7 +265,8 @@ gth_file_list_init (GthFileList *file_list)
file_list->priv->thumb_size = DEFAULT_THUMBNAIL_SIZE;
file_list->priv->ignore_hidden_thumbs = FALSE;
file_list->priv->load_thumbs = TRUE; /* FIXME: make this cnfigurable */
file_list->priv->load_thumbs = TRUE; /* FIXME: make this configurable */
file_list->priv->caption_attributes_v = g_strsplit ("none", ",", -1);
}
......@@ -533,7 +534,7 @@ gth_file_list_construct (GthFileList *file_list)
"ellipsize", PANGO_ELLIPSIZE_END,
"alignment", PANGO_ALIGN_CENTER,
"width", file_list->priv->thumb_size + (8 * 2) /* FIXME: remove the numbers */,
"single-paragraph-mode", TRUE,
/*"single-paragraph-mode", TRUE,*/
NULL);
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (file_list->priv->view), renderer, FALSE);
......@@ -686,6 +687,31 @@ _gth_file_list_update_pane (GthFileList *file_list)
}
static GString *
_gth_file_list_get_metadata (GthFileList *file_list,
GthFileData *file_data)
{
GString *metadata;
int i;
metadata = g_string_new ("");
for (i = 0; file_list->priv->caption_attributes_v[i] != NULL; i++) {
char *value;
value = gth_file_data_get_attribute_as_string (file_data, file_list->priv->caption_attributes_v[i]);
if (value != NULL) {
if (metadata->len > 0)
g_string_append (metadata, "\n");
g_string_append (metadata, value);
g_free (value);
}
}
return metadata;
}
static void
gfl_add_files (GthFileList *file_list,
GList *files)
......@@ -699,6 +725,7 @@ gfl_add_files (GthFileList *file_list,
GthFileData *fd = scan->data;
GIcon *icon;
GdkPixbuf *pixbuf = NULL;
GString *metadata;
if (g_file_info_get_file_type (fd->info) != G_FILE_TYPE_REGULAR)
continue;
......@@ -708,13 +735,14 @@ gfl_add_files (GthFileList *file_list,
icon = g_file_info_get_icon (fd->info);
pixbuf = gth_icon_cache_get_pixbuf (file_list->priv->icon_cache, icon);
metadata = _gth_file_list_get_metadata (file_list, fd);
gth_file_store_queue_add (file_store,
fd,