[gnome-system-monitor] Use gsettings bindings in table state handling as much as possible



commit 419c00943f2064eefe59511d912ed4a6e9146064
Author: Robert Roth <robert roth off gmail com>
Date:   Thu Jul 25 03:10:08 2013 +0300

    Use gsettings bindings in table state handling as much as possible

 src/disks.cpp       |   14 ++++----------
 src/procman-app.cpp |   11 +----------
 src/proctable.cpp   |   14 +++-----------
 src/util.cpp        |   22 +++++++---------------
 src/util.h          |    2 +-
 5 files changed, 16 insertions(+), 47 deletions(-)
---
diff --git a/src/disks.cpp b/src/disks.cpp
index c528540..6d2e795 100644
--- a/src/disks.cpp
+++ b/src/disks.cpp
@@ -289,13 +289,6 @@ cb_disk_list_destroying (GtkWidget *self, gpointer data)
     g_signal_handlers_disconnect_by_func(self, (gpointer) cb_disk_columns_changed, data);
 }
 
-static void
-cb_column_resized (GtkWidget *column, GParamSpec *pspec, gpointer data)
-{
-    save_column_size (GTK_TREE_VIEW_COLUMN (column), G_SETTINGS (data));
-}
-
-
 void
 create_disk_view(ProcmanApp *app, GtkBuilder *builder)
 {
@@ -343,7 +336,7 @@ create_disk_view(ProcmanApp *app, GtkBuilder *builder)
 
     col = gtk_tree_view_column_new();
     cell = gtk_cell_renderer_pixbuf_new();
-    g_signal_connect(G_OBJECT(col), "notify::width", G_CALLBACK(cb_column_resized), settings);
+    
     gtk_tree_view_column_pack_start(col, cell, FALSE);
     gtk_tree_view_column_set_attributes(col, cell, "pixbuf", DISK_ICON,
                                         NULL);
@@ -354,6 +347,7 @@ create_disk_view(ProcmanApp *app, GtkBuilder *builder)
                                         NULL);
     gtk_tree_view_column_set_title(col, _(titles[DISK_DEVICE]));
     gtk_tree_view_column_set_sort_column_id(col, DISK_DEVICE);
+    bind_column_to_gsetting (settings, col);  
     gtk_tree_view_column_set_reorderable(col, TRUE);
     gtk_tree_view_column_set_resizable(col, TRUE);
     gtk_tree_view_column_set_sizing(col, GTK_TREE_VIEW_COLUMN_FIXED);
@@ -368,8 +362,8 @@ create_disk_view(ProcmanApp *app, GtkBuilder *builder)
         gtk_tree_view_column_pack_start(col, cell, TRUE);
         gtk_tree_view_column_set_title(col, _(titles[i]));
         gtk_tree_view_column_set_resizable(col, TRUE);
-        g_signal_connect(G_OBJECT(col), "notify::width", G_CALLBACK(cb_column_resized), settings);
         gtk_tree_view_column_set_sort_column_id(col, i);
+        bind_column_to_gsetting (settings, col);
         gtk_tree_view_column_set_reorderable(col, TRUE);
         gtk_tree_view_column_set_sizing(col, GTK_TREE_VIEW_COLUMN_FIXED);
         gtk_tree_view_append_column(GTK_TREE_VIEW(disk_tree), col);
@@ -396,7 +390,6 @@ create_disk_view(ProcmanApp *app, GtkBuilder *builder)
 
     col = gtk_tree_view_column_new();
     cell = gtk_cell_renderer_text_new();
-    g_signal_connect(G_OBJECT(col), "notify::width", G_CALLBACK(cb_column_resized), settings);
     g_object_set(cell, "xalign", 1.0f, NULL);
     gtk_tree_view_column_set_sizing(col, GTK_TREE_VIEW_COLUMN_FIXED);
     gtk_tree_view_column_pack_start(col, cell, FALSE);
@@ -413,6 +406,7 @@ create_disk_view(ProcmanApp *app, GtkBuilder *builder)
     gtk_tree_view_append_column(GTK_TREE_VIEW(disk_tree), col);
     gtk_tree_view_column_set_resizable(col, TRUE);
     gtk_tree_view_column_set_sort_column_id(col, DISK_USED);
+    bind_column_to_gsetting (settings, col);
     gtk_tree_view_column_set_reorderable(col, TRUE);
 
     /* numeric sort */
diff --git a/src/procman-app.cpp b/src/procman-app.cpp
index 1116bdd..5a17fa1 100644
--- a/src/procman-app.cpp
+++ b/src/procman-app.cpp
@@ -412,7 +412,6 @@ procman_get_tree_state (GSettings *settings, GtkWidget *tree, const gchar *child
         {
             GtkTreeViewColumn *column;
             gint width;
-            gboolean visible;
             int id;
             const gchar *title;
             gchar *key;
@@ -422,16 +421,8 @@ procman_get_tree_state (GSettings *settings, GtkWidget *tree, const gchar *child
             column = static_cast<GtkTreeViewColumn*>(it->data);
             id = gtk_tree_view_column_get_sort_column_id (column);
 
-            key = g_strdup_printf ("col-%d-width", id);
-            g_settings_get (pt_settings, key, "i", &width);
-            g_free (key);
-
-            key = g_strdup_printf ("col-%d-visible", id);
-            visible = g_settings_get_boolean (pt_settings, key);
-            g_free (key);
-
-            gtk_tree_view_column_set_visible (column, visible);
             /* ensure column is really visible */
+            width = gtk_tree_view_column_get_fixed_width(column);
             width = MAX(width, 50);
             gtk_tree_view_column_set_fixed_width(column, width);
 
diff --git a/src/proctable.cpp b/src/proctable.cpp
index 285774c..f55be89 100644
--- a/src/proctable.cpp
+++ b/src/proctable.cpp
@@ -290,13 +290,6 @@ cb_refresh_icons (GtkIconTheme *theme, gpointer data)
     cb_timeout(app);
 }
 
-static void
-cb_column_resized (GtkWidget *column, GParamSpec *pspec, gpointer data)
-{
-    save_column_size (GTK_TREE_VIEW_COLUMN (column), G_SETTINGS (data));
-}
-
-
 GtkWidget *
 proctable_new (ProcmanApp * const app)
 {
@@ -397,18 +390,17 @@ proctable_new (ProcmanApp * const app)
     gtk_tree_view_column_set_title (column, _(titles[0]));
 
     gtk_tree_view_column_set_sort_column_id (column, COL_NAME);
+    bind_column_to_gsetting (settings, column);
     gtk_tree_view_column_set_resizable (column, TRUE);
     gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
     gtk_tree_view_column_set_min_width (column, 1);
     gtk_tree_view_column_set_reorderable(column, TRUE);
-    g_signal_connect(G_OBJECT(column), "notify::width", G_CALLBACK(cb_column_resized), settings);
     gtk_tree_view_append_column (GTK_TREE_VIEW (proctree), column);
     gtk_tree_view_set_expander_column (GTK_TREE_VIEW (proctree), column);
 
     for (i = COL_USER; i <= COL_PRIORITY; i++) {
-
-        GtkCellRenderer *cell;
         GtkTreeViewColumn *col;
+        GtkCellRenderer *cell;
 
 #ifndef HAVE_WNCK
         if (i == COL_MEMXSERVER) {
@@ -421,7 +413,7 @@ proctable_new (ProcmanApp * const app)
         gtk_tree_view_column_set_title(col, _(titles[i]));
         gtk_tree_view_column_set_resizable(col, TRUE);
         gtk_tree_view_column_set_sort_column_id(col, i);
-        g_signal_connect(G_OBJECT(col), "notify::width", G_CALLBACK(cb_column_resized), settings);
+        bind_column_to_gsetting (settings, col);
         gtk_tree_view_column_set_reorderable(col, TRUE);
         gtk_tree_view_append_column(GTK_TREE_VIEW(proctree), col);
 
diff --git a/src/util.cpp b/src/util.cpp
index 4db248f..ec04dd0 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -651,23 +651,15 @@ namespace procman
 
 }
 
-
 void
-save_column_size (GtkTreeViewColumn *column, GSettings *settings)
+bind_column_to_gsetting (GSettings *settings, GtkTreeViewColumn *column)
 {
-    int width;
     char *key;
-    int id;
-    int saved_width;
-
-    id = gtk_tree_view_column_get_sort_column_id (column);
-    width = gtk_tree_view_column_get_width (column);
-    key = g_strdup_printf ("col-%d-width", id);
-
-    g_settings_get (settings, key, "i", &saved_width);
-    if (saved_width != width) {
-        g_settings_set_int (settings, key, width);
-    }
-
+    gint column_id = gtk_tree_view_column_get_sort_column_id(column);
+    key = g_strdup_printf ("col-%d-width", column_id);
+    g_settings_bind (settings, key, column, "fixed-width", G_SETTINGS_BIND_DEFAULT);
+    g_free (key);
+    key = g_strdup_printf ("col-%d-visible", column_id);
+    g_settings_bind (settings, key, column, "visible", G_SETTINGS_BIND_DEFAULT);
     g_free (key);
 }
diff --git a/src/util.h b/src/util.h
index cc643a6..3b0d0b5 100644
--- a/src/util.h
+++ b/src/util.h
@@ -167,7 +167,7 @@ namespace procman
     std::string format_network_rate(guint64 rate, guint64 max_rate = 0);
 }
 
-void save_column_size (GtkTreeViewColumn *column, GSettings *settings);
+void bind_column_to_gsetting (GSettings *settings, GtkTreeViewColumn *column);
 
 
 #endif /* H_GNOME_SYSTEM_MONITOR_UTIL_1123178725 */


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