@ -1,6 +1,7 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System ;
using System ;
using System.Collections.Generic ;
using System.IO ;
using System.IO ;
using ICSharpCode.Core ;
using ICSharpCode.Core ;
using ICSharpCode.SharpDevelop.Gui ;
using ICSharpCode.SharpDevelop.Gui ;
@ -9,6 +10,14 @@ namespace ICSharpCode.SharpDevelop.Project
{
{
public sealed class ProjectChangeWatcher : IProjectChangeWatcher
public sealed class ProjectChangeWatcher : IProjectChangeWatcher
{
{
static readonly HashSet < ProjectChangeWatcher > activeWatchers = new HashSet < ProjectChangeWatcher > ( ) ;
internal static void OnAllChangeWatchersDisabledChanged ( )
{
foreach ( ProjectChangeWatcher watcher in activeWatchers )
watcher . SetWatcher ( ) ;
}
FileSystemWatcher watcher ;
FileSystemWatcher watcher ;
string fileName ;
string fileName ;
bool enabled = true ;
bool enabled = true ;
@ -16,9 +25,13 @@ namespace ICSharpCode.SharpDevelop.Project
public ProjectChangeWatcher ( string fileName )
public ProjectChangeWatcher ( string fileName )
{
{
this . fileName = fileName ;
this . fileName = fileName ;
WorkbenchSingleton . AssertMainThread ( ) ;
activeWatchers . Add ( this ) ;
WorkbenchSingleton . MainWindow . Activated + = MainFormActivated ;
WorkbenchSingleton . MainWindow . Activated + = MainFormActivated ;
}
}
public void Enable ( )
public void Enable ( )
{
{
enabled = true ;
enabled = true ;
@ -44,7 +57,7 @@ namespace ICSharpCode.SharpDevelop.Project
watcher . EnableRaisingEvents = false ;
watcher . EnableRaisingEvents = false ;
}
}
if ( ! enabled )
if ( ! enabled | | FileChangeWatcher . AllChangeWatchersDisabled )
return ;
return ;
if ( string . IsNullOrEmpty ( fileName ) )
if ( string . IsNullOrEmpty ( fileName ) )
@ -90,7 +103,7 @@ namespace ICSharpCode.SharpDevelop.Project
void OnFileChangedEvent ( object sender , FileSystemEventArgs e )
void OnFileChangedEvent ( object sender , FileSystemEventArgs e )
{
{
LoggingService . Debug ( "Solution was changed externally: " + e . ChangeType ) ;
LoggingService . Debug ( "Project file " + e . Name + " was changed externally: {1} " + e . ChangeType ) ;
if ( ! wasChangedExternally ) {
if ( ! wasChangedExternally ) {
wasChangedExternally = true ;
wasChangedExternally = true ;
if ( WorkbenchSingleton . Workbench . IsActiveWindow ) {
if ( WorkbenchSingleton . Workbench . IsActiveWindow ) {
@ -117,8 +130,14 @@ namespace ICSharpCode.SharpDevelop.Project
public void Dispose ( )
public void Dispose ( )
{
{
WorkbenchSingleton . AssertMainThread ( ) ;
if ( ! disposed ) {
if ( ! disposed ) {
WorkbenchSingleton . MainWindow . Activated - = MainFormActivated ;
WorkbenchSingleton . MainWindow . Activated - = MainFormActivated ;
activeWatchers . Remove ( this ) ;
}
if ( watcher ! = null ) {
watcher . Dispose ( ) ;
watcher = null ;
}
}
disposed = true ;
disposed = true ;
}
}