diff options
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolderNodeBuilder.cs')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolderNodeBuilder.cs | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolderNodeBuilder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolderNodeBuilder.cs index 88b8be8058..0552cb6020 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolderNodeBuilder.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolderNodeBuilder.cs @@ -149,7 +149,7 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad return ((ProjectFolder)dataObject).Path; } - public override void RenameItem (string newName) + public async override void RenameItem (string newName) { ProjectFolder folder = (ProjectFolder) CurrentNode.DataItem as ProjectFolder; string oldFoldername = folder.Path; @@ -159,13 +159,23 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad try { if (!FileService.IsValidPath (newFoldername)) { MessageService.ShowWarning (GettextCatalog.GetString ("The name you have chosen contains illegal characters. Please choose a different name.")); - } else if (File.Exists (newFoldername) || Directory.Exists (newFoldername)) { + return; + } + if (File.Exists (newFoldername)) { MessageService.ShowWarning (GettextCatalog.GetString ("File or directory name is already in use. Please choose a different one.")); - } else { - FileService.RenameDirectory (oldFoldername, newName); - if (folder.Project != null) - IdeApp.ProjectOperations.Save (folder.Project); + return; } + // Don't use Directory.Exists because we want to check for the exact case in case-insensitive file systems + var di = Directory.GetDirectories (Path.GetDirectoryName (newFoldername), Path.GetFileName (newFoldername)).FirstOrDefault (); + if (di != null) { + MessageService.ShowWarning (GettextCatalog.GetString ("File or directory name is already in use. Please choose a different one.")); + return; + } + + FileService.RenameDirectory (oldFoldername, newName); + if (folder.Project != null) + await IdeApp.ProjectOperations.SaveAsync (folder.Project); + } catch (System.ArgumentException) { // new file name with wildcard (*, ?) characters in it MessageService.ShowWarning (GettextCatalog.GetString ("The name you have chosen contains illegal characters. Please choose a different name.")); } catch (System.IO.IOException ex) { @@ -176,7 +186,7 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad public override void DeleteMultipleItems () { - var projects = new Set<SolutionEntityItem> (); + var projects = new Set<SolutionItem> (); var folders = new List<ProjectFolder> (); foreach (ITreeNavigator node in CurrentNodes) folders.Add ((ProjectFolder) node.DataItem); @@ -263,7 +273,7 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad } } } - IdeApp.ProjectOperations.Save (projects); + IdeApp.ProjectOperations.SaveAsync (projects); } static void DeleteFolder (ProjectFolder folder) @@ -289,7 +299,7 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad [AllowMultiSelection] public void IncludeToProject () { - Set<SolutionEntityItem> projects = new Set<SolutionEntityItem> (); + Set<SolutionItem> projects = new Set<SolutionItem> (); foreach (ITreeNavigator node in CurrentNodes) { Project project = node.GetParentDataItem (typeof(Project), true) as Project; if (node.HasChildren ()) { @@ -309,7 +319,7 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad } } } - IdeApp.ProjectOperations.Save (projects); + IdeApp.ProjectOperations.SaveAsync (projects); } [CommandUpdateHandler (ProjectCommands.IncludeToProject)] |