[gnome-disk-utility] Don't add presentables to tree store unless they are part of the pool



commit d79da5ca500a6fc1b48fcfef832aea9053cf1005
Author: David Zeuthen <davidz redhat com>
Date:   Mon Jan 18 14:36:37 2010 -0500

    Don't add presentables to tree store unless they are part of the pool
    
    Some presentable may emit change events a short while after being
    removed from the pool. Ideally we wouldn't do that but that's a bigger
    change.

 src/gdu-gtk/gdu-pool-tree-model.c |   24 ++++++++++++++++--------
 src/gdu/gdu-pool.c                |   12 ++++++++++++
 src/gdu/gdu-pool.h                |    2 ++
 3 files changed, 30 insertions(+), 8 deletions(-)
---
diff --git a/src/gdu-gtk/gdu-pool-tree-model.c b/src/gdu-gtk/gdu-pool-tree-model.c
index b2b6097..ae76e84 100644
--- a/src/gdu-gtk/gdu-pool-tree-model.c
+++ b/src/gdu-gtk/gdu-pool-tree-model.c
@@ -543,7 +543,7 @@ add_presentable (GduPoolTreeModel *model,
         }
 
 
-        /*g_debug ("adding %s (%p)", gdu_presentable_get_id (presentable), presentable);*/
+        /* g_debug ("adding %s (%p)", gdu_presentable_get_id (presentable), presentable); */
 
         gtk_tree_store_append (GTK_TREE_STORE (model),
                                &iter,
@@ -568,6 +568,8 @@ on_presentable_added (GduPool          *pool,
 {
         GduPoolTreeModel *model = GDU_POOL_TREE_MODEL (user_data);
 
+        /* g_debug ("on_added `%s' (%p)", gdu_presentable_get_id (presentable), presentable); */
+
         add_presentable (model, presentable, NULL);
 }
 
@@ -579,7 +581,10 @@ on_presentable_removed (GduPool          *pool,
         GduPoolTreeModel *model = GDU_POOL_TREE_MODEL (user_data);
         GtkTreeIter iter;
 
+        /* g_debug ("on_removed `%s' (%p)", gdu_presentable_get_id (presentable), presentable); */
+
         if (gdu_pool_tree_model_get_iter_for_presentable (model, presentable, &iter)) {
+                /* g_debug ("removed row for `%s' (%p)", gdu_presentable_get_id (presentable), presentable); */
                 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
         }
 }
@@ -592,14 +597,17 @@ on_presentable_changed (GduPool          *pool,
         GduPoolTreeModel *model = GDU_POOL_TREE_MODEL (user_data);
         GtkTreeIter iter;
 
-        /* will do NOP if presentable has already been added */
-        add_presentable (model, presentable, NULL);
+        if (gdu_pool_has_presentable (pool, presentable)) {
+                /* g_debug ("on_changed `%s' (%p)", gdu_presentable_get_id (presentable), presentable); */
 
-        /* update name and icon */
-        if (gdu_pool_tree_model_get_iter_for_presentable (model, presentable, &iter)) {
+                /* will do NOP if presentable has already been added */
+                add_presentable (model, presentable, NULL);
 
-                set_data_for_presentable (model,
-                                          &iter,
-                                          presentable);
+                /* update name and icon */
+                if (gdu_pool_tree_model_get_iter_for_presentable (model, presentable, &iter)) {
+                        set_data_for_presentable (model,
+                                                  &iter,
+                                                  presentable);
+                }
         }
 }
diff --git a/src/gdu/gdu-pool.c b/src/gdu/gdu-pool.c
index d6c5900..60cd862 100644
--- a/src/gdu/gdu-pool.c
+++ b/src/gdu/gdu-pool.c
@@ -2605,6 +2605,18 @@ gdu_pool_get_presentable_by_id (GduPool *pool, const gchar *id)
         return ret;
 }
 
+gboolean
+gdu_pool_has_presentable (GduPool *pool, GduPresentable *presentable)
+{
+        gboolean ret;
+
+        ret = (g_list_find (pool->priv->presentables, presentable) != NULL);
+
+        return ret;
+}
+
+
+
 GduPresentable *
 gdu_pool_get_hub_by_object_path (GduPool *pool, const gchar *object_path)
 {
diff --git a/src/gdu/gdu-pool.h b/src/gdu/gdu-pool.h
index b860a10..d98f027 100644
--- a/src/gdu/gdu-pool.h
+++ b/src/gdu/gdu-pool.h
@@ -102,6 +102,8 @@ GduLinuxMdDrive *gdu_pool_get_linux_md_drive_by_uuid (GduPool *pool, const gchar
 
 GduPresentable *gdu_pool_get_presentable_by_id     (GduPool *pool, const gchar *id);
 
+gboolean    gdu_pool_has_presentable (GduPool *pool, GduPresentable *presentable);
+
 
 GList      *gdu_pool_get_devices               (GduPool *pool);
 GList      *gdu_pool_get_presentables          (GduPool *pool);



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