[gnome-system-monitor] Only update tree data if it will be shown. https://bugzilla.gnome.org/show_bug.cgi?id=524830



commit 85f73c42eb83594290f181128170a6eaf2cc7fa8
Author: Robert Roth <robert roth off gmail com>
Date:   Mon Dec 10 00:12:31 2012 +0200

    Only update tree data if it will be shown.
    https://bugzilla.gnome.org/show_bug.cgi?id=524830

 src/proctable.cpp |   39 ++++++++++++++++++++-------------------
 src/util.h        |   13 ++++++++-----
 2 files changed, 28 insertions(+), 24 deletions(-)
---
diff --git a/src/proctable.cpp b/src/proctable.cpp
index d6c581a..427d9ce 100644
--- a/src/proctable.cpp
+++ b/src/proctable.cpp
@@ -633,28 +633,29 @@ static void
 update_info_mutable_cols(ProcInfo *info)
 {
     GtkTreeModel *model;
-    model = gtk_tree_view_get_model(GTK_TREE_VIEW(ProcmanApp::get()->tree));
+    GtkTreeView *tree = GTK_TREE_VIEW(ProcmanApp::get()->tree);
+    model = gtk_tree_view_get_model(tree);
 
     using procman::tree_store_update;
 
-    tree_store_update(model, &info->node, COL_STATUS, info->status);
-    tree_store_update(model, &info->node, COL_USER, info->user.c_str());
-    tree_store_update(model, &info->node, COL_VMSIZE, info->vmsize);
-    tree_store_update(model, &info->node, COL_MEMRES, info->memres);
-    tree_store_update(model, &info->node, COL_MEMWRITABLE, info->memwritable);
-    tree_store_update(model, &info->node, COL_MEMSHARED, info->memshared);
-    tree_store_update(model, &info->node, COL_MEMXSERVER, info->memxserver);
-    tree_store_update(model, &info->node, COL_CPU, info->pcpu);
-    tree_store_update(model, &info->node, COL_CPU_TIME, info->cpu_time);
-    tree_store_update(model, &info->node, COL_START_TIME, info->start_time);
-    tree_store_update(model, &info->node, COL_NICE, info->nice);
-    tree_store_update(model, &info->node, COL_MEM, info->mem);
-    tree_store_update(model, &info->node, COL_WCHAN, info->wchan);
-    tree_store_update(model, &info->node, COL_CGROUP, info->cgroup_name);
-    tree_store_update(model, &info->node, COL_UNIT, info->unit);
-    tree_store_update(model, &info->node, COL_SESSION, info->session);
-    tree_store_update(model, &info->node, COL_SEAT, info->seat);
-    tree_store_update(model, &info->node, COL_OWNER, info->owner.c_str());
+    tree_store_update(tree, model, &info->node, COL_STATUS, info->status);
+    tree_store_update(tree, model, &info->node, COL_USER, info->user.c_str());
+    tree_store_update(tree, model, &info->node, COL_VMSIZE, info->vmsize);
+    tree_store_update(tree, model, &info->node, COL_MEMRES, info->memres);
+    tree_store_update(tree, model, &info->node, COL_MEMWRITABLE, info->memwritable);
+    tree_store_update(tree, model, &info->node, COL_MEMSHARED, info->memshared);
+    tree_store_update(tree, model, &info->node, COL_MEMXSERVER, info->memxserver);
+    tree_store_update(tree, model, &info->node, COL_CPU, info->pcpu);
+    tree_store_update(tree, model, &info->node, COL_CPU_TIME, info->cpu_time);
+    tree_store_update(tree, model, &info->node, COL_START_TIME, info->start_time);
+    tree_store_update(tree, model, &info->node, COL_NICE, info->nice);
+    tree_store_update(tree, model, &info->node, COL_MEM, info->mem);
+    tree_store_update(tree, model, &info->node, COL_WCHAN, info->wchan);
+    tree_store_update(tree, model, &info->node, COL_CGROUP, info->cgroup_name);
+    tree_store_update(tree, model, &info->node, COL_UNIT, info->unit);
+    tree_store_update(tree, model, &info->node, COL_SESSION, info->session);
+    tree_store_update(tree, model, &info->node, COL_SEAT, info->seat);
+    tree_store_update(tree, model, &info->node, COL_OWNER, info->owner.c_str());
 }
 
 
diff --git a/src/util.h b/src/util.h
index 9bd4b2c..07074f4 100644
--- a/src/util.h
+++ b/src/util.h
@@ -121,14 +121,17 @@ namespace procman
     //
 
     template<typename T>
-    void tree_store_update(GtkTreeModel* model, GtkTreeIter* iter, int column, const T& new_value)
+    void tree_store_update(GtkTreeView* tree, GtkTreeModel* model, GtkTreeIter* iter, int column, const T& new_value)
     {
-        T current_value;
+        GtkTreeViewColumn* tree_column = gtk_tree_view_get_column(tree, column);
+        if (gtk_tree_view_column_get_visible(tree_column)) {
+            T current_value;
 
-        gtk_tree_model_get(model, iter, column, &current_value, -1);
+            gtk_tree_model_get(model, iter, column, &current_value, -1);
 
-        if (current_value != new_value)
-            gtk_tree_store_set(GTK_TREE_STORE(model), iter, column, new_value, -1);
+            if (current_value != new_value)
+                gtk_tree_store_set(GTK_TREE_STORE(model), iter, column, new_value, -1);
+        }
     }
 
     // undefined



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