mirror of
https://github.com/gui-cs/Terminal.Gui.git
synced 2025-12-26 15:57:56 +01:00
Fixed Button with WantContinuousPressed = true not responding to single clicks
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -33,9 +33,6 @@ public class Button : View
|
||||
private readonly Rune _rightDefault;
|
||||
private bool _isDefault;
|
||||
|
||||
/// <inheritdoc />
|
||||
private bool _wantContinuousButtonPressed;
|
||||
|
||||
/// <summary>Initializes a new instance of <see cref="Button"/> using <see cref="LayoutStyle.Computed"/> layout.</summary>
|
||||
/// <remarks>The width of the <see cref="Button"/> is computed based on the text length. The height will always be 1.</remarks>
|
||||
public Button ()
|
||||
@@ -71,6 +68,8 @@ public class Button : View
|
||||
MouseClick += Button_MouseClick;
|
||||
}
|
||||
|
||||
private bool _wantContinuousButtonPressed;
|
||||
|
||||
/// <inheritdoc />
|
||||
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<string> e)
|
||||
|
||||
@@ -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)]
|
||||
|
||||
@@ -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 ();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user