Fixes behavior when menu is opened by kerboard and later navigate by mouse
authorEveraldo Canuto <everaldo@mono-cvs.ximian.com>
Wed, 22 Nov 2006 06:39:53 +0000 (06:39 -0000)
committerEveraldo Canuto <everaldo@mono-cvs.ximian.com>
Wed, 22 Nov 2006 06:39:53 +0000 (06:39 -0000)
svn path=/trunk/mcs/; revision=68321

mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/System.Windows.Forms/MenuAPI.cs

index 9abbbcfdcbe7914dd00fb5fcb8b40ebddc9b92e2..6b99a7cac1749b5bf4965fe0aa145ebef4c8b517 100644 (file)
@@ -1,3 +1,8 @@
+2006-11-22  Everaldo Canuto  <everaldo@simios.org>
+
+       * MenuAPI.cs: Fixes behavior when menu is opened by kerboard
+       and later navigate by mouse. Fixes #79528.
+
 2006-11-21  Everaldo Canuto  <everaldo@simios.org>
 
        * ToolBar.cs: Set default value for TabStop to false in
index c322ab951d83b6e242506c0155c9dd765ca3f993..ea326968fc689f10d3723de221e4b4564bc21448 100644 (file)
@@ -195,7 +195,7 @@ namespace System.Windows.Forms {
                void MoveSelection (MenuItem item)
                {
                        if (item == null) {
-                               if (CurrentMenu.SelectedItem.IsPopup)
+                               if (CurrentMenu.SelectedItem.IsPopup || (keynav_state == KeyNavState.Navigating))
                                        return;
                                MenuItem old_item = CurrentMenu.SelectedItem;
                                if (CurrentMenu != TopMenu)
@@ -206,6 +206,7 @@ namespace System.Windows.Forms {
                                        DeselectItem (CurrentMenu.SelectedItem);
                                CurrentMenu = item.Parent;
                                SelectItem (CurrentMenu, item, active && item.IsPopup);
+                               keynav_state = KeyNavState.Idle;
                        }
                }
 
@@ -521,10 +522,13 @@ namespace System.Windows.Forms {
                        if (item == null)
                                return false;
 
+                       active = true;
+                       grab_control.ActiveTracker = this;
+                       
                        SelectItem (CurrentMenu, item, true);
                        if (item.IsPopup) {
-                               SelectItem (item, item.MenuItems [0], false);
                                CurrentMenu = item;
+                               SelectItem (item, item.MenuItems [0], false);
                        }
                        return true;
                }