From 6142591ad163aeec24cac4f9e8e08261bce5230e Mon Sep 17 00:00:00 2001 From: leo Date: Tue, 8 Jul 2025 10:44:31 +0800 Subject: [PATCH] ux: auto-focus commits list box and select the first commit on startup Signed-off-by: leo --- src/ViewModels/InteractiveRebase.cs | 8 ++++++-- src/Views/InteractiveRebase.axaml | 2 +- src/Views/InteractiveRebase.axaml.cs | 9 +++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/ViewModels/InteractiveRebase.cs b/src/ViewModels/InteractiveRebase.cs index c7bb31f0..4e5b5c88 100644 --- a/src/ViewModels/InteractiveRebase.cs +++ b/src/ViewModels/InteractiveRebase.cs @@ -129,9 +129,11 @@ namespace SourceGit.ViewModels Task.Run(async () => { - var commits = await new Commands.QueryCommitsForInteractiveRebase(repoPath, on.SHA).GetResultAsync().ConfigureAwait(false); - var list = new List(); + var commits = await new Commands.QueryCommitsForInteractiveRebase(repoPath, on.SHA) + .GetResultAsync() + .ConfigureAwait(false); + var list = new List(); for (var i = 0; i < commits.Count; i++) { var c = commits[i]; @@ -141,6 +143,8 @@ namespace SourceGit.ViewModels Dispatcher.UIThread.Post(() => { Items.AddRange(list); + if (list.Count > 0) + SelectedItem = list[0]; IsLoading = false; }); }); diff --git a/src/Views/InteractiveRebase.axaml b/src/Views/InteractiveRebase.axaml index 05fe8266..8ab78b92 100644 --- a/src/Views/InteractiveRebase.axaml +++ b/src/Views/InteractiveRebase.axaml @@ -57,7 +57,7 @@ Background="{DynamicResource Brush.Contents}" ItemsSource="{Binding Items}" SelectionMode="Single" - SelectedItem="{Binding SelectedItem, Mode=OneWayToSource}" + SelectedItem="{Binding SelectedItem, Mode=TwoWay}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" Grid.IsSharedSizeScope="True"> diff --git a/src/Views/InteractiveRebase.axaml.cs b/src/Views/InteractiveRebase.axaml.cs index 8caa6960..da47b81b 100644 --- a/src/Views/InteractiveRebase.axaml.cs +++ b/src/Views/InteractiveRebase.axaml.cs @@ -5,6 +5,7 @@ using Avalonia.Controls.Shapes; using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.Media; +using Avalonia.VisualTree; namespace SourceGit.Views { @@ -73,6 +74,14 @@ namespace SourceGit.Views InitializeComponent(); } + protected override void OnLoaded(RoutedEventArgs e) + { + base.OnLoaded(e); + + var list = this.FindDescendantOfType(); + list?.Focus(); + } + private void CloseWindow(object _1, RoutedEventArgs _2) { Close();