From 3902e62b4a8c6e984b1e28b939bafac0639c742a Mon Sep 17 00:00:00 2001 From: Tig Date: Thu, 29 Aug 2024 13:46:53 -0400 Subject: [PATCH] Improving Application.Navigation --- .../Application/Application.Keyboard.cs | 40 ++++++------------- .../Application/ApplicationNavigation.cs | 2 +- .../Application.NavigationTests.cs | 2 +- UnitTests/View/Navigation/CanFocusTests.cs | 7 ++-- 4 files changed, 19 insertions(+), 32 deletions(-) diff --git a/Terminal.Gui/Application/Application.Keyboard.cs b/Terminal.Gui/Application/Application.Keyboard.cs index 5197a6490..aabc1d53c 100644 --- a/Terminal.Gui/Application/Application.Keyboard.cs +++ b/Terminal.Gui/Application/Application.Keyboard.cs @@ -1,6 +1,4 @@ #nullable enable -using static System.Net.Mime.MediaTypeNames; - namespace Terminal.Gui; public static partial class Application // Keyboard handling @@ -289,31 +287,25 @@ public static partial class Application // Keyboard handling AddCommand ( Command.NextView, - static () => Application.Navigation?.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop)); + static () => Navigation?.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop)); AddCommand ( - Command.PreviousView, - static () => Application.Navigation?.AdvanceFocus (NavigationDirection.Backward, TabBehavior.TabStop)); + Command.PreviousView, + static () => Navigation?.AdvanceFocus (NavigationDirection.Backward, TabBehavior.TabStop)); AddCommand ( Command.NextViewOrTop, static () => { // TODO: This OverlapppedTop tomfoolery goes away in addressing #2491 - if (ApplicationOverlapped.OverlappedTop is null && Current is { }) + if (ApplicationOverlapped.OverlappedTop is { }) { - if (Current.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabGroup)) - { - return true; - }; + ApplicationOverlapped.OverlappedMoveNext (); - - return false; + return true; } - ApplicationOverlapped.OverlappedMoveNext (); - - return true; + return Navigation?.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabGroup); } ); @@ -322,20 +314,14 @@ public static partial class Application // Keyboard handling static () => { // TODO: This OverlapppedTop tomfoolery goes away in addressing #2491 - if (ApplicationOverlapped.OverlappedTop is null && Current is { }) + if (ApplicationOverlapped.OverlappedTop is { }) { - if (Current.AdvanceFocus (NavigationDirection.Backward, TabBehavior.TabGroup)) - { - return true; - }; + ApplicationOverlapped.OverlappedMovePrevious (); - - return false; + return true; } - ApplicationOverlapped.OverlappedMovePrevious (); - - return true; + return Navigation?.AdvanceFocus (NavigationDirection.Backward, TabBehavior.TabGroup); } ); @@ -367,8 +353,8 @@ public static partial class Application // Keyboard handling KeyBindings.Add (NextTabKey, KeyBindingScope.Application, Command.NextView); KeyBindings.Add (PrevTabKey, KeyBindingScope.Application, Command.PreviousView); - KeyBindings.Add (NextTabGroupKey, KeyBindingScope.Application, Command.NextViewOrTop); // Needed on Unix - KeyBindings.Add (PrevTabGroupKey, KeyBindingScope.Application, Command.PreviousViewOrTop); // Needed on Unix + KeyBindings.Add (NextTabGroupKey, KeyBindingScope.Application, Command.NextViewOrTop); + KeyBindings.Add (PrevTabGroupKey, KeyBindingScope.Application, Command.PreviousViewOrTop); // TODO: Refresh Key should be configurable KeyBindings.Add (Key.F5, KeyBindingScope.Application, Command.Refresh); diff --git a/Terminal.Gui/Application/ApplicationNavigation.cs b/Terminal.Gui/Application/ApplicationNavigation.cs index 7dd12f517..48aacb0b5 100644 --- a/Terminal.Gui/Application/ApplicationNavigation.cs +++ b/Terminal.Gui/Application/ApplicationNavigation.cs @@ -98,6 +98,6 @@ public class ApplicationNavigation /// public bool AdvanceFocus (NavigationDirection direction, TabBehavior? behavior) { - return Application.Current is { } && Application.Current.AdvanceFocus (NavigationDirection.Forward, TabBehavior.TabStop); + return Application.Current is { } && Application.Current.AdvanceFocus (direction, behavior); } } diff --git a/UnitTests/Application/Application.NavigationTests.cs b/UnitTests/Application/Application.NavigationTests.cs index 07d2f85d9..325d9471e 100644 --- a/UnitTests/Application/Application.NavigationTests.cs +++ b/UnitTests/Application/Application.NavigationTests.cs @@ -113,7 +113,7 @@ public class ApplicationNavigationTests (ITestOutputHelper output) Assert.True (subView1.HasFocus); Assert.Equal (subView1, Application.Navigation.GetFocused ()); - Application.Current.AdvanceFocus (NavigationDirection.Forward, null); + Application.Navigation.AdvanceFocus (NavigationDirection.Forward, null); Assert.Equal (subView2, Application.Navigation.GetFocused ()); Application.ResetState (); diff --git a/UnitTests/View/Navigation/CanFocusTests.cs b/UnitTests/View/Navigation/CanFocusTests.cs index ede9422e5..474039a33 100644 --- a/UnitTests/View/Navigation/CanFocusTests.cs +++ b/UnitTests/View/Navigation/CanFocusTests.cs @@ -324,17 +324,18 @@ public class CanFocusTests () : TestsAllViews { Label label = new () { Text = "label" }; View view = new () { Text = "view", CanFocus = true }; + Application.Navigation = new (); Application.Current = new (); Application.Current.Add (label, view); Application.Current.SetFocus (); - Assert.Equal (view, Application.Current.MostFocused); + Assert.Equal (view, Application.Navigation.GetFocused()); Assert.False (label.CanFocus); Assert.False (label.HasFocus); Assert.True (view.CanFocus); Assert.True (view.HasFocus); - Assert.False (Application.Current.AdvanceFocus (NavigationDirection.Forward, null)); + Assert.False (Application.Navigation.AdvanceFocus (NavigationDirection.Forward, null)); Assert.False (label.HasFocus); Assert.True (view.HasFocus); @@ -344,7 +345,7 @@ public class CanFocusTests () : TestsAllViews Assert.True (view.HasFocus); // label can now be focused, so AdvanceFocus should move to it. - Assert.True (Application.Current.AdvanceFocus (NavigationDirection.Forward, null)); + Assert.True (Application.Navigation.AdvanceFocus (NavigationDirection.Forward, null)); Assert.True (label.HasFocus); Assert.False (view.HasFocus);