1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-17 15:46:05 +02:00

Propertly remove nested workspace folders.

This commit is contained in:
Fusion 2022-07-16 03:13:03 +02:00
parent 1eb2b97db7
commit ea39dc6f2b

View file

@ -1777,29 +1777,35 @@ namespace IDE.ui
let root = mListView.GetRoot(); let root = mListView.GetRoot();
List<ListViewItem> itemsToMove = scope .(); List<ListViewItem> itemsToMove = scope .();
List<WorkspaceFolder> foldersToDelete = scope .(); List<WorkspaceFolder> foldersToDelete = scope .();
root.WithSelectedItems(scope [&] (selectedItem) => { root.WithSelectedItems(scope [&] (selectedItem) => {
if (mListViewToWorkspaceFolderMap.GetValue(selectedItem) case .Ok(let folder)) if (mListViewToWorkspaceFolderMap.GetValue(selectedItem) case .Ok(let folder))
{ {
foldersToDelete.Add(folder); foldersToDelete.Add(folder);
mListViewToWorkspaceFolderMap.Remove(folder.mListView);
selectedItem.WithItems(scope [&] (item) => { selectedItem.WithItems(scope [&] (item) => {
if (mListViewToProjectMap.GetValue(item) case .Ok(let project)) if (mListViewToProjectMap.GetValue(item) case .Ok(let project))
{ {
if (project.mParentFolder == null) if (project.mParentFolder == null)
itemsToMove.Add(item); itemsToMove.Add(item);
} }
else if (mListViewToWorkspaceFolderMap.GetValue(item) case .Ok(let itemFolder))
{
foldersToDelete.Add(itemFolder);
mListViewToWorkspaceFolderMap.Remove(itemFolder.mListView);
}
}); });
} }
}); });
for (let projectListViewItem in itemsToMove) for (let listViewItem in itemsToMove)
{ {
projectListViewItem.mParentItem.RemoveChildItem(projectListViewItem, false); listViewItem.mParentItem.RemoveChildItem(listViewItem, false);
root.AddChildAtIndex(1, projectListViewItem); root.AddChildAtIndex(1, listViewItem);
if (mListViewToProjectMap.TryGetValue(projectListViewItem, let projectItem)) if (mListViewToProjectMap.TryGetValue(listViewItem, let projectItem))
mProjectToWorkspaceFolderMap.Remove(projectItem); mProjectToWorkspaceFolderMap.Remove(projectItem);
} }
HashSet<void*> deletedFolders = scope .();
bool HasDeletedParent(WorkspaceFolder folder) bool HasDeletedParent(WorkspaceFolder folder)
{ {
WorkspaceFolder parent = folder; WorkspaceFolder parent = folder;
@ -1807,7 +1813,7 @@ namespace IDE.ui
{ {
parent = parent.mParent; parent = parent.mParent;
if (deletedFolders.Contains(Internal.UnsafeCastToPtr(parent))) if (foldersToDelete.Contains(parent))
return true; return true;
} }
while (parent != null); while (parent != null);
@ -1815,17 +1821,15 @@ namespace IDE.ui
return false; return false;
} }
for (let folder in foldersToDelete) for (let folder in foldersToDelete)
{ {
if (!HasDeletedParent(folder)) if (!HasDeletedParent(folder))
{ {
let folderItem = folder.mListView; let folderItem = folder.mListView;
mListViewToWorkspaceFolderMap.Remove(folderItem);
folderItem.mParentItem.RemoveChildItem(folderItem); folderItem.mParentItem.RemoveChildItem(folderItem);
} }
gApp.mWorkspace.mWorkspaceFolders.Remove(folder); gApp.mWorkspace.mWorkspaceFolders.Remove(folder);
deletedFolders.Add(Internal.UnsafeCastToPtr(folder));
delete folder; delete folder;
} }