From 7b5c9ef98efe7c9f13472b423d723058bbb774e1 Mon Sep 17 00:00:00 2001 From: Jannis Pohlmann Date: Thu, 19 May 2011 23:51:35 +0000 Subject: Fix moving files to the desktop with shift & drag (bug #7629). Patch provided by Patrick Melo . --- diff --git a/src/xfdesktop-file-icon-manager.c b/src/xfdesktop-file-icon-manager.c index 2711646..d3ca2eb 100644 --- a/src/xfdesktop-file-icon-manager.c +++ b/src/xfdesktop-file-icon-manager.c @@ -2794,7 +2794,7 @@ xfdesktop_file_icon_manager_drag_data_received(XfdesktopIconViewManager *manager GFile *tfile = NULL; gboolean copy_only = TRUE, drop_ok = FALSE; GList *file_list; - + if(info == TARGET_XDND_DIRECT_SAVE0) { /* we don't suppose XdndDirectSave stage 3, result F, i.e., the app * has to save the data itself given the filename we provided in @@ -2816,7 +2816,7 @@ xfdesktop_file_icon_manager_drag_data_received(XfdesktopIconViewManager *manager /* data is "URL\nTITLE" */ GFile *source_file = NULL; gchar *exo_desktop_item_edit = g_find_program_in_path("exo-desktop-item-edit"); - + if(drop_icon) { GFileInfo *finfo = xfdesktop_file_icon_peek_file_info(XFDESKTOP_FILE_ICON(drop_icon)); if(g_file_info_get_file_type(finfo) == G_FILE_TYPE_DIRECTORY) @@ -2911,8 +2911,15 @@ xfdesktop_file_icon_manager_drag_data_received(XfdesktopIconViewManager *manager gchar *dest_basename = g_file_get_basename(l->data); if(dest_basename && *dest_basename != '\0') { - GFile *dest_file = g_file_get_child(base_dest_file, dest_basename); - dest_file_list = g_list_prepend(dest_file_list, dest_file); + /* If we copy a file, we need to use the new absolute filename + * as the destination. If we move, we need to use the destination + * directory. */ + if(copy_only) { + GFile *dest_file = g_file_get_child(base_dest_file, dest_basename); + dest_file_list = g_list_prepend(dest_file_list, dest_file); + } else { + dest_file_list = g_list_prepend(dest_file_list, base_dest_file); + } } g_free(dest_basename); @@ -2923,10 +2930,10 @@ xfdesktop_file_icon_manager_drag_data_received(XfdesktopIconViewManager *manager if(dest_file_list) { dest_file_list = g_list_reverse(dest_file_list); - drop_ok =xfdesktop_file_utils_transfer_files(context->action, - file_list, - dest_file_list, - fmanager->priv->gscreen); + drop_ok = xfdesktop_file_utils_transfer_files(context->action, + file_list, + dest_file_list, + fmanager->priv->gscreen); } xfdesktop_file_utils_file_list_free(dest_file_list); -- cgit