[banshee/source-contents] SourceContentProviders implementing IDisposable now get disposed



commit 1832cbfb0db916a38d6d9d2a48284ba63acd83b3
Author: Chris Howie <cdhowie gmail com>
Date:   Wed May 6 21:42:39 2009 -0400

    SourceContentProviders implementing IDisposable now get disposed
---
 .../Banshee.Sources.Gui/SourceContentManager.cs    |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceContentManager.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceContentManager.cs
index cc2a9ae..a032030 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceContentManager.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceContentManager.cs
@@ -66,7 +66,7 @@ namespace Banshee.Sources.Gui
     }
 
     // Responsible for loading ISourceContents and pairing them up with Sources
-    public class SourceContentManager : IRequiredService
+    public class SourceContentManager : IRequiredService, IDisposable
     {
         private Dictionary<string, SourceContentProvider> providers = new Dictionary<string, SourceContentProvider> ();
 
@@ -78,6 +78,15 @@ namespace Banshee.Sources.Gui
 
         public void Dispose ()
         {
+            foreach (SourceContentProvider provider in providers.Values) {
+                IDisposable disposable = provider as IDisposable;
+                if (disposable != null) {
+                    disposable.Dispose ();
+                }
+            }
+
+            providers.Clear ();
+
             AddinManager.RemoveExtensionNodeHandler ("/Banshee/ThickClient/SourceContentProvider", OnExtensionChanged);
         }
 
@@ -91,8 +100,13 @@ namespace Banshee.Sources.Gui
                     providers.Add (node.Id, provider);
                     Log.DebugFormat ("Loaded SourceContentProvider: '{0}'", provider.Id);
                 } else if (args.Change == ExtensionChange.Remove && providers.ContainsKey (node.Id)) {
-                    //SourceContentProvider provider = providers[node.Id];
-                    //provider.Dispose ();
+                    SourceContentProvider provider = providers[node.Id];
+
+                    IDisposable disposable = provider as IDisposable;
+                    if (disposable != null) {
+                        disposable.Dispose ();
+                    }
+
                     providers.Remove (node.Id);
                 }
             }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]