Skip to content

Commit 163e8cc

Browse files
committed
feature: add context menu for issue link in commit details panel (#651)
Signed-off-by: leo <[email protected]>
1 parent 6486095 commit 163e8cc

24 files changed

+76
-66
lines changed

src/Models/CustomAction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public string Executable
3030

3131
public string Arguments
3232
{
33-
get => _arguments;
33+
get => _arguments;
3434
set => SetProperty(ref _arguments, value);
3535
}
3636

src/Native/Windows.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,8 +325,8 @@ private string FindVisualStudio()
325325
if (localMachine.OpenSubKey(@"SOFTWARE\Classes\VisualStudio.Launcher.sln\CLSID") is Microsoft.Win32.RegistryKey launcher)
326326
{
327327
// Get actual path to the executable
328-
if (launcher.GetValue(string.Empty) is string CLSID &&
329-
localMachine.OpenSubKey(@$"SOFTWARE\Classes\CLSID\{CLSID}\LocalServer32") is Microsoft.Win32.RegistryKey devenv &&
328+
if (launcher.GetValue(string.Empty) is string CLSID &&
329+
localMachine.OpenSubKey(@$"SOFTWARE\Classes\CLSID\{CLSID}\LocalServer32") is Microsoft.Win32.RegistryKey devenv &&
330330
devenv.GetValue(string.Empty) is string localServer32)
331331
{
332332
return localServer32!.Trim('\"');

src/Resources/Locales/en_US.axaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,8 @@
387387
<x:String x:Key="Text.InteractiveRebase" xml:space="preserve">Interactive Rebase</x:String>
388388
<x:String x:Key="Text.InteractiveRebase.Target" xml:space="preserve">Target Branch:</x:String>
389389
<x:String x:Key="Text.InteractiveRebase.On" xml:space="preserve">On:</x:String>
390+
<x:String x:Key="Text.IssueLinkCM.OpenInBrowser" xml:space="preserve">Open in Browser</x:String>
391+
<x:String x:Key="Text.IssueLinkCM.CopyLink" xml:space="preserve">Copy Link</x:String>
390392
<x:String x:Key="Text.Launcher.Error" xml:space="preserve">ERROR</x:String>
391393
<x:String x:Key="Text.Launcher.Info" xml:space="preserve">NOTICE</x:String>
392394
<x:String x:Key="Text.Merge" xml:space="preserve">Merge Branch</x:String>

src/Views/Blame.axaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,8 +407,8 @@ private void OnTextViewContextRequested(object sender, ContextRequestedEventArgs
407407

408408
var menu = new ContextMenu();
409409
menu.Items.Add(copy);
410+
menu.Open(TextArea.TextView);
410411

411-
TextArea.TextView.OpenContextMenu(menu);
412412
e.Handled = true;
413413
}
414414

src/Views/BranchCompare.axaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ private void OnChangeContextRequested(object sender, ContextRequestedEventArgs e
1515
if (DataContext is ViewModels.BranchCompare vm && sender is ChangeCollectionView view)
1616
{
1717
var menu = vm.CreateChangeContextMenu();
18-
view.OpenContextMenu(menu);
18+
menu?.Open(view);
1919
}
2020

2121
e.Handled = true;

src/Views/BranchTree.axaml.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ private void OnTreeContextRequested(object _1, ContextRequestedEventArgs _2)
374374
if (selected.Count == 1 && selected[0] is ViewModels.BranchTreeNode { Backend: Models.Remote remote })
375375
{
376376
var menu = repo.CreateContextMenuForRemote(remote);
377-
this.OpenContextMenu(menu);
377+
menu?.Open(this);
378378
return;
379379
}
380380

@@ -391,7 +391,7 @@ private void OnTreeContextRequested(object _1, ContextRequestedEventArgs _2)
391391
var menu = branch.IsLocal ?
392392
repo.CreateContextMenuForLocalBranch(branch) :
393393
repo.CreateContextMenuForRemoteBranch(branch);
394-
this.OpenContextMenu(menu);
394+
menu?.Open(this);
395395
}
396396
else if (branches.Find(x => x.IsCurrent) == null)
397397
{
@@ -405,7 +405,7 @@ private void OnTreeContextRequested(object _1, ContextRequestedEventArgs _2)
405405
ev.Handled = true;
406406
};
407407
menu.Items.Add(deleteMulti);
408-
this.OpenContextMenu(menu);
408+
menu?.Open(this);
409409
}
410410
}
411411

src/Views/CommitBaseInfo.axaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ private void OnCopyCommitSHA(object sender, RoutedEventArgs e)
6868

6969
private void OnOpenWebLink(object sender, RoutedEventArgs e)
7070
{
71-
if (DataContext is ViewModels.CommitDetail detail)
71+
if (DataContext is ViewModels.CommitDetail detail && sender is Control control)
7272
{
7373
var links = WebLinks;
7474
if (links.Count > 1)
@@ -88,7 +88,7 @@ private void OnOpenWebLink(object sender, RoutedEventArgs e)
8888
menu.Items.Add(item);
8989
}
9090

91-
(sender as Control)?.OpenContextMenu(menu);
91+
menu?.Open(control);
9292
}
9393
else if (links.Count == 1)
9494
{

src/Views/CommitChanges.axaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ private void OnChangeContextRequested(object sender, ContextRequestedEventArgs e
1616
DataContext is ViewModels.CommitDetail vm)
1717
{
1818
var menu = vm.CreateChangeContextMenu(selected[0]);
19-
view.OpenContextMenu(menu);
19+
menu?.Open(view);
2020
}
2121

2222
e.Handled = true;

src/Views/CommitDetail.axaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ private void OnChangeContextRequested(object sender, ContextRequestedEventArgs e
2626
if (DataContext is ViewModels.CommitDetail detail && sender is Grid grid && grid.DataContext is Models.Change change)
2727
{
2828
var menu = detail.CreateChangeContextMenu(change);
29-
grid.OpenContextMenu(menu);
29+
menu?.Open(grid);
3030
}
3131

3232
e.Handled = true;

src/Views/CommitMessagePresenter.cs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,41 @@ protected override void OnPointerPressed(PointerPressedEventArgs e)
176176
}
177177
else
178178
{
179-
Native.OS.OpenBrowser(_lastHover.Link);
179+
var point = e.GetCurrentPoint(this);
180+
var link = _lastHover.Link;
181+
182+
if (point.Properties.IsLeftButtonPressed)
183+
{
184+
Native.OS.OpenBrowser(link);
185+
}
186+
else if (point.Properties.IsRightButtonPressed)
187+
{
188+
var open = new MenuItem();
189+
open.Header = App.Text("IssueLinkCM.OpenInBrowser");
190+
open.Icon = App.CreateMenuIcon("Icons.OpenWith");
191+
open.Click += (_, ev) =>
192+
{
193+
ev.Handled = true;
194+
195+
var parentView = this.FindAncestorOfType<CommitBaseInfo>();
196+
if (parentView is { DataContext: ViewModels.CommitDetail detail })
197+
detail.NavigateTo(link);
198+
};
199+
200+
var copy = new MenuItem();
201+
copy.Header = App.Text("IssueLinkCM.CopyLink");
202+
copy.Icon = App.CreateMenuIcon("Icons.Copy");
203+
copy.Click += (_, ev) =>
204+
{
205+
App.CopyText(link);
206+
ev.Handled = true;
207+
};
208+
209+
var menu = new ContextMenu();
210+
menu.Items.Add(open);
211+
menu.Items.Add(copy);
212+
menu.Open(this);
213+
}
180214
}
181215

182216
e.Handled = true;

0 commit comments

Comments
 (0)