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

Reply via email to