diff --git a/src/ViewModels/Launcher.cs b/src/ViewModels/Launcher.cs index 7b17290a7..3fdc83c97 100644 --- a/src/ViewModels/Launcher.cs +++ b/src/ViewModels/Launcher.cs @@ -296,7 +296,7 @@ public void OpenRepositoryInTab(string repo, LauncherPage page) IsUnmanaged = true }; - OpenRepositoryInTab(node, null); + OpenRepositoryInTab(node, page); } public void OpenRepositoryInTab(RepositoryNode node, LauncherPage page) @@ -305,6 +305,9 @@ public void OpenRepositoryInTab(RepositoryNode node, LauncherPage page) { if (one.Node.Id == node.Id) { + if (page != null && page.Node.IsRepository) + one.Node.Name = ComposeSubmoduleTitle(page, node); + ActivePage = one; return; } @@ -354,6 +357,14 @@ public void OpenRepositoryInTab(RepositoryNode node, LauncherPage page) page.Data = repo; } } + else if (page.Node.IsRepository) + { + var parent = page; + node.Name = ComposeSubmoduleTitle(parent, node); + page = new LauncherPage(node, repo); + var parentIdx = Pages.IndexOf(parent); + Pages.Insert(parentIdx + 1, page); + } else { page.Node = node; @@ -468,6 +479,12 @@ private void PostActivePageChanged() CommandPalette = null; } + private static string ComposeSubmoduleTitle(LauncherPage parent, RepositoryNode node) + { + var baseName = Path.GetFileName(node.Id); + return $"{parent.Node.Name} : {baseName}"; + } + private Workspace _activeWorkspace; private LauncherPage _activePage; private bool _ignoreIndexChange; diff --git a/src/ViewModels/Repository.cs b/src/ViewModels/Repository.cs index 99a3a47e2..80ff356f5 100644 --- a/src/ViewModels/Repository.cs +++ b/src/ViewModels/Repository.cs @@ -1552,7 +1552,7 @@ public void OpenSubmodule(string submodule) var root = Path.GetFullPath(Path.Combine(FullPath, submodule)); var normalizedPath = root.Replace('\\', '/').TrimEnd('/'); - App.GetLauncher().OpenRepositoryInTab(normalizedPath, null); + App.GetLauncher().OpenRepositoryInTab(normalizedPath, selfPage); } public void AddWorktree()