Skip to content

Commit dd3e94f

Browse files
committed
feature: add context menu entry Copy to selected REF in commit details panel (#2321)
Signed-off-by: leo <longshuang@msn.cn>
1 parent e4d1651 commit dd3e94f

3 files changed

Lines changed: 31 additions & 1 deletion

File tree

src/Views/CommitBaseInfo.axaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,8 @@
199199
FontSize="12"
200200
AllowWrap="True"
201201
Margin="0,4,0,0"
202-
UseGraphColor="False"/>
202+
UseGraphColor="False"
203+
PointerReleased="OnCommitRefsPresenterPointerReleased"/>
203204
</Border>
204205

205206
<!-- Messages -->

src/Views/CommitBaseInfo.axaml.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,33 @@ private async void OnCopyAllCommitMessage(object sender, RoutedEventArgs e)
227227
e.Handled = true;
228228
}
229229

230+
private void OnCommitRefsPresenterPointerReleased(object sender, PointerReleasedEventArgs e)
231+
{
232+
e.Handled = true;
233+
234+
if (DataContext is ViewModels.CommitDetail detail &&
235+
sender is CommitRefsPresenter presenter &&
236+
e.Properties.PointerUpdateKind == PointerUpdateKind.RightButtonReleased)
237+
{
238+
var decorator = presenter.DecoratorAt(e.GetPosition(presenter));
239+
if (decorator != null)
240+
{
241+
var copy = new MenuItem();
242+
copy.Icon = this.CreateMenuIcon("Icons.Copy");
243+
copy.Header = App.Text("Copy");
244+
copy.Click += async (_, ev) =>
245+
{
246+
await this.CopyTextAsync(decorator.Name);
247+
ev.Handled = true;
248+
};
249+
250+
var menu = new ContextMenu();
251+
menu.Items.Add(copy);
252+
menu.Open(presenter);
253+
}
254+
}
255+
}
256+
230257
private IDisposable _iconResetTimer;
231258
}
232259
}

src/Views/CommitRefsPresenter.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ public override void Render(DrawingContext context)
119119
var x = 1.5;
120120
var y = 0.5;
121121

122+
context.FillRectangle(Brushes.Transparent, Bounds);
123+
122124
foreach (var item in _items)
123125
{
124126
if (allowWrap && x > 1.5 && x + item.Width > Bounds.Width)

0 commit comments

Comments
 (0)