1 Index: libnautilus-private/nautilus-dnd.c
2 ===================================================================
3 RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-dnd.c,v
4 retrieving revision 1.24
5 diff -u -p -r1.24 nautilus-dnd.c
6 --- libnautilus-private/nautilus-dnd.c 18 Mar 2006 07:13:49 -0000 1.24
7 +++ libnautilus-private/nautilus-dnd.c 20 Apr 2006 11:19:18 -0000
8 @@ -302,6 +302,26 @@ nautilus_drag_default_drop_action_for_ur
9 return context->suggested_action;
13 +uri_is_user_owned (GnomeVFSURI *uri)
15 + gboolean user_owned;
19 + if (uri != NULL && !strcmp (gnome_vfs_uri_get_scheme (uri), "file")) {
20 + GnomeVFSFileInfo *info;
22 + info = gnome_vfs_file_info_new ();
23 + if (gnome_vfs_get_file_info_uri (uri, info, GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS) == GNOME_VFS_OK) {
24 + user_owned = (info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_IDS) &&
25 + geteuid () == info->uid;
27 + gnome_vfs_file_info_unref (info);
34 nautilus_drag_default_drop_action_for_icons (GdkDragContext *context,
35 @@ -385,11 +405,12 @@ nautilus_drag_default_drop_action_for_ic
36 if (dropped_uri != NULL) {
37 gnome_vfs_check_same_fs_uris (dropped_uri, target_uri, &same_fs);
38 target_is_source_parent = gnome_vfs_uri_is_parent (target_uri, dropped_uri, FALSE);
39 - gnome_vfs_uri_unref (dropped_uri);
41 - gnome_vfs_uri_unref (target_uri);
43 - if (same_fs || target_is_source_parent) {
45 + if ((same_fs || target_is_source_parent) &&
46 + /* use copy by default when dragging from user-owned location
47 + * to location owned by somebody else */
48 + !(uri_is_user_owned (dropped_uri) && !uri_is_user_owned (target_uri))) {
49 if (actions & GDK_ACTION_MOVE) {
50 *action = GDK_ACTION_MOVE;
52 @@ -402,6 +423,15 @@ nautilus_drag_default_drop_action_for_ic
53 *action = context->suggested_action;
57 + if (dropped_uri != NULL) {
58 + gnome_vfs_uri_unref (dropped_uri);
61 + if (target_uri != NULL) {
62 + gnome_vfs_uri_unref (target_uri);
67 /* Encode a "x-special/gnome-icon-list" selection.