Index: gtk+//ChangeLog
===================================================================
RCS file: /export/cvs/gnome-2.0/gtk+/ChangeLog,v
retrieving revision 1.42
diff -p -u -5 -r1.42 ChangeLog
--- gtk+//ChangeLog	2002/04/27 21:18:12	1.42
+++ gtk+//ChangeLog	2002/04/29 05:12:55
@@ -1,5 +1,9 @@
+2002-04-29  Rajkumar Sivasamy  <rajkumar.siva@wipro.com>
+
+	* gtkmenushell.c: Fix for keynav bug #53544.
+
 2002-04-27  Anders Carlsson  <andersca@gnu.org>
 
 	* gdk/x11/gdkpixmap-x11.c (gdk_pixmap_foreign_new_for_display): 
 	Use GDK_DISPLAY_XDISPLAY instead of GDK_SCREEN_XDISPLAY since
 	we pass in a GdkDisplay * in the macro.
Index: gtk+//gtk/gtkmenushell.c
===================================================================
RCS file: /export/cvs/gnome-2.0/gtk+/gtk/gtkmenushell.c,v
retrieving revision 1.3
diff -p -u -5 -r1.3 gtkmenushell.c
--- gtk+//gtk/gtkmenushell.c	2002/04/11 23:50:26	1.3
+++ gtk+//gtk/gtkmenushell.c	2002/04/29 05:12:57
@@ -28,10 +28,11 @@
 
 #include "gdk/gdkkeysyms.h"
 #include "gtkbindings.h"
 #include "gtkmain.h"
 #include "gtkmarshalers.h"
+#include "gtkmenu.h"
 #include "gtkmenubar.h"
 #include "gtkmenuitem.h"
 #include "gtkmenushell.h"
 #include "gtksignal.h"
 #include "gtktearoffmenuitem.h"
@@ -1046,11 +1047,14 @@ gtk_real_menu_shell_move_current (GtkMen
     case GTK_MENU_DIR_PARENT:
       if (parent_menu_shell)
 	{
 	  if (GTK_MENU_SHELL_GET_CLASS (parent_menu_shell)->submenu_placement == 
 		       GTK_MENU_SHELL_GET_CLASS (menu_shell)->submenu_placement)
-	    gtk_menu_shell_deselect (menu_shell);
+	    {
+	      gtk_menu_shell_deselect (menu_shell);
+	      gtk_widget_hide ( GTK_MENU (menu_shell)->toplevel);
+	    }    
 	  else 
 	    {
 	      gtk_menu_shell_move_selected (parent_menu_shell, -1);
 	      gtk_menu_shell_select_submenu_first (parent_menu_shell); 
 	    }
@@ -1061,10 +1065,12 @@ gtk_real_menu_shell_move_current (GtkMen
       if (menu_shell->active_menu_item &&
 	  _gtk_menu_item_is_selectable (menu_shell->active_menu_item) &&
 	  GTK_MENU_ITEM (menu_shell->active_menu_item)->submenu)
 	{
 	  gtk_menu_shell_select_submenu_first (menu_shell);
+	  gtk_widget_show (GTK_MENU (GTK_MENU_ITEM (menu_shell->active_menu_item)->submenu)->toplevel);
+
 	}
       else
 	{
 	  /* Try to find a menu running the opposite direction */
 	  while (parent_menu_shell && 
@@ -1123,14 +1129,19 @@ static void
 gtk_real_menu_shell_cancel (GtkMenuShell      *menu_shell)
 {
   /* Unset the active menu item so gtk_menu_popdown() doesn't see it.
    */
   gtk_menu_shell_deselect (menu_shell);
-  
-  gtk_menu_shell_deactivate (menu_shell);
-  gtk_signal_emit (GTK_OBJECT (menu_shell), menu_shell_signals[SELECTION_DONE]);
-}
+
+  if (menu_shell->parent_menu_shell)
+    gtk_widget_hide (GTK_MENU (menu_shell)->toplevel);
+  else
+    {
+      gtk_menu_shell_deactivate (menu_shell);
+      gtk_signal_emit (GTK_OBJECT (menu_shell), menu_shell_signals[SELECTION_DONE]);
+    }  
+} 
 
 static void
 gtk_real_menu_shell_cycle_focus (GtkMenuShell      *menu_shell,
 				 GtkDirectionType   dir)
 {
