Hi, I'm trying to implement XDS protocol to my app, xarchiver. I have two rows selected in the treeview, when I drag these two rows and drop them in Thunar file manager, everything goes wrong. When I drop only one row it works. So my question is: how to retrieve the content of the rows selected ? Here is some code:
static const GtkTargetEntry drag_targets[] = { { "XdndDirectSave0", 0, 0 }, }; static const GtkTargetEntry drop_targets[] = { { "text/uri-list", 0, 1 }, }; gtk_drag_dest_set (MainWindow,GTK_DEST_DEFAULT_ALL,drop_targets,1,GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK); gtk_drag_source_set (treeview1, GDK_BUTTON1_MASK, drag_targets, 1,GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK); void drag_begin (GtkWidget *treeview1,GdkDragContext *context, gpointer data) { GtkTreeSelection *selection; GtkTreeIter iter; gchar *name; GList *row_list, *_row_list; g_print ("Drag begin\n"); //gtk_drag_source_set_icon_name (treeview1,DATADIR "/pixmaps/xarchiver.png" ); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview1)); row_list = gtk_tree_selection_get_selected_rows (selection, NULL); if ( row_list == NULL ) return; while (row_list != NULL) { gtk_tree_model_get_iter(model, &iter, (GtkTreePath*)(row_list->data)); gtk_tree_model_get (model, &iter, 0, &name, -1); g_print ("%s\n",name); gchar *no_slashes = StripPathFromFilename ( name, "/" ); no_slashes++; gdk_property_change (context->source_window, gdk_atom_intern ("XdndDirectSave0", FALSE), gdk_atom_intern ("text/plain", FALSE), 8, GDK_PROP_MODE_REPLACE, (guchar *)no_slashes, strlen (no_slashes) ); row_list = row_list->next; g_free (name); } g_list_foreach (row_list, (GFunc) gtk_tree_path_free, NULL); g_list_free (row_list); } void drag_data_get (GtkWidget *widget, GdkDragContext *dc, GtkSelectionData *selection_data, guint info, guint t, gpointer data) { GtkTreeSelection *selection; GtkTreeIter iter; guchar *fm_path; int fm_path_len; gchar *command , *dummy_path , *name; gchar *to_send = "E"; GList *row_list, *_row_list; g_print ("Drag data get\n"); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview1)); row_list = _row_list = gtk_tree_selection_get_selected_rows (selection, NULL); if ( row_list == NULL ) return; while (_row_list != NULL) { gtk_tree_model_get_iter(model, &iter, (GtkTreePath*)(_row_list->data)); gtk_tree_model_get (model, &iter, 0, &name, -1); if ( gdk_property_get (dc->source_window, gdk_atom_intern ("XdndDirectSave0", FALSE), gdk_atom_intern ("text/plain", FALSE), 0, 1024, FALSE, NULL, NULL, &fm_path_len, &fm_path) && fm_path != NULL) { /* Zero-Terminate the string */ fm_path = g_realloc (fm_path, fm_path_len + 1); fm_path[fm_path_len] = '\0'; //g_print ("fm_path = %s\n",fm_path); dummy_path = g_filename_from_uri ( (gchar*)fm_path, NULL, NULL ); g_free ( fm_path ); //g_print ("%s - %s\n",dummy_path,name); extract_path = extract_local_path ( dummy_path,name ); //g_message ("%s -- %s -- %s",dummy_path,name,extract_path); g_free ( dummy_path ); if (extract_path != NULL) to_send = "S"; names = g_string_new (""); gtk_tree_selection_selected_foreach (selection, (GtkTreeSelectionForeachFunc) ConcatenateFileNames, names ); archive->full_path = 0; archive->tar_strip_value = 0; command = xa_extract_single_files ( archive , names, extract_path ); g_string_free (names, TRUE); if ( command != NULL ) { ExtractAddDelete ( command ); g_free (command); } //g_dataset_set_data (dc, "XDS-sent", to_send); gtk_selection_data_set (selection_data, selection_data->target, 8, (guchar*)to_send, 1); } if (extract_path != NULL) g_free (extract_path); extract_path = NULL; g_free (name); _row_list = _row_list->next; } g_list_foreach (row_list, (GFunc) gtk_tree_path_free, NULL); g_list_free (row_list); } The current code is on svn if someone wants to compile the entire app (it is small): $ svn co http://svn.xfce.org/svn/xfce/xarchiver/trunk Any help is greatly appreciated ! Giuseppe Torelli -- Xarchiver, a Linux GTK+2 only archive manager - http://xarchiver.xfce.org Cpsed, a Linux OpenGL 3D scene editor - http://cpsed.sourceforge.net Mizio, a QT proxy hunter scanner tool - http://mizio.sourceforge.net _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list