2007-05-24 Jonathan Pobst <monkey@jpobst.com>
authorJonathan Pobst <monkey@jpobst.com>
Thu, 24 May 2007 14:53:33 +0000 (14:53 -0000)
committerJonathan Pobst <monkey@jpobst.com>
Thu, 24 May 2007 14:53:33 +0000 (14:53 -0000)
* ContainerControl.cs: Don't check CanSelect before calling
ProcessMnemonic.
* ToolStrip.cs: Only do implicit mnemonics on MenuStrips.  Don't
release a KeyboardActive on click if it's not ours.

2007-05-24  Jonathan Pobst  <monkey@jpobst.com>

* ContainerControlTest.cs: Test to show ProcessMnemonic is called
regardless of CanSelect.

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

mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ContainerControl.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStrip.cs
mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ContainerControlTest.cs

index 8218076b7d83c93dc055a5bb84f41718e32c6f88..f0a0ee3dc9e8836c31d24b77eabf61bcdd09e2c7 100644 (file)
@@ -1,6 +1,13 @@
+2007-05-24  Jonathan Pobst  <monkey@jpobst.com>
+
+       * ContainerControl.cs: Don't check CanSelect before calling
+       ProcessMnemonic.
+       * ToolStrip.cs: Only do implicit mnemonics on MenuStrips.  Don't
+       release a KeyboardActive on click if it's not ours.
+
 2007-05-23  Andreia Gaita  <avidigal@novell.com>
 
-* ColumnHeader.cs: Add TypeConverter
+       * ColumnHeader.cs: Add TypeConverter
 
 2007-05-23  Everaldo Canuto  <ecanuto@novell.com>
 
index deac1d5644d6adc0055d5876a9510d3b5159c9a9..134f8497e440cafc7f75383fa426e7512124ba7f 100644 (file)
@@ -469,7 +469,7 @@ namespace System.Windows.Forms {
                                c = GetNextControl(c, true);
                                if (c != null) {
                                        // This is stupid. I want to be able to call c.ProcessMnemonic directly
-                                       if (c.CanSelect && c.ProcessControlMnemonic(charCode)) {
+                                       if (c.ProcessControlMnemonic(charCode)) {
                                                return(true);
                                        }
                                        continue;
index d4d4f5949b2ee16e438ef7ebf9759b179e5a36c8..d6f9dcbb06f63d80a56c4bed9197840e72554804 100644 (file)
@@ -740,7 +740,8 @@ namespace System.Windows.Forms
 
                protected virtual void OnItemClicked (ToolStripItemClickedEventArgs e)
                {
-                       ToolStripManager.SetActiveToolStrip (null);
+                       if (this.KeyboardActive)
+                               ToolStripManager.SetActiveToolStrip (null);
                        
                        ToolStripItemClickedEventHandler eh = (ToolStripItemClickedEventHandler)(Events [ItemClickedEvent]);
                        if (eh != null)
@@ -1068,9 +1069,10 @@ namespace System.Windows.Forms
                        string code = Char.ToUpper (charCode).ToString ();
                        
                        // If any item's text starts with our letter, it gets the message
-                       foreach (ToolStripItem tsi in this.Items)
-                               if (tsi.Enabled && tsi.Visible && tsi.Text.Length > 0 && tsi.Text.ToUpper ().StartsWith (code))
-                                       return tsi.ProcessMnemonic (charCode);
+                       if (this is MenuStrip)
+                               foreach (ToolStripItem tsi in this.Items)
+                                       if (tsi.Enabled && tsi.Visible && tsi.Text.Length > 0 && tsi.Text.ToUpper ().StartsWith (code))
+                                               return tsi.ProcessMnemonic (charCode);
 
                        return base.ProcessMnemonic (charCode);
                }
@@ -1318,7 +1320,7 @@ namespace System.Windows.Forms
                        return this;
                }
                
-               internal void HandleItemClick (ToolStripItem dismissingItem)
+               internal virtual void HandleItemClick (ToolStripItem dismissingItem)
                {
                        this.GetTopLevelToolStrip ().Dismiss (ToolStripDropDownCloseReason.ItemClicked);
                        this.OnItemClicked (new ToolStripItemClickedEventArgs (dismissingItem));
index 2ec610ae93272059dfa12ccf318b8f7d2c66c31b..44f1baaed98dfd36f82c3f5e19f54eafc372458d 100644 (file)
@@ -1,3 +1,8 @@
+2007-05-24  Jonathan Pobst  <monkey@jpobst.com>
+
+       * ContainerControlTest.cs: Test to show ProcessMnemonic is called
+       regardless of CanSelect.
+
 2007-05-23  Jonathan Pobst  <monkey@jpobst.com>
 
        * TestHelper.cs: Remove reference to event_log from constructor.
index dc4e69f0122f9ecc7487018a89694977c32500a3..1bba437043e978e5c1f6dfdac941aebb0bf63f47 100644 (file)
@@ -252,5 +252,46 @@ namespace MonoTests.System.Windows.Forms {
                        form.Dispose();
 
                }
+               
+               [Test]
+               public void MnemonicCalledWhenCanSelectFalse ()
+               {
+                       MyForm f = new MyForm ();
+                       f.ShowInTaskbar = false;
+                       
+                       MyControl c = new MyControl ();
+                       
+                       f.Controls.Add (c);
+                       f.Show ();
+                       
+                       Assert.AreEqual (false, c.CanSelect, "A1");
+                       f.PublicProcessMnemonic ('b');
+                       
+                       Assert.AreEqual (true, c.mnemonic_called, "A2");
+               }
+               
+               private class MyForm : Form
+               {
+                       public bool PublicProcessMnemonic (char charCode)
+                       {
+                               return this.ProcessMnemonic (charCode);
+                       }
+               }
+               
+               private class MyControl : Control
+               {
+                       public bool mnemonic_called;
+                       
+                       public MyControl ()
+                       {
+                               SetStyle (ControlStyles.Selectable, false);
+                       }
+                       
+                       protected override bool ProcessMnemonic (char charCode)
+                       {
+                               mnemonic_called = true;
+                               return base.ProcessMnemonic (charCode);
+                       }
+               }
        }
 }