diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml
index 640cb8f3..0ebeeeb0 100644
--- a/src/Resources/Locales/en_US.axaml
+++ b/src/Resources/Locales/en_US.axaml
@@ -626,6 +626,7 @@
Open in Terminal
Use relative time in histories
View Logs
+ Visit '{0}' in Browser
WORKTREES
ADD WORKTREE
PRUNE
diff --git a/src/Resources/Locales/zh_CN.axaml b/src/Resources/Locales/zh_CN.axaml
index 5db542b1..6bf7f5d1 100644
--- a/src/Resources/Locales/zh_CN.axaml
+++ b/src/Resources/Locales/zh_CN.axaml
@@ -630,6 +630,7 @@
在终端中打开
在提交列表中使用相对时间
查看命令日志
+ 访问远程仓库 '{0}'
工作树列表
新增工作树
清理
diff --git a/src/Resources/Locales/zh_TW.axaml b/src/Resources/Locales/zh_TW.axaml
index 6fd380ec..9ed35c8a 100644
--- a/src/Resources/Locales/zh_TW.axaml
+++ b/src/Resources/Locales/zh_TW.axaml
@@ -630,6 +630,7 @@
在終端機中開啟
在提交列表中使用相對時間
檢視 Git 指令記錄
+ 檢視遠端存放庫 '{0}'
工作區列表
新增工作區
清理
diff --git a/src/ViewModels/Repository.cs b/src/ViewModels/Repository.cs
index 5e8bd40d..bf084fb0 100644
--- a/src/ViewModels/Repository.cs
+++ b/src/ViewModels/Repository.cs
@@ -583,45 +583,87 @@ namespace SourceGit.ViewModels
Task.Run(RefreshStashes);
}
- public void OpenInFileManager()
- {
- Native.OS.OpenInFileManager(_fullpath);
- }
-
- public void OpenInTerminal()
- {
- Native.OS.OpenTerminal(_fullpath);
- }
-
public ContextMenu CreateContextMenuForExternalTools()
{
- var tools = Native.OS.ExternalTools;
- if (tools.Count == 0)
- {
- App.RaiseException(_fullpath, "No available external editors found!");
- return null;
- }
-
var menu = new ContextMenu();
menu.Placement = PlacementMode.BottomEdgeAlignedLeft;
+
RenderOptions.SetBitmapInterpolationMode(menu, BitmapInterpolationMode.HighQuality);
+ RenderOptions.SetEdgeMode(menu, EdgeMode.Antialias);
+ RenderOptions.SetTextRenderingMode(menu, TextRenderingMode.Antialias);
- foreach (var tool in tools)
+ var explore = new MenuItem();
+ explore.Header = App.Text("Repository.Explore");
+ explore.Icon = App.CreateMenuIcon("Icons.Explore");
+ explore.Click += (_, e) =>
{
- var dupTool = tool;
+ Native.OS.OpenInFileManager(_fullpath);
+ e.Handled = true;
+ };
- var item = new MenuItem();
- item.Header = App.Text("Repository.OpenIn", dupTool.Name);
- item.Icon = new Image { Width = 16, Height = 16, Source = dupTool.IconImage };
- item.Click += (_, e) =>
+ var terminal = new MenuItem();
+ terminal.Header = App.Text("Repository.Terminal");
+ terminal.Icon = App.CreateMenuIcon("Icons.Terminal");
+ terminal.Click += (_, e) =>
+ {
+ Native.OS.OpenTerminal(_fullpath);
+ e.Handled = true;
+ };
+
+ menu.Items.Add(explore);
+ menu.Items.Add(terminal);
+
+ var tools = Native.OS.ExternalTools;
+ if (tools.Count > 0)
+ {
+ menu.Items.Add(new MenuItem() { Header = "-" });
+
+ foreach (var tool in Native.OS.ExternalTools)
{
- dupTool.Open(_fullpath);
- e.Handled = true;
- };
+ var dupTool = tool;
- menu.Items.Add(item);
+ var item = new MenuItem();
+ item.Header = App.Text("Repository.OpenIn", dupTool.Name);
+ item.Icon = new Image { Width = 16, Height = 16, Source = dupTool.IconImage };
+ item.Click += (_, e) =>
+ {
+ dupTool.Open(_fullpath);
+ e.Handled = true;
+ };
+
+ menu.Items.Add(item);
+ }
}
+ var urls = new Dictionary();
+ foreach (var r in _remotes)
+ {
+ if (r.TryGetVisitURL(out var visit))
+ urls.Add(r.Name, visit);
+ }
+
+ if (urls.Count > 0)
+ {
+ menu.Items.Add(new MenuItem() { Header = "-" });
+
+ foreach (var url in urls)
+ {
+ var name = url.Key;
+ var addr = url.Value;
+
+ var item = new MenuItem();
+ item.Header = App.Text("Repository.Visit", name);
+ item.Icon = App.CreateMenuIcon("Icons.Remotes");
+ item.Click += (_, e) =>
+ {
+ Native.OS.OpenBrowser(addr);
+ e.Handled = true;
+ };
+
+ menu.Items.Add(item);
+ }
+ }
+
return menu;
}
diff --git a/src/Views/RepositoryToolbar.axaml b/src/Views/RepositoryToolbar.axaml
index 85b2ad76..208ff725 100644
--- a/src/Views/RepositoryToolbar.axaml
+++ b/src/Views/RepositoryToolbar.axaml
@@ -9,16 +9,8 @@
x:DataType="vm:Repository">
-
-
-
-