diff -EbBu gtk+-2.8.17.orig/gtk/gtkmenubar.c gtk+-2.8.17/gtk/gtkmenubar.c
--- gtk+-2.8.17.orig/gtk/gtkmenubar.c	2005-07-04 14:51:56.000000000 +0800
+++ gtk+-2.8.17/gtk/gtkmenubar.c	2006-04-29 16:54:12.000000000 +0800
@@ -84,6 +84,12 @@
 static void gtk_menu_bar_move_current      (GtkMenuShell     *menu_shell,
                                             GtkMenuDirectionType direction);
 					    
+static gint gtk_menu_bar_enter_notify      (GtkWidget         *widget,
+                                            GdkEventCrossing  *event);
+static gint gtk_menu_bar_leave_notify      (GtkWidget         *widget,
+                                            GdkEventCrossing  *event);
+static void gtk_menu_bar_deactivate        (GtkMenuShell *menu_shell,
+                                            gpointer      user_data);
 
 static GtkShadowType get_shadow_type   (GtkMenuBar      *menubar);
 
@@ -141,6 +147,13 @@
   widget_class->expose_event = gtk_menu_bar_expose;
   widget_class->hierarchy_changed = gtk_menu_bar_hierarchy_changed;
   
+  /* 2006.04.29 Added by Hong Jen Yee */
+#ifdef G_OS_WIN32   /* This is currently for Win32 only */
+  widget_class->enter_notify_event = gtk_menu_bar_enter_notify;
+  widget_class->leave_notify_event = gtk_menu_bar_leave_notify;
+  menu_shell_class->deactivate = gtk_menu_bar_deactivate;
+#endif
+  
   menu_shell_class->submenu_placement = GTK_TOP_BOTTOM;
   menu_shell_class->get_popup_delay = gtk_menu_bar_get_popup_delay;
   menu_shell_class->move_current = gtk_menu_bar_move_current;
@@ -967,5 +980,131 @@
     }
 }
 
+/* 2006.04.29 Added by Hong Jen Yee */
+#ifdef G_OS_WIN32   /* This is currently for Win32 only */
+
+gint gtk_menu_bar_enter_notify (GtkWidget        *widget,
+                                GdkEventCrossing *event)
+{
+  GtkMenuBar *menu_bar;
+  GtkMenuShell *menu_shell;
+  GtkWidget *menu_item;
+
+  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);
+  menu_bar = GTK_MENU_BAR(widget);
+  menu_item = gtk_get_event_widget ((GdkEvent*) event);
+
+  if ( !menu_item || !GTK_IS_MENU_ITEM (menu_item) )
+  {
+    if( menu_bar->prelight_menu_item )
+    {
+      if (!menu_shell->active) {
+        gtk_widget_set_state( menu_bar->prelight_menu_item, GTK_STATE_NORMAL );
+        menu_bar->prelight_menu_item = NULL;
+        return TRUE;
+      }
+      menu_bar->prelight_menu_item = NULL;
+    }
+    return ((GtkWidgetClass*)parent_class)->enter_notify_event( widget, event );
+  }
+
+  if ((menu_item->parent == (GtkWidget*)menu_bar) &&
+      (menu_bar->prelight_menu_item != menu_item) &&
+      GTK_IS_MENU_ITEM (menu_item))
+    {
+      if ( GTK_WIDGET_STATE (menu_item) != GTK_STATE_PRELIGHT )
+	{
+          if (!menu_shell->active)
+            {
+              if( menu_bar->prelight_menu_item ) {
+                gtk_widget_set_state( menu_bar->prelight_menu_item, GTK_STATE_NORMAL );
+              }
+              gtk_widget_set_state( menu_item, GTK_STATE_PRELIGHT );
+              menu_bar->prelight_menu_item = menu_item;
+              return TRUE;
+            }
+          menu_bar->prelight_menu_item = menu_item;
+	}
+    }
+  return ((GtkWidgetClass*)parent_class)->enter_notify_event( widget, event );
+}
+
+static gint
+gtk_menu_bar_leave_notify (GtkWidget        *widget,
+                           GdkEventCrossing *event)
+{
+  GtkMenuShell *menu_shell;
+  GtkMenuBar *menu_bar;
+  GtkMenuItem *menu_item;
+  GtkWidget *event_widget;
+
+  g_return_val_if_fail (GTK_IS_MENU_SHELL (widget), FALSE);
+  g_return_val_if_fail (event != NULL, FALSE);
+
+  if (GTK_WIDGET_VISIBLE (widget))
+    {
+      menu_shell = GTK_MENU_SHELL (widget);
+      menu_bar = GTK_MENU_BAR (widget);
+
+      event_widget = gtk_get_event_widget ((GdkEvent*) event);
+
+      if (!event_widget || !GTK_IS_MENU_ITEM (event_widget))
+      {
+        if( menu_bar->prelight_menu_item )
+        {
+          if( !menu_shell->active ) {
+            gtk_widget_set_state( menu_bar->prelight_menu_item, GTK_STATE_NORMAL );
+            menu_bar->prelight_menu_item = NULL;
+            return TRUE;
+          }
+          menu_bar->prelight_menu_item = NULL;
+        }
+        return ((GtkWidgetClass*)parent_class)->leave_notify_event( widget, event );
+      }
+
+      menu_item = GTK_MENU_ITEM (event_widget);
+
+      if (!_gtk_menu_item_is_selectable (event_widget))
+	return TRUE;
+
+      if( !menu_shell->active )
+        {
+          if ((menu_bar->prelight_menu_item == event_widget) &&
+	      (menu_item->submenu == NULL))
+	    {
+	      if ((event->detail != GDK_NOTIFY_INFERIOR) &&
+	          (GTK_WIDGET_STATE (menu_item) != GTK_STATE_NORMAL))
+	        {
+                  gtk_widget_set_state( widget, GTK_STATE_NORMAL );
+                  menu_bar->prelight_menu_item = NULL;
+	        }
+	    }
+          return TRUE;
+        }
+    }
+  return ((GtkWidgetClass*)parent_class)->leave_notify_event( widget, event );
+}
+
+void 
+gtk_menu_bar_deactivate (GtkMenuShell *menu_shell,
+                         gpointer      user_data)
+{
+  GtkMenuBar *menu_bar;
+  GtkWidget *active_menu_item;
+
+  active_menu_item = menu_shell->active_menu_item;
+  ((GtkMenuShellClass*)parent_class)->deactivate( menu_shell, user_data );
+  menu_bar = GTK_MENU_BAR (menu_shell);
+  if( menu_bar->prelight_menu_item )
+  {
+    gtk_widget_set_state( menu_bar->prelight_menu_item, GTK_STATE_PRELIGHT );
+  }
+}
+
+#endif
+
 #define __GTK_MENU_BAR_C__
 #include "gtkaliasdef.c"
diff -EbBu gtk+-2.8.17.orig/gtk/gtkmenubar.h gtk+-2.8.17/gtk/gtkmenubar.h
--- gtk+-2.8.17.orig/gtk/gtkmenubar.h	2005-06-21 13:35:42.000000000 +0800
+++ gtk+-2.8.17/gtk/gtkmenubar.h	2006-04-29 03:12:24.000000000 +0800
@@ -48,6 +48,9 @@
 struct _GtkMenuBar
 {
   GtkMenuShell menu_shell;
+#ifdef G_OS_WIN32
+  GtkWidget *prelight_menu_item;
+#endif
 };
 
 struct _GtkMenuBarClass
