diff --git a/src/Views/BranchTree.axaml.cs b/src/Views/BranchTree.axaml.cs index fbb5ae6e..dd1f4a0e 100644 --- a/src/Views/BranchTree.axaml.cs +++ b/src/Views/BranchTree.axaml.cs @@ -303,6 +303,15 @@ namespace SourceGit.Views remove { RemoveHandler(RowsChangedEvent, value); } } + public static readonly RoutedEvent SearchRequestedEvent = + RoutedEvent.Register(nameof(SearchRequested), RoutingStrategies.Tunnel | RoutingStrategies.Bubble); + + public event EventHandler SearchRequested + { + add { AddHandler(SearchRequestedEvent, value); } + remove { RemoveHandler(SearchRequestedEvent, value); } + } + public BranchTree() { InitializeComponent(); @@ -566,6 +575,13 @@ namespace SourceGit.Views private void OnTreeKeyDown(object _, KeyEventArgs e) { + if (e.Key == Key.F && e.KeyModifiers == (OperatingSystem.IsMacOS() ? KeyModifiers.Meta : KeyModifiers.Control)) + { + RaiseEvent(new RoutedEventArgs(SearchRequestedEvent)); + e.Handled = true; + return; + } + if (e.Key is not (Key.Delete or Key.Back)) return; diff --git a/src/Views/CommitChanges.axaml b/src/Views/CommitChanges.axaml index e03a50ad..7c4e23d0 100644 --- a/src/Views/CommitChanges.axaml +++ b/src/Views/CommitChanges.axaml @@ -18,6 +18,7 @@ 0 } selectedChanges } view) return; - if (e.Key == Key.C && - e.KeyModifiers.HasFlag(OperatingSystem.IsMacOS() ? KeyModifiers.Meta : KeyModifiers.Control)) + var cmdKey = OperatingSystem.IsMacOS() ? KeyModifiers.Meta : KeyModifiers.Control; + if (e.Key == Key.C && e.KeyModifiers.HasFlag(cmdKey)) { var builder = new StringBuilder(); var copyAbsPath = e.KeyModifiers.HasFlag(KeyModifiers.Shift); @@ -65,6 +65,11 @@ namespace SourceGit.Views await App.CopyTextAsync(builder.ToString()); e.Handled = true; } + else if (e.Key == Key.F && e.KeyModifiers == cmdKey) + { + CommitChangeSearchBox.Focus(); + e.Handled = true; + } } } } diff --git a/src/Views/Compare.axaml b/src/Views/Compare.axaml index 0eec785f..fa96f03b 100644 --- a/src/Views/Compare.axaml +++ b/src/Views/Compare.axaml @@ -103,6 +103,7 @@ 0 } selectedChanges }) return; - if (e.KeyModifiers.HasFlag(OperatingSystem.IsMacOS() ? KeyModifiers.Meta : KeyModifiers.Control) && e.Key == Key.C) + var cmdKey = OperatingSystem.IsMacOS() ? KeyModifiers.Meta : KeyModifiers.Control; + if (e.Key == Key.C && e.KeyModifiers.HasFlag(cmdKey)) { var builder = new StringBuilder(); var copyAbsPath = e.KeyModifiers.HasFlag(KeyModifiers.Shift); @@ -235,6 +236,11 @@ namespace SourceGit.Views await App.CopyTextAsync(builder.ToString()); e.Handled = true; } + else if (e.Key == Key.F && e.KeyModifiers == cmdKey) + { + ChangeSearchBox.Focus(); + e.Handled = true; + } } } } diff --git a/src/Views/Hotkeys.axaml b/src/Views/Hotkeys.axaml index e800906a..a4846e48 100644 --- a/src/Views/Hotkeys.axaml +++ b/src/Views/Hotkeys.axaml @@ -87,7 +87,7 @@ - + diff --git a/src/Views/Launcher.axaml.cs b/src/Views/Launcher.axaml.cs index c70c576a..541b3452 100644 --- a/src/Views/Launcher.axaml.cs +++ b/src/Views/Launcher.axaml.cs @@ -235,7 +235,7 @@ namespace SourceGit.Views repo.SelectedViewIndex = 2; e.Handled = true; return; - case Key.F: + case Key.F when e.KeyModifiers.HasFlag(KeyModifiers.Shift): repo.IsSearchingCommits = true; e.Handled = true; return; diff --git a/src/Views/Repository.axaml b/src/Views/Repository.axaml index af8bbf91..28e923f3 100644 --- a/src/Views/Repository.axaml +++ b/src/Views/Repository.axaml @@ -42,7 +42,7 @@ - + @@ -191,6 +191,7 @@ + RowsChanged="OnLeftSidebarRowsChanged" + SearchRequested="OnToggleFilter"/> @@ -286,7 +288,8 @@ Nodes="{Binding RemoteBranchTrees}" IsVisible="{Binding IsRemoteGroupExpanded}" SelectionChanged="OnRemoteBranchTreeSelectionChanged" - RowsChanged="OnLeftSidebarRowsChanged"/> + RowsChanged="OnLeftSidebarRowsChanged" + SearchRequested="OnToggleFilter"/> @@ -331,7 +334,8 @@ Focusable="False" IsVisible="{Binding IsTagGroupExpanded, Mode=OneWay}" SelectionChanged="OnTagsSelectionChanged" - RowsChanged="OnLeftSidebarRowsChanged"/> + RowsChanged="OnLeftSidebarRowsChanged" + SearchRequested="OnToggleFilter"/> @@ -373,7 +377,8 @@ Content="{Binding VisibleSubmodules}" RowsChanged="OnLeftSidebarRowsChanged" Focusable="False" - IsVisible="{Binding IsSubmoduleGroupExpanded, Mode=OneWay}"/> + IsVisible="{Binding IsSubmoduleGroupExpanded, Mode=OneWay}" + SearchRequested="OnToggleFilter"/> diff --git a/src/Views/Repository.axaml.cs b/src/Views/Repository.axaml.cs index 3faf527d..8e371004 100644 --- a/src/Views/Repository.axaml.cs +++ b/src/Views/Repository.axaml.cs @@ -20,6 +20,12 @@ namespace SourceGit.Views UpdateLeftSidebarLayout(); } + private void OnToggleFilter(object _, RoutedEventArgs e) + { + FilterBox.Focus(); + e.Handled = true; + } + private void OnSearchCommitPanelPropertyChanged(object sender, AvaloniaPropertyChangedEventArgs e) { if (e.Property == IsVisibleProperty && sender is Grid { IsVisible: true }) diff --git a/src/Views/RevisionCompare.axaml b/src/Views/RevisionCompare.axaml index df212b92..14506189 100644 --- a/src/Views/RevisionCompare.axaml +++ b/src/Views/RevisionCompare.axaml @@ -69,6 +69,7 @@ 0 } selectedChanges }) return; - if (e.KeyModifiers.HasFlag(OperatingSystem.IsMacOS() ? KeyModifiers.Meta : KeyModifiers.Control) && e.Key == Key.C) + var cmdKey = OperatingSystem.IsMacOS() ? KeyModifiers.Meta : KeyModifiers.Control; + if (e.Key == Key.C && e.KeyModifiers.HasFlag(cmdKey)) { var builder = new StringBuilder(); var copyAbsPath = e.KeyModifiers.HasFlag(KeyModifiers.Shift); @@ -258,6 +259,11 @@ namespace SourceGit.Views await App.CopyTextAsync(builder.ToString()); e.Handled = true; } + else if (e.Key == Key.F && e.KeyModifiers == cmdKey) + { + RevisionCompareChangeSearchBox.Focus(); + e.Handled = true; + } } } } diff --git a/src/Views/RevisionFileTreeView.axaml.cs b/src/Views/RevisionFileTreeView.axaml.cs index ca00e8e2..6d955591 100644 --- a/src/Views/RevisionFileTreeView.axaml.cs +++ b/src/Views/RevisionFileTreeView.axaml.cs @@ -113,6 +113,14 @@ namespace SourceGit.Views protected override async void OnKeyDown(KeyEventArgs e) { + if (e.Key == Key.F && e.KeyModifiers == (OperatingSystem.IsMacOS() ? KeyModifiers.Meta : KeyModifiers.Control)) + { + var panel = this.FindAncestorOfType(); + panel.RaiseEvent(new RoutedEventArgs(RevisionFileTreeView.SearchRequestedEvent)); + e.Handled = true; + return; + } + if (SelectedItem is ViewModels.RevisionFileTreeNode node) { if (node.IsFolder && @@ -189,6 +197,15 @@ namespace SourceGit.Views public AvaloniaList Rows { get; } = []; + public static readonly RoutedEvent SearchRequestedEvent = + RoutedEvent.Register(nameof(SearchRequested), RoutingStrategies.Tunnel | RoutingStrategies.Bubble); + + public event EventHandler SearchRequested + { + add { AddHandler(SearchRequestedEvent, value); } + remove { RemoveHandler(SearchRequestedEvent, value); } + } + public RevisionFileTreeView() { InitializeComponent(); diff --git a/src/Views/RevisionFiles.axaml b/src/Views/RevisionFiles.axaml index 7c1c9912..5c946a19 100644 --- a/src/Views/RevisionFiles.axaml +++ b/src/Views/RevisionFiles.axaml @@ -102,7 +102,7 @@ - + diff --git a/src/Views/RevisionFiles.axaml.cs b/src/Views/RevisionFiles.axaml.cs index a4a01b65..80391cbb 100644 --- a/src/Views/RevisionFiles.axaml.cs +++ b/src/Views/RevisionFiles.axaml.cs @@ -11,6 +11,12 @@ namespace SourceGit.Views InitializeComponent(); } + private void OnToggleSearch(object _, RoutedEventArgs e) + { + TxtSearchRevisionFiles.Focus(); + e.Handled = true; + } + private async void OnSearchBoxKeyDown(object _, KeyEventArgs e) { if (DataContext is not ViewModels.CommitDetail vm) diff --git a/src/Views/SubmodulesView.axaml b/src/Views/SubmodulesView.axaml index ddc70f3c..ce077df5 100644 --- a/src/Views/SubmodulesView.axaml +++ b/src/Views/SubmodulesView.axaml @@ -10,7 +10,7 @@ x:Class="SourceGit.Views.SubmodulesView"> - +