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]