diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 4de3215..4e5d65a 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -5186,6 +5186,9 @@ gtk_window_propagate_key_event (GtkWindow        *window,
 
   widget = GTK_WIDGET (window);
   focus = window->focus_widget;
+
+  if (!G_IS_OBJECT(focus)) return FALSE;  /* 9.4.13/fp */
+
   if (focus)
     g_object_ref (focus);
   
@@ -5197,8 +5200,17 @@ gtk_window_propagate_key_event (GtkWindow        *window,
       
       if (gtk_widget_is_sensitive (focus))
         handled = gtk_widget_event (focus, (GdkEvent*) event);
-      
+
+      if (handled)  /* 05.04.14/fp */
+      {
+	  if (G_IS_OBJECT(focus)) g_object_unref(focus);
+	  return TRUE;
+      }
+
+      if (!G_IS_OBJECT(focus)) return handled;  /* 9.4.13/fp */
+
       parent = focus->parent;
+
       if (parent)
         g_object_ref (parent);
       
@@ -5530,7 +5542,8 @@ gtk_window_real_set_focus (GtkWindow *window,
       if (window->has_focus)
 	do_focus_change (window->focus_widget, TRUE);
 
-      g_object_notify (G_OBJECT (window->focus_widget), "is-focus");
+      if (window->focus_widget)  /* PR#102114 */
+	  g_object_notify (G_OBJECT (window->focus_widget), "is-focus");
     }
 
   /* If the default widget changed, a redraw will have been queued
