瀏覽代碼

Fixed bug

Tig 1 年之前
父節點
當前提交
28f529ae95
共有 3 個文件被更改,包括 83 次插入4 次删除
  1. 1 1
      Terminal.Gui/View/View.cs
  2. 1 1
      Terminal.Gui/Views/TextField.cs
  3. 81 2
      UnitTests/Views/TextFieldTests.cs

+ 1 - 1
Terminal.Gui/View/View.cs

@@ -261,7 +261,7 @@ public partial class View : Responder, ISupportInitializeNotification
         var args = new CancelEventArgs ();
         Accept?.Invoke (this, args);
 
-        return args.Cancel;
+        return Accept is null ? null : args.Cancel;
     }
 
     #region Visibility

+ 1 - 1
Terminal.Gui/Views/TextField.cs

@@ -336,7 +336,7 @@ public class TextField : View
 
         // OnAccept returns true if the event is canceled.
         // By Default pressing ENTER should be ignored (Invoke(Command.Accept) should return false).
-        AddCommand (Command.Accept, () => OnAccept () != true);
+        AddCommand (Command.Accept, () => OnAccept () == false);
 
         // Default keybindings for this view
         // We follow this as closely as possible: https://en.wikipedia.org/wiki/Table_of_keyboard_shortcuts

+ 81 - 2
UnitTests/Views/TextFieldTests.cs

@@ -789,6 +789,85 @@ public class TextFieldTests (ITestOutputHelper output)
         void Accept (object sender, CancelEventArgs e) { accepted = true; }
     }
 
+    [Theory]
+    [InlineData (false, 0)]
+    [InlineData (true, 1)]
+    public void Accept_Handler_Cancel_Prevents_Default_Button_Accept (bool cancelAccept, int expectedButtonAccepts)
+    {
+        var superView = new Window ();
+        var tf = new TextField ();
+        var button = new Button ()
+        {
+            IsDefault = true,
+        };
+
+        superView.Add (tf, button);
+
+        var buttonAccept = 0;
+        button.Accept += ButtonAccept;
+
+        var textFieldAccept = 0;
+        tf.Accept += TextFieldAccept;
+
+        tf.SetFocus ();
+        Assert.True (tf.HasFocus);
+
+        superView.NewKeyDownEvent (Key.Enter);
+        Assert.Equal (1, textFieldAccept);
+        Assert.Equal (expectedButtonAccepts, buttonAccept);
+
+        button.SetFocus ();
+        superView.NewKeyDownEvent (Key.Enter);
+        Assert.Equal (1, textFieldAccept);
+        Assert.Equal (expectedButtonAccepts + 1, buttonAccept);
+
+        return;
+
+        void TextFieldAccept (object sender, CancelEventArgs e)
+        {
+            textFieldAccept++;
+            e.Cancel = cancelAccept;
+        }
+
+        void ButtonAccept (object sender, CancelEventArgs e)
+        {
+            buttonAccept++;
+        }
+    }
+
+    [Fact]
+    public void Accept_No_Handler_Enables_Default_Button_Accept ()
+    {
+        var superView = new Window ();
+        var tf = new TextField ();
+        var button = new Button ()
+        {
+            IsDefault = true,
+        };
+
+        superView.Add (tf, button);
+
+        var buttonAccept = 0;
+        button.Accept += ButtonAccept;
+
+        tf.SetFocus ();
+        Assert.True (tf.HasFocus);
+
+        superView.NewKeyDownEvent (Key.Enter);
+        Assert.Equal (1, buttonAccept);
+
+        button.SetFocus ();
+        superView.NewKeyDownEvent (Key.Enter);
+        Assert.Equal (2, buttonAccept);
+
+        return;
+
+        void ButtonAccept (object sender, CancelEventArgs e)
+        {
+            buttonAccept++;
+        }
+    }
+
     [Fact]
     public void Accept_Cancel_Event_HandlesCommand ()
     {
@@ -1823,8 +1902,8 @@ public class TextFieldTests (ITestOutputHelper output)
     public void Words_With_Accents_Incorrect_Order_Will_Result_With_Wrong_Accent_Place ()
     {
         var tf = new TextField { Width = 30, Text = "Les Misérables" };
-        tf.SetRelativeLayout(new Size(100,100));
-        tf.Draw();
+        tf.SetRelativeLayout (new Size (100, 100));
+        tf.Draw ();
 
         TestHelpers.AssertDriverContentsWithFrameAre (
                                                       @"