[gnome-system-monitor] Added file systems tab customizability: * column widths are saved on resize and loaded on startup ht



commit f589439a966151b2589bca21a4d6b40455eb201a
Author: Robert Roth <robert roth off gmail com>
Date:   Sun Feb 10 03:01:43 2013 +0200

    Added file systems tab customizability:
    * column widths are saved on resize and loaded on startup
    https://bugzilla.gnome.org/show_bug.cgi?id=431660
    * column visibilities are saved and loaded
    * free column is hidden by default
    https://bugzilla.gnome.org/show_bug.cgi?id=520853
    Also reduced resizing overhead a bit.

 data/preferences.ui                               |    8 +-
 src/callbacks.cpp                                 |   23 +++++
 src/callbacks.h                                   |    1 +
 src/disks.cpp                                     |    9 ++
 src/org.gnome.gnome-system-monitor.gschema.xml.in |   99 +++++++++++++++++++++
 src/procdialogs.cpp                               |   35 ++++++--
 src/procman-app.cpp                               |    9 +--
 src/proctable.cpp                                 |   33 +------
 8 files changed, 169 insertions(+), 48 deletions(-)
---
diff --git a/data/preferences.ui b/data/preferences.ui
index 23af053..46f3f16 100644
--- a/data/preferences.ui
+++ b/data/preferences.ui
@@ -267,7 +267,7 @@
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">Process i_nformation shown in list:</property>
                                 <property name="use_underline">True</property>
-                                <property name="mnemonic_widget">processes_columns_treeview</property>
+                                <property name="mnemonic_widget">proctree_columns</property>
                               </object>
                               <packing>
                                 <property name="left_attach">0</property>
@@ -284,7 +284,7 @@
                                 <property name="vexpand">True</property>
                                 <property name="shadow_type">in</property>
                                 <child>
-                                  <object class="GtkTreeView" id="processes_columns_treeview">
+                                  <object class="GtkTreeView" id="proctree_columns">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="headers_visible">False</property>
@@ -652,7 +652,7 @@
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">File system i_nformation shown in list:</property>
                                 <property name="use_underline">True</property>
-                                <property name="mnemonic_widget">devices_columns_treeview</property>
+                                <property name="mnemonic_widget">disktreenew_columns</property>
                               </object>
                               <packing>
                                 <property name="left_attach">0</property>
@@ -669,7 +669,7 @@
                                 <property name="vexpand">True</property>
                                 <property name="shadow_type">in</property>
                                 <child>
-                                  <object class="GtkTreeView" id="devices_columns_treeview">
+                                  <object class="GtkTreeView" id="disktreenew_columns">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="headers_visible">False</property>
diff --git a/src/callbacks.cpp b/src/callbacks.cpp
index e5e1f6c..4313112 100644
--- a/src/callbacks.cpp
+++ b/src/callbacks.cpp
@@ -486,3 +486,26 @@ cb_radio_processes(GtkAction *action, GtkRadioAction *current, gpointer data)
     g_settings_set_int (app->settings, "view-as",
                         app->config.whose_process);
 }
+
+void
+cb_column_resized(GtkWidget *widget, GParamSpec* param, gpointer data)
+{
+    GSettings * settings = static_cast<GSettings *>(data);
+    GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(widget);
+    gint width;
+    gchar *key;
+    int id;
+    
+    gint 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);
+    }
+    g_free (key);
+}
diff --git a/src/callbacks.h b/src/callbacks.h
index 4f88117..bbb6463 100644
--- a/src/callbacks.h
+++ b/src/callbacks.h
@@ -70,6 +70,7 @@ void            cb_radio_processes(GtkAction *action,
                                    GtkRadioAction *current,
                                    gpointer data);
 
+void            cb_column_resized (GtkWidget* column, GParamSpec* param, gpointer data);
 
 
 void            cb_kill_sigstop(GtkAction *action,
diff --git a/src/disks.cpp b/src/disks.cpp
index 5047cb7..1735aff 100644
--- a/src/disks.cpp
+++ b/src/disks.cpp
@@ -8,6 +8,7 @@
 #include <glib/gi18n.h>
 
 #include "procman-app.h"
+#include "callbacks.h"
 #include "disks.h"
 #include "util.h"
 #include "interface.h"
@@ -309,6 +310,8 @@ create_disk_view(ProcmanApp *app, GtkBuilder *builder)
         N_("Used")
     };
 
+    GSettings * settings = g_settings_get_child (app->settings, "disktreenew");
+
     scrolled = GTK_WIDGET (gtk_builder_get_object (builder, "disks_scrolled"));
 
     model = gtk_list_store_new(DISK_N_COLUMNS,      /* n columns */
@@ -334,6 +337,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);
@@ -346,6 +350,7 @@ create_disk_view(ProcmanApp *app, GtkBuilder *builder)
     gtk_tree_view_column_set_sort_column_id(col, DISK_DEVICE);
     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);
     gtk_tree_view_append_column(GTK_TREE_VIEW(disk_tree), col);
 
     /* sizes - used */
@@ -356,8 +361,10 @@ 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);
         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);
 
         switch (i) {
@@ -383,7 +390,9 @@ 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);
     gtk_tree_view_column_set_cell_data_func(col, cell,
                                             &procman::size_cell_data_func,
diff --git a/src/org.gnome.gnome-system-monitor.gschema.xml.in b/src/org.gnome.gnome-system-monitor.gschema.xml.in
index 264cd2d..619747a 100644
--- a/src/org.gnome.gnome-system-monitor.gschema.xml.in
+++ b/src/org.gnome.gnome-system-monitor.gschema.xml.in
@@ -535,6 +535,105 @@
       <_summary>Disk view columns order
       </_summary>
     </key>
+    
+    <key name="col-0-width" type="i">
+      <default>100
+      </default>
+      <_summary>Width of disk view 'Device' column
+      </_summary>
+    </key>
+
+    <key name="col-0-visible" type="b">
+      <default>true
+      </default>
+      <_summary>Show disk view 'Device' column on startup
+      </_summary>
+    </key>
+
+    <key name="col-1-width" type="i">
+      <default>100
+      </default>
+      <_summary>Width of disk view 'Directory' column
+      </_summary>
+    </key>
+
+    <key name="col-1-visible" type="b">
+      <default>true
+      </default>
+      <_summary>Show disk view 'Directory' column on startup
+      </_summary>
+    </key>
+
+    <key name="col-2-width" type="i">
+      <default>50
+      </default>
+      <_summary>Width of disk view 'Type' column
+      </_summary>
+    </key>
+
+    <key name="col-2-visible" type="b">
+      <default>true
+      </default>
+      <_summary>Show disk view 'Type' column on startup
+      </_summary>
+    </key>
+
+    <key name="col-3-width" type="i">
+      <default>80
+      </default>
+      <_summary>Width of disk view 'Total' column
+      </_summary>
+    </key>
+
+    <key name="col-3-visible" type="b">
+      <default>true
+      </default>
+      <_summary>Show disk view 'Total' column on startup
+      </_summary>
+    </key>
+
+    <key name="col-4-width" type="i">
+      <default>80
+      </default>
+      <_summary>Width of disk view 'Free' column
+      </_summary>
+    </key>
+
+    <key name="col-4-visible" type="b">
+      <default>false
+      </default>
+      <_summary>Show disk view 'Free' column on startup
+      </_summary>
+    </key>
+
+    <key name="col-5-width" type="i">
+      <default>80
+      </default>
+      <_summary>Width of disk view 'Available' column
+      </_summary>
+    </key>
+
+    <key name="col-5-visible" type="b">
+      <default>true
+      </default>
+      <_summary>Show disk view 'Available' column on startup
+      </_summary>
+    </key>
+
+    <key name="col-6-width" type="i">
+      <default>300
+      </default>
+      <_summary>Width of disk view 'Used' column
+      </_summary>
+    </key>
+
+    <key name="col-6-visible" type="b">
+      <default>true
+      </default>
+      <_summary>Show disk view 'Used' column on startup
+      </_summary>
+    </key>
+
   </schema>
 
   <schema id="org.gnome.gnome-system-monitor.memmapstree" path="/org/gnome/gnome-system-monitor/memmapstree/">
diff --git a/src/procdialogs.cpp b/src/procdialogs.cpp
index 691a161..9e05fe5 100644
--- a/src/procdialogs.cpp
+++ b/src/procdialogs.cpp
@@ -341,18 +341,15 @@ private:
     const string key;
 };
 
-
-
-
 static void
-field_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data)
+field_toggled (const gchar *gconf_parent, GtkCellRendererToggle *cell, gchar *path_str, gpointer data)
 {
     GtkTreeModel *model = static_cast<GtkTreeModel*>(data);
     GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
     GtkTreeIter iter;
     GtkTreeViewColumn *column;
     gboolean toggled;
-    GSettings *settings = g_settings_get_child (ProcmanApp::get()->settings, "proctree");
+    GSettings *settings = g_settings_get_child (ProcmanApp::get()->settings, gconf_parent);
     gchar *key;
     int id;
 
@@ -378,6 +375,18 @@ field_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data)
 }
 
 static void
+proc_field_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data)
+{
+    field_toggled("proctree", cell, path_str, data);
+}
+
+static void
+disk_field_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data)
+{
+    field_toggled("disktreenew", cell, path_str, data);
+}
+
+static void
 create_field_page(GtkBuilder* builder, GtkWidget *tree, const gchar *widgetname)
 {
     GtkTreeView *treeview;
@@ -385,8 +394,12 @@ create_field_page(GtkBuilder* builder, GtkWidget *tree, const gchar *widgetname)
     GtkListStore *model;
     GtkTreeViewColumn *column;
     GtkCellRenderer *cell;
+    gchar *full_widgetname;
+
+    full_widgetname = g_strdup_printf ("%s_columns", widgetname);
+    treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, full_widgetname));
+    g_free (full_widgetname);
 
-    treeview = GTK_TREE_VIEW (gtk_builder_get_object (builder, widgetname));
     model = gtk_list_store_new (3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_POINTER);
 
     gtk_tree_view_set_model (GTK_TREE_VIEW(treeview), GTK_TREE_MODEL(model));
@@ -399,7 +412,11 @@ create_field_page(GtkBuilder* builder, GtkWidget *tree, const gchar *widgetname)
     gtk_tree_view_column_set_attributes (column, cell,
                                          "active", 0,
                                          NULL);
-    g_signal_connect (G_OBJECT (cell), "toggled", G_CALLBACK (field_toggled), model);
+    if(!g_strcmp0(widgetname, "proctree")) 
+        g_signal_connect (G_OBJECT (cell), "toggled", G_CALLBACK (proc_field_toggled), model);
+    else if(!g_strcmp0(widgetname, "disktreenew")) 
+        g_signal_connect (G_OBJECT (cell), "toggled", G_CALLBACK (disk_field_toggled), model);
+
     gtk_tree_view_column_set_clickable (column, TRUE);
     gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
 
@@ -522,7 +539,7 @@ procdialog_create_preferences_dialog (ProcmanApp *app)
     g_signal_connect(G_OBJECT(draw_stacked_button), "toggled",
                      G_CALLBACK(draw_stacked_toggled), app);
 
-    create_field_page (builder, app->tree, "processes_columns_treeview");
+    create_field_page (builder, app->tree, "proctree");
 
     update = (gfloat) app->config.graph_update_interval;
     adjustment = (GtkAdjustment *) gtk_adjustment_new(update / 1000.0, 0.25,
@@ -557,7 +574,7 @@ procdialog_create_preferences_dialog (ProcmanApp *app)
     g_signal_connect (G_OBJECT (check_button), "toggled",
                       G_CALLBACK (show_all_fs_toggled), app);
 
-    create_field_page (builder, app->disk_list, "devices_columns_treeview");
+    create_field_page (builder, app->disk_list, "disktreenew");
 
     gtk_widget_show_all (prefs_dialog);
     g_signal_connect (G_OBJECT (prefs_dialog), "response",
diff --git a/src/procman-app.cpp b/src/procman-app.cpp
index 787f879..3cbbe4f 100644
--- a/src/procman-app.cpp
+++ b/src/procman-app.cpp
@@ -407,7 +407,8 @@ procman_get_tree_state (GSettings *settings, GtkWidget *tree, const gchar *child
 
     columns = gtk_tree_view_get_columns (GTK_TREE_VIEW (tree));
 
-    if(!g_strcmp0(child_schema, "proctree"))
+    if(!g_strcmp0(child_schema, "proctree") ||
+       !g_strcmp0(child_schema, "disktreenew"))
     {
         for(it = columns; it; it = it->next)
         {
@@ -437,11 +438,7 @@ procman_get_tree_state (GSettings *settings, GtkWidget *tree, const gchar *child
                 gtk_tree_view_column_set_fixed_width(column, width);
             }
         }
-    }
-
-    if(!g_strcmp0(child_schema, "proctree") ||
-       !g_strcmp0(child_schema, "disktreenew"))
-    {
+        
         GVariant     *value;
         GVariantIter iter;
         int          sortIndex;
diff --git a/src/proctable.cpp b/src/proctable.cpp
index 0d87f16..3306034 100644
--- a/src/proctable.cpp
+++ b/src/proctable.cpp
@@ -172,29 +172,6 @@ proctable_get_columns_order(GtkTreeView *treeview)
     return order;
 }
 
-void
-cb_proctable_column_resized(GtkWidget *widget)
-{
-    GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(widget);
-    gint width;
-    gchar *key;
-    int id;
-    GSettings *settings;
-    gint saved_width;
-
-    settings = g_settings_get_child (ProcmanApp::get()->settings, "proctree");
-    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);
-    }
-    g_free (key);
-}
-
 static gboolean
 search_equal_func(GtkTreeModel *model,
                   gint column,
@@ -234,7 +211,6 @@ proctable_new (ProcmanApp * const app)
     GtkTreeSelection *selection;
     GtkTreeViewColumn *column;
     GtkCellRenderer *cell_renderer;
-
     const gchar *titles[] = {
         N_("Process Name"),
         N_("User"),
@@ -267,7 +243,7 @@ proctable_new (ProcmanApp * const app)
     };
 
     gint i;
-
+    GSettings * settings = g_settings_get_child (app->settings, "proctree");
     model = gtk_tree_store_new (NUM_COLUMNS,
                                 G_TYPE_STRING,      /* Process Name */
                                 G_TYPE_STRING,      /* User         */
@@ -330,7 +306,7 @@ proctable_new (ProcmanApp * const app)
     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);
-    g_signal_connect(G_OBJECT(column), "notify::width", G_CALLBACK(cb_proctable_column_resized), NULL);
+    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);
 
@@ -346,7 +322,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_proctable_column_resized), NULL);
+        g_signal_connect(G_OBJECT(col), "notify::width", G_CALLBACK(cb_column_resized), settings);
         gtk_tree_view_column_set_reorderable(col, TRUE);
         gtk_tree_view_append_column(GTK_TREE_VIEW(proctree), col);
 
@@ -441,10 +417,10 @@ proctable_new (ProcmanApp * const app)
                 break;
         }
 
+        gtk_tree_view_column_set_sizing(col, GTK_TREE_VIEW_COLUMN_FIXED);
         // sizing
         switch (i) {
             case COL_ARGS:
-                gtk_tree_view_column_set_sizing(col, GTK_TREE_VIEW_COLUMN_FIXED);
                 gtk_tree_view_column_set_min_width(col, 150);
                 break;
             default:
@@ -454,7 +430,6 @@ proctable_new (ProcmanApp * const app)
     }
 
     app->tree = proctree;
-
     set_proctree_reorderable(app);
 
     procman_get_tree_state (app->settings, proctree, "proctree");


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