diff -ur gtk+-1.2.2/gtk/gtkwindow.c gtk+-1.2.2-new/gtk/gtkwindow.c
--- gtk+-1.2.2/gtk/gtkwindow.c	Wed Apr 14 05:20:09 1999
+++ gtk+-1.2.2-new/gtk/gtkwindow.c	Mon May 10 05:45:50 1999
@@ -1178,7 +1178,13 @@
   if (GTK_WIDGET_VISIBLE (widget))
     {
       window = GTK_WINDOW (widget);
-      if (window->focus_widget && !GTK_WIDGET_HAS_FOCUS (window->focus_widget))
+      /* We'll send a focus in event even when window->focus_widget
+       * already has focus. It's possible that the focus widget does
+       * not have IC focus, because IC focus can be lost every time
+       * a focus out event is sent for any editable widgets managed
+       * by gdk. (cf. gdk_im_end())
+       */
+      if (window->focus_widget)
 	{
 	  fevent.type = GDK_FOCUS_CHANGE;
 	  fevent.window = window->focus_widget->window;