diff --git a/Terminal.Gui/View/ViewMouse.cs b/Terminal.Gui/View/ViewMouse.cs
index 531818176..00684a3cf 100644
--- a/Terminal.Gui/View/ViewMouse.cs
+++ b/Terminal.Gui/View/ViewMouse.cs
@@ -495,9 +495,9 @@ public partial class View
};
ColorScheme = cs;
}
-
- return true;
}
+ // Return false since we don't want to eat the event
+ return false;
}
diff --git a/Terminal.Gui/Views/Button.cs b/Terminal.Gui/Views/Button.cs
index c5188e87e..53916fa17 100644
--- a/Terminal.Gui/Views/Button.cs
+++ b/Terminal.Gui/Views/Button.cs
@@ -33,9 +33,6 @@ public class Button : View
private readonly Rune _rightDefault;
private bool _isDefault;
- ///
- private bool _wantContinuousButtonPressed;
-
/// Initializes a new instance of using layout.
/// The width of the is computed based on the text length. The height will always be 1.
public Button ()
@@ -71,6 +68,8 @@ public class Button : View
MouseClick += Button_MouseClick;
}
+ private bool _wantContinuousButtonPressed;
+
///
public override bool WantContinuousButtonPressed
{
@@ -97,7 +96,7 @@ public class Button : View
private void Button_MouseClick (object sender, MouseEventEventArgs e)
{
- e.Handled = InvokeCommand (Command.HotKey) == true;
+ e.Handled = InvokeCommand (Command.HotKey) == true;
}
private void Button_TitleChanged (object sender, StateEventArgs e)
diff --git a/UnitTests/View/MouseTests.cs b/UnitTests/View/MouseTests.cs
index 9fcfd3515..6c2345eb2 100644
--- a/UnitTests/View/MouseTests.cs
+++ b/UnitTests/View/MouseTests.cs
@@ -382,6 +382,65 @@ public class MouseTests (ITestOutputHelper output)
view.Dispose ();
}
+
+ [Theory]
+ [InlineData (MouseFlags.Button1Pressed, MouseFlags.Button1Released, MouseFlags.Button1Clicked)]
+ [InlineData (MouseFlags.Button2Pressed, MouseFlags.Button2Released, MouseFlags.Button2Clicked)]
+ [InlineData (MouseFlags.Button3Pressed, MouseFlags.Button3Released, MouseFlags.Button3Clicked)]
+ [InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released, MouseFlags.Button4Clicked)]
+ public void WantContinuousButtonPressed_True_Button_Clicked_Clicks (MouseFlags pressed, MouseFlags released, MouseFlags clicked)
+ {
+ var me = new MouseEvent ();
+
+ var view = new View ()
+ {
+ Width = 1,
+ Height = 1,
+ WantContinuousButtonPressed = true
+ };
+
+ var clickedCount = 0;
+
+ view.MouseClick += (s, e) => clickedCount++;
+
+ me.Flags = clicked;
+ view.NewMouseEvent (me);
+ Assert.Equal (1, clickedCount);
+
+ view.Dispose ();
+ }
+
+ [Theory]
+ [InlineData (MouseFlags.Button1Pressed, MouseFlags.Button1Released, MouseFlags.Button1Clicked)]
+ [InlineData (MouseFlags.Button2Pressed, MouseFlags.Button2Released, MouseFlags.Button2Clicked)]
+ [InlineData (MouseFlags.Button3Pressed, MouseFlags.Button3Released, MouseFlags.Button3Clicked)]
+ [InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released, MouseFlags.Button4Clicked)]
+ public void WantContinuousButtonPressed_True_Button_Press_Release_Clicks (MouseFlags pressed, MouseFlags released, MouseFlags clicked)
+ {
+ var me = new MouseEvent ();
+
+ var view = new View ()
+ {
+ Width = 1,
+ Height = 1,
+ WantContinuousButtonPressed = true
+ };
+
+ var clickedCount = 0;
+
+ view.MouseClick += (s, e) => clickedCount++;
+
+ me.Flags = pressed;
+ view.NewMouseEvent (me);
+ Assert.Equal (1, clickedCount);
+
+ me.Flags = released;
+ view.NewMouseEvent (me);
+ Assert.Equal (1, clickedCount);
+
+ view.Dispose ();
+ }
+
[Theory]
[InlineData (MouseFlags.Button1Pressed, MouseFlags.Button1Released, MouseFlags.Button1Clicked)]
[InlineData (MouseFlags.Button2Pressed, MouseFlags.Button2Released, MouseFlags.Button2Clicked)]
diff --git a/UnitTests/Views/ButtonTests.cs b/UnitTests/Views/ButtonTests.cs
index 606fd1826..313df7ce6 100644
--- a/UnitTests/Views/ButtonTests.cs
+++ b/UnitTests/Views/ButtonTests.cs
@@ -757,4 +757,73 @@ public class ButtonTests (ITestOutputHelper output)
Assert.Equal (new (0, 0, 30, 5), pos);
top.Dispose ();
}
+
+ [Theory]
+ [InlineData (MouseFlags.Button1Pressed, MouseFlags.Button1Released, MouseFlags.Button1Clicked)]
+ [InlineData (MouseFlags.Button2Pressed, MouseFlags.Button2Released, MouseFlags.Button2Clicked)]
+ [InlineData (MouseFlags.Button3Pressed, MouseFlags.Button3Released, MouseFlags.Button3Clicked)]
+ [InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released, MouseFlags.Button4Clicked)]
+ public void WantContinuousButtonPressed_True_ButtonClick_Accepts (MouseFlags pressed, MouseFlags released, MouseFlags clicked)
+ {
+ var me = new MouseEvent ();
+
+ var button = new Button ()
+ {
+ AutoSize = false,
+ Width = 1,
+ Height = 1,
+ WantContinuousButtonPressed = true
+ };
+
+ var acceptCount = 0;
+
+ button.Accept += (s, e) => acceptCount++;
+
+ me.Flags = pressed;
+ button.NewMouseEvent (me);
+ Assert.Equal (1, acceptCount);
+
+ me.Flags = released;
+ button.NewMouseEvent (me);
+ Assert.Equal (1, acceptCount);
+
+ me.Flags = clicked;
+ button.NewMouseEvent (me);
+ Assert.Equal (1, acceptCount);
+
+ button.Dispose ();
+ }
+
+ [Theory]
+ [InlineData (MouseFlags.Button1Pressed, MouseFlags.Button1Released, MouseFlags.Button1Clicked)]
+ [InlineData (MouseFlags.Button2Pressed, MouseFlags.Button2Released, MouseFlags.Button2Clicked)]
+ [InlineData (MouseFlags.Button3Pressed, MouseFlags.Button3Released, MouseFlags.Button3Clicked)]
+ [InlineData (MouseFlags.Button4Pressed, MouseFlags.Button4Released, MouseFlags.Button4Clicked)]
+ public void WantContinuousButtonPressed_True_ButtonPressRelease_Accepts (MouseFlags pressed, MouseFlags released, MouseFlags clicked)
+ {
+ var me = new MouseEvent ();
+
+ var button = new Button ()
+ {
+ AutoSize = false,
+ Width = 1,
+ Height = 1,
+ WantContinuousButtonPressed = true
+ };
+
+ var acceptCount = 0;
+
+ button.Accept += (s, e) => acceptCount++;
+
+ me.Flags = pressed;
+ button.NewMouseEvent (me);
+ Assert.Equal (1, acceptCount);
+
+ me.Flags = released;
+ button.NewMouseEvent (me);
+ Assert.Equal (1, acceptCount);
+
+ button.Dispose ();
+ }
+
}
\ No newline at end of file