static void collect_manager_refresh(void) { GList *list; GList *work; FileData *dir_fd; dir_fd = file_data_new_simple(get_collections_dir()); filelist_read(dir_fd, &list, NULL); file_data_unref(dir_fd); work = collection_manager_entry_list; while (work && list) { CollectManagerEntry *entry; GList *list_step; entry = work->data; work = work->next; list_step = list; while (list_step && entry) { FileData *fd; fd = list_step->data; list_step = list_step->next; if (strcmp(fd->path, entry->path) == 0) { list = g_list_remove(list, fd); file_data_unref(fd); entry = NULL; } else { collect_manager_entry_free(entry); } } } work = list; while (work) { FileData *fd; fd = work->data; work = work->next; collect_manager_entry_new(fd->path); } filelist_free(list); }
static void cache_manager_standard_clean_start_cb(GenericDialog *gd, gpointer data) { CleanData *cd = data; GList *list; gchar *path; FileData *dir_fd; #if GTK_CHECK_VERSION(2,20,0) if (cd->list || !gtk_widget_get_sensitive(cd->button_start)) return; #else if (cd->list || !GTK_WIDGET_SENSITIVE(cd->button_start)) return; #endif gtk_widget_set_sensitive(cd->button_start, FALSE); gtk_widget_set_sensitive(cd->button_stop, TRUE); gtk_widget_set_sensitive(cd->button_close, FALSE); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(cd->progress), _("running...")); path = g_build_filename(homedir(), THUMB_FOLDER_GLOBAL, THUMB_FOLDER_NORMAL, NULL); dir_fd = file_data_new_simple(path); filelist_read(dir_fd, &list, NULL); cd->list = list; file_data_unref(dir_fd); g_free(path); path = g_build_filename(homedir(), THUMB_FOLDER_GLOBAL, THUMB_FOLDER_LARGE, NULL); dir_fd = file_data_new_simple(path); filelist_read(dir_fd, &list, NULL); cd->list = g_list_concat(cd->list, list); file_data_unref(dir_fd); g_free(path); path = g_build_filename(homedir(), THUMB_FOLDER_GLOBAL, THUMB_FOLDER_FAIL, NULL); dir_fd = file_data_new_simple(path); filelist_read(dir_fd, &list, NULL); cd->list = g_list_concat(cd->list, list); file_data_unref(dir_fd); g_free(path); cd->count_total = g_list_length(cd->list); cd->count_done = 0; /* start iterating */ if (cd->clear) { cd->idle_id = g_idle_add(cache_manager_standard_clean_clear_cb, cd); } else { cache_manager_standard_clean_valid_cb(NULL, TRUE, cd); } }
static gboolean cache_manager_render_file(CleanData *cd) { if (cd->list) { FileData *fd; gint success; fd = cd->list->data; cd->list = g_list_remove(cd->list, fd); cd->tl = (ThumbLoaderStd *)thumb_loader_new(options->thumbnails.max_width, options->thumbnails.max_height); thumb_loader_set_callbacks((ThumbLoader *)cd->tl, cache_manager_render_thumb_done_cb, cache_manager_render_thumb_done_cb, NULL, cd); thumb_loader_set_cache((ThumbLoader *)cd->tl, TRUE, cd->local, TRUE); success = thumb_loader_start((ThumbLoader *)cd->tl, fd); if (success) { gtk_entry_set_text(GTK_ENTRY(cd->progress), fd->path); } else { thumb_loader_free((ThumbLoader *)cd->tl); cd->tl = NULL; } file_data_unref(fd); return (!success); } else if (cd->list_dir) { FileData *fd; fd = cd->list_dir->data; cd->list_dir = g_list_remove(cd->list_dir, fd); cache_manager_render_folder(cd, fd); file_data_unref(fd); return TRUE; } cache_manager_render_finish(cd); return FALSE; }
static void gth_file_list_finalize (GObject *object) { GthFileList *file_list; g_return_if_fail (GTH_IS_FILE_LIST (object)); file_list = GTH_FILE_LIST (object); file_list->priv->finalizing = TRUE; file_list->view = NULL; gth_file_list_stop (file_list); if (file_list->priv->thumb_fd != NULL) { file_data_unref (file_list->priv->thumb_fd); file_list->priv->thumb_fd = NULL; } gth_file_list_free_list (file_list); g_object_unref (file_list->priv->thumb_loader); if (file_list->priv->filter != NULL) g_object_unref (file_list->priv->filter); gth_file_list_free_pixbufs (file_list); g_free (file_list->priv); G_OBJECT_CLASS (parent_class)->finalize (object); }
static void vdtree_node_free(NodeData *nd) { if (!nd) return; if (nd->fd) file_data_unref(nd->fd); g_free(nd); }
static void cache_manager_render_start_cb(GenericDialog *fd, gpointer data) { CleanData *cd = data; gchar *path; if (cd->list || !gtk_widget_get_sensitive(cd->button_start)) return; path = remove_trailing_slash((gtk_entry_get_text(GTK_ENTRY(cd->entry)))); parse_out_relatives(path); if (!isdir(path)) { warning_dialog(_("Invalid folder"), _("The specified folder can not be found."), GTK_STOCK_DIALOG_WARNING, cd->gd->dialog); } else { FileData *dir_fd; gtk_widget_set_sensitive(cd->group, FALSE); gtk_widget_set_sensitive(cd->button_start, FALSE); gtk_widget_set_sensitive(cd->button_stop, TRUE); gtk_widget_set_sensitive(cd->button_close, FALSE); spinner_set_interval(cd->spinner, SPINNER_SPEED); dir_fd = file_data_new_dir(path); cache_manager_render_folder(cd, dir_fd); file_data_unref(dir_fd); while (cache_manager_render_file(cd)); } g_free(path); }
static void bar_destroy(GtkWidget *widget, gpointer data) { BarData *bd = data; file_data_unref(bd->fd); g_free(bd); }
static gint cache_manager_standard_clean_clear_cb(gpointer data) { CleanData *cd = data; if (cd->list) { FileData *next_fd; next_fd = cd->list->data; cd->list = g_list_remove(cd->list, next_fd); DEBUG_1("thumb removed: %s", next_fd->path); unlink_file(next_fd->path); file_data_unref(next_fd); cd->count_done++; if (cd->count_total != 0) { gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(cd->progress), (gdouble)cd->count_done / cd->count_total); } return TRUE; } cd->idle_id = 0; cache_manager_standard_clean_done(cd); return FALSE; }
static void vd_destroy_cb(GtkWidget *widget, gpointer data) { ViewDir *vd = data; file_data_unregister_notify_func(vd_notify_cb, vd); if (vd->popup) { g_signal_handlers_disconnect_matched(G_OBJECT(vd->popup), G_SIGNAL_MATCH_DATA, 0, 0, 0, NULL, vd); gtk_widget_destroy(vd->popup); } switch (vd->type) { case DIRVIEW_LIST: vdlist_destroy_cb(widget, data); break; case DIRVIEW_TREE: vdtree_destroy_cb(widget, data); break; } if (vd->pf) folder_icons_free(vd->pf); if (vd->drop_list) filelist_free(vd->drop_list); if (vd->dir_fd) file_data_unref(vd->dir_fd); if (vd->info) g_free(vd->info); g_free(vd); }
void collection_info_free(CollectInfo *ci) { if (!ci) return; file_data_unref(ci->fd); collection_info_free_thumb(ci); g_free(ci); }
void file_dialog_close(FileDialog *fdlg) { file_data_unref(fdlg->source_fd); g_free(fdlg->dest_path); if (fdlg->source_list) filelist_free(fdlg->source_list); generic_dialog_close(GENERIC_DIALOG(fdlg)); }
static void gth_file_list_thumb_cleanup (GthFileList *file_list) { file_list->priv->thumbs_num = 0; if (file_list->priv->thumb_fd != NULL) { file_data_unref (file_list->priv->thumb_fd); file_list->priv->thumb_fd = NULL; } }
static void bar_pane_exif_destroy(GtkWidget *widget, gpointer data) { PaneExifData *ped = data; file_data_unregister_notify_func(bar_pane_exif_notify_cb, ped); g_object_unref(ped->size_group); file_data_unref(ped->fd); g_free(ped->pane.id); g_free(ped); }
static void bar_pane_comment_set_fd(GtkWidget *bar, FileData *fd) { PaneCommentData *pcd; pcd = g_object_get_data(G_OBJECT(bar), "pane_data"); if (!pcd) return; file_data_unref(pcd->fd); pcd->fd = file_data_ref(fd); bar_pane_comment_update(pcd); }
static void bar_pane_gps_set_fd(GtkWidget *bar, FileData *fd) { PaneGPSData *pgd; pgd = g_object_get_data(G_OBJECT(bar), "pane_data"); if (!pgd) return; file_data_unref(pgd->fd); pgd->fd = file_data_ref(fd); bar_pane_gps_update(pgd); }
void bar_pane_keywords_set_fd(GtkWidget *pane, FileData *fd) { PaneKeywordsData *pkd; pkd = g_object_get_data(G_OBJECT(pane), "pane_data"); if (!pkd) return; file_data_unref(pkd->fd); pkd->fd = file_data_ref(fd); bar_pane_keywords_update(pkd); }
void bar_pane_exif_set_fd(GtkWidget *widget, FileData *fd) { PaneExifData *ped; ped = g_object_get_data(G_OBJECT(widget), "pane_data"); if (!ped) return; file_data_unref(ped->fd); ped->fd = file_data_ref(fd); bar_pane_exif_update(ped); }
static void bar_pane_gps_destroy(GtkWidget *widget, gpointer data) { PaneGPSData *pgd = data; file_data_unregister_notify_func(bar_pane_gps_notify_cb, pgd); file_data_unref(pgd->fd); g_free(pgd->map_source); g_free(pgd->pane.id); clutter_actor_destroy(pgd->gps_view); g_free(pgd); }
static void vdtree_row_deleted_cb(GtkTreeModel *tree_model, GtkTreePath *tpath, gpointer data) { GtkTreeIter iter; NodeData *nd; gtk_tree_model_get_iter(tree_model, &iter, tpath); gtk_tree_model_get(tree_model, &iter, DIR_COLUMN_POINTER, &nd, -1); if (!nd) return; file_data_unref(nd->fd); g_free(nd); }
static void bar_pane_comment_destroy(GtkWidget *widget, gpointer data) { PaneCommentData *pcd = data; file_data_unregister_notify_func(bar_pane_comment_notify_cb, pcd); file_data_unref(pcd->fd); g_free(pcd->key); g_free(pcd->pane.id); g_free(pcd); }
static void bar_pane_keywords_destroy(GtkWidget *widget, gpointer data) { PaneKeywordsData *pkd = data; if (pkd->click_tpath) gtk_tree_path_free(pkd->click_tpath); if (pkd->idle_id) g_source_remove(pkd->idle_id); file_data_unregister_notify_func(bar_pane_keywords_notify_cb, pkd); file_data_unref(pkd->fd); g_free(pkd->key); g_free(pkd); }
void bar_set_fd(GtkWidget *bar, FileData *fd) { BarData *bd; bd = g_object_get_data(G_OBJECT(bar), "bar_data"); if (!bd) return; file_data_unref(bd->fd); bd->fd = file_data_ref(fd); gtk_container_foreach(GTK_CONTAINER(bd->vbox), bar_pane_set_fd_cb, fd); gtk_label_set_text(GTK_LABEL(bd->label_file_name), (bd->fd) ? bd->fd->name : ""); }
gboolean metadata_write_queue_remove(FileData *fd) { g_hash_table_destroy(fd->modified_xmp); fd->modified_xmp = NULL; metadata_write_queue = g_list_remove(metadata_write_queue, fd); file_data_increment_version(fd); file_data_send_notification(fd, NOTIFY_REREAD); file_data_unref(fd); layout_util_status_update_write_all(); return TRUE; }
gboolean vdtree_set_fd(ViewDir *vd, FileData *dir_fd) { FileData *fd; GtkTreeIter iter; if (!dir_fd) return FALSE; if (vd->dir_fd == dir_fd) return TRUE; file_data_unref(vd->dir_fd); vd->dir_fd = file_data_ref(dir_fd);; fd = vdtree_populate_path(vd, vd->dir_fd, TRUE, FALSE); if (!fd) return FALSE; if (vd_find_row(vd, fd, &iter)) { GtkTreeModel *store; GtkTreePath *tpath, *old_tpath; GtkTreeSelection *selection; store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view)); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(vd->view)); /* hack, such that selection is only allowed to be changed from here */ selection_is_ok = TRUE; gtk_tree_selection_select_iter(selection, &iter); selection_is_ok = FALSE; gtk_tree_view_get_cursor(GTK_TREE_VIEW(vd->view), &old_tpath, NULL); tpath = gtk_tree_model_get_path(store, &iter); if (!old_tpath || gtk_tree_path_compare(tpath, old_tpath) != 0) { /* setting the cursor scrolls the view; do not do that unless it is necessary */ gtk_tree_view_set_cursor(GTK_TREE_VIEW(vd->view), tpath, NULL, FALSE); /* gtk_tree_view_set_cursor scrolls the window itself, but it sometimes does not work (switch from dir_list to dir_tree) */ tree_view_row_make_visible(GTK_TREE_VIEW(vd->view), &iter, TRUE); } gtk_tree_path_free(tpath); gtk_tree_path_free(old_tpath); } return TRUE; }
static void vd_rename_finished_cb(gboolean success, const gchar *new_path, gpointer data) { ViewDir *vd = data; if (success) { FileData *fd = file_data_new_dir(new_path); GtkTreeIter iter; if (vd_find_row(vd, fd, &iter)) { tree_view_row_make_visible(GTK_TREE_VIEW(vd->view), &iter, TRUE); } file_data_unref(fd); } }
void cache_loader_free(CacheLoader *cl) { if (!cl) return; if (cl->idle_id) { g_source_remove(cl->idle_id); cl->idle_id = 0; } image_loader_free(cl->il); cache_sim_data_free(cl->cd); file_data_unref(cl->fd); g_free(cl); }
static void gth_exif_data_viewer_destroy (GtkObject *object) { GthExifDataViewer *edv; edv = GTH_EXIF_DATA_VIEWER (object); if (edv->priv != NULL) { file_data_unref (edv->priv->file); edv->priv->file = NULL; g_free (edv->priv); edv->priv = NULL; } GTK_OBJECT_CLASS (parent_class)->destroy (object); }
static void set_unknown_pixbuf (GthFileList *file_list, int pos) { FileData *fd; GdkPixbuf *pixbuf; fd = gth_file_view_get_image_data (file_list->view, pos); if ((fd == NULL) || (fd->path == NULL)) return; pixbuf = get_pixbuf_from_mime_type (file_list, fd->mime_type); if (pixbuf != NULL) { gth_file_view_set_image_pixbuf (file_list->view, pos, pixbuf); g_object_unref (pixbuf); } file_data_unref (fd); }
static void vf_destroy_cb(GtkWidget *widget, gpointer data) { ViewFile *vf = data; switch (vf->type) { case FILEVIEW_LIST: vflist_destroy_cb(widget, data); break; case FILEVIEW_ICON: vficon_destroy_cb(widget, data); break; } if (vf->popup) { g_signal_handlers_disconnect_matched(G_OBJECT(vf->popup), G_SIGNAL_MATCH_DATA, 0, 0, 0, NULL, vf); gtk_widget_destroy(vf->popup); } file_data_unref(vf->dir_fd); g_free(vf->info); g_free(vf); }
gboolean metadata_write_perform(FileData *fd) { gboolean success; ExifData *exif; guint lf; g_assert(fd->change); lf = strlen(GQ_CACHE_EXT_METADATA); if (fd->change->dest && g_ascii_strncasecmp(fd->change->dest + strlen(fd->change->dest) - lf, GQ_CACHE_EXT_METADATA, lf) == 0) { success = metadata_legacy_write(fd); if (success) metadata_legacy_delete(fd, fd->change->dest); return success; } /* write via exiv2 */ /* we can either use cached metadata which have fd->modified_xmp already applied or read metadata from file and apply fd->modified_xmp metadata are read also if the file was modified meanwhile */ exif = exif_read_fd(fd); if (!exif) return FALSE; success = (fd->change->dest) ? exif_write_sidecar(exif, fd->change->dest) : exif_write(exif); /* write modified metadata */ exif_free_fd(fd, exif); if (fd->change->dest) /* this will create a FileData for the sidecar and link it to the main file (we can't wait until the sidecar is discovered by directory scanning because exif_read_fd is called before that and it would read the main file only and store the metadata in the cache) FIXME: this does not catch new sidecars created by independent external programs */ file_data_unref(file_data_new_group(fd->change->dest)); if (success) metadata_legacy_delete(fd, fd->change->dest); return success; }