fix: hotkeys not work in change list (INFORMATION page)

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo
2025-07-08 18:06:11 +08:00
parent 92fb4c8625
commit 7fa1912721
2 changed files with 32 additions and 20 deletions

View File

@@ -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<Models.Change> 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;
};

View File

@@ -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;
}
}
}
}
}