diff --git a/Terminal.Gui/Views/TableView.cs b/Terminal.Gui/Views/TableView.cs
index 5a674f3e7..1a69dec07 100644
--- a/Terminal.Gui/Views/TableView.cs
+++ b/Terminal.Gui/Views/TableView.cs
@@ -829,22 +829,28 @@ namespace Terminal.Gui {
}
///
- /// Moves or extends the selection to the first cell in the table (0,0)
+ /// Moves or extends the selection to the first cell in the table (0,0).
+ /// If is enabled then selection instead moves
+ /// to (,0) i.e. no horizontal scrolling.
///
/// true to extend the current selection (if any) instead of replacing
public void ChangeSelectionToStartOfTable (bool extend)
{
- SetSelection (0, 0, extend);
+ SetSelection (FullRowSelect ? SelectedColumn : 0, 0, extend);
Update ();
}
///
- /// Moves or extends the selection to the final cell in the table
+ /// Moves or extends the selection to the final cell in the table (nX,nY).
+ /// If is enabled then selection instead moves
+ /// to (,nY) i.e. no horizontal scrolling.
///
/// true to extend the current selection (if any) instead of replacing
public void ChangeSelectionToEndOfTable(bool extend)
{
- SetSelection (Table.Columns.Count - 1, Table.Rows.Count - 1, extend);
+ var finalColumn = Table.Columns.Count - 1;
+
+ SetSelection (FullRowSelect ? SelectedColumn : finalColumn, Table.Rows.Count - 1, extend);
Update ();
}
diff --git a/UnitTests/TableViewTests.cs b/UnitTests/TableViewTests.cs
index 3ef1bfee7..5b50cede8 100644
--- a/UnitTests/TableViewTests.cs
+++ b/UnitTests/TableViewTests.cs
@@ -1381,6 +1381,54 @@ namespace Terminal.Gui.Views {
Assert.Equal (1, tableView.SelectedColumn);
}
+
+ [InlineData(true)]
+ [InlineData (false)]
+ [Theory, AutoInitShutdown]
+ public void TestMoveStartEnd_WithFullRowSelect(bool withFullRowSelect)
+ {
+ var tableView = GetTwoRowSixColumnTable ();
+ tableView.FullRowSelect = withFullRowSelect;
+
+ tableView.SelectedRow = 1;
+ tableView.SelectedColumn = 1;
+
+ tableView.ProcessKey (new KeyEvent
+ {
+ Key = Key.Home | Key.CtrlMask
+ });
+
+ if(withFullRowSelect)
+ {
+ // Should not be any horizontal movement when
+ // using navigate to Start/End and FullRowSelect
+ Assert.Equal (1, tableView.SelectedColumn);
+ Assert.Equal (0, tableView.SelectedRow);
+ }
+ else
+ {
+ Assert.Equal (0, tableView.SelectedColumn);
+ Assert.Equal (0, tableView.SelectedRow);
+ }
+
+ tableView.ProcessKey (new KeyEvent
+ {
+ Key = Key.End | Key.CtrlMask
+ });
+
+ if(withFullRowSelect)
+ {
+ Assert.Equal (1, tableView.SelectedColumn);
+ Assert.Equal (1, tableView.SelectedRow);
+ }
+ else
+ {
+ Assert.Equal (5, tableView.SelectedColumn);
+ Assert.Equal (1, tableView.SelectedRow);
+ }
+
+ }
+
[InlineData (true)]
[InlineData (false)]
[Theory, AutoInitShutdown]