--- gtk+-2.10.13.orig/gdk/directfb/gdkevents-directfb.c	2007-07-06 13:59:37.000000000 +0200
+++ gtk+-2.10.13/gdk/directfb/gdkevents-directfb.c	2007-07-06 13:36:42.000000000 +0200
@@ -315,6 +315,23 @@
     impl->window->CreateEventBuffer (impl->window, &EventBuffer);
 }
 
+void
+gdk_directfb_event_windows_remove (GdkWindow *window)
+{
+  GdkWindowImplDirectFB *impl;
+
+  g_return_if_fail (GDK_IS_WINDOW (window));
+
+  impl = GDK_WINDOW_IMPL_DIRECTFB (GDK_WINDOW_OBJECT (window)->impl);
+
+  if (!impl->window)
+    return;
+
+  if (EventBuffer)
+    impl->window->DetachEventBuffer (impl->window, EventBuffer);
+/* FIXME: should we warn if (! EventBuffer) ? */
+}
+
 GdkWindow *
 gdk_directfb_child_at (GdkWindow *window,
                        gint      *winx,
--- gtk+-2.10.13.orig/gdk/directfb/gdkprivate-directfb.h	2007-07-06 13:59:37.000000000 +0200
+++ gtk+-2.10.13/gdk/directfb/gdkprivate-directfb.h	2007-07-06 13:44:14.000000000 +0200
@@ -231,6 +231,7 @@
                                        gint          height);
 
 void       gdk_directfb_event_windows_add (GdkWindow *window);
+void       gdk_directfb_event_windows_remove (GdkWindow *window);
 
 GdkGrabStatus gdk_directfb_pointer_grab   (GdkWindow           *window,
                                            gint                 owner_events,
--- gtk+-2.10.13.orig/gdk/directfb/gdkwindow-directfb.c	2007-07-06 13:59:37.000000000 +0200
+++ gtk+-2.10.13/gdk/directfb/gdkwindow-directfb.c	2007-07-06 13:56:51.000000000 +0200
@@ -605,6 +605,8 @@
 
   _gdk_selection_window_destroyed (window);
 
+  gdk_directfb_event_windows_remove (window);
+
   if (window == _gdk_directfb_pointer_grab_window)
     gdk_pointer_ungrab (GDK_CURRENT_TIME);
   if (window == _gdk_directfb_keyboard_grab_window)
