[nautilus] dnd: make sidebar show "new bookmark" only for folders



commit f0c81e22a3e9c3cbc1a70245e629caa2209c75ba
Author: Nelson Benítez León <nbenitezl+gnome gmail com>
Date:   Sun Aug 13 19:46:08 2017 +0500

    dnd: make sidebar show "new bookmark" only for folders
    
    Make sure sidebar shows "new bookmark" only when folders
    are being dragged.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=754513

 src/nautilus-canvas-dnd.c    |    8 +++++++-
 src/nautilus-file.c          |   15 +++++++++++++++
 src/nautilus-file.h          |    1 +
 src/nautilus-list-view-dnd.c |    8 +++++++-
 4 files changed, 30 insertions(+), 2 deletions(-)
---
diff --git a/src/nautilus-canvas-dnd.c b/src/nautilus-canvas-dnd.c
index d01c876..7ef7dd5 100644
--- a/src/nautilus-canvas-dnd.c
+++ b/src/nautilus-canvas-dnd.c
@@ -1459,6 +1459,7 @@ drag_begin_callback (GtkWidget      *widget,
     double x1, y1, x2, y2, winx, winy;
     int x_offset, y_offset;
     int start_x, start_y;
+    GList *dragged_files;
 
     container = NAUTILUS_CANVAS_CONTAINER (widget);
     window = NAUTILUS_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (container)));
@@ -1491,7 +1492,12 @@ drag_begin_callback (GtkWidget      *widget,
     container->details->dnd_source_info->selection_cache = nautilus_drag_create_selection_cache (widget,
                                                                                                  
each_icon_get_data_binder);
 
-    nautilus_window_start_dnd (window, context);
+    dragged_files = nautilus_drag_file_list_from_selection_list (drag_info->selection_cache);
+    if (nautilus_file_list_are_all_folders (dragged_files))
+    {
+        nautilus_window_start_dnd (window, context);
+    }
+    g_list_free_full (dragged_files, g_object_unref);
 }
 
 void
diff --git a/src/nautilus-file.c b/src/nautilus-file.c
index e37ba19..d19e0cd 100644
--- a/src/nautilus-file.c
+++ b/src/nautilus-file.c
@@ -4204,6 +4204,21 @@ nautilus_file_list_filter (GList                   *files,
     return filtered;
 }
 
+gboolean
+nautilus_file_list_are_all_folders (const GList *files)
+{
+  const GList *l;
+
+  for (l = files; l != NULL; l = l->next)
+  {
+    if (!nautilus_file_is_directory (NAUTILUS_FILE (l->data)))
+    {
+        return FALSE;
+    }
+  }
+  return TRUE;
+}
+
 char *
 nautilus_file_get_metadata (NautilusFile *file,
                             const char   *key,
diff --git a/src/nautilus-file.h b/src/nautilus-file.h
index 4179778..3a83bd4 100644
--- a/src/nautilus-file.h
+++ b/src/nautilus-file.h
@@ -503,6 +503,7 @@ GList *                 nautilus_file_list_filter                       (GList
                                                                          GList                         
**failed,
                                                                          NautilusFileFilterFunc          
filter_function,
                                                                          gpointer                        
user_data);
+gboolean                nautilus_file_list_are_all_folders              (const GList                    
*files);
 /* DND */
 gboolean                nautilus_drag_can_accept_item                   (NautilusFile                   
*drop_target_item,
                                                                          const char                     
*item_uri);
diff --git a/src/nautilus-list-view-dnd.c b/src/nautilus-list-view-dnd.c
index 4baa28e..671ec6c 100644
--- a/src/nautilus-list-view-dnd.c
+++ b/src/nautilus-list-view-dnd.c
@@ -176,6 +176,7 @@ drag_begin_callback (GtkWidget        *widget,
 {
     cairo_surface_t *surface;
     NautilusWindow *window;
+    GList *dragged_files;
 
     window = nautilus_files_view_get_window (NAUTILUS_FILES_VIEW (view));
     surface = get_drag_surface (view);
@@ -195,7 +196,12 @@ drag_begin_callback (GtkWidget        *widget,
     view->details->drag_source_info->selection_cache = nautilus_drag_create_selection_cache (view,
                                                                                              
each_item_get_data_binder);
 
-    nautilus_window_start_dnd (window, context);
+    dragged_files = nautilus_drag_file_list_from_selection_list 
(view->details->drag_source_info->selection_cache);
+    if (nautilus_file_list_are_all_folders (dragged_files))
+    {
+        nautilus_window_start_dnd (window, context);
+    }
+    g_list_free_full (dragged_files, g_object_unref);
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]