summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNelson Benítez León <nbenitezl+gnome@gmail.com>2017-08-13 19:46:08 +0500
committerCarlos Soriano <csoriano@localhost.localdomain>2017-08-17 16:19:52 +0200
commitf0c81e22a3e9c3cbc1a70245e629caa2209c75ba (patch)
treec2621c5eb56c447e6ccd88abb1d4b16eed4db22a
parent611f381d561024b0a590237c31fc0612e6698530 (diff)
downloadnautilus-f0c81e22a3e9c3cbc1a70245e629caa2209c75ba.tar.gz
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
-rw-r--r--src/nautilus-canvas-dnd.c8
-rw-r--r--src/nautilus-file.c15
-rw-r--r--src/nautilus-file.h1
-rw-r--r--src/nautilus-list-view-dnd.c8
4 files changed, 30 insertions, 2 deletions
diff --git a/src/nautilus-canvas-dnd.c b/src/nautilus-canvas-dnd.c
index d01c876c3..7ef7dd56e 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 e37ba19a5..d19e0cd56 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 417977856..3a83bd4de 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 4baa28eb1..671ec6c90 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