diff options
| -rw-r--r-- | src/eggtreemultidnd.c | 31 | 
1 files changed, 27 insertions, 4 deletions
| diff --git a/src/eggtreemultidnd.c b/src/eggtreemultidnd.c index 3d417fe..a8bb183 100644 --- a/src/eggtreemultidnd.c +++ b/src/eggtreemultidnd.c @@ -317,16 +317,39 @@ egg_tree_multi_drag_motion_event (GtkWidget      *widget,        model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));        if (egg_tree_multi_drag_source_row_draggable (EGG_TREE_MULTI_DRAG_SOURCE (model), path_list))  	{ -	  GtkTargetList *target_list = gtk_target_list_new (target_table, -							    G_N_ELEMENTS (target_table)); - +	  GtkTargetList *target_list; +	  GtkTreePath   *tree_path; +	  int            cell_x; +	  int            cell_y; +	  double         cursor_pos; +  +	  target_list = gtk_target_list_new (target_table, G_N_ELEMENTS (target_table));  	  context = gtk_drag_begin (widget,  				    target_list,  				    GDK_ACTION_COPY,  				    priv_data->pressed_button,  				    (GdkEvent*)event);  	  set_context_data (context, path_list); -	  gtk_drag_set_icon_default (context); + +	  if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), +					     priv_data->x, +					     priv_data->y, +					     &tree_path, +					     NULL, +					     &cell_x, +					     &cell_y)) +	  { +		  cairo_surface_t *drag_icon; + +		  drag_icon = gtk_tree_view_create_row_drag_icon (GTK_TREE_VIEW (widget), tree_path); +		  cairo_surface_set_device_offset (drag_icon, -cell_x, -cell_y); +		  gtk_drag_set_icon_surface (context, drag_icon); + +		  cairo_surface_destroy (drag_icon); +		  gtk_tree_path_free (tree_path); +	  } +	  else +		  gtk_drag_set_icon_default (context);  	  gtk_target_list_unref (target_list);  	} | 
