Index: src/totem-playlist.c
===================================================================
--- src/totem-playlist.c	(revision 5030)
+++ src/totem-playlist.c	(working copy)
@@ -53,6 +53,8 @@
 void playlist_select_subtitle_action_callback (GtkAction *action, TotemPlaylist *playlist);
 void playlist_remove_action_callback (GtkAction *action, TotemPlaylist *playlist);
 
+static void playlist_remove_files (TotemPlaylist *playlist);
+
 typedef gboolean (*PlaylistCallback) (TotemPlaylist *playlist, const char *mrl,
 		gpointer data);
 
@@ -158,6 +160,10 @@
 	{ "_NETSCAPE_URL", 0, 1 }
 };
 
+static const GtkTargetEntry source_target_table[] = {
+	{ "application/x-delete-me", 0, 0 }
+};
+
 static void totem_playlist_class_init (TotemPlaylistClass *class);
 static void totem_playlist_init       (TotemPlaylist      *playlist);
 
@@ -365,6 +371,14 @@
 }
 
 static void
+delete_cb (GtkWidget        *widget,
+	   GdkDragContext   *context,
+	   gpointer          data)
+{
+	playlist_remove_files (TOTEM_PLAYLIST (data));
+}
+
+static void
 drop_cb (GtkWidget        *widget,
          GdkDragContext   *context, 
 	 gint              x,
@@ -1343,6 +1357,8 @@
 	/* Drag'n'Drop */
 	g_signal_connect (G_OBJECT (treeview), "drag_data_received",
 			G_CALLBACK (drop_cb), playlist);
+	g_signal_connect (G_OBJECT (treeview), "drag_data_delete",
+			G_CALLBACK (delete_cb), playlist);
         g_signal_connect (G_OBJECT (treeview), "button_press_event",
 			G_CALLBACK (button_press_cb), playlist);
         g_signal_connect (G_OBJECT (treeview), "button_release_event",
@@ -1355,6 +1371,11 @@
 	gtk_tree_view_enable_model_drag_dest (GTK_TREE_VIEW (treeview),
 					      target_table, G_N_ELEMENTS (target_table),
 					      GDK_ACTION_COPY | GDK_ACTION_MOVE);
+	gtk_tree_view_enable_model_drag_source (GTK_TREE_VIEW (treeview),
+						GDK_BUTTON1_MASK,
+						source_target_table,
+						G_N_ELEMENTS (source_target_table),
+						GDK_ACTION_MOVE);
 
 	playlist->priv->selection = selection;
 
