summaryrefslogtreecommitdiff
path: root/src/nautilus-window.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nautilus-window.c')
-rw-r--r--src/nautilus-window.c37
1 files changed, 33 insertions, 4 deletions
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 84d9f6129..04b929c19 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -977,6 +977,24 @@ build_selection_list_from_gfile_list (GList *gfile_list)
return g_list_reverse (result);
}
+void
+nautilus_window_start_dnd (NautilusWindow *window,
+ GdkDragContext *context)
+{
+ gtk_places_sidebar_set_drop_targets_visible (GTK_PLACES_SIDEBAR (window->priv->places_sidebar),
+ TRUE,
+ context);
+}
+
+void
+nautilus_window_end_dnd (NautilusWindow *window,
+ GdkDragContext *context)
+{
+ gtk_places_sidebar_set_drop_targets_visible (GTK_PLACES_SIDEBAR (window->priv->places_sidebar),
+ FALSE,
+ context);
+}
+
/* Callback used when the places sidebar needs to know the drag action to suggest */
static GdkDragAction
places_sidebar_drag_action_requested_cb (GtkPlacesSidebar *sidebar,
@@ -988,17 +1006,28 @@ places_sidebar_drag_action_requested_cb (GtkPlacesSidebar *sidebar,
GList *items;
char *uri;
int action = 0;
-
- items = build_selection_list_from_gfile_list (source_file_list);
+ NautilusDragInfo *info;
+ guint32 source_actions;
+
+ info = nautilus_drag_get_source_data (context);
+ if (info != NULL) {
+ items = info->selection_cache;
+ source_actions = info->source_actions;
+ } else {
+ items = build_selection_list_from_gfile_list (source_file_list);
+ source_actions = 0;
+ }
uri = g_file_get_uri (dest_file);
if (g_list_length (items) < 1)
goto out;
- nautilus_drag_default_drop_action_for_icons (context, uri, items, &action);
+ nautilus_drag_default_drop_action_for_icons (context, uri, items, source_actions, &action);
out:
- nautilus_drag_destroy_selection_list (items);
+ if (info == NULL)
+ nautilus_drag_destroy_selection_list (items);
+
g_free (uri);
return action;