feature: support to open selected folder in file manager

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo 2025-06-19 09:32:12 +08:00
parent fcf1107304
commit cadcf40d74
No known key found for this signature in database
2 changed files with 40 additions and 2 deletions

View file

@ -1052,6 +1052,22 @@ namespace SourceGit.ViewModels
return menu;
}
if (!string.IsNullOrEmpty(selectedSingleFolder))
{
var dir = Path.Combine(_repo.FullPath, selectedSingleFolder);
var explore = new MenuItem();
explore.Header = App.Text("RevealFile");
explore.Icon = App.CreateMenuIcon("Icons.Explore");
explore.IsEnabled = Directory.Exists(dir);
explore.Click += (_, e) =>
{
Native.OS.OpenInFileManager(dir, true);
e.Handled = true;
};
menu.Items.Add(explore);
menu.Items.Add(new MenuItem() { Header = "-" });
}
var stage = new MenuItem();
stage.Header = App.Text("FileCM.StageMulti", _selectedUnstaged.Count);
stage.Icon = App.CreateMenuIcon("Icons.File.Add");
@ -1134,7 +1150,7 @@ namespace SourceGit.ViewModels
return menu;
}
public ContextMenu CreateContextMenuForStagedChanges()
public ContextMenu CreateContextMenuForStagedChanges(string selectedSingleFolder)
{
if (_selectedStaged == null || _selectedStaged.Count == 0)
return null;
@ -1383,6 +1399,23 @@ namespace SourceGit.ViewModels
}
else
{
if (!string.IsNullOrEmpty(selectedSingleFolder))
{
var dir = Path.Combine(_repo.FullPath, selectedSingleFolder);
var explore = new MenuItem();
explore.IsEnabled = Directory.Exists(dir);
explore.Header = App.Text("RevealFile");
explore.Icon = App.CreateMenuIcon("Icons.Explore");
explore.Click += (_, e) =>
{
Native.OS.OpenInFileManager(dir, true);
e.Handled = true;
};
menu.Items.Add(explore);
menu.Items.Add(new MenuItem() { Header = "-" });
}
var unstage = new MenuItem();
unstage.Header = App.Text("FileCM.UnstageMulti", _selectedStaged.Count);
unstage.Icon = App.CreateMenuIcon("Icons.File.Remove");

View file

@ -45,7 +45,12 @@ namespace SourceGit.Views
{
if (DataContext is ViewModels.WorkingCopy vm && sender is Control control)
{
var menu = vm.CreateContextMenuForStagedChanges();
var container = control.FindDescendantOfType<ChangeCollectionContainer>();
var selectedSingleFolder = string.Empty;
if (container is { SelectedItems: { Count: 1 }, SelectedItem: ViewModels.ChangeTreeNode { IsFolder: true } node })
selectedSingleFolder = node.FullPath;
var menu = vm.CreateContextMenuForStagedChanges(selectedSingleFolder);
menu?.Open(control);
e.Handled = true;
}