Skip to content

Commit 7c59183

Browse files
committed
feature: add hotkeys to stashes page
Signed-off-by: leo <[email protected]>
1 parent 23e578f commit 7c59183

File tree

3 files changed

+38
-27
lines changed

3 files changed

+38
-27
lines changed

src/ViewModels/StashesPage.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,11 @@ public Models.Stash SelectedStash
7878

7979
Dispatcher.UIThread.Post(() =>
8080
{
81-
_untracked = untracked;
82-
Changes = changes;
81+
if (value.SHA.Equals(_selectedStash?.SHA ?? string.Empty, StringComparison.Ordinal))
82+
{
83+
_untracked = untracked;
84+
Changes = changes;
85+
}
8386
});
8487
});
8588
}
@@ -139,9 +142,6 @@ public void Dispose()
139142

140143
public ContextMenu MakeContextMenu(Models.Stash stash)
141144
{
142-
if (stash == null)
143-
return null;
144-
145145
var apply = new MenuItem();
146146
apply.Header = App.Text("StashCM.Apply");
147147
apply.Icon = App.CreateMenuIcon("Icons.CheckCircled");
@@ -154,6 +154,7 @@ public ContextMenu MakeContextMenu(Models.Stash stash)
154154
var drop = new MenuItem();
155155
drop.Header = App.Text("StashCM.Drop");
156156
drop.Icon = App.CreateMenuIcon("Icons.Clear");
157+
drop.Tag = "Back/Delete";
157158
drop.Click += (_, ev) =>
158159
{
159160
Drop(stash);
@@ -197,6 +198,7 @@ public ContextMenu MakeContextMenu(Models.Stash stash)
197198
var copy = new MenuItem();
198199
copy.Header = App.Text("StashCM.CopyMessage");
199200
copy.Icon = App.CreateMenuIcon("Icons.Copy");
201+
copy.Tag = OperatingSystem.IsMacOS() ? "⌘+C" : "Ctrl+C";
200202
copy.Click += async (_, ev) =>
201203
{
202204
await App.CopyTextAsync(stash.Message);
@@ -308,13 +310,13 @@ public void ClearSearchFilter()
308310

309311
public void Apply(Models.Stash stash)
310312
{
311-
if (stash != null && _repo.CanCreatePopup())
313+
if (_repo.CanCreatePopup())
312314
_repo.ShowPopup(new ApplyStash(_repo, stash));
313315
}
314316

315317
public void Drop(Models.Stash stash)
316318
{
317-
if (stash != null && _repo.CanCreatePopup())
319+
if (_repo.CanCreatePopup())
318320
_repo.ShowPopup(new DropStash(_repo, stash));
319321
}
320322

src/Views/StashesPage.axaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@
6565
ItemsSource="{Binding VisibleStashes}"
6666
SelectedItem="{Binding SelectedStash, Mode=TwoWay}"
6767
SelectionMode="Single"
68-
DoubleTapped="OnStashListDoubleTapped"
6968
KeyDown="OnStashListKeyDown"
7069
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
7170
ScrollViewer.VerticalScrollBarVisibility="Auto">
@@ -89,6 +88,7 @@
8988
BorderBrush="{DynamicResource Brush.Border2}" BorderThickness="0,0,0,1"
9089
Padding="4"
9190
ContextRequested="OnStashContextRequested"
91+
DoubleTapped="OnStashDoubleTapped"
9292
ToolTip.Tip="{Binding Message}">
9393
<Grid RowDefinitions="Auto,*" >
9494
<Grid Grid.Row="0" ColumnDefinitions="*,Auto">

src/Views/StashesPage.axaml.cs

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using Avalonia.Controls;
23
using Avalonia.Input;
34

@@ -23,34 +24,41 @@ private void OnMainLayoutSizeChanged(object sender, SizeChangedEventArgs e)
2324
layout.StashesLeftWidth = new GridLength(maxLeft, GridUnitType.Pixel);
2425
}
2526

26-
private void OnStashListDoubleTapped(object _, TappedEventArgs e)
27+
private async void OnStashListKeyDown(object sender, KeyEventArgs e)
2728
{
28-
if (DataContext is not ViewModels.StashesPage vm)
29-
return;
30-
31-
vm.Apply(vm.SelectedStash);
32-
e.Handled = true;
29+
if (DataContext is ViewModels.StashesPage { SelectedStash: { } stash } vm)
30+
{
31+
if (e.Key is Key.Delete or Key.Back)
32+
{
33+
vm.Drop(stash);
34+
e.Handled = true;
35+
}
36+
else if (e.Key is Key.C && e.KeyModifiers == (OperatingSystem.IsMacOS() ? KeyModifiers.Meta : KeyModifiers.Control))
37+
{
38+
await App.CopyTextAsync(stash.Message);
39+
e.Handled = true;
40+
}
41+
}
3342
}
3443

35-
private void OnStashListKeyDown(object sender, KeyEventArgs e)
44+
private void OnStashContextRequested(object sender, ContextRequestedEventArgs e)
3645
{
37-
if (e.Key is not (Key.Delete or Key.Back))
38-
return;
39-
40-
if (DataContext is not ViewModels.StashesPage vm)
41-
return;
46+
if (DataContext is ViewModels.StashesPage vm &&
47+
sender is Border { DataContext: Models.Stash stash } border)
48+
{
49+
var menu = vm.MakeContextMenu(stash);
50+
menu.Open(border);
51+
}
4252

43-
vm.Drop(vm.SelectedStash);
4453
e.Handled = true;
4554
}
4655

47-
private void OnStashContextRequested(object sender, ContextRequestedEventArgs e)
56+
private void OnStashDoubleTapped(object sender, TappedEventArgs e)
4857
{
49-
if (DataContext is ViewModels.StashesPage vm && sender is Border border)
50-
{
51-
var menu = vm.MakeContextMenu(border.DataContext as Models.Stash);
52-
menu?.Open(border);
53-
}
58+
if (DataContext is ViewModels.StashesPage vm &&
59+
sender is Border { DataContext: Models.Stash stash })
60+
vm.Apply(stash);
61+
5462
e.Handled = true;
5563
}
5664

@@ -61,6 +69,7 @@ private void OnChangeContextRequested(object sender, ContextRequestedEventArgs e
6169
var menu = vm.MakeContextMenuForChange();
6270
menu?.Open(view);
6371
}
72+
6473
e.Handled = true;
6574
}
6675
}

0 commit comments

Comments
 (0)