static void dest_dnd_set_data(GtkWidget *view, GdkDragContext *context, GtkSelectionData *selection_data, guint info, guint time, gpointer data) { gchar *path = NULL; GList *list = NULL; GtkTreeModel *model; GtkTreeSelection *selection; GtkTreeIter iter; selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); if (!gtk_tree_selection_get_selected(selection, &model, &iter)) return; gtk_tree_model_get(model, &iter, 1, &path, -1); if (!path) return; list = g_list_append(list, path); gchar **uris = uris_from_filelist(list); gboolean ret = gtk_selection_data_set_uris(selection_data, uris); if (!ret) { char *str = g_strjoinv("\r\n", uris); ret = gtk_selection_data_set_text(selection_data, str, -1); g_free(str); } string_list_free(list); }
gboolean uri_selection_data_set_uris_from_filelist(GtkSelectionData *selection_data, GList *list) { gchar **uris = uris_from_filelist(list); gboolean ret = gtk_selection_data_set_uris(selection_data, uris); if (!ret) { char *str = g_strjoinv("\r\n", uris); ret = gtk_selection_data_set_text(selection_data, str, -1); g_free(str); } g_strfreev(uris); return ret; }