[gnome-system-monitor] Added file systems tab customizability: * column widths are saved on resize and loaded on startup ht
- From: Robert Roth <robertroth src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-system-monitor] Added file systems tab customizability: * column widths are saved on resize and loaded on startup ht
- Date: Sun, 10 Feb 2013 01:03:39 +0000 (UTC)
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]