? gdk/gdk-win32-2.0s.lib
? gdk/gdkconfig.h
? gdk/gdkenumtypes.c
? gdk/gdkenumtypes.h
? gdk/gdkwin32.h
? gdk/libgdk-win32-2.0-0.dll
? gdk/libgdk-win32-2.0-0.exp
? gdk/libgdk-win32-2.0-0.ilk
? gdk/libgdk-win32-2.0-0.lib
? gdk/libgdk-win32-2.0-0.pdb
? gdk/vc60.pdb
? gdk/win32/gdk-win32.lib
? gdk/win32/gdk.res
? gdk/win32/vc60.pdb
? gdk/win32/rc/gdk.rc
? gtk/generated
? gtk/gtk-query-immodules-2.0.exp
? gtk/gtk-query-immodules-2.0.ilk
? gtk/gtk-query-immodules-2.0.lib
? gtk/gtk-query-immodules-2.0.pdb
? gtk/gtk-win32.rc
? gtk/gtktypebuiltins.c
? gtk/gtktypebuiltins.h
? gtk/gtkversion.h
? gtk/libgtk-win32-2.0-0.dll
? gtk/libgtk-win32-2.0-0.exp
? gtk/libgtk-win32-2.0-0.ilk
? gtk/libgtk-win32-2.0-0.lib
? gtk/libgtk-win32-2.0-0.map
? gtk/libgtk-win32-2.0-0.pdb
? gtk/vc60.pdb
? gtk/xgen-gtbc
? gtk/stock-icons/gtkstockpixbufs.h
Index: gdk/win32/gdkevents-win32.c
===================================================================
RCS file: /home/cvs/src/ide/external/gtk2/gtk+/gdk/win32/gdkevents-win32.c,v
retrieving revision 1.4
diff -u -p -r1.4 gdkevents-win32.c
--- gdk/win32/gdkevents-win32.c	5 Apr 2004 23:25:54 -0000	1.4
+++ gdk/win32/gdkevents-win32.c	22 Apr 2004 22:27:07 -0000
@@ -2822,22 +2822,31 @@ gdk_event_translate (GdkDisplay *display
 
     case WM_SETFOCUS:
     case WM_KILLFOCUS:
-      if (p_grab_window != NULL && !p_grab_owner_events && !(p_grab_mask & GDK_FOCUS_CHANGE_MASK))
-	break;
+      if ((((GdkWindowObject *) window)->event_mask & GDK_FOCUS_CHANGE_MASK)
+          && !GDK_WINDOW_DESTROYED (window)) 
+	{
+	  event = gdk_event_new (GDK_FOCUS_CHANGE);
+	  event->focus_change.window = window;
+	  event->focus_change.in = (msg->message == WM_SETFOCUS);
 
-      if (!(((GdkWindowObject *) window)->event_mask & GDK_FOCUS_CHANGE_MASK))
-	break;
+          append_event (display, event);
 
-      if (GDK_WINDOW_DESTROYED (window))
-	break;
+	  return_val = TRUE;
+	}
 
-      event = gdk_event_new (GDK_FOCUS_CHANGE);
-      event->focus_change.window = window;
-      event->focus_change.in = (msg->message == WM_SETFOCUS);
+      if (p_grab_window != NULL && !GDK_WINDOW_DESTROYED (p_grab_window)
+          && p_grab_mask & GDK_FOCUS_CHANGE_MASK)
+	{
+	  event = gdk_event_new (GDK_FOCUS_CHANGE);
+	  event->focus_change.window = p_grab_window;
+	  event->focus_change.in = (msg->message == WM_SETFOCUS);
 
-      append_event (display, event);
+          append_event (display, event);
+
+	  return_val = TRUE;
+	}
+	  
 
-      return_val = TRUE;
       break;
 
     case WM_ERASEBKGND:
Index: gtk/gtkmenu.c
===================================================================
RCS file: /home/cvs/src/ide/external/gtk2/gtk+/gtk/gtkmenu.c,v
retrieving revision 1.2
diff -u -p -r1.2 gtkmenu.c
--- gtk/gtkmenu.c	14 Nov 2003 17:45:09 -0000	1.2
+++ gtk/gtkmenu.c	22 Apr 2004 22:27:10 -0000
@@ -804,7 +804,7 @@ popup_grab_on_window (GdkWindow *window,
   if ((gdk_pointer_grab (window, TRUE,
 			 GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
 			 GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK |
-			 GDK_POINTER_MOTION_MASK,
+			 GDK_POINTER_MOTION_MASK | GDK_FOCUS_CHANGE_MASK,
 			 NULL, NULL, activate_time) == 0))
     {
       if (gdk_keyboard_grab (window, TRUE,
Index: gtk/gtkmenushell.c
===================================================================
RCS file: /home/cvs/src/ide/external/gtk2/gtk+/gtk/gtkmenushell.c,v
retrieving revision 1.2
diff -u -p -r1.2 gtkmenushell.c
--- gtk/gtkmenushell.c	14 Nov 2003 17:45:09 -0000	1.2
+++ gtk/gtkmenushell.c	22 Apr 2004 22:27:11 -0000
@@ -123,6 +123,8 @@ static gint gtk_menu_shell_enter_notify 
 					      GdkEventCrossing  *event);
 static gint gtk_menu_shell_leave_notify      (GtkWidget         *widget,
 					      GdkEventCrossing  *event);
+static gboolean gtk_menu_shell_focus_out_event (GtkWidget     *widget,
+                                                GdkEventFocus *event);
 static void gtk_menu_shell_add               (GtkContainer      *container,
 					      GtkWidget         *widget);
 static void gtk_menu_shell_remove            (GtkContainer      *container,
@@ -206,6 +208,7 @@ gtk_menu_shell_class_init (GtkMenuShellC
   widget_class->key_press_event = gtk_menu_shell_key_press;
   widget_class->enter_notify_event = gtk_menu_shell_enter_notify;
   widget_class->leave_notify_event = gtk_menu_shell_leave_notify;
+  widget_class->focus_out_event = gtk_menu_shell_focus_out_event;
 
   container_class->add = gtk_menu_shell_add;
   container_class->remove = gtk_menu_shell_remove;
@@ -674,6 +677,25 @@ gtk_menu_shell_leave_notify (GtkWidget  
     }
 
   return TRUE;
+}
+
+static gboolean
+gtk_menu_shell_focus_out_event (GtkWidget     *widget,
+                                GdkEventFocus *event)
+{
+  GtkMenuShell *menu_shell;
+
+  g_return_val_if_fail (GTK_IS_MENU_SHELL (widget), FALSE);
+  g_return_val_if_fail (event != NULL, FALSE);
+
+  menu_shell = GTK_MENU_SHELL (widget);
+  if (menu_shell->active)
+    gtk_menu_shell_deactivate (menu_shell);
+
+  if (parent_class && GTK_WIDGET_CLASS(parent_class)->focus_out_event)
+    GTK_WIDGET_CLASS(parent_class)->focus_out_event (widget, event);
+
+  return FALSE;
 }
 
 static void
