[Xfce4-commits] <xfdesktop:master> Fix moving files to the desktop with shift & drag (bug #7629).

Jannis Pohlmann noreply at xfce.org
Fri May 20 01:54:01 CEST 2011


Updating branch refs/heads/master
         to 6bfb354ad75e292c15f29a73c357c131485c3aff (commit)
       from 6ff9dee607338668a8043495b1996929c4e2bbe4 (commit)

commit 6bfb354ad75e292c15f29a73c357c131485c3aff
Author: Jannis Pohlmann <jannis at xfce.org>
Date:   Fri May 20 01:51:35 2011 +0200

    Fix moving files to the desktop with shift & drag (bug #7629).
    
    Patch provided by Patrick Melo <patrickmelo.eti at gmail.com>.

 NEWS                              |    2 ++
 src/xfdesktop-file-icon-manager.c |   23 +++++++++++++++--------
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/NEWS b/NEWS
index 412401d..30a8cae 100644
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,8 @@ Xfdesktop 4.x.y
   * Make sure the background is reloaded on compositing changes.
   * Fix a crash on focus in when items are selected (bug #7313).
     Reported and fixed by Ambroz Bizjak.
+  * Fix moving files to the desktop via shift & drag (bug #7629).
+    Reported and fixed by Patrick Melo.
 
 
 Xfdesktop 4.8.0
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);



More information about the Xfce4-commits mailing list