static void rb_tree_dnd_drag_data_get_cb (GtkWidget *widget, GdkDragContext *context, GtkSelectionData *selection_data, guint info, guint time) { GtkTreeView *tree_view; GtkTreeModel *model; GList *path_list; tree_view = GTK_TREE_VIEW (widget); model = gtk_tree_view_get_model (tree_view); if (model == NULL) return; path_list = get_context_data (context); if (path_list == NULL) return; /* We can implement the GTK_TREE_MODEL_ROW target generically for * any model; for DragSource models there are some other targets * we also support. */ if (RB_IS_TREE_DRAG_SOURCE (model)) { rb_tree_drag_source_drag_data_get (RB_TREE_DRAG_SOURCE (model), path_list, selection_data); } }
static gboolean egg_tree_multi_drag_drag_data_get (GtkWidget *widget, GdkDragContext *context, GtkSelectionData *selection_data, guint info, guint time) { GtkTreeView *tree_view; GtkTreeModel *model; GList *path_list; tree_view = GTK_TREE_VIEW (widget); model = gtk_tree_view_get_model (tree_view); if (model == NULL) return FALSE; path_list = get_context_data (context); if (path_list == NULL) return FALSE; /* We can implement the GTK_TREE_MODEL_ROW target generically for * any model; for DragSource models there are some other targets * we also support. */ if (! EGG_IS_TREE_MULTI_DRAG_SOURCE (model)) return FALSE; return egg_tree_multi_drag_source_drag_data_get (EGG_TREE_MULTI_DRAG_SOURCE (model), context, selection_data, path_list); }
static void rb_tree_dnd_drag_data_delete_cb (GtkWidget *widget, GdkDragContext *drag_context, gpointer user_data) { GList *path_list; GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW(widget)); path_list = get_context_data (drag_context); rb_tree_drag_source_drag_data_delete (RB_TREE_DRAG_SOURCE (model), path_list); g_signal_stop_emission_by_name (widget, "drag_data_delete"); }