Index: libnautilus-private/nautilus-file-operations.c =================================================================== --- libnautilus-private/nautilus-file-operations.c (revision 14109) +++ libnautilus-private/nautilus-file-operations.c (working copy) @@ -4651,15 +4651,45 @@ gpointer done_callback_data) { GList *locations; + GList *p; GFile *dest, *src_dir; GtkWindow *parent_window; - + gboolean target_is_mapping; + gboolean have_nonmapping_source; + gboolean have_nonlocal_source; + char *file_scheme; + dest = NULL; + target_is_mapping = FALSE; + have_nonlocal_source = FALSE; + have_nonmapping_source = FALSE; + if (target_dir) { dest = g_file_new_for_uri (target_dir); + if (strncmp (target_dir, "burn", 4) == 0) { + target_is_mapping = TRUE; + } } locations = location_list_from_uri_list (item_uris); + + for (p = location_list_from_uri_list (item_uris); p != NULL; p = p->next) { + file_scheme = g_file_get_uri_scheme ((GFile *)p->data); + if (strcmp (file_scheme, "file") != 0) { + have_nonlocal_source = TRUE; + } + + if (strcmp (file_scheme, "burn") != 0) { + have_nonmapping_source = TRUE; + } + + g_free (file_scheme); + } + + if (target_is_mapping && have_nonmapping_source && !have_nonlocal_source && (copy_action == GDK_ACTION_COPY || copy_action == GDK_ACTION_MOVE)) { + copy_action = GDK_ACTION_COPY; + } + parent_window = NULL; if (parent_view) { parent_window = (GtkWindow *)gtk_widget_get_ancestor (parent_view, GTK_TYPE_WINDOW);