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;