Merge pull request #268 from pcc/menudeactivate
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / LabelEditTextBox.cs
index 34b0c799a7b7299cf7b9bbc1822a44ebbd81d064..46c79ef049854780777ebfd5c120a8ecd3fda067 100644 (file)
@@ -42,6 +42,8 @@ namespace System.Windows.Forms {
                                switch (key_data & Keys.KeyCode) {
                                case Keys.Enter:
                                        return true;
+                               case Keys.Escape:
+                                       return true;
                                }
                        }
                        return base.IsInputKey (key_data);
@@ -49,9 +51,22 @@ namespace System.Windows.Forms {
 
                protected override void OnKeyDown (KeyEventArgs e)
                {
-                       if (e.KeyCode == Keys.Return && Visible) {
-                               this.Visible = false;
-                               OnEditingFinished (e);
+                       if (!Visible)
+                               return;
+
+                       switch (e.KeyCode) {
+                               case Keys.Return:
+                                       Visible = false;
+                                       Parent.Focus ();
+                                       e.Handled = true;
+                                       OnEditingFinished (e);
+                                       break;
+                               case Keys.Escape:
+                                       Visible = false;
+                                       Parent.Focus ();
+                                       e.Handled = true;
+                                       OnEditingCancelled (e);
+                                       break;
                        }
                }
 
@@ -62,6 +77,13 @@ namespace System.Windows.Forms {
                        }
                }
 
+               protected void OnEditingCancelled (EventArgs e)
+               {
+                       EventHandler eh = (EventHandler)(Events[EditingCancelledEvent]);
+                       if (eh != null)
+                               eh (this, e);
+               }
+
                protected void OnEditingFinished (EventArgs e)
                {
                        EventHandler eh = (EventHandler)(Events [EditingFinishedEvent]);
@@ -69,6 +91,12 @@ namespace System.Windows.Forms {
                                eh (this, e);
                }
 
+               static object EditingCancelledEvent = new object ();
+               public event EventHandler EditingCancelled {
+                       add { Events.AddHandler (EditingCancelledEvent, value); }
+                       remove { Events.RemoveHandler (EditingCancelledEvent, value); }
+               }
+
                static object EditingFinishedEvent = new object ();
                public event EventHandler EditingFinished {
                        add { Events.AddHandler (EditingFinishedEvent, value); }