Author: mkrueger Date: 2008-02-17 18:36:21 -0500 (Sun, 17 Feb 2008) New Revision: 96015
Modified: trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/ChangeLog trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorView.cs trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorWidget.cs trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/gtk-gui/objects.xml Log: * MonoDevelop.SourceEditor/SourceEditorWidget.cs, MonoDevelop.SourceEditor/SourceEditorView.cs: Fixed file system watcher. Modified: trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/ChangeLog =================================================================== --- trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/ChangeLog 2008-02-17 23:24:18 UTC (rev 96014) +++ trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/ChangeLog 2008-02-17 23:36:21 UTC (rev 96015) @@ -1,3 +1,8 @@ +2008-02-18 Mike Krüger <[EMAIL PROTECTED]> + + * MonoDevelop.SourceEditor/SourceEditorWidget.cs, + MonoDevelop.SourceEditor/SourceEditorView.cs: Fixed file system watcher. + 2008-02-17 Mike Krüger <[EMAIL PROTECTED]> * MonoDevelop.SourceEditor/GotoLineNumberWidget.cs: Fixed goto line number Modified: trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorView.cs =================================================================== --- trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorView.cs 2008-02-17 23:24:18 UTC (rev 96014) +++ trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorView.cs 2008-02-17 23:36:21 UTC (rev 96015) @@ -51,8 +51,9 @@ { SourceEditorWidget widget; bool isDisposed = false; - static object fileSaveLock = new object (); FileSystemWatcher fileSystemWatcher; + static bool isInWrite = false; + DateTime lastSaveTime; public Mono.TextEditor.Document Document { get { @@ -102,12 +103,24 @@ // return true; // }); + widget.ShowAll (); + fileSystemWatcher = new FileSystemWatcher (); fileSystemWatcher.Created += (FileSystemEventHandler)MonoDevelop.Core.Gui.DispatchService.GuiDispatch (new FileSystemEventHandler (OnFileChanged)); fileSystemWatcher.Changed += (FileSystemEventHandler)MonoDevelop.Core.Gui.DispatchService.GuiDispatch (new FileSystemEventHandler (OnFileChanged)); - widget.ShowAll (); + this.ContentNameChanged += delegate { - this.Document.FileName = this.ContentName; + this.Document.FileName = this.ContentName; + + if (String.IsNullOrEmpty (ContentName) || !File.Exists (ContentName)) + return; + + fileSystemWatcher.EnableRaisingEvents = false; + isInWrite = true; + fileSystemWatcher.Path = Path.GetDirectoryName (ContentName); + fileSystemWatcher.Filter = Path.GetFileName (ContentName); + isInWrite = false; + fileSystemWatcher.EnableRaisingEvents = true; }; } @@ -130,16 +143,21 @@ WorkbenchWindow.ShowNotification = false; } - lock (fileSaveLock) { + isInWrite = true; + try { File.WriteAllText (fileName, Document.Text); -// lastSaveTime = File.GetLastWriteTime (fileName); + lastSaveTime = File.GetLastWriteTime (ContentName); + } finally { + isInWrite = false; } + // if (encoding != null) // se.Buffer.SourceEncoding = encoding; // TextFileService.FireCommitCountChanges (this); - ContentName = fileName; + + ContentName = fileName; Document.MimeType = IdeApp.Services.PlatformService.GetMimeTypeForUri (fileName); -// InitializeFormatter (); + this.IsDirty = false; } @@ -157,6 +175,7 @@ result = result.Replace ("?", "%3F"); return result; } + bool warnOverwrite = false; public void Load (string fileName, string encoding) { @@ -170,7 +189,6 @@ Document.MimeType = IdeApp.Services.PlatformService.GetMimeTypeForUri (fileName); Document.Text = File.ReadAllText (fileName); ContentName = fileName; - lastSaveTime = File.GetLastWriteTime (ContentName); // InitializeFormatter (); // // if (Services.DebuggingService != null) { @@ -187,6 +205,13 @@ public override void Dispose() { this.isDisposed= true; + + if (fileSystemWatcher != null) { + fileSystemWatcher.EnableRaisingEvents = false; + fileSystemWatcher.Dispose (); + fileSystemWatcher = null; + } + if (widget != null) { widget.Destroy (); widget.Dispose (); @@ -214,17 +239,15 @@ return MonoDevelop.Projects.Services.Ambience.GetAmbienceForFile (file); } - DateTime lastSaveTime; void OnFileChanged (object sender, FileSystemEventArgs args) { - lock (fileSaveLock) { - if (lastSaveTime == File.GetLastWriteTime (ContentName)) - return; - } + if (!isInWrite && args.FullPath != ContentName) + return; + if (lastSaveTime == File.GetLastWriteTime (ContentName)) + return; - if (args.ChangeType == WatcherChangeTypes.Changed || args.ChangeType == WatcherChangeTypes.Created) { + if (args.ChangeType == WatcherChangeTypes.Changed || args.ChangeType == WatcherChangeTypes.Created) widget.ShowFileChangedWarning (); - } } #region IExtensibleTextEditor Modified: trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorWidget.cs =================================================================== --- trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorWidget.cs 2008-02-17 23:24:18 UTC (rev 96014) +++ trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorWidget.cs 2008-02-17 23:36:21 UTC (rev 96015) @@ -314,6 +314,8 @@ { isDisposed = true; Unsplit (); + RemoveReloadBar (); + RemoveSearchWidget (); if (this.textEditor != null) { this.textEditor.Dispose (); this.textEditor = null; @@ -422,19 +424,22 @@ Button b2 = new Button (GettextCatalog.GetString("Ignore")); box.PackStart (b2, false, false, 5); b2.Clicked += new EventHandler (ClickedIgnore); - - reloadBar.ShowAll (); } view.WarnOverwrite = true; editorBar.PackStart (reloadBar, false, true, 0); + editorBar.ReorderChild (reloadBar, this.isClassBrowserVisible ? 1 : 0); reloadBar.ShowAll (); view.WorkbenchWindow.ShowNotification = true; } public void RemoveReloadBar () { - if (reloadBar != null) + if (reloadBar != null) { editorBar.Remove (reloadBar); + reloadBar.Destroy (); + reloadBar.Dispose (); + reloadBar = null; + } } void ClickedReload (object sender, EventArgs args) @@ -442,7 +447,7 @@ try { // double vscroll = view.VScroll; view.Load (view.ContentName); - editorBar.Remove (reloadBar); + RemoveReloadBar (); // view.VScroll = vscroll; view.WorkbenchWindow.ShowNotification = false; } catch (Exception ex) { @@ -452,7 +457,7 @@ void ClickedIgnore (object sender, EventArgs args) { - editorBar.Remove (reloadBar); + RemoveReloadBar (); view.WorkbenchWindow.ShowNotification = false; } Modified: trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/gtk-gui/objects.xml =================================================================== --- trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/gtk-gui/objects.xml 2008-02-17 23:24:18 UTC (rev 96014) +++ trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/gtk-gui/objects.xml 2008-02-17 23:36:21 UTC (rev 96015) @@ -48,9 +48,6 @@ </object> <object type="MonoDevelop.SourceEditor.SearchAndReplaceWidget" palette-category="MonoDevelop.SourceEditor2" allow-children="false" base-type="Gtk.Bin"> <itemgroups> - <itemgroup label="SearchAndReplaceWidget Properties"> - <property name="SearchPattern" /> - </itemgroup> </itemgroups> <signals /> </object> _______________________________________________ Mono-patches maillist - Mono-patches@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-patches