diff options
author | Michael Hutchinson <m.j.hutchinson@gmail.com> | 2014-06-27 02:43:34 +0400 |
---|---|---|
committer | Michael Hutchinson <m.j.hutchinson@gmail.com> | 2014-06-27 02:43:34 +0400 |
commit | ffe059c35e880dee32d2b878ec22f28cc92b22d9 (patch) | |
tree | 61c0b8a3e311f24cccb1bb2fe0d06fbc49ac92bb /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools | |
parent | cdc5050b62645d9ceb5ef89329e58cd4169e38cd (diff) |
[Ide] Custom tool service should broadcast file changes
BXC8026 - T4 template regenerated only on every other content change
Also avoid unnecessarily re-saving the project.
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/CustomToolService.cs | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/CustomToolService.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/CustomToolService.cs index 873e6c7002..4897ecb754 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/CustomToolService.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CustomTools/CustomToolService.cs @@ -206,20 +206,37 @@ namespace MonoDevelop.Ide.CustomTools } finally { monitor.Dispose (); } - - if (!result.GeneratedFilePath.IsNullOrEmpty && File.Exists (result.GeneratedFilePath)) { - Gtk.Application.Invoke (delegate { - if (genFile == null) { - genFile = file.Project.AddFile (result.GeneratedFilePath, result.OverrideBuildAction); - } else if (result.GeneratedFilePath != genFile.FilePath) { - genFile.Name = result.GeneratedFilePath; - } + + if (result.GeneratedFilePath.IsNullOrEmpty || !File.Exists (result.GeneratedFilePath)) + return; + + // broadcast a change event so text editors etc reload the file + FileService.NotifyFileChanged (result.GeneratedFilePath); + + // add file to project, update file properties, etc + Gtk.Application.Invoke (delegate { + bool projectChanged = false; + if (genFile == null) { + genFile = file.Project.AddFile (result.GeneratedFilePath, result.OverrideBuildAction); + projectChanged = true; + } else if (result.GeneratedFilePath != genFile.FilePath) { + genFile.Name = result.GeneratedFilePath; + projectChanged = true; + } + + if (file.LastGenOutput != genFileName) { file.LastGenOutput = genFileName; + projectChanged = true; + } + + if (genFile.DependsOn != file.FilePath.FileName) { genFile.DependsOn = file.FilePath.FileName; - + projectChanged = true; + } + + if (projectChanged) IdeApp.ProjectOperations.Save (file.Project); - }); - } + }); } static void HandleRename (ProjectFileRenamedEventArgs e) |