From 7fa19127217b1c706714ff993db6b01d8c3f40e4 Mon Sep 17 00:00:00 2001 From: leo Date: Tue, 8 Jul 2025 18:06:11 +0800 Subject: [PATCH] fix: hotkeys not work in change list (`INFORMATION` page) Signed-off-by: leo --- src/ViewModels/CommitDetail.cs | 13 +++++++---- src/Views/CommitDetail.axaml.cs | 39 +++++++++++++++++++-------------- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/ViewModels/CommitDetail.cs b/src/ViewModels/CommitDetail.cs index 94ecacae..8c9fdc9e 100644 --- a/src/ViewModels/CommitDetail.cs +++ b/src/ViewModels/CommitDetail.cs @@ -246,6 +246,14 @@ namespace SourceGit.ViewModels return Native.OS.GetAbsPath(_repo.FullPath, path); } + public void OpenChangeInMergeTool(Models.Change c) + { + var toolType = Preferences.Instance.ExternalMergeToolType; + var toolPath = Preferences.Instance.ExternalMergeToolPath; + var opt = new Models.DiffOption(_commit, c); + new Commands.DiffTool(_repo.FullPath, toolType, toolPath, opt).Open(); + } + public ContextMenu CreateChangeContextMenuByFolder(ChangeTreeNode node, List changes) { var fullPath = Native.OS.GetAbsPath(_repo.FullPath, node.FullPath); @@ -335,10 +343,7 @@ namespace SourceGit.ViewModels openWithMerger.Tag = OperatingSystem.IsMacOS() ? "⌘+⇧+D" : "Ctrl+Shift+D"; openWithMerger.Click += (_, ev) => { - var toolType = Preferences.Instance.ExternalMergeToolType; - var toolPath = Preferences.Instance.ExternalMergeToolPath; - var opt = new Models.DiffOption(_commit, change); - new Commands.DiffTool(_repo.FullPath, toolType, toolPath, opt).Open(); + OpenChangeInMergeTool(change); ev.Handled = true; }; diff --git a/src/Views/CommitDetail.axaml.cs b/src/Views/CommitDetail.axaml.cs index d3bffd46..ef4aa72d 100644 --- a/src/Views/CommitDetail.axaml.cs +++ b/src/Views/CommitDetail.axaml.cs @@ -11,6 +11,29 @@ namespace SourceGit.Views InitializeComponent(); } + private async void OnCommitListKeyDown(object sender, KeyEventArgs e) + { + if (DataContext is ViewModels.CommitDetail detail && + sender is ListBox { SelectedItem: Models.Change change } && + e.KeyModifiers.HasFlag(OperatingSystem.IsMacOS() ? KeyModifiers.Meta : KeyModifiers.Control)) + { + if (e.Key == Key.C) + { + var path = change.Path; + if (e.KeyModifiers.HasFlag(KeyModifiers.Shift)) + path = detail.GetAbsPath(path); + + await App.CopyTextAsync(path); + e.Handled = true; + } + else if (e.Key == Key.D && e.KeyModifiers.HasFlag(KeyModifiers.Shift)) + { + detail.OpenChangeInMergeTool(change); + e.Handled = true; + } + } + } + private void OnChangeDoubleTapped(object sender, TappedEventArgs e) { if (DataContext is ViewModels.CommitDetail detail && sender is Grid { DataContext: Models.Change change }) @@ -32,21 +55,5 @@ namespace SourceGit.Views e.Handled = true; } - - private async void OnCommitListKeyDown(object sender, KeyEventArgs e) - { - if (DataContext is ViewModels.CommitDetail detail && sender is Grid { DataContext: Models.Change change }) - { - if (e.Key == Key.C && e.KeyModifiers.HasFlag(OperatingSystem.IsMacOS() ? KeyModifiers.Meta : KeyModifiers.Control)) - { - var path = change.Path; - if (e.KeyModifiers.HasFlag(KeyModifiers.Shift)) - path = detail.GetAbsPath(path); - - await App.CopyTextAsync(path); - e.Handled = true; - } - } - } } }