Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Terminal.Gui/Core/View.cs
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ public int TabIndex {
} else if (SuperView?.tabIndexes == null || SuperView?.tabIndexes.Count == 1) {
tabIndex = 0;
return;
} else if (tabIndex == value) {
} else if (tabIndex == value && TabIndexes.IndexOf (this) == value) {
return;
}
tabIndex = value > SuperView.tabIndexes.Count - 1 ? SuperView.tabIndexes.Count - 1 : value < 0 ? 0 : value;
Expand Down
73 changes: 73 additions & 0 deletions UnitTests/Views/ViewTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,79 @@ public void TabIndex_Set_CanFocus_False_To_True ()
Assert.True (r.TabIndexes.IndexOf (v1) == 1);
}

[Fact]
public void TabIndex_Invert_Order ()
{
var r = new View ();
var v1 = new View () { Id = "1", CanFocus = true };
var v2 = new View () { Id = "2", CanFocus = true };
var v3 = new View () { Id = "3", CanFocus = true };

r.Add (v1, v2, v3);

v1.TabIndex = 2;
v2.TabIndex = 1;
v3.TabIndex = 0;
Assert.True (r.TabIndexes.IndexOf (v1) == 2);
Assert.True (r.TabIndexes.IndexOf (v2) == 1);
Assert.True (r.TabIndexes.IndexOf (v3) == 0);

Assert.True (r.Subviews.IndexOf (v1) == 0);
Assert.True (r.Subviews.IndexOf (v2) == 1);
Assert.True (r.Subviews.IndexOf (v3) == 2);
}

[Fact]
public void TabIndex_Invert_Order_Added_One_By_One_Does_Not_Do_What_Is_Expected ()
{
var r = new View ();
var v1 = new View () { Id = "1", CanFocus = true };
r.Add (v1);
v1.TabIndex = 2;
var v2 = new View () { Id = "2", CanFocus = true };
r.Add (v2);
v2.TabIndex = 1;
var v3 = new View () { Id = "3", CanFocus = true };
r.Add (v3);
v3.TabIndex = 0;

Assert.False (r.TabIndexes.IndexOf (v1) == 2);
Assert.True (r.TabIndexes.IndexOf (v1) == 1);
Assert.False (r.TabIndexes.IndexOf (v2) == 1);
Assert.True (r.TabIndexes.IndexOf (v2) == 2);
// Only the last is in the expected index
Assert.True (r.TabIndexes.IndexOf (v3) == 0);

Assert.True (r.Subviews.IndexOf (v1) == 0);
Assert.True (r.Subviews.IndexOf (v2) == 1);
Assert.True (r.Subviews.IndexOf (v3) == 2);
}

[Fact]
public void TabIndex_Invert_Order_Mixed ()
{
var r = new View ();
var vl1 = new View () { Id = "vl1" };
var v1 = new View () { Id = "v1", CanFocus = true };
var vl2 = new View () { Id = "vl2" };
var v2 = new View () { Id = "v2", CanFocus = true };
var vl3 = new View () { Id = "vl3" };
var v3 = new View () { Id = "v3", CanFocus = true };

r.Add (vl1, v1, vl2, v2, vl3, v3);

v1.TabIndex = 2;
v2.TabIndex = 1;
v3.TabIndex = 0;
Assert.True (r.TabIndexes.IndexOf (v1) == 4);
Assert.True (r.TabIndexes.IndexOf (v2) == 2);
Assert.True (r.TabIndexes.IndexOf (v3) == 0);

Assert.True (r.Subviews.IndexOf (v1) == 1);
Assert.True (r.Subviews.IndexOf (v2) == 3);
Assert.True (r.Subviews.IndexOf (v3) == 5);
}

[Fact]
public void TabStop_And_CanFocus_Are_All_True ()
{
Expand Down