diff options
Diffstat (limited to 'libnautilus-private/nautilus-canvas-dnd.c')
-rw-r--r-- | libnautilus-private/nautilus-canvas-dnd.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/libnautilus-private/nautilus-canvas-dnd.c b/libnautilus-private/nautilus-canvas-dnd.c index f4b63e6c8..2c1adb24b 100644 --- a/libnautilus-private/nautilus-canvas-dnd.c +++ b/libnautilus-private/nautilus-canvas-dnd.c @@ -358,6 +358,28 @@ nautilus_canvas_container_position_shadow (NautilusCanvasContainer *container, } static void +stop_cache_selection_list (NautilusDragInfo *drag_info) +{ + if (drag_info->file_list_info_handler) { + nautilus_file_list_cancel_call_when_ready (drag_info->file_list_info_handler); + } +} + +static void +cache_selection_list (NautilusDragInfo *drag_info) +{ + GList *files; + + files = nautilus_drag_file_list_from_selection_list (drag_info->selection_list); + nautilus_file_list_call_when_ready (files, + NAUTILUS_FILE_ATTRIBUTE_INFO, + drag_info->file_list_info_handler, + done, NULL); + + g_list_free_full (files, g_object_unref); +} + +static void nautilus_canvas_container_dropped_canvas_feedback (GtkWidget *widget, GtkSelectionData *data, int x, int y) @@ -369,6 +391,7 @@ nautilus_canvas_container_dropped_canvas_feedback (GtkWidget *widget, dnd_info = container->details->dnd_info; /* Delete old selection list. */ + stop_cache_selection_list (&dnd_info->drag_info); nautilus_drag_destroy_selection_list (dnd_info->drag_info.selection_list); dnd_info->drag_info.selection_list = NULL; @@ -381,6 +404,7 @@ nautilus_canvas_container_dropped_canvas_feedback (GtkWidget *widget, /* Build the selection list and the shadow. */ dnd_info->drag_info.selection_list = nautilus_drag_build_selection_list (data); + cache_selection_list (&dnd_info->drag_info); dnd_info->shadow = create_selection_shadow (container, dnd_info->drag_info.selection_list); nautilus_canvas_container_position_shadow (container, x, y); } @@ -535,6 +559,7 @@ drag_end_callback (GtkWidget *widget, window = NAUTILUS_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (container))); dnd_info = container->details->dnd_info; + stop_cache_selection_list (&dnd_info->drag_info); nautilus_drag_destroy_selection_list (dnd_info->drag_info.selection_list); nautilus_drag_destroy_selection_list (container->details->dnd_source_info->selection_cache); dnd_info->drag_info.selection_list = NULL; @@ -1077,6 +1102,7 @@ nautilus_canvas_container_receive_dropped_icons (NautilusCanvasContainer *contai } g_free (drop_target); + stop_cache_selection_list (&container->details->dnd_info->drag_info); nautilus_drag_destroy_selection_list (container->details->dnd_info->drag_info.selection_list); container->details->dnd_info->drag_info.selection_list = NULL; } |