Index: src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TrackInfoDisplay.cs
===================================================================
--- src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TrackInfoDisplay.cs	(revision 4840)
+++ src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/TrackInfoDisplay.cs	(working copy)
@@ -31,6 +31,7 @@
 using System.Collections.Generic;
 using Mono.Unix;
 
+using Gdk;
 using Gtk;
 using Cairo;
 
@@ -41,6 +42,7 @@
 using Banshee.Base;
 using Banshee.Collection;
 using Banshee.Collection.Gui;
+using Banshee.Gui.DragDrop;
 using Banshee.ServiceStack;
 using Banshee.MediaEngine;
 
@@ -102,6 +104,10 @@
         
         private uint idle_timeout_id = 0;
         private SingleActorStage stage = new SingleActorStage ();
+        
+        private static TargetEntry [] cover_art_dest_entries = new TargetEntry [] {
+            Banshee.Gui.DragDrop.DragDropTarget.UriList
+        };
 
         protected TrackInfoDisplay (IntPtr native) : base (native)
         {
@@ -121,6 +127,9 @@
                 PlayerEvent.StateChange);
                 
             WidgetFlags |= WidgetFlags.NoWindow;
+            
+            DragDataReceived += OnCoverArtDragDataReceived;
+            Gtk.Drag.DestSet(this, DestDefaults.All, cover_art_dest_entries, DragAction.Copy | DragAction.Move);
         }
         
         public override void Dispose ()
@@ -215,7 +224,33 @@
             
             return true;
         }
+        
+        private void OnCoverArtDragDataReceived (object o, DragDataReceivedArgs args)
+        {
+            bool success = false;
 
+            try {
+                string data = DragDropUtilities.SelectionDataToString(args.SelectionData);
+                string [] uri_list = DragDropUtilities.SplitSelectionData(data);
+                SafeUri uri = new SafeUri(uri_list[0]);
+                
+                string extension = "cover";
+                if (uri.ToString().EndsWith ("jpg", true, System.Globalization.CultureInfo.InvariantCulture) ||
+                    uri.ToString().EndsWith ("jpeg", true, System.Globalization.CultureInfo.InvariantCulture)) {
+                    extension = "jpg";
+                }
+    
+                string cover_filename = System.IO.Path.ChangeExtension (CoverArtSpec.GetPath (CurrentTrack.ArtworkId), extension);
+    
+                Banshee.IO.File.Copy (uri, new SafeUri (cover_filename), true);
+    
+                success = true;
+            } catch (Exception e) {
+                Log.Exception (e);
+            }
+            Gtk.Drag.Finish (args.Context, success, false, args.Time);
+        }
+
         protected virtual bool CanRenderIdle {
             get { return false; }
         }
