diff --git a/src/ViewModels/Welcome.cs b/src/ViewModels/Welcome.cs index 78dfefba..4b6dc7d4 100644 --- a/src/ViewModels/Welcome.cs +++ b/src/ViewModels/Welcome.cs @@ -173,6 +173,25 @@ namespace SourceGit.ViewModels activePage.Popup = new CreateGroup(null); } + public RepositoryNode FindParentGroup(RepositoryNode node, RepositoryNode group = null) + { + var collection = (group == null) ? Preferences.Instance.RepositoryNodes : group.SubNodes; + if (collection.Contains(node)) + return group; + + foreach (var item in collection) + { + if (!item.IsRepository) + { + var parent = FindParentGroup(node, item); + if (parent != null) + return parent; + } + } + + return null; + } + public void MoveNode(RepositoryNode from, RepositoryNode to) { Preferences.Instance.MoveNode(from, to, true); diff --git a/src/Views/Welcome.axaml.cs b/src/Views/Welcome.axaml.cs index 521e4530..75ac4079 100644 --- a/src/Views/Welcome.axaml.cs +++ b/src/Views/Welcome.axaml.cs @@ -215,7 +215,7 @@ namespace SourceGit.Views if (to == null) return; - e.DragEffects = to.IsRepository ? DragDropEffects.None : DragDropEffects.Move; + e.DragEffects = DragDropEffects.Move; e.Handled = true; } } @@ -226,12 +226,15 @@ namespace SourceGit.Views return; var to = grid.DataContext as ViewModels.RepositoryNode; - if (to == null || to.IsRepository) + if (to == null) { e.Handled = true; return; } + if (to.IsRepository) + to = ViewModels.Welcome.Instance.FindParentGroup(to); + if (e.Data.Contains("MovedRepositoryTreeNode") && e.Data.Get("MovedRepositoryTreeNode") is ViewModels.RepositoryNode moved) {