enhance: allow to use arrow keys to select changes up/down after stage/unstage previous selected changes by hotkey (#1361)

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo
2025-05-24 21:29:48 +08:00
parent ef53dd0025
commit 22339ab619
4 changed files with 20 additions and 11 deletions

View File

@@ -30,7 +30,8 @@
<UserControl.DataTemplates>
<DataTemplate DataType="vm:ChangeCollectionAsTree">
<v:ChangeCollectionContainer ItemsSource="{Binding Rows}"
<v:ChangeCollectionContainer Focusable="True"
ItemsSource="{Binding Rows}"
SelectedItems="{Binding SelectedRows, Mode=TwoWay}"
SelectionMode="{Binding #ThisControl.SelectionMode}"
SelectionChanged="OnRowSelectionChanged">
@@ -66,7 +67,8 @@
</DataTemplate>
<DataTemplate DataType="vm:ChangeCollectionAsGrid">
<v:ChangeCollectionContainer ItemsSource="{Binding Changes}"
<v:ChangeCollectionContainer Focusable="True"
ItemsSource="{Binding Changes}"
SelectedItems="{Binding SelectedChanges, Mode=TwoWay}"
SelectionMode="{Binding #ThisControl.SelectionMode}"
SelectionChanged="OnRowSelectionChanged">
@@ -98,7 +100,8 @@
</DataTemplate>
<DataTemplate DataType="vm:ChangeCollectionAsList">
<v:ChangeCollectionContainer ItemsSource="{Binding Changes}"
<v:ChangeCollectionContainer Focusable="True"
ItemsSource="{Binding Changes}"
SelectedItems="{Binding SelectedChanges, Mode=TwoWay}"
SelectionMode="{Binding #ThisControl.SelectionMode}"
SelectionChanged="OnRowSelectionChanged">

View File

@@ -145,6 +145,7 @@ namespace SourceGit.Views
removeCount++;
}
tree.Rows.RemoveRange(idx + 1, removeCount);
}
}
@@ -209,6 +210,13 @@ namespace SourceGit.Views
return null;
}
public void TakeFocus()
{
var container = this.FindDescendantOfType<ChangeCollectionContainer>();
if (container is { IsFocused: false })
container.Focus();
}
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{
base.OnPropertyChanged(change);

View File

@@ -122,7 +122,6 @@
<!-- Unstaged Changes -->
<v:ChangeCollectionView Grid.Row="1"
x:Name="UnstagedChangesView"
Focusable="True"
IsUnstagedChange="True"
SelectionMode="Multiple"
Background="{DynamicResource Brush.Contents}"
@@ -173,7 +172,6 @@
<!-- Staged Changes -->
<v:ChangeCollectionView Grid.Row="1"
x:Name="StagedChangesView"
Focusable="True"
IsUnstagedChange="False"
SelectionMode="Multiple"
Background="{DynamicResource Brush.Contents}"

View File

@@ -51,7 +51,7 @@ namespace SourceGit.Views
{
var next = UnstagedChangesView.GetNextChangeWithoutSelection();
vm.StageSelected(next);
UnstagedChangesView.Focus();
UnstagedChangesView.TakeFocus();
e.Handled = true;
}
}
@@ -62,7 +62,7 @@ namespace SourceGit.Views
{
var next = StagedChangesView.GetNextChangeWithoutSelection();
vm.UnstageSelected(next);
StagedChangesView.Focus();
StagedChangesView.TakeFocus();
e.Handled = true;
}
}
@@ -75,7 +75,7 @@ namespace SourceGit.Views
{
var next = UnstagedChangesView.GetNextChangeWithoutSelection();
vm.StageSelected(next);
UnstagedChangesView.Focus();
UnstagedChangesView.TakeFocus();
e.Handled = true;
return;
}
@@ -94,7 +94,7 @@ namespace SourceGit.Views
{
var next = StagedChangesView.GetNextChangeWithoutSelection();
vm.UnstageSelected(next);
StagedChangesView.Focus();
StagedChangesView.TakeFocus();
e.Handled = true;
}
}
@@ -105,7 +105,7 @@ namespace SourceGit.Views
{
var next = UnstagedChangesView.GetNextChangeWithoutSelection();
vm.StageSelected(next);
UnstagedChangesView.Focus();
UnstagedChangesView.TakeFocus();
}
e.Handled = true;
@@ -117,7 +117,7 @@ namespace SourceGit.Views
{
var next = StagedChangesView.GetNextChangeWithoutSelection();
vm.UnstageSelected(next);
StagedChangesView.Focus();
StagedChangesView.TakeFocus();
}
e.Handled = true;