Index: gtk/gtkdnd.c
===================================================================
RCS file: /cvs/gnome/gtk+/gtk/gtkdnd.c,v
retrieving revision 1.142
diff -u -r1.142 gtkdnd.c
--- gtk/gtkdnd.c	3 Jan 2006 15:38:31 -0000	1.142
+++ gtk/gtkdnd.c	3 Feb 2006 17:12:20 -0000
@@ -3938,16 +3938,28 @@
   if (event->button != info->button)
     return FALSE;
 
-  if ((info->context->action != 0) && (info->context->dest_window != NULL))
+  
+  if (info->context->dest_window && info->context->action)
     {
+      g_print ("drop action %d\n", info->context->action);
       gtk_drag_end (info, event->time);
       gtk_drag_drop (info, event->time);
     }
-  else
+  else if (info->context->dest_window && 
+	   gdk_window_get_type_hint (info->context->dest_window) == GDK_WINDOW_TYPE_HINT_DESKTOP)
     {
-      gtk_drag_cancel (info, event->time);
+      /* treat non-accepted drops on the background as 
+       * root window drops 
+       */
+      g_print ("convert to root drop\n");
+      info->context->protocol = GDK_DRAG_PROTO_ROOTWIN;
+      
+      gtk_drag_end (info, event->time);
+      gtk_drag_drop (info, event->time);
     }
-
+  else
+    gtk_drag_cancel (info, event->time);
+  
   return TRUE;
 }
 
