diff options
author | Lluis Sanchez Gual <lluis@novell.com> | 2010-11-24 18:21:23 +0300 |
---|---|---|
committer | Lluis Sanchez Gual <lluis@novell.com> | 2010-11-24 19:58:42 +0300 |
commit | 415040b0f275e7b2715522300d70947aa1fb4b20 (patch) | |
tree | f2c30caaed055828bac92438cde89b3b00f23f29 /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad | |
parent | 383cac3148fc033d656161a6a8fa09c71cc92c3f (diff) |
File system events now can reference several files
Some bulk operations may result in changes in many files.
Instead of sending a file change event for every file,
now the FileService may send a single even with a list
of files. This will reduce event traffic on bulk file operations.
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad')
2 files changed, 56 insertions, 50 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolder.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolder.cs index 5146283426..506472dd9d 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolder.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ProjectFolder.cs @@ -27,6 +27,7 @@ // using System; +using System.Linq; using System.IO; using System.Collections; @@ -129,13 +130,12 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad void OnFileRenamed (object sender, FileCopyEventArgs e) { - if (!e.IsDirectory || e.SourceFile != absolutePath) return; - // The folder path can't be updated because we would be changing // the identity of the object. Another folder object will need // to be created by updating the tree. - if (FolderRenamed != null) + var e2 = new FileCopyEventArgs (e.Where (i => i.IsDirectory && i.SourceFile == absolutePath)); + if (e2.Count > 0 && FolderRenamed != null) FolderRenamed (this, e); } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ShowAllFilesBuilderExtension.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ShowAllFilesBuilderExtension.cs index b8e4b22057..fc6884d9e4 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ShowAllFilesBuilderExtension.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Pads.ProjectPad/ShowAllFilesBuilderExtension.cs @@ -240,67 +240,73 @@ namespace MonoDevelop.Ide.Gui.Pads.ProjectPad return FindParentFolderNode (basePath, project, out lastChildPath); } - void OnSystemFileAdded (object sender, FileEventArgs e) + void OnSystemFileAdded (object sender, FileEventArgs args) { - Project project = GetProjectForFile (e.FileName); - if (project == null) return; - - if (e.IsDirectory) { - EnsureReachable (project, e.FileName + "/"); - } else { - if (project.Files.GetFile (e.FileName) == null) - AddFile (e.FileName, project); + foreach (FileEventInfo e in args) { + Project project = GetProjectForFile (e.FileName); + if (project == null) return; + + if (e.IsDirectory) { + EnsureReachable (project, e.FileName + "/"); + } else { + if (project.Files.GetFile (e.FileName) == null) + AddFile (e.FileName, project); + } } } - void OnSystemFileDeleted (object sender, FileEventArgs e) + void OnSystemFileDeleted (object sender, FileEventArgs args) { - Project project = GetProjectForFile (e.FileName); - if (project == null) return; - - ITreeBuilder tb = Context.GetTreeBuilder (); - - if (e.IsDirectory) { - if (tb.MoveToObject (new ProjectFolder (e.FileName, project))) { - if (tb.Options ["ShowAllFiles"] && !ProjectFolderCommandHandler.PathExistsInProject (project, e.FileName)) { + foreach (FileEventInfo e in args) { + Project project = GetProjectForFile (e.FileName); + if (project == null) return; + + ITreeBuilder tb = Context.GetTreeBuilder (); + + if (e.IsDirectory) { + if (tb.MoveToObject (new ProjectFolder (e.FileName, project))) { + if (tb.Options ["ShowAllFiles"] && !ProjectFolderCommandHandler.PathExistsInProject (project, e.FileName)) { + tb.Remove (); + return; + } + } + } + else { + if (tb.MoveToObject (new SystemFile (e.FileName, project))) { tb.Remove (); return; } } - } - else { - if (tb.MoveToObject (new SystemFile (e.FileName, project))) { - tb.Remove (); - return; + + // Find the parent folder, and update it's children count + + string parentPath = Path.GetDirectoryName (e.FileName); + if (tb.MoveToObject (new ProjectFolder (parentPath, project))) { + if (tb.Options ["ShowAllFiles"] && Directory.Exists (parentPath)) + tb.UpdateChildren (); } } - - // Find the parent folder, and update it's children count - - string parentPath = Path.GetDirectoryName (e.FileName); - if (tb.MoveToObject (new ProjectFolder (parentPath, project))) { - if (tb.Options ["ShowAllFiles"] && Directory.Exists (parentPath)) - tb.UpdateChildren (); - } } - void OnSystemFileRenamed (object sender, FileCopyEventArgs e) + void OnSystemFileRenamed (object sender, FileCopyEventArgs args) { - Project project = GetProjectForFile (e.SourceFile); - if (project == null) return; - - if (e.IsDirectory) { -/* string childPath; - ITreeBuilder tb = FindParentFolderNode (e.SourceFile, project, out childPath); - if (tb != null && tb.Options ["ShowAllFiles"]) { - tb.UpdateAll (); - } -*/ - } else { - ITreeBuilder tb = Context.GetTreeBuilder (new SystemFile (e.SourceFile, project)); - if (tb != null) { - tb.Remove (true); - tb.AddChild (new SystemFile (e.TargetFile, project)); + foreach (FileCopyEventInfo e in args) { + Project project = GetProjectForFile (e.SourceFile); + if (project == null) return; + + if (e.IsDirectory) { + /* string childPath; + ITreeBuilder tb = FindParentFolderNode (e.SourceFile, project, out childPath); + if (tb != null && tb.Options ["ShowAllFiles"]) { + tb.UpdateAll (); + } + */ + } else { + ITreeBuilder tb = Context.GetTreeBuilder (new SystemFile (e.SourceFile, project)); + if (tb != null) { + tb.Remove (true); + tb.AddChild (new SystemFile (e.TargetFile, project)); + } } } } |