type = (SortType)GPOINTER_TO_INT(data);
+ if (type == SORT_EXIFTIME || type == SORT_EXIFTIMEDIGITIZED || type == SORT_RATING)
+ {
+ vf_read_metadata_in_idle(vf);
+ }
+
if (vf->layout)
{
layout_sort_set(vf->layout, type, vf->sort_ascend);
gtk_widget_destroy(vf->popup);
}
+ if (vf->read_metadata_in_idle_id)
+ {
+ g_idle_remove_by_data(vf);
+ }
file_data_unref(vf->dir_fd);
g_free(vf->info);
g_free(vf);
vf->type = type;
vf->sort_method = SORT_NAME;
vf->sort_ascend = TRUE;
+ vf->read_metadata_in_idle_id = 0;
vf->scrolled = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(vf->scrolled), GTK_SHADOW_IN);
return (gdouble)done / count;
}
+static gdouble vf_read_metadata_in_idle_progress(ViewFile *vf)
+{
+ gint count = 0;
+ gint done = 0;
+
+ switch (vf->type)
+ {
+ case FILEVIEW_LIST: vflist_read_metadata_progress_count(vf->list, &count, &done); break;
+ case FILEVIEW_ICON: vficon_read_metadata_progress_count(vf->list, &count, &done); break;
+ }
+
+ return (gdouble)done / count;
+}
+
static void vf_set_thumb_fd(ViewFile *vf, FileData *fd)
{
switch (vf->type)
}
}
+static gboolean vf_read_metadata_in_idle_cb(gpointer data)
+{
+ FileData *fd;
+ ViewFile *vf = data;
+ GList *list_entry;
+ GList *work;
+
+ vf_thumb_status(vf, vf_read_metadata_in_idle_progress(vf), _("Loading meta..."));
+
+ work = vf->list;
+
+ while (work)
+ {
+ fd = work->data;
+
+ if (fd && !fd->metadata_in_idle_loaded)
+ {
+ if (!fd->exifdate)
+ {
+ read_exif_time_data(fd);
+ }
+ if (!fd->exifdate_digitized)
+ {
+ read_exif_time_digitized_data(fd);
+ }
+ if (fd->rating == STAR_RATING_NOT_READ)
+ {
+ read_rating_data(fd);
+ }
+ fd->metadata_in_idle_loaded = TRUE;
+ return TRUE;
+ }
+ work = work->next;
+ }
+
+ vf_thumb_status(vf, 0.0, NULL);
+ vf->read_metadata_in_idle_id = 0;
+ vf_refresh(vf);
+ return FALSE;
+}
+
+static void vf_read_metadata_in_idle_finished_cb(gpointer data)
+{
+ ViewFile *vf = data;
+
+ vf_thumb_status(vf, 0.0, "Loading meta...");
+ vf->read_metadata_in_idle_id = 0;
+}
+
+void vf_read_metadata_in_idle(ViewFile *vf)
+{
+ GList *work;
+ FileData *fd;
+
+ if (!vf) return;
+
+ if (vf->read_metadata_in_idle_id)
+ {
+ g_idle_remove_by_data(vf);
+ }
+ vf->read_metadata_in_idle_id = 0;
+
+ if (vf->list)
+ {
+ vf->read_metadata_in_idle_id = g_idle_add_full(G_PRIORITY_LOW, vf_read_metadata_in_idle_cb, vf, vf_read_metadata_in_idle_finished_cb);
+ }
+
+ return;
+}
+
/* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */