Fixed Button with WantContinuousPressed = true not responding to single clicks

This commit is contained in:
Tig
2024-04-10 00:30:11 -04:00
parent a6ff5629b4
commit e5d01bfdb1
4 changed files with 133 additions and 6 deletions

View File

@@ -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;
}

View File

@@ -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)

View File

@@ -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)]

View File

@@ -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 ();
}
}