From d7ef8df8d3282b8f99eff8caee17c9282a403ae1 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Wed, 10 Aug 2011 18:55:55 +0200 Subject: [PATCH] added ProjectChangeWatcher for projects --- src/Main/Base/Project/Src/Project/AbstractProject.cs | 12 +++++++++++- .../Base/Project/Src/Project/MSBuildBasedProject.cs | 3 +++ .../Base/Project/Src/Project/ProjectChangeWatcher.cs | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Main/Base/Project/Src/Project/AbstractProject.cs b/src/Main/Base/Project/Src/Project/AbstractProject.cs index 0fb18130a2..4961d433e5 100644 --- a/src/Main/Base/Project/Src/Project/AbstractProject.cs +++ b/src/Main/Base/Project/Src/Project/AbstractProject.cs @@ -53,7 +53,7 @@ namespace ICSharpCode.SharpDevelop.Project public virtual void Dispose() { WorkbenchSingleton.AssertMainThread(); - + watcher.Dispose(); isDisposed = true; if (Disposed != null) { Disposed(this, EventArgs.Empty); @@ -116,6 +116,7 @@ namespace ICSharpCode.SharpDevelop.Project #region Filename / Directory volatile string fileName; string cachedDirectoryName; + protected ProjectChangeWatcher watcher; /// /// Gets the name of the project file. @@ -134,6 +135,15 @@ namespace ICSharpCode.SharpDevelop.Project WorkbenchSingleton.AssertMainThread(); Debug.Assert(FileUtility.IsUrl(value) || Path.IsPathRooted(value)); + if (watcher == null) { + watcher = new ProjectChangeWatcher(value); + watcher.Enable(); + } else { + watcher.Disable(); + watcher.Rename(value); + watcher.Enable(); + } + lock (SyncRoot) { // locking still required for Directory fileName = value; cachedDirectoryName = null; diff --git a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs index b7985e0dca..a7b0ecb9c1 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs @@ -1246,6 +1246,8 @@ namespace ICSharpCode.SharpDevelop.Project #region Saving public override void Save(string fileName) { + watcher.Disable(); + watcher.Rename(fileName); lock (SyncRoot) { // we need the global lock - if the file is being renamed, // MSBuild will update the global project collection @@ -1258,6 +1260,7 @@ namespace ICSharpCode.SharpDevelop.Project } } } + watcher.Enable(); FileUtility.RaiseFileSaved(new FileNameEventArgs(fileName)); } #endregion diff --git a/src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs b/src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs index 0f758d8e8b..6c15024fd5 100644 --- a/src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs +++ b/src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs @@ -86,7 +86,7 @@ namespace ICSharpCode.SharpDevelop.Project } } - bool wasChangedExternally; + static bool wasChangedExternally; void OnFileChangedEvent(object sender, FileSystemEventArgs e) {