The attached patch enables list view DND and partially fixes a text dnd issue, where the user was required to hover over a path to enable text dropping. Fixes bug 313408 [1]. [1] http://bugzilla.gnome.org/show_bug.cgi?id=313408 -- Christian Neumair <chris gnome-de org>
Index: libnautilus-private/nautilus-tree-view-drag-dest.c =================================================================== RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-tree-view-drag-dest.c,v retrieving revision 1.11 diff -u -p -r1.11 nautilus-tree-view-drag-dest.c --- libnautilus-private/nautilus-tree-view-drag-dest.c 6 Jul 2005 12:18:27 -0000 1.11 +++ libnautilus-private/nautilus-tree-view-drag-dest.c 14 Aug 2005 17:49:46 -0000 @@ -82,7 +83,7 @@ static const GtkTargetEntry drag_types [ { NAUTILUS_ICON_DND_GNOME_ICON_LIST_TYPE, 0, NAUTILUS_ICON_DND_GNOME_ICON_LIST }, { NAUTILUS_ICON_DND_URI_LIST_TYPE, 0, NAUTILUS_ICON_DND_URI_LIST }, { NAUTILUS_ICON_DND_URL_TYPE, 0, NAUTILUS_ICON_DND_URL }, - /* FIXME: Should handle emblems once the list view supports them */ + { NAUTILUS_ICON_DND_KEYWORD_TYPE, 0, NAUTILUS_ICON_DND_KEYWORD } }; @@ -387,6 +388,9 @@ get_drop_action (NautilusTreeViewDragDes return context->suggested_action; case NAUTILUS_ICON_DND_TEXT: + return GDK_ACTION_COPY; + + case NAUTILUS_ICON_DND_KEYWORD: drop_target = get_drop_target (dest, path); if (!drop_target) { @@ -626,6 +626,36 @@ receive_dropped_url (NautilusTreeViewDra x, y); } +static void +receive_dropped_keyword (NautilusTreeViewDragDest *dest, + GdkDragContext *context, + int x, int y) +{ + char *drop_target_uri; + GtkTreePath *path, *drop_path; + NautilusFile *drop_target_file; + + gtk_tree_view_get_dest_row_at_pos (dest->details->tree_view, x, y, + &path, NULL); + + drop_path = get_drop_path (dest, path); + g_return_if_fail (drop_path != NULL); + + drop_target_uri = get_drop_target (dest, drop_path); + g_return_if_fail (drop_target_uri != NULL); + + drop_target_file = nautilus_file_get (drop_target_uri); + g_return_if_fail (drop_target_file != NULL); + + nautilus_drag_file_receive_dropped_keyword (drop_target_file, + (char *) dest->details->drag_data->data); + + g_free (drop_target_uri); + nautilus_file_unref (drop_target_file); + gtk_tree_path_free (drop_path); + gtk_tree_path_free (path); +} + static gboolean drag_data_received_callback (GtkWidget *widget, GdkDragContext *context, @@ -669,6 +699,10 @@ drag_data_received_callback (GtkWidget * break; case NAUTILUS_ICON_DND_TEXT: receive_dropped_text (dest, context, x, y); + success = TRUE; + break; + case NAUTILUS_ICON_DND_KEYWORD: + receive_dropped_keyword (dest, context, x, y); success = TRUE; break; }
Attachment:
signature.asc
Description: This is a digitally signed message part