diff -u gtk+-2.24.10_orig/gtk/gtkfixed.c gtk+-2.24.10_mod/gtk/gtkfixed.c
--- gtk+-2.24.10_orig/gtk/gtkfixed.c	2011-08-16 03:30:52.000000000 +0100
+++ gtk+-2.24.10_mod/gtk/gtkfixed.c	2013-05-30 15:36:17.182433919 +0100
@@ -162,9 +162,10 @@
   child_info->x = x;
   child_info->y = y;
 
-  gtk_widget_set_parent (widget, GTK_WIDGET (fixed));
-
-  fixed->children = g_list_append (fixed->children, child_info);
+  if (gtk_widget_set_parent (widget, GTK_WIDGET (fixed)))
+  {
+      fixed->children = g_list_append (fixed->children, child_info);
+  }
 }
 
 static void
diff -u gtk+-2.24.10_orig/gtk/gtkwidget.c gtk+-2.24.10_mod/gtk/gtkwidget.c
--- gtk+-2.24.10_orig/gtk/gtkwidget.c	2011-08-16 03:30:52.000000000 +0100
+++ gtk+-2.24.10_mod/gtk/gtkwidget.c	2013-05-30 15:36:17.182433919 +0100
@@ -6377,7 +6377,7 @@
  * to reflect its new location. The opposite function is
  * gtk_widget_unparent().
  **/
-void
+gboolean
 gtk_widget_set_parent (GtkWidget *widget,
 		       GtkWidget *parent)
 {
@@ -6389,12 +6389,12 @@
   if (widget->parent != NULL)
     {
       g_warning ("Can't set a parent on widget which has a parent\n");
-      return;
+      return FALSE;
     }
   if (gtk_widget_is_toplevel (widget))
     {
       g_warning ("Can't set a parent on a toplevel widget\n");
-      return;
+      return FALSE;
     }
 
   /* keep this function in sync with gtk_menu_attach_to_widget()
@@ -6434,6 +6434,8 @@
 
       gtk_widget_queue_resize (widget);
     }
+
+  return TRUE;
 }
 
 /**
@@ -8911,6 +8913,7 @@
   gtk_style_detach (widget->style);
   if (gtk_widget_get_has_window (widget))
     {
+      gtk_grab_remove ( widget );
       gdk_window_set_user_data (widget->window, NULL);
       gdk_window_destroy (widget->window);
       widget->window = NULL;
diff -u gtk+-2.24.10_orig/gtk/gtkwidget.h gtk+-2.24.10_mod/gtk/gtkwidget.h
--- gtk+-2.24.10_orig/gtk/gtkwidget.h	2011-08-16 03:30:52.000000000 +0100
+++ gtk+-2.24.10_mod/gtk/gtkwidget.h	2013-05-30 15:36:17.182433919 +0100
@@ -994,7 +994,7 @@
 void                  gtk_widget_set_redraw_on_allocate (GtkWidget    *widget,
 							 gboolean      redraw_on_allocate);
 
-void                  gtk_widget_set_parent             (GtkWidget    *widget,
+gboolean              gtk_widget_set_parent             (GtkWidget    *widget,
 							 GtkWidget    *parent);
 GtkWidget           * gtk_widget_get_parent             (GtkWidget    *widget);
