static void loader_completed_cb (GthTask *task, GError *error, gpointer user_data) { LoaderData *loader_data = user_data; DialogData *data = loader_data->data; if (error != NULL) { if (! g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) _gtk_error_dialog_from_gerror_show (GTK_WINDOW (data->browser), _("Cannot read file information"), error); loader_data_free (loader_data); if (data->never_shown) close_dialog (data); return; } _g_object_list_unref (data->file_list); data->file_list = _g_object_list_ref (gth_load_file_data_task_get_result (GTH_LOAD_FILE_DATA_TASK (task))); gth_edit_metadata_dialog_set_file_list (GTH_EDIT_METADATA_DIALOG (data->dialog), data->file_list); gtk_window_set_transient_for (GTK_WINDOW (data->dialog), GTK_WINDOW (data->browser)); gtk_window_set_modal (GTK_WINDOW (data->dialog), FALSE); gtk_window_present (GTK_WINDOW (data->dialog)); data->never_shown = FALSE; loader_data_free (loader_data); }
static void edit_metadata_dialog__response_cb (GtkDialog *dialog, int response, gpointer user_data) { DialogData *data = user_data; GthMonitor *monitor; GHashTable *parents; GList *scan; GthTask *task; if ((response != GTK_RESPONSE_OK) && (response != GTK_RESPONSE_APPLY)) { cancel_file_list_loading (data); close_dialog (data); return; } if (data->file_list == NULL) return; data->close_dialog = (response == GTK_RESPONSE_OK); /* get the parents list */ parents = g_hash_table_new_full (g_file_hash, (GEqualFunc) g_file_equal, g_object_unref, NULL); for (scan = data->file_list; scan; scan = scan->next) { GthFileData *file_data = scan->data; GFile *parent; parent = g_file_get_parent (file_data->file); if (G_LIKELY (parent != NULL)) { if (g_hash_table_lookup (parents, parent) == NULL) g_hash_table_insert (parents, g_object_ref (parent), GINT_TO_POINTER (1)); g_object_unref (parent); } } _g_object_list_unref (data->parents); data->parents = g_hash_table_get_keys (parents); g_list_foreach (data->parents, (GFunc) g_object_ref, NULL); g_hash_table_unref (parents); /* ignore changes to all the parents */ monitor = gth_main_get_default_monitor (); for (scan = data->parents; scan; scan = scan->next) gth_monitor_pause (monitor, (GFile *) scan->data); gth_edit_metadata_dialog_update_info (GTH_EDIT_METADATA_DIALOG (data->dialog), data->file_list); dialog_data_ref (data); task = gth_save_file_data_task_new (data->file_list, "*"); g_signal_connect (task, "completed", G_CALLBACK (saver_completed_cb), data); gth_browser_exec_task (data->browser, task, FALSE); g_object_unref (task); }