[banshee] Dispose TreePath instances (bgo#555365)



commit 1b04039d5873c74e9bedcdbb9530a3ead60d9dd3
Author: Alexander Kojevnikov <alexander kojevnikov com>
Date:   Wed Feb 10 13:34:37 2010 +1100

    Dispose TreePath instances (bgo#555365)

 .../Banshee.Sources.Gui/SourceRowRenderer.cs       |   27 +++++++------
 .../Banshee.Sources.Gui/SourceView.cs              |   42 +++++++++++--------
 2 files changed, 38 insertions(+), 31 deletions(-)
---
diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs
index 35fc0b8..b8ea030 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceRowRenderer.cs
@@ -51,7 +51,7 @@ namespace Banshee.Sources.Gui
             }
 
             renderer.Source = source;
-            renderer.Path = model.GetPath (iter);
+            renderer.Iter = iter;
 
             if (source == null) {
                 return;
@@ -75,10 +75,10 @@ namespace Banshee.Sources.Gui
             set { parent_widget = value; }
         }
 
-        private TreePath path;
-        public TreePath Path {
-            get { return path; }
-            set { path = value; }
+        private TreeIter iter = TreeIter.Zero;
+        public TreeIter Iter {
+            get { return iter; }
+            set { iter = value; }
         }
 
         private int padding;
@@ -140,10 +140,10 @@ namespace Banshee.Sources.Gui
             }
 
             view = widget as SourceView;
-            bool path_selected = view != null && view.Selection.PathIsSelected (path);
+            bool selected = view != null && view.Selection.IterIsSelected (iter);
             StateType state = RendererStateToWidgetState (widget, flags);
 
-            RenderSelection (drawable, background_area, path_selected, state);
+            RenderSelection (drawable, background_area, selected, state);
 
             int title_layout_width = 0, title_layout_height = 0;
             int count_layout_width = 0, count_layout_height = 0;
@@ -232,13 +232,13 @@ namespace Banshee.Sources.Gui
         }
 
         private void RenderSelection (Gdk.Drawable drawable, Gdk.Rectangle background_area,
-            bool path_selected, StateType state)
+            bool selected, StateType state)
         {
             if (view == null) {
                 return;
             }
 
-            if (path_selected && view.Cr != null) {
+            if (selected && view.Cr != null) {
                 Gdk.Rectangle rect = background_area;
                 rect.X -= 2;
                 rect.Width += 4;
@@ -251,12 +251,11 @@ namespace Banshee.Sources.Gui
                     view.Theme.DrawRowSelection (view.Cr, background_area.X + 1, background_area.Y + 1,
                         background_area.Width - 2, background_area.Height - 2);
                 }
-            } else if (path != null && path.Equals (view.HighlightedPath) && view.Cr != null) {
+            } else if (!TreeIter.Zero.Equals (iter) && iter.Equals (view.HighlightedIter) && view.Cr != null) {
                 view.Theme.DrawRowSelection (view.Cr, background_area.X + 1, background_area.Y + 1,
                     background_area.Width - 2, background_area.Height - 2, false);
             } else if (view.NotifyStage.ActorCount > 0 && view.Cr != null) {
-                TreeIter iter;
-                if (view.Model.GetIter (out iter, path) && view.NotifyStage.Contains (iter)) {
+                if (!TreeIter.Zero.Equals (iter) && view.NotifyStage.Contains (iter)) {
                     Actor<TreeIter> actor = view.NotifyStage[iter];
                     Cairo.Color color = view.Theme.Colors.GetWidgetColor (GtkColorClass.Background, StateType.Active);
                     color.A = Math.Sin (actor.Percent * Math.PI);
@@ -294,7 +293,9 @@ namespace Banshee.Sources.Gui
             }
 
             view.EditingRow = false;
-            view.UpdateRow (new TreePath (edit.path), edit.Text);
+            using (var tree_path = new TreePath (edit.path)) {
+                view.UpdateRow (tree_path, edit.Text);
+            }
         }
     }
 }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs
index 2586b27..c2a359c 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/SourceView.cs
@@ -59,7 +59,7 @@ namespace Banshee.Sources.Gui
         private Stage<TreeIter> notify_stage = new Stage<TreeIter> (2000);
 
         private TreeViewColumn focus_column;
-        private TreePath highlight_path;
+        private TreeIter highlight_iter = TreeIter.Zero;
         private SourceModel store;
         private int current_timeout = -1;
         private bool editing_row = false;
@@ -131,8 +131,10 @@ namespace Banshee.Sources.Gui
                     return false;
                 }
 
-                Gdk.Rectangle rect = GetBackgroundArea (store.GetPath (actor.Target), focus_column);
-                QueueDrawArea (rect.X, rect.Y, rect.Width, rect.Height);
+                using (var path = store.GetPath (actor.Target) ) {
+                    Gdk.Rectangle rect = GetBackgroundArea (path, focus_column);
+                    QueueDrawArea (rect.X, rect.Y, rect.Width, rect.Height);
+                }
                 return true;
             };
         }
@@ -192,9 +194,12 @@ namespace Banshee.Sources.Gui
             }
 
             if (press.Button == 3) {
-                HighlightPath (path);
-                OnPopupMenu ();
-                return true;
+                TreeIter iter;
+                if (Model.GetIter (out iter, path)) {
+                    HighlightIter (iter);
+                    OnPopupMenu ();
+                    return true;
+                }
             }
 
             if (!source.CanActivate) {
@@ -334,8 +339,9 @@ namespace Banshee.Sources.Gui
 
         private void Expand (TreeIter iter)
         {
-            TreePath path = store.GetPath (iter);
-            ExpandRow (path, true);
+            using (var path = store.GetPath (iter)) {
+                ExpandRow (path, true);
+            }
         }
 
         private void OnSourceUserNotifyUpdated (object o, EventArgs args)
@@ -392,7 +398,9 @@ namespace Banshee.Sources.Gui
             }
 
             renderer.Editable = true;
-            SetCursor (store.GetPath (iter), focus_column, true);
+            using (var path = store.GetPath (iter)) {
+                SetCursor (path, focus_column, true);
+            }
             renderer.Editable = false;
         }
 
@@ -405,15 +413,15 @@ namespace Banshee.Sources.Gui
             }
         }
 
-        public void HighlightPath (TreePath path)
+        public void HighlightIter (TreeIter iter)
         {
-            highlight_path = path;
+            highlight_iter = iter;
             QueueDraw ();
         }
 
         public void ResetHighlight ()
         {
-            highlight_path = null;
+            highlight_iter = TreeIter.Zero;
             QueueDraw ();
         }
 
@@ -423,13 +431,11 @@ namespace Banshee.Sources.Gui
 
         public Source HighlightedSource {
             get {
-                TreeIter iter;
-
-                if (highlight_path == null || !store.GetIter (out iter, highlight_path)) {
+                if (TreeIter.Zero.Equals (highlight_iter)) {
                     return null;
                 }
 
-                return store.GetValue (iter, 0) as Source;
+                return store.GetValue (highlight_iter, 0) as Source;
             }
         }
 
@@ -445,8 +451,8 @@ namespace Banshee.Sources.Gui
 
 #region Internal Properties
 
-        internal TreePath HighlightedPath {
-            get { return highlight_path; }
+        internal TreeIter HighlightedIter {
+            get { return highlight_iter; }
         }
 
         internal Cairo.Context Cr {



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