Skip to content

Commit f6db2fc

Browse files
authored
Merge pull request #3849 from BDisp/v2_3847_tabview-focus-fix
Fixes #3847. TabView changes focus to Tab on Layout.
2 parents 92c546e + 37bb43a commit f6db2fc

File tree

3 files changed

+124
-105
lines changed

3 files changed

+124
-105
lines changed

Terminal.Gui/Views/TabView/TabRowView.cs renamed to Terminal.Gui/Views/TabView/TabRow.cs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
#nullable enable
22
namespace Terminal.Gui;
33

4-
internal class TabRowView : View
4+
internal class TabRow : View
55
{
66
private readonly TabView _host;
77
private readonly View _leftScrollIndicator;
88
private readonly View _rightScrollIndicator;
99

10-
public TabRowView (TabView host)
10+
public TabRow (TabView host)
1111
{
1212
_host = host;
13-
Id = "tabRowView";
13+
Id = "tabRow";
1414

1515
CanFocus = true;
16+
TabStop = TabBehavior.TabGroup;
1617
Width = Dim.Fill ();
1718

1819
_rightScrollIndicator = new View
@@ -59,25 +60,25 @@ protected override bool OnMouseEvent (MouseEventArgs me)
5960
}
6061
}
6162

62-
if (!me.IsSingleDoubleOrTripleClicked)
63+
if (me.IsWheel && !HasFocus && CanFocus)
6364
{
64-
return false;
65+
SetFocus ();
6566
}
6667

67-
if (!HasFocus && CanFocus)
68+
if (me is { IsSingleDoubleOrTripleClicked: false, IsWheel: false })
6869
{
69-
SetFocus ();
70+
return false;
7071
}
7172

72-
if (me.IsSingleDoubleOrTripleClicked)
73+
if (me.IsSingleDoubleOrTripleClicked || me.IsWheel)
7374
{
7475
var scrollIndicatorHit = 0;
7576

76-
if (me.View is { Id: "rightScrollIndicator" })
77+
if (me.View is { Id: "rightScrollIndicator" } || me.Flags.HasFlag (MouseFlags.WheeledDown) || me.Flags.HasFlag (MouseFlags.WheeledRight))
7778
{
7879
scrollIndicatorHit = 1;
7980
}
80-
else if (me.View is { Id: "leftScrollIndicator" })
81+
else if (me.View is { Id: "leftScrollIndicator" } || me.Flags.HasFlag (MouseFlags.WheeledUp) || me.Flags.HasFlag (MouseFlags.WheeledLeft))
8182
{
8283
scrollIndicatorHit = -1;
8384
}

Terminal.Gui/Views/TabView/TabView.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class TabView : View
1616
private readonly List<Tab> _tabs = new ();
1717

1818
/// <summary>This sub view is the 2 or 3 line control that represents the actual tabs themselves.</summary>
19-
private readonly TabRowView _tabsBar;
19+
private readonly TabRow _tabsBar;
2020

2121
private Tab? _selectedTab;
2222

@@ -28,7 +28,7 @@ public TabView ()
2828
{
2929
CanFocus = true;
3030
TabStop = TabBehavior.TabStop; // Because TabView has focusable subviews, it must be a TabGroup
31-
_tabsBar = new TabRowView (this);
31+
_tabsBar = new TabRow (this);
3232
_containerView = new ();
3333
ApplyStyleChanges ();
3434

@@ -518,6 +518,10 @@ internal IEnumerable<Tab> CalculateViewport (Rectangle bounds)
518518
{
519519
SelectedTab?.SetFocus ();
520520
}
521+
else
522+
{
523+
SelectedTab?.View?.SetFocus ();
524+
}
521525
}
522526

523527
/// <summary>

0 commit comments

Comments
 (0)