[nautilus] Don't allow any type of drop (even text) if the target is readonly
- From: William Jon McCann <mccann src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus] Don't allow any type of drop (even text) if the target is readonly
- Date: Sun, 26 Aug 2012 12:51:25 +0000 (UTC)
commit 37ec9edf7947e823bf09b3d30ee01a5c2b0fd3fe
Author: William Jon McCann <jmccann redhat com>
Date: Sat Aug 25 10:40:01 2012 -0400
Don't allow any type of drop (even text) if the target is readonly
https://bugzilla.gnome.org/show_bug.cgi?id=329515
libnautilus-private/nautilus-canvas-dnd.c | 27 ++++-----
libnautilus-private/nautilus-tree-view-drag-dest.c | 61 +++++++------------
2 files changed, 35 insertions(+), 53 deletions(-)
---
diff --git a/libnautilus-private/nautilus-canvas-dnd.c b/libnautilus-private/nautilus-canvas-dnd.c
index a6d394b..5329d9b 100644
--- a/libnautilus-private/nautilus-canvas-dnd.c
+++ b/libnautilus-private/nautilus-canvas-dnd.c
@@ -1144,28 +1144,23 @@ nautilus_canvas_container_get_drop_action (NautilusCanvasContainer *container,
canvas_widget_to_world (EEL_CANVAS (container), x, y, &world_x, &world_y);
*action = 0;
+ drop_target = nautilus_canvas_container_find_drop_target (container,
+ context, x, y, &icon_hit, FALSE);
+ if (drop_target == NULL) {
+ return;
+ }
+
/* case out on the type of object being dragged */
switch (container->details->dnd_info->drag_info.data_type) {
case NAUTILUS_ICON_DND_GNOME_ICON_LIST:
- if (container->details->dnd_info->drag_info.selection_list == NULL) {
- return;
- }
- drop_target = nautilus_canvas_container_find_drop_target (container,
- context, x, y, &icon_hit, FALSE);
- if (!drop_target) {
- return;
+ if (container->details->dnd_info->drag_info.selection_list != NULL) {
+ nautilus_drag_default_drop_action_for_icons (context, drop_target,
+ container->details->dnd_info->drag_info.selection_list,
+ action);
}
- nautilus_drag_default_drop_action_for_icons (context, drop_target,
- container->details->dnd_info->drag_info.selection_list,
- action);
- g_free (drop_target);
break;
case NAUTILUS_ICON_DND_URI_LIST:
- drop_target = nautilus_canvas_container_find_drop_target (container,
- context, x, y, &icon_hit, FALSE);
*action = nautilus_drag_default_drop_action_for_uri_list (context, drop_target);
-
- g_free (drop_target);
break;
case NAUTILUS_ICON_DND_NETSCAPE_URL:
@@ -1182,6 +1177,8 @@ nautilus_canvas_container_get_drop_action (NautilusCanvasContainer *container,
*action = GDK_ACTION_COPY;
break;
}
+
+ g_free (drop_target);
}
static void
diff --git a/libnautilus-private/nautilus-tree-view-drag-dest.c b/libnautilus-private/nautilus-tree-view-drag-dest.c
index 8f123c7..a99fa9b 100644
--- a/libnautilus-private/nautilus-tree-view-drag-dest.c
+++ b/libnautilus-private/nautilus-tree-view-drag-dest.c
@@ -368,14 +368,19 @@ get_drop_target_uri_for_path (NautilusTreeViewDragDest *dest,
GtkTreePath *path)
{
NautilusFile *file;
- char *target;
+ char *target = NULL;
+ gboolean can;
file = file_for_path (dest, path);
if (file == NULL) {
return NULL;
}
-
- target = nautilus_file_get_drop_target_uri (file);
+ can = nautilus_drag_can_accept_info (file,
+ dest->details->drag_type,
+ dest->details->drag_list);
+ if (can) {
+ target = nautilus_file_get_drop_target_uri (file);
+ }
nautilus_file_unref (file);
return target;
@@ -395,56 +400,36 @@ get_drop_action (NautilusTreeViewDragDest *dest,
return 0;
}
+ drop_target = get_drop_target_uri_for_path (dest, path);
+ if (drop_target == NULL) {
+ return 0;
+ }
+
+ action = 0;
switch (dest->details->drag_type) {
case NAUTILUS_ICON_DND_GNOME_ICON_LIST :
- drop_target = get_drop_target_uri_for_path (dest, path);
-
- if (!drop_target) {
- return 0;
- }
-
nautilus_drag_default_drop_action_for_icons
(context,
drop_target,
dest->details->drag_list,
&action);
-
- g_free (drop_target);
-
- return action;
-
+ break;
case NAUTILUS_ICON_DND_NETSCAPE_URL:
- drop_target = get_drop_target_uri_for_path (dest, path);
-
- if (drop_target == NULL) {
- return 0;
- }
-
action = nautilus_drag_default_drop_action_for_netscape_url (context);
-
- g_free (drop_target);
-
- return action;
-
+ break;
case NAUTILUS_ICON_DND_URI_LIST :
- drop_target = get_drop_target_uri_for_path (dest, path);
-
- if (drop_target == NULL) {
- return 0;
- }
-
- g_free (drop_target);
-
- return gdk_drag_context_get_suggested_action (context);
-
+ action = gdk_drag_context_get_suggested_action (context);
+ break;
case NAUTILUS_ICON_DND_TEXT:
case NAUTILUS_ICON_DND_RAW:
case NAUTILUS_ICON_DND_XDNDDIRECTSAVE:
- return GDK_ACTION_COPY;
-
+ action = GDK_ACTION_COPY;
+ break;
}
- return 0;
+ g_free (drop_target);
+
+ return action;
}
static gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]