Fixes #3682. CanFocus true for Label works only for keyboard and not mouse. (#3683)

* Fixes #3682. CanFocus true for Label works only for keyboard and not mouse.

* Simplifying code.

---------

Co-authored-by: Tig <tig@users.noreply.github.com>
This commit is contained in:
BDisp
2024-08-23 16:46:52 +01:00
committed by GitHub
parent e21f158077
commit c1d82947aa
2 changed files with 49 additions and 1 deletions

View File

@@ -28,7 +28,10 @@ public class Label : View
private void Label_MouseClick (object sender, MouseEventEventArgs e)
{
e.Handled = InvokeCommand (Command.HotKey) == true;
if (!CanFocus)
{
e.Handled = InvokeCommand (Command.HotKey) == true;
}
}
private void Label_TitleChanged (object sender, EventArgs<string> e)

View File

@@ -1315,4 +1315,49 @@ e
Assert.Equal (expectedLabelBounds, label.Viewport);
super.Dispose ();
}
[Fact]
[AutoInitShutdown]
public void Label_CanFocus_True_Get_Focus_By_Keyboard_And_Mouse ()
{
Label label = new () { Text = "label" };
View view = new () { Y = 2, Width = 10, Height = 1, Text = "view", CanFocus = true };
Toplevel top = new ();
top.Add (label, view);
Application.Begin (top);
Assert.Equal (new (0, 0, 5, 1), label.Frame);
Assert.Equal (new (0, 2, 10, 1), view.Frame);
Assert.Equal (view, top.MostFocused);
Assert.False (label.CanFocus);
Assert.False (label.HasFocus);
Assert.True (view.CanFocus);
Assert.True (view.HasFocus);
Assert.True (Application.OnKeyDown (Key.Tab));
Assert.False (label.HasFocus);
Assert.True (view.HasFocus);
Application.OnMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.Button1Clicked });
Assert.False (label.HasFocus);
Assert.True (view.HasFocus);
// Set label CanFocus to true
label.CanFocus = true;
Assert.True (Application.OnKeyDown (Key.Tab));
Assert.True (label.HasFocus);
Assert.False (view.HasFocus);
Assert.True (Application.OnKeyDown (Key.Tab));
Assert.False (label.HasFocus);
Assert.True (view.HasFocus);
Application.OnMouseEvent (new () { Position = new (0, 0), Flags = MouseFlags.Button1Clicked });
Assert.True (label.HasFocus);
Assert.False (view.HasFocus);
Application.OnMouseEvent (new () { Position = new (0, 2), Flags = MouseFlags.Button1Clicked });
Assert.False (label.HasFocus);
Assert.True (view.HasFocus);
}
}