2007-01-26 Everaldo Canuto <everaldo@simios.org>
authorEveraldo Canuto <everaldo@mono-cvs.ximian.com>
Sat, 27 Jan 2007 00:47:42 +0000 (00:47 -0000)
committerEveraldo Canuto <everaldo@mono-cvs.ximian.com>
Sat, 27 Jan 2007 00:47:42 +0000 (00:47 -0000)
* MenuAPI.cs: Fixed kerboard grab problem when "enter"key is pressed,
also remove ProcessArrowKey and put the code inside ProcessKeys.

svn path=/trunk/mcs/; revision=71772

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

index ad72616008b58a99ff11a73752933210107b9f87..9bb57ea0146236fc3bd5e06a995a446172e7d89b 100644 (file)
@@ -1,3 +1,8 @@
+2007-01-26  Everaldo Canuto  <everaldo@simios.org>
+
+       * MenuAPI.cs: Fixed kerboard grab problem when "enter"key is pressed,
+       also remove ProcessArrowKey and put the code inside ProcessKeys.
+
 2007-01-26  Jonathan Pobst  <monkey@jpobst.com>
 
        * PaddingConverter.cs: Added.
index aa1a8c8a1f842a980214e45fb945ac9d664afbc2..ee5aa7e0aa72efece470f4c132a747ca2a1cf4ea 100644 (file)
@@ -22,6 +22,7 @@
 // Authors:
 //     Jordi Mas i Hernandez, jordi@ximian.com
 //     Mike Kestner  <mkestner@novell.com>
+//     Everaldo Canuto  <ecanuto@novell.com>
 //
 
 using System.Collections;
@@ -308,7 +309,7 @@ namespace System.Windows.Forms {
                        if (!item.Enabled)
                                return;
                                
-                       if (item.IsPopup) {                             
+                       if (item.IsPopup) {
                                ShowSubPopup (menu, item);
                        } else {
                                Deactivate ();
@@ -558,23 +559,73 @@ namespace System.Windows.Forms {
                        return true;
                }
 
-               void ProcessArrowKey (Keys keyData)
+               Hashtable shortcuts = new Hashtable ();
+               
+               public void AddShortcuts (MenuItem item)
+               {
+                       foreach (MenuItem child in item.MenuItems) {
+                               AddShortcuts (child);
+                               if (child.Shortcut != Shortcut.None)
+                                       shortcuts [(int)child.Shortcut] = child;
+                       }
+
+                       if (item.Shortcut != Shortcut.None)
+                               shortcuts [(int)item.Shortcut] = item;
+               }
+
+               public void RemoveShortcuts (MenuItem item)
                {
+                       foreach (MenuItem child in item.MenuItems) {
+                               RemoveShortcuts (child);
+                               if (child.Shortcut != Shortcut.None)
+                                       shortcuts.Remove ((int)child.Shortcut);
+                       }
+
+                       if (item.Shortcut != Shortcut.None)
+                               shortcuts.Remove ((int)item.Shortcut);
+               }
+
+               bool ProcessShortcut (Keys keyData)
+               {
+                       MenuItem item = shortcuts [(int)keyData] as MenuItem;
+                       if (item == null)
+                               return false;
+
+                       Deactivate ();
+                       item.PerformClick ();
+                       return true;
+               }
+
+               public bool ProcessKeys (ref Message msg, Keys keyData)
+               {
+                       if ((Msg)msg.Msg != Msg.WM_SYSKEYUP && ProcessShortcut (keyData))
+                               return true;
+                       else if ((keyData & Keys.KeyCode) == Keys.Menu && TopMenu is MainMenu) {
+                               ProcessMenuKey ((Msg) msg.Msg);
+                               return true;
+                       } else if ((keyData & Keys.Alt) == Keys.Alt)
+                               return ProcessMnemonic (msg, keyData);
+                       else if ((Msg)msg.Msg == Msg.WM_SYSKEYUP)
+                               return false;
+                       else if (!Navigating)
+                               return false;
+
                        MenuItem item;
+                       
                        switch (keyData) {
                        case Keys.Up:
                                if (CurrentMenu is MainMenu)
-                                       return;
+                                       return true;
                                else if (CurrentMenu.MenuItems.Count == 1 && CurrentMenu.parent_menu == TopMenu) {
                                        DeselectItem (CurrentMenu.SelectedItem);
                                        CurrentMenu = TopMenu;
-                                       return;
+                                       return true;
                                }
                                item = GetNextItem (CurrentMenu, ItemNavigation.Previous);
                                if (item != null)
                                        SelectItem (CurrentMenu, item, false);
                                break;
-
+                       
                        case Keys.Down:
                                if (CurrentMenu is MainMenu) {
                                        if (CurrentMenu.SelectedItem != null && CurrentMenu.SelectedItem.IsPopup) {
@@ -584,14 +635,15 @@ namespace System.Windows.Forms {
                                                SelectItem (item, item.MenuItems [0], false);
                                                CurrentMenu = item;
                                                active = true;
+                                               grab_control.ActiveTracker = this;
                                        }
-                                       return;
+                                       return true;
                                }
                                item = GetNextItem (CurrentMenu, ItemNavigation.Next);
                                if (item != null)
                                        SelectItem (CurrentMenu, item, false);
                                break;
-
+                       
                        case Keys.Right:
                                if (CurrentMenu is MainMenu) {
                                        item = GetNextItem (CurrentMenu, ItemNavigation.Next);
@@ -615,7 +667,7 @@ namespace System.Windows.Forms {
                                        }
                                }
                                break;
-
+                       
                        case Keys.Left:
                                if (CurrentMenu is MainMenu) {
                                        item = GetNextItem (CurrentMenu, ItemNavigation.Previous);
@@ -637,78 +689,28 @@ namespace System.Windows.Forms {
                                        CurrentMenu = CurrentMenu.parent_menu;
                                }
                                break;
-                       default:
-                               throw new ArgumentException ("Invalid keyData: " + keyData);
-                       }
-               }
 
-               Hashtable shortcuts = new Hashtable ();
-               
-               public void AddShortcuts (MenuItem item)
-               {
-                       foreach (MenuItem child in item.MenuItems) {
-                               AddShortcuts (child);
-                               if (child.Shortcut != Shortcut.None)
-                                       shortcuts [(int)child.Shortcut] = child;
-                       }
-
-                       if (item.Shortcut != Shortcut.None)
-                               shortcuts [(int)item.Shortcut] = item;
-               }
-
-               public void RemoveShortcuts (MenuItem item)
-               {
-                       foreach (MenuItem child in item.MenuItems) {
-                               RemoveShortcuts (child);
-                               if (child.Shortcut != Shortcut.None)
-                                       shortcuts.Remove ((int)child.Shortcut);
-                       }
-
-                       if (item.Shortcut != Shortcut.None)
-                               shortcuts.Remove ((int)item.Shortcut);
-               }
-
-               bool ProcessShortcut (Keys keyData)
-               {
-                       MenuItem item = shortcuts [(int)keyData] as MenuItem;
-                       if (item == null)
-                               return false;
-
-                       Deactivate ();
-                       item.PerformClick ();
-                       return true;
-               }
-
-               public bool ProcessKeys (ref Message msg, Keys keyData)
-               {
-                       if ((Msg)msg.Msg != Msg.WM_SYSKEYUP && ProcessShortcut (keyData))
-                               return true;
-                       else if ((keyData & Keys.KeyCode) == Keys.Menu && TopMenu is MainMenu) {
-                               ProcessMenuKey ((Msg) msg.Msg);
-                               return true;
-                       } else if ((keyData & Keys.Alt) == Keys.Alt)
-                               return ProcessMnemonic (msg, keyData);
-                       else if ((Msg)msg.Msg == Msg.WM_SYSKEYUP)
-                               return false;
-                       else if (!Navigating)
-                               return false;
-
-                       switch (keyData) {
-                       case Keys.Up:
-                       case Keys.Down:
-                       case Keys.Right:
-                       case Keys.Left:
-                               ProcessArrowKey (keyData);
+                       case Keys.Return:
+                               if (CurrentMenu is MainMenu) {
+                                       if (CurrentMenu.SelectedItem != null && CurrentMenu.SelectedItem.IsPopup) {
+                                               keynav_state = KeyNavState.Navigating;
+                                               item = CurrentMenu.SelectedItem;
+                                               ShowSubPopup (CurrentMenu, item);
+                                               SelectItem (item, item.MenuItems [0], false);
+                                               CurrentMenu = item;
+                                               active = true;
+                                               grab_control.ActiveTracker = this;
+                                       }
+                                       return true;
+                               }
+                       
+                               ExecFocusedItem (CurrentMenu, CurrentMenu.SelectedItem);
                                break;
                                
                        case Keys.Escape:
                                Deactivate ();
                                break;
 
-                       case Keys.Return:
-                               ExecFocusedItem (CurrentMenu, CurrentMenu.SelectedItem);
-                               break;
-
                        default:
                                ProcessMnemonic (msg, keyData);
                                break;