diff --git c/katze/katze-arrayaction.c i/katze/katze-arrayaction.c index e5edad6..55b4690 100644 --- c/katze/katze-arrayaction.c +++ i/katze/katze-arrayaction.c @@ -645,6 +645,20 @@ katze_array_action_proxy_create_menu_proxy_cb (GtkWidget* proxy, } static void +katze_array_action_proxy_drag_data_get_cb (GtkWidget* toolitem, + GdkDragContext* context, + GtkSelectionData* data, + guint info, + guint32 time, + KatzeItem* item) +{ + const gchar* uri = katze_item_get_uri (item); + gchar** uris = g_strsplit (uri, uri, 1); + gtk_selection_data_set_uris (data, uris); + g_strfreev (uris); +} + +static void katze_array_action_toolitem_destroy_cb (GtkToolItem* toolitem, KatzeItem* item) { @@ -688,7 +702,14 @@ katze_array_action_create_tool_item_for (KatzeArrayAction* array_action, if (KATZE_ITEM_IS_FOLDER (item)) toolitem = gtk_toggle_tool_button_new (); else + { toolitem = gtk_tool_button_new (NULL, ""); + gtk_tool_item_set_use_drag_window (toolitem, TRUE); + gtk_drag_source_set (GTK_WIDGET (toolitem), GDK_BUTTON1_MASK, NULL, 0, GDK_ACTION_ASK | GDK_ACTION_COPY | GDK_ACTION_LINK); + gtk_drag_source_add_uri_targets (GTK_WIDGET (toolitem)); + g_signal_connect (toolitem, "drag-data-get", + G_CALLBACK (katze_array_action_proxy_drag_data_get_cb), item); + } g_signal_connect (toolitem, "create-menu-proxy", G_CALLBACK (katze_array_action_proxy_create_menu_proxy_cb), item); image = katze_item_get_image (item);