From 80d28c3e4626c5b77db37c6be42d460f2d64c744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=B6ran=20W?= Date: Wed, 25 Jun 2025 09:59:47 +0200 Subject: [PATCH] Allow drag-drop of item (or folder) anywhere in repo-list Dropping on a non-Group item was not allowed earlier, but now it adds/moves the dragged item into the parent Group (possibly Root) of the drop-target item. --- src/ViewModels/Welcome.cs | 19 +++++++++++++++++++ src/Views/Welcome.axaml.cs | 7 +++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/ViewModels/Welcome.cs b/src/ViewModels/Welcome.cs index 78dfefba9..4b6dc7d4f 100644 --- a/src/ViewModels/Welcome.cs +++ b/src/ViewModels/Welcome.cs @@ -173,6 +173,25 @@ public void AddRootNode() 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 521e4530e..75ac40797 100644 --- a/src/Views/Welcome.axaml.cs +++ b/src/Views/Welcome.axaml.cs @@ -215,7 +215,7 @@ private void DragOverTreeNode(object sender, DragEventArgs e) if (to == null) return; - e.DragEffects = to.IsRepository ? DragDropEffects.None : DragDropEffects.Move; + e.DragEffects = DragDropEffects.Move; e.Handled = true; } } @@ -226,12 +226,15 @@ private void DropOnTreeNode(object sender, DragEventArgs e) 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) {