summaryrefslogtreecommitdiff
path: root/libnautilus-private/nautilus-canvas-dnd.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnautilus-private/nautilus-canvas-dnd.c')
-rw-r--r--libnautilus-private/nautilus-canvas-dnd.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/libnautilus-private/nautilus-canvas-dnd.c b/libnautilus-private/nautilus-canvas-dnd.c
index b4da369f3..2b6d2a39c 100644
--- a/libnautilus-private/nautilus-canvas-dnd.c
+++ b/libnautilus-private/nautilus-canvas-dnd.c
@@ -32,6 +32,8 @@
#include <config.h>
#include <math.h>
+#include <src/nautilus-window.h>
+
#include "nautilus-canvas-dnd.h"
#include "nautilus-file-dnd.h"
@@ -528,12 +530,18 @@ drag_end_callback (GtkWidget *widget,
{
NautilusCanvasContainer *container;
NautilusCanvasDndInfo *dnd_info;
+ NautilusWindow *window;
container = NAUTILUS_CANVAS_CONTAINER (widget);
+ window = NAUTILUS_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (container)));
dnd_info = container->details->dnd_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;
+ container->details->dnd_source_info->selection_cache = NULL;
+
+ nautilus_window_end_dnd (window, context);
}
static NautilusCanvasIcon *
@@ -1074,6 +1082,13 @@ nautilus_canvas_container_receive_dropped_icons (NautilusCanvasContainer *contai
container->details->dnd_info->drag_info.selection_list = NULL;
}
+NautilusDragInfo *
+nautilus_canvas_dnd_get_drag_source_data (NautilusCanvasContainer *container,
+ GdkDragContext *context)
+{
+ return container->details->dnd_source_info;
+}
+
static void
nautilus_canvas_container_get_drop_action (NautilusCanvasContainer *container,
GdkDragContext *context,
@@ -1104,8 +1119,9 @@ nautilus_canvas_container_get_drop_action (NautilusCanvasContainer *container,
switch (container->details->dnd_info->drag_info.data_type) {
case NAUTILUS_ICON_DND_GNOME_ICON_LIST:
if (container->details->dnd_info->drag_info.selection_list != NULL) {
- nautilus_drag_default_drop_action_for_icons (context, drop_target,
- container->details->dnd_info->drag_info.selection_list,
+ nautilus_drag_default_drop_action_for_icons (context, drop_target,
+ container->details->dnd_info->drag_info.selection_list,
+ 0,
action);
}
break;
@@ -1258,12 +1274,14 @@ drag_begin_callback (GtkWidget *widget,
{
NautilusCanvasContainer *container;
NautilusDragInfo *drag_info;
+ NautilusWindow *window;
cairo_surface_t *surface;
double x1, y1, x2, y2, winx, winy;
int x_offset, y_offset;
int start_x, start_y;
container = NAUTILUS_CANVAS_CONTAINER (widget);
+ window = NAUTILUS_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (container)));
start_x = container->details->dnd_info->drag_info.start_x +
gtk_adjustment_get_value (gtk_scrollable_get_hadjustment (GTK_SCROLLABLE (container)));
@@ -1290,6 +1308,10 @@ drag_begin_callback (GtkWidget *widget,
drag_info->selection_cache = nautilus_drag_create_selection_cache (widget,
each_icon_get_data_binder);
+ container->details->dnd_source_info->selection_cache = nautilus_drag_create_selection_cache (widget,
+ each_icon_get_data_binder);
+
+ nautilus_window_start_dnd (window, context);
}
void
@@ -1301,11 +1323,14 @@ nautilus_canvas_dnd_begin_drag (NautilusCanvasContainer *container,
int start_y)
{
NautilusCanvasDndInfo *dnd_info;
+ NautilusDragInfo *dnd_source_info;
g_return_if_fail (NAUTILUS_IS_CANVAS_CONTAINER (container));
g_return_if_fail (event != NULL);
dnd_info = container->details->dnd_info;
+ container->details->dnd_source_info = g_new0 (NautilusDragInfo, 1);
+ dnd_source_info = container->details->dnd_source_info;
g_return_if_fail (dnd_info != NULL);
/* Notice that the event is in bin_window coordinates, because of
@@ -1316,6 +1341,7 @@ nautilus_canvas_dnd_begin_drag (NautilusCanvasContainer *container,
dnd_info->drag_info.start_y = start_y -
gtk_adjustment_get_value (gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (container)));
+ dnd_source_info->source_actions = actions;
/* start the drag */
gtk_drag_begin_with_coordinates (GTK_WIDGET (container),
dnd_info->drag_info.target_list,