From 9d41fe9732beaeb53da65da687e11f1f03c62318 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 10 May 2022 11:55:11 +0100 Subject: [PATCH] Revert "Merge pull request #7963 from AvaloniaUI/disabled-items-should-not-be-selectable-with-keyboard" This reverts commit fa7294ace42065c7f51a45b286bde89ea8b57808. --- src/Avalonia.Controls/ComboBox.cs | 20 +++-- src/Avalonia.Controls/ItemsControl.cs | 1 + src/Avalonia.Controls/StackPanel.cs | 2 +- .../ComboBoxTests.cs | 75 ------------------- 4 files changed, 14 insertions(+), 84 deletions(-) diff --git a/src/Avalonia.Controls/ComboBox.cs b/src/Avalonia.Controls/ComboBox.cs index 5e53483d5f..b15f2abb8d 100644 --- a/src/Avalonia.Controls/ComboBox.cs +++ b/src/Avalonia.Controls/ComboBox.cs @@ -429,18 +429,22 @@ namespace Avalonia.Controls private void SelectNext() { - if (ItemCount >= 1) - { - MoveSelection(NavigationDirection.Next, WrapSelection); - } + int next = SelectedIndex + 1; + + if (next >= ItemCount) + next = 0; + + SelectedIndex = next; } private void SelectPrev() { - if (ItemCount >= 1) - { - MoveSelection(NavigationDirection.Previous, WrapSelection); - } + int prev = SelectedIndex - 1; + + if (prev < 0) + prev = ItemCount - 1; + + SelectedIndex = prev; } } } diff --git a/src/Avalonia.Controls/ItemsControl.cs b/src/Avalonia.Controls/ItemsControl.cs index bebb6a6626..77894fd2b8 100644 --- a/src/Avalonia.Controls/ItemsControl.cs +++ b/src/Avalonia.Controls/ItemsControl.cs @@ -509,6 +509,7 @@ namespace Avalonia.Controls do { result = container.GetControl(direction, c, wrap); + from = from ?? result; if (result != null && result.Focusable && diff --git a/src/Avalonia.Controls/StackPanel.cs b/src/Avalonia.Controls/StackPanel.cs index 3fed089194..9e087b7fd3 100644 --- a/src/Avalonia.Controls/StackPanel.cs +++ b/src/Avalonia.Controls/StackPanel.cs @@ -123,7 +123,7 @@ namespace Avalonia.Controls index = Children.Count - 1; break; case NavigationDirection.Next: - ++index; + if (index != -1) ++index; break; case NavigationDirection.Previous: if (index != -1) --index; diff --git a/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs b/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs index 98695fe88e..cb2fd11175 100644 --- a/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs +++ b/tests/Avalonia.Controls.UnitTests/ComboBoxTests.cs @@ -36,81 +36,6 @@ namespace Avalonia.Controls.UnitTests Assert.False(target.IsDropDownOpen); } - [Fact] - public void WrapSelection_Should_Work() - { - using (UnitTestApplication.Start(TestServices.RealFocus)) - { - var items = new[] - { - new ComboBoxItem() { Content = "bla" }, - new ComboBoxItem() { Content = "dd" }, - new ComboBoxItem() { Content = "sdf", IsEnabled = false } - }; - var target = new ComboBox - { - Items = items, - Template = GetTemplate(), - WrapSelection = true - }; - var root = new TestRoot(target); - target.ApplyTemplate(); - target.Presenter.ApplyTemplate(); - target.Focus(); - Assert.Equal(target.SelectedIndex, -1); - Assert.True(target.IsFocused); - target.RaiseEvent(new KeyEventArgs - { - RoutedEvent = InputElement.KeyDownEvent, - Key = Key.Up, - }); - Assert.Equal(target.SelectedIndex, 1); - target.RaiseEvent(new KeyEventArgs - { - RoutedEvent = InputElement.KeyDownEvent, - Key = Key.Down, - }); - Assert.Equal(target.SelectedIndex, 0); - } - } - - [Fact] - public void Focuses_Next_Item_On_Key_Down() - { - using (UnitTestApplication.Start(TestServices.RealFocus)) - { - var items = new[] - { - new ComboBoxItem() { Content = "bla" }, - new ComboBoxItem() { Content = "dd", IsEnabled = false }, - new ComboBoxItem() { Content = "sdf" } - }; - var target = new ComboBox - { - Items = items, - Template = GetTemplate() - }; - var root = new TestRoot(target); - target.ApplyTemplate(); - target.Presenter.ApplyTemplate(); - target.Focus(); - Assert.Equal(target.SelectedIndex, -1); - Assert.True(target.IsFocused); - target.RaiseEvent(new KeyEventArgs - { - RoutedEvent = InputElement.KeyDownEvent, - Key = Key.Down, - }); - Assert.Equal(target.SelectedIndex, 0); - target.RaiseEvent(new KeyEventArgs - { - RoutedEvent = InputElement.KeyDownEvent, - Key = Key.Down, - }); - Assert.Equal(target.SelectedIndex, 2); - } - } - [Fact] public void SelectionBoxItem_Is_Rectangle_With_VisualBrush_When_Selection_Is_Control() {