Index: gtk/gtkdnd.c
===================================================================
--- gtk/gtkdnd.c	(revision 21631)
+++ gtk/gtkdnd.c	(working copy)
@@ -3536,7 +3536,7 @@
 	      selection_data.target = pair->target;
 	      selection_data.data = NULL;
 	      selection_data.length = -1;
-	      
+
 	      g_signal_emit_by_name (info->widget, "drag-data-get",
 				     info->context, &selection_data,
 				     pair->info,
@@ -3687,6 +3687,7 @@
 				    selection_data->target, 
 				    &target_info))
 	    {
+	      info->context.drop_occurred = ??;
 	      g_signal_emit_by_name (info->widget, "drag-data-get",
 				     info->context,
 				     selection_data,
Index: gdk/gdkdnd.h
===================================================================
--- gdk/gdkdnd.h	(revision 21631)
+++ gdk/gdkdnd.h	(working copy)
@@ -167,6 +167,7 @@
 void            gdk_drag_abort       (GdkDragContext *context,
 				      guint32         time_);
 gboolean        gdk_drag_drop_succeeded (GdkDragContext *context);
+gboolean        gdk_drag_drop_occurred  (GdkDragContext *context);
 
 G_END_DECLS
 
Index: gdk/directfb/gdkdnd-directfb.c
===================================================================
--- gdk/directfb/gdkdnd-directfb.c	(revision 21631)
+++ gdk/directfb/gdkdnd-directfb.c	(working copy)
@@ -114,6 +114,8 @@
   parent_class = g_type_class_peek_parent (klass);
 
   object_class->finalize = gdk_drag_context_finalize;
+
+  gdk_drag_context_general_class_init (dragcontext);
 }
 
 GType
Index: gdk/quartz/gdkdnd-quartz.c
===================================================================
--- gdk/quartz/gdkdnd-quartz.c	(revision 21631)
+++ gdk/quartz/gdkdnd-quartz.c	(working copy)
@@ -50,6 +50,8 @@
   parent_class = g_type_class_peek_parent (klass);
 
   object_class->finalize = gdk_drag_context_finalize;
+
+  gdk_drag_context_general_class_init (dragcontext);
 }
 
 GType
Index: gdk/gdk.symbols
===================================================================
--- gdk/gdk.symbols	(revision 21631)
+++ gdk/gdk.symbols	(working copy)
@@ -521,6 +521,7 @@
 #endif
 gdk_drag_drop
 gdk_drag_drop_succeeded
+gdk_drag_drop_occurred
 gdk_drag_find_window_for_screen
 gdk_drag_get_protocol_for_display
 gdk_drag_get_selection
Index: gdk/win32/gdkdnd-win32.c
===================================================================
--- gdk/win32/gdkdnd-win32.c	(revision 21631)
+++ gdk/win32/gdkdnd-win32.c	(working copy)
@@ -148,6 +148,8 @@
 #endif
 
   contexts = g_list_prepend (contexts, dragcontext);
+
+  gdk_drag_context_general_class_init (dragcontext);
 }
 
 static void
Index: gdk/x11/gdkdnd-x11.c
===================================================================
--- gdk/x11/gdkdnd-x11.c	(revision 21631)
+++ gdk/x11/gdkdnd-x11.c	(working copy)
@@ -156,6 +156,7 @@
   dragcontext->windowing_data = private;
 
   contexts = g_list_prepend (contexts, dragcontext);
+  
 }
 
 static void
@@ -166,6 +167,8 @@
   object_class->finalize = gdk_drag_context_finalize;
 
   g_type_class_add_private (object_class, sizeof (GdkDragContextPrivateX11));
+
+  gdk_drag_context_general_class_init (dragcontext);
 }
 
 static void
Index: gdk/gdkdnd.c
===================================================================
--- gdk/gdkdnd.c	(revision 21631)
+++ gdk/gdkdnd.c	(working copy)
@@ -30,6 +30,22 @@
 #include <gdkdisplay.h>
 #include "gdkalias.h"
 
+#define GDK_DRAG_CONTEXT_GET_PRIVATE_DROP_OCCURRED(o)  \
+   (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDK_DRAG_CONTEXT, GdkDragContextPrivateDropOccurred))
+
+
+typedef struct _GdkDragContextPrivateDropOccurred GdkDragContextPrivateDropOccurred;
+
+struct _GdkDragContextPrivateDropOccurred {
+  gboolean drop_occurred;
+}
+
+void
+gdk_drag_context_general_class_init (GdkDragContextClass *klass)
+{
+  g_type_class_add_private (klass, sizeof (GdkDragContextPrivateDropOccurred));
+}
+
 /**
  * gdk_drag_find_window:
  * @context: a #GdkDragContext.
@@ -77,5 +93,15 @@
   return gdk_drag_get_protocol_for_display (gdk_display_get_default (), xid, protocol);
 }
 
+
+gboolean
+gdk_drag_context_drop_occurred (GdkDragContext *context)
+{
+  GdkDragContextPrivateDropOccurred *priv = GDK_DRAG_CONTEXT_GET_PRIVATE_DROP_OCCURRED (my_object);
+
+  return priv->drop_occurred;
+}
+
+
 #define __GDK_DND_C__
 #include "gdkaliasdef.c"
