Skip to content

Commit 6df077e

Browse files
committed
feature: allows change rebase action for multiple commits from context menu command (#1775)
Signed-off-by: leo <[email protected]>
1 parent 9b60cb5 commit 6df077e

File tree

3 files changed

+31
-26
lines changed

3 files changed

+31
-26
lines changed

src/ViewModels/InteractiveRebase.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,6 @@ public void MoveItemUp(InteractiveRebaseItem item)
185185
var prev = Items[idx - 1];
186186
Items.RemoveAt(idx - 1);
187187
Items.Insert(idx, prev);
188-
PreSelected = item;
189188
UpdateItems();
190189
}
191190
}
@@ -198,7 +197,6 @@ public void MoveItemDown(InteractiveRebaseItem item)
198197
var next = Items[idx + 1];
199198
Items.RemoveAt(idx + 1);
200199
Items.Insert(idx, next);
201-
PreSelected = item;
202200
UpdateItems();
203201
}
204202
}

src/Views/InteractiveRebase.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
<Border Grid.Row="2" Margin="8,0,8,8" BorderThickness="1" BorderBrush="{DynamicResource Brush.Border2}">
5454
<Grid RowDefinitions="*,3,*">
5555
<v:InteractiveRebaseListBox Grid.Row="0"
56+
x:Name="IRItemListBox"
5657
Focusable="True"
5758
Background="{DynamicResource Brush.Contents}"
5859
ItemsSource="{Binding Items}"

src/Views/InteractiveRebase.axaml.cs

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -75,15 +75,14 @@ protected override void OnKeyDown(KeyEventArgs e)
7575
}
7676
else if (e.KeyModifiers.HasFlag(OperatingSystem.IsMacOS() ? KeyModifiers.Meta : KeyModifiers.Control) && items.Count == 1)
7777
{
78-
var item = items[0];
7978
if (e.Key == Key.Up)
8079
{
81-
vm.MoveItemUp(item);
80+
vm.MoveItemUp(items[0]);
8281
e.Handled = true;
8382
}
8483
else if (e.Key == Key.Down)
8584
{
86-
vm.MoveItemDown(item);
85+
vm.MoveItemDown(items[0]);
8786
e.Handled = true;
8887
}
8988
}
@@ -99,6 +98,7 @@ public InteractiveRebase()
9998
{
10099
CloseOnESC = true;
101100
InitializeComponent();
101+
IRItemListBox?.Focus();
102102
}
103103

104104
public void OpenCommitMessageEditor(ViewModels.InteractiveRebaseItem item)
@@ -108,29 +108,21 @@ public void OpenCommitMessageEditor(ViewModels.InteractiveRebaseItem item)
108108
dialog.ShowDialog(this);
109109
}
110110

111-
protected override void OnLoaded(RoutedEventArgs e)
112-
{
113-
base.OnLoaded(e);
114-
115-
var list = this.FindDescendantOfType<InteractiveRebaseListBox>();
116-
list?.Focus();
117-
}
118-
119111
private void CloseWindow(object _1, RoutedEventArgs _2)
120112
{
121113
Close();
122114
}
123115

124-
private void OnRowsSelectionChanged(object sender, SelectionChangedEventArgs e)
116+
private void OnRowsSelectionChanged(object _, SelectionChangedEventArgs e)
125117
{
126-
if (DataContext is not ViewModels.InteractiveRebase vm || sender is not InteractiveRebaseListBox listBox)
118+
if (DataContext is not ViewModels.InteractiveRebase vm)
127119
return;
128120

129121
var isFirstTimeHere = !_firstSelectionChangedHandled;
130122
if (isFirstTimeHere)
131123
_firstSelectionChangedHandled = true;
132124

133-
var selected = listBox.SelectedItems ?? new List<object>();
125+
var selected = IRItemListBox.SelectedItems ?? new List<object>();
134126
var items = new List<ViewModels.InteractiveRebaseItem>();
135127
foreach (var item in selected)
136128
{
@@ -270,20 +262,34 @@ private void CreateActionMenuItem(MenuFlyout flyout, ViewModels.InteractiveRebas
270262
menuItem.Icon = new Ellipse() { Width = 14, Height = 14, Fill = iconBrush };
271263
menuItem.Header = header;
272264
menuItem.Tag = hotkey;
273-
menuItem.Click += (_, e) =>
265+
menuItem.Click += (_, __) => ChangeItemsAction(item, action);
266+
267+
flyout.Items.Add(menuItem);
268+
}
269+
270+
private void ChangeItemsAction(ViewModels.InteractiveRebaseItem target, Models.InteractiveRebaseAction action)
271+
{
272+
if (DataContext is not ViewModels.InteractiveRebase vm)
273+
return;
274+
275+
var selected = IRItemListBox.SelectedItems ?? new List<object>();
276+
var items = new List<ViewModels.InteractiveRebaseItem>();
277+
foreach (var item in selected)
274278
{
275-
if (DataContext is ViewModels.InteractiveRebase vm)
276-
{
277-
vm.ChangeAction([item], action);
279+
if (item is ViewModels.InteractiveRebaseItem rebaseItem)
280+
items.Add(rebaseItem);
281+
}
278282

279-
if (action == Models.InteractiveRebaseAction.Reword)
280-
OpenCommitMessageEditor(item);
281-
}
283+
if (!items.Contains(target))
284+
{
285+
items.Clear();
286+
items.Add(target);
287+
}
282288

283-
e.Handled = true;
284-
};
289+
vm.ChangeAction(items, action);
285290

286-
flyout.Items.Add(menuItem);
291+
if (items.Count == 1 && action == Models.InteractiveRebaseAction.Reword)
292+
OpenCommitMessageEditor(items[0]);
287293
}
288294

289295
private bool _firstSelectionChangedHandled = false;

0 commit comments

Comments
 (0)