diff options
author | William Jon McCann <jmccann@redhat.com> | 2013-01-21 17:54:44 -0500 |
---|---|---|
committer | William Jon McCann <jmccann@redhat.com> | 2013-01-22 10:47:54 -0500 |
commit | 1b4eec6e523543c413d7c0da95436f92358ba80a (patch) | |
tree | 96137524c2f4e44f07e68403b17bd60a6289d4cc /libnautilus-private/nautilus-canvas-dnd.c | |
parent | 79b727a629770fec5fff2ee6a182ddae8b180fbf (diff) | |
download | nautilus-1b4eec6e523543c413d7c0da95436f92358ba80a.tar.gz |
Cache drag selections on drag begin
Since the contents of the view may change.
https://bugzilla.gnome.org/show_bug.cgi?id=692234
Diffstat (limited to 'libnautilus-private/nautilus-canvas-dnd.c')
-rw-r--r-- | libnautilus-private/nautilus-canvas-dnd.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/libnautilus-private/nautilus-canvas-dnd.c b/libnautilus-private/nautilus-canvas-dnd.c index efa71d837..8e7501b07 100644 --- a/libnautilus-private/nautilus-canvas-dnd.c +++ b/libnautilus-private/nautilus-canvas-dnd.c @@ -311,6 +311,8 @@ drag_data_get_callback (GtkWidget *widget, guint32 time, gpointer data) { + NautilusDragInfo *drag_info; + g_assert (widget != NULL); g_assert (NAUTILUS_IS_CANVAS_CONTAINER (widget)); g_return_if_fail (context != NULL); @@ -319,8 +321,8 @@ drag_data_get_callback (GtkWidget *widget, * the selection data in the right format. Pass it means to * iterate all the selected icons. */ - nautilus_drag_drag_data_get (widget, context, selection_data, - info, time, widget, each_icon_get_data_binder); + drag_info = &(NAUTILUS_CANVAS_CONTAINER (widget)->details->dnd_info->drag_info); + nautilus_drag_drag_data_get_from_cache (drag_info->selection_cache, context, selection_data, info, time); } @@ -1307,6 +1309,7 @@ drag_begin_callback (GtkWidget *widget, gpointer data) { NautilusCanvasContainer *container; + NautilusDragInfo *drag_info; cairo_surface_t *surface; double x1, y1, x2, y2, winx, winy; int x_offset, y_offset; @@ -1333,6 +1336,12 @@ drag_begin_callback (GtkWidget *widget, cairo_surface_set_device_offset (surface, -x_offset, -y_offset); gtk_drag_set_icon_surface (context, surface); cairo_surface_destroy (surface); + + /* cache the data at the beginning since the view may change */ + drag_info = &(container->details->dnd_info->drag_info); + drag_info->selection_cache = nautilus_drag_create_selection_cache (widget, + each_icon_get_data_binder); + } void |