Turns out that the "UTF8_STRING" dnd target isn't enough, for instance mozilla doesn't seem to support it. Proposed patch attached. Note that all these additional targets only works because we use the GTK+ gtk_selection_data_get_text DND helper. -- Christian Neumair <chris gnome-de org>
Index: libnautilus-private/nautilus-dnd.c =================================================================== RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-dnd.c,v retrieving revision 1.20 diff -u -p -r1.20 nautilus-dnd.c --- libnautilus-private/nautilus-dnd.c 13 Jan 2005 13:27:51 -0000 1.20 +++ libnautilus-private/nautilus-dnd.c 5 Jul 2005 13:18:37 -0000 @@ -70,10 +70,16 @@ void nautilus_drag_init (NautilusDragInfo *drag_info, const GtkTargetEntry *drag_types, - int drag_type_count) + int drag_type_count, + gboolean add_text_targets) { drag_info->target_list = gtk_target_list_new (drag_types, drag_type_count); + + if (add_text_targets) { + gtk_target_list_add_text_targets (drag_info->target_list, + NAUTILUS_ICON_DND_TEXT); + } drag_info->drop_occured = FALSE; drag_info->need_to_destroy = FALSE; Index: libnautilus-private/nautilus-dnd.h =================================================================== RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-dnd.h,v retrieving revision 1.12 diff -u -p -r1.12 nautilus-dnd.h --- libnautilus-private/nautilus-dnd.h 5 Jul 2005 12:23:34 -0000 1.12 +++ libnautilus-private/nautilus-dnd.h 5 Jul 2005 13:18:37 -0000 @@ -32,7 +32,6 @@ /* Drag & Drop target names. */ #define NAUTILUS_ICON_DND_GNOME_ICON_LIST_TYPE "x-special/gnome-icon-list" #define NAUTILUS_ICON_DND_URI_LIST_TYPE "text/uri-list" -#define NAUTILUS_ICON_DND_TEXT_TYPE "UTF8_STRING" #define NAUTILUS_ICON_DND_URL_TYPE "_NETSCAPE_URL" #define NAUTILUS_ICON_DND_COLOR_TYPE "application/x-color" #define NAUTILUS_ICON_DND_BGIMAGE_TYPE "property/bgimage" @@ -107,7 +106,8 @@ typedef void (* NautilusDragEachSelect void nautilus_drag_init (NautilusDragInfo *drag_info, const GtkTargetEntry *drag_types, - int drag_type_count); + int drag_type_count, + gboolean add_text_targets); void nautilus_drag_finalize (NautilusDragInfo *drag_info); NautilusDragSelectionItem *nautilus_drag_selection_item_new (void); void nautilus_drag_destroy_selection_list (GList *selection_list); Index: libnautilus-private/nautilus-icon-dnd.c =================================================================== RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-icon-dnd.c,v retrieving revision 1.145 diff -u -p -r1.145 nautilus-icon-dnd.c --- libnautilus-private/nautilus-icon-dnd.c 5 Jul 2005 12:23:34 -0000 1.145 +++ libnautilus-private/nautilus-icon-dnd.c 5 Jul 2005 13:18:37 -0000 @@ -65,14 +65,12 @@ 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 }, - { NAUTILUS_ICON_DND_TEXT_TYPE, 0, NAUTILUS_ICON_DND_TEXT } }; static const GtkTargetEntry drop_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 }, - { NAUTILUS_ICON_DND_TEXT_TYPE, 0, NAUTILUS_ICON_DND_TEXT }, { NAUTILUS_ICON_DND_COLOR_TYPE, 0, NAUTILUS_ICON_DND_COLOR }, { NAUTILUS_ICON_DND_BGIMAGE_TYPE, 0, NAUTILUS_ICON_DND_BGIMAGE }, { NAUTILUS_ICON_DND_KEYWORD_TYPE, 0, NAUTILUS_ICON_DND_KEYWORD }, @@ -376,12 +374,16 @@ get_data_on_first_target_we_support (Gtk GList *target; GtkTargetList *list; - if (drop_types_list == NULL) + if (drop_types_list == NULL) { drop_types_list = gtk_target_list_new (drop_types, G_N_ELEMENTS (drop_types) - 1); - if (drop_types_list_root == NULL) + gtk_target_list_add_text_targets (drop_types_list, NAUTILUS_ICON_DND_TEXT); + } + if (drop_types_list_root == NULL) { drop_types_list_root = gtk_target_list_new (drop_types, G_N_ELEMENTS (drop_types)); + gtk_target_list_add_text_targets (drop_types_list_root, NAUTILUS_ICON_DND_TEXT); + } if (nautilus_icon_container_get_is_desktop (NAUTILUS_ICON_CONTAINER (widget))) { list = drop_types_list_root; @@ -1696,6 +1698,7 @@ void nautilus_icon_dnd_init (NautilusIconContainer *container, GdkBitmap *stipple) { + GtkTargetList *targets; int n_elements; g_return_if_fail (container != NULL); @@ -1704,7 +1707,7 @@ nautilus_icon_dnd_init (NautilusIconCont container->details->dnd_info = g_new0 (NautilusIconDndInfo, 1); nautilus_drag_init (&container->details->dnd_info->drag_info, - drag_types, G_N_ELEMENTS (drag_types)); + drag_types, G_N_ELEMENTS (drag_types), TRUE); /* Set up the widget as a drag destination. * (But not a source, as drags starting from this widget will be @@ -1719,6 +1722,9 @@ nautilus_icon_dnd_init (NautilusIconCont 0, drop_types, n_elements, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK); + + targets = gtk_drag_dest_get_target_list (GTK_WIDGET (container)); + gtk_target_list_add_text_targets (targets, NAUTILUS_ICON_DND_TEXT); /* Messages for outgoing drag. */ g_signal_connect (container, "drag_data_get", 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.10 diff -u -p -r1.10 nautilus-tree-view-drag-dest.c --- libnautilus-private/nautilus-tree-view-drag-dest.c 5 Jul 2005 12:23:34 -0000 1.10 +++ libnautilus-private/nautilus-tree-view-drag-dest.c 5 Jul 2005 13:18:38 -0000 @@ -82,7 +82,6 @@ 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 }, - { NAUTILUS_ICON_DND_TEXT_TYPE, 0, NAUTILUS_ICON_DND_TEXT } /* FIXME: Should handle emblems once the list view supports them */ }; @@ -853,6 +852,7 @@ NautilusTreeViewDragDest * nautilus_tree_view_drag_dest_new (GtkTreeView *tree_view) { NautilusTreeViewDragDest *dest; + GtkTargetList *targets; dest = g_object_new (NAUTILUS_TYPE_TREE_VIEW_DRAG_DEST, NULL); @@ -862,8 +862,11 @@ nautilus_tree_view_drag_dest_new (GtkTre gtk_drag_dest_set (GTK_WIDGET (tree_view), 0, drag_types, G_N_ELEMENTS (drag_types), - GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_ASK); - + GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_ASK); + + targets = gtk_drag_dest_get_target_list (GTK_WIDGET (tree_view)); + gtk_target_list_add_text_targets (targets, NAUTILUS_ICON_DND_TEXT); + g_signal_connect_object (tree_view, "drag_motion", G_CALLBACK (drag_motion_callback), Index: src/nautilus-spatial-window.c =================================================================== RCS file: /cvs/gnome/nautilus/src/nautilus-spatial-window.c,v retrieving revision 1.445 diff -u -p -r1.445 nautilus-spatial-window.c --- src/nautilus-spatial-window.c 23 Jun 2005 14:16:58 -0000 1.445 +++ src/nautilus-spatial-window.c 5 Jul 2005 13:18:38 -0000 @@ -105,7 +105,6 @@ static const GtkTargetEntry location_but { 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 }, - { NAUTILUS_ICON_DND_TEXT_TYPE, 0, NAUTILUS_ICON_DND_TEXT } }; GNOME_CLASS_BOILERPLATE (NautilusSpatialWindow, nautilus_spatial_window, @@ -787,6 +786,7 @@ nautilus_spatial_window_instance_init (N GtkWidget *hbox; GtkActionGroup *action_group; GtkUIManager *ui_manager; + GtkTargetList *targets; const char *ui; window->details = g_new0 (NautilusSpatialWindowDetails, 1); @@ -846,7 +846,10 @@ nautilus_spatial_window_instance_init (N "drag_data_get", G_CALLBACK (location_button_drag_data_get_callback), window); - + + targets = gtk_drag_source_get_target_list (window->details->location_button); + gtk_target_list_add_text_targets (targets, NAUTILUS_ICON_DND_TEXT); + gtk_widget_set_sensitive (window->details->location_button, FALSE); g_signal_connect (window->details->location_button, "clicked", Index: src/file-manager/fm-list-model.c =================================================================== RCS file: /cvs/gnome/nautilus/src/file-manager/fm-list-model.c,v retrieving revision 1.43 diff -u -p -r1.43 fm-list-model.c --- src/file-manager/fm-list-model.c 17 Jun 2005 15:56:34 -0000 1.43 +++ src/file-manager/fm-list-model.c 5 Jul 2005 13:18:39 -0000 @@ -97,7 +97,6 @@ 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 }, - { NAUTILUS_ICON_DND_TEXT_TYPE, 0, NAUTILUS_ICON_DND_TEXT } }; static GtkTargetList *drag_target_list = NULL; @@ -766,7 +765,8 @@ fm_list_model_multi_drag_data_get (EggTr if (!drag_target_list) { drag_target_list = gtk_target_list_new (drag_types, G_N_ELEMENTS (drag_types)); - + gtk_target_list_add_text_targets ( + drag_target_list, NAUTILUS_ICON_DND_TEXT); } if (gtk_target_list_find (drag_target_list,
Attachment:
signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil