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 - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches