diff --git a/Terminal.Gui/Views/TileView.cs b/Terminal.Gui/Views/TileView.cs
index cb9ac3373..d1c77d66f 100644
--- a/Terminal.Gui/Views/TileView.cs
+++ b/Terminal.Gui/Views/TileView.cs
@@ -13,6 +13,12 @@ namespace Terminal.Gui {
public class TileView : View {
TileView parentTileView;
+ ///
+ /// The keyboard key that the user can press to toggle resizing
+ /// of splitter lines. Mouse drag splitting is always enabled.
+ ///
+ public Key ToggleResizable { get; set; } = Key.CtrlMask | Key.F10;
+
///
/// A single presented in a . To create
/// new instances use
@@ -548,6 +554,27 @@ namespace Terminal.Gui {
return true;
}
+ ///
+ public override bool ProcessHotKey (KeyEvent keyEvent)
+ {
+ bool focusMoved = false;
+
+ if(keyEvent.Key == ToggleResizable) {
+ foreach(var l in splitterLines) {
+
+ l.CanFocus = !l.CanFocus;
+
+ if (l.CanFocus && !focusMoved) {
+ l.SetFocus ();
+ focusMoved = true;
+ }
+ }
+ return true;
+ }
+
+ return base.ProcessHotKey (keyEvent);
+ }
+
private bool IsValidNewSplitterPos (int idx, Pos value, int fullSpace)
{
int newSize = value.Anchor (fullSpace);
@@ -862,7 +889,7 @@ namespace Terminal.Gui {
public TileViewLineView (TileView parent, int idx)
{
- CanFocus = true;
+ CanFocus = false;
TabStop = true;
this.Parent = parent;
@@ -927,7 +954,7 @@ namespace Terminal.Gui {
public void DrawSplitterSymbol ()
{
- if (CanFocus && HasFocus) {
+ if (dragPosition != null || CanFocus) {
var location = moveRuneRenderLocation ??
new Point (Bounds.Width / 2, Bounds.Height / 2);
@@ -937,10 +964,6 @@ namespace Terminal.Gui {
public override bool MouseEvent (MouseEvent mouseEvent)
{
- if (!CanFocus) {
- return true;
- }
-
if (!dragPosition.HasValue && (mouseEvent.Flags == MouseFlags.Button1Pressed)) {
// Start a Drag
diff --git a/UnitTests/Views/TileViewTests.cs b/UnitTests/Views/TileViewTests.cs
index 0f7c045a4..d969ec112 100644
--- a/UnitTests/Views/TileViewTests.cs
+++ b/UnitTests/Views/TileViewTests.cs
@@ -1,6 +1,5 @@
using System;
using System.Linq;
-using Terminal.Gui;
using Terminal.Gui.Graphs;
using Xunit;
using Xunit.Abstractions;
@@ -60,7 +59,7 @@ namespace Terminal.Gui.ViewTests {
public void TestTileView_Vertical_Focused ()
{
var tileView = Get11By3TileView (out var line);
- SetInputFocusLine (tileView);
+ tileView.ProcessHotKey (new KeyEvent (tileView.ToggleResizable, new KeyModifiers ()));
tileView.Redraw (tileView.Bounds);
@@ -100,7 +99,7 @@ namespace Terminal.Gui.ViewTests {
public void TestTileView_Vertical_Focused_WithBorder ()
{
var tileView = Get11By3TileView (out var line, true);
- SetInputFocusLine (tileView);
+ tileView.ProcessHotKey (new KeyEvent (tileView.ToggleResizable, new KeyModifiers ()));
tileView.Redraw (tileView.Bounds);
@@ -141,9 +140,10 @@ namespace Terminal.Gui.ViewTests {
public void TestTileView_Vertical_Focused_50PercentSplit ()
{
var tileView = Get11By3TileView (out var line);
- SetInputFocusLine (tileView);
tileView.SetSplitterPos (0, Pos.Percent (50));
Assert.IsType (tileView.SplitterDistances.ElementAt (0));
+ tileView.ProcessHotKey (new KeyEvent (tileView.ToggleResizable, new KeyModifiers ()));
+
tileView.Redraw (tileView.Bounds);
string looksLike =
@@ -209,7 +209,7 @@ namespace Terminal.Gui.ViewTests {
public void TestTileView_Vertical_View1MinSize_Absolute ()
{
var tileView = Get11By3TileView (out var line);
- SetInputFocusLine (tileView);
+ tileView.ProcessHotKey (new KeyEvent (tileView.ToggleResizable, new KeyModifiers ()));
tileView.Tiles.ElementAt (0).MinSize = 6;
// distance is too small (below 6)
@@ -254,7 +254,7 @@ namespace Terminal.Gui.ViewTests {
public void TestTileView_Vertical_View1MinSize_Absolute_WithBorder ()
{
var tileView = Get11By3TileView (out var line, true);
- SetInputFocusLine (tileView);
+ tileView.ProcessHotKey (new KeyEvent (tileView.ToggleResizable, new KeyModifiers ()));
tileView.Tiles.ElementAt (0).MinSize = 5;
// distance is too small (below 5)
@@ -298,7 +298,7 @@ namespace Terminal.Gui.ViewTests {
public void TestTileView_Vertical_View2MinSize_Absolute ()
{
var tileView = Get11By3TileView (out var line);
- SetInputFocusLine (tileView);
+ tileView.ProcessHotKey (new KeyEvent (tileView.ToggleResizable, new KeyModifiers ()));
tileView.Tiles.ElementAt (1).MinSize = 6;
// distance leaves too little space for view2 (less than 6 would remain)
@@ -342,7 +342,7 @@ namespace Terminal.Gui.ViewTests {
public void TestTileView_Vertical_View2MinSize_Absolute_WithBorder ()
{
var tileView = Get11By3TileView (out var line, true);
- SetInputFocusLine (tileView);
+ tileView.ProcessHotKey (new KeyEvent (tileView.ToggleResizable, new KeyModifiers ()));
tileView.Tiles.ElementAt (1).MinSize = 5;
// distance leaves too little space for view2 (less than 5 would remain)
@@ -386,8 +386,6 @@ namespace Terminal.Gui.ViewTests {
public void TestTileView_InsertPanelAtStart ()
{
var tileView = Get11By3TileView (out var line, true);
- SetInputFocusLine (tileView);
-
tileView.InsertTile (0);
tileView.Redraw (tileView.Bounds);
@@ -405,8 +403,6 @@ namespace Terminal.Gui.ViewTests {
public void TestTileView_InsertPanelMiddle ()
{
var tileView = Get11By3TileView (out var line, true);
- SetInputFocusLine (tileView);
-
tileView.InsertTile (1);
tileView.Redraw (tileView.Bounds);
@@ -424,8 +420,6 @@ namespace Terminal.Gui.ViewTests {
public void TestTileView_InsertPanelAtEnd ()
{
var tileView = Get11By3TileView (out var line, true);
- SetInputFocusLine (tileView);
-
tileView.InsertTile (2);
tileView.Redraw (tileView.Bounds);
@@ -445,7 +439,9 @@ namespace Terminal.Gui.ViewTests {
var tileView = Get11By3TileView (out var line);
tileView.Orientation = Terminal.Gui.Graphs.Orientation.Horizontal;
- SetInputFocusLine (tileView);
+ tileView.ProcessHotKey (new KeyEvent (tileView.ToggleResizable, new KeyModifiers ()));
+
+ Assert.True (line.HasFocus);
tileView.Redraw (tileView.Bounds);
@@ -485,9 +481,9 @@ namespace Terminal.Gui.ViewTests {
public void TestTileView_Horizontal_View1MinSize_Absolute ()
{
var tileView = Get11By3TileView (out var line);
+ tileView.ProcessHotKey (new KeyEvent (tileView.ToggleResizable, new KeyModifiers ()));
tileView.Orientation = Terminal.Gui.Graphs.Orientation.Horizontal;
- SetInputFocusLine (tileView);
tileView.Tiles.ElementAt (0).MinSize = 1;
// 0 should not be allowed because it brings us below minimum size of View1
@@ -2247,13 +2243,6 @@ namespace Terminal.Gui.ViewTests {
return tileView.Subviews.OfType ().Single ();
}
- private void SetInputFocusLine (TileView tileView)
- {
- var line = GetLine (tileView);
- line.SetFocus ();
- Assert.True (line.HasFocus);
- }
-
private TileView Get5x1TilesView (bool border = true)
{