From 25c3dccb52628440615f97c9877f7dacd37d6646 Mon Sep 17 00:00:00 2001 From: ZenWalker Date: Fri, 10 Jun 2016 01:04:00 +0200 Subject: drag and drop: use the clicked row as drag icon file-roller commit: https://git.gnome.org/browse/file-roller/commit/?id=fbb39fcb4be47fec09d911292777835707977159 --- src/eggtreemultidnd.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) (limited to 'src/eggtreemultidnd.c') 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); } -- cgit v1.2.1