[gnome-system-monitor] Throttle saving of column state
- From: Robert Roth <robertroth src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-system-monitor] Throttle saving of column state
- Date: Tue, 13 Aug 2013 20:15:26 +0000 (UTC)
commit 89931e2e24df517e1c86929a64d4fcde55d599a7
Author: Stefano Facchini <stefano facchini gmail com>
Date: Mon Aug 12 11:23:52 2013 +0200
Throttle saving of column state
Instead of continuously updating the gsettings key, save it
only after resizing is pause for 250msecs.
https://bugzilla.gnome.org/show_bug.cgi?id=685946
src/treeview.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 52 insertions(+), 10 deletions(-)
---
diff --git a/src/treeview.c b/src/treeview.c
index a0e5dcd..5240dc9 100644
--- a/src/treeview.c
+++ b/src/treeview.c
@@ -146,6 +146,7 @@ gsm_tree_view_load_state (GsmTreeView *tree_view)
for (iter = columns; iter != NULL; iter = iter->next) {
const char *title;
+ char *key;
GtkWidget *button;
GtkWidget *column_item;
@@ -171,6 +172,14 @@ gsm_tree_view_load_state (GsmTreeView *tree_view)
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
gtk_menu_shell_append (GTK_MENU_SHELL (header_menu), column_item);
+
+ key = g_strdup_printf ("col-%d-width", sort_id);
+ gtk_tree_view_column_set_fixed_width (col, g_settings_get_int (priv->settings, key));
+ g_free (key);
+
+ key = g_strdup_printf ("col-%d-visible", sort_id);
+ gtk_tree_view_column_set_visible (col, g_settings_get_boolean (priv->settings, key));
+ g_free (key);
}
gtk_widget_show_all (header_menu);
@@ -201,12 +210,47 @@ gsm_tree_view_add_excluded_column (GsmTreeView *tree_view, gint column_id)
g_hash_table_add (priv->excluded_columns, GINT_TO_POINTER (column_id));
}
+static guint timeout_id = 0;
+static GtkTreeViewColumn *current_column;
+
+static gboolean
+save_column_state (gpointer data)
+{
+ GSettings *settings = G_SETTINGS (data);
+ gint column_id = gtk_tree_view_column_get_sort_column_id (current_column);
+ gint width = gtk_tree_view_column_get_width (current_column);
+ gboolean visible = gtk_tree_view_column_get_visible (current_column);
+
+ gchar *key;
+
+ key = g_strdup_printf ("col-%d-width", column_id);
+ g_settings_set_int (settings, key, width);
+ g_free (key);
+
+ key = g_strdup_printf ("col-%d-visible", column_id);
+ g_settings_set_boolean (settings, key, visible);
+ g_free (key);
+
+ return FALSE;
+}
+
+static void
+cb_update_column_state (GObject *object, GParamSpec *pspec, gpointer data)
+{
+ GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN (object);
+
+ current_column = column;
+
+ if (timeout_id)
+ g_source_remove (timeout_id);
+
+ timeout_id = g_timeout_add (250, save_column_state, data);
+}
+
void
gsm_tree_view_append_and_bind_column (GsmTreeView *tree_view, GtkTreeViewColumn *column)
{
GsmTreeViewPrivate *priv;
- gchar *key;
- gint column_id;
g_return_if_fail (GSM_IS_TREE_VIEW (tree_view));
g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (column));
@@ -216,15 +260,13 @@ gsm_tree_view_append_and_bind_column (GsmTreeView *tree_view, GtkTreeViewColumn
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view),
column);
- column_id = gtk_tree_view_column_get_sort_column_id (column);
+ g_signal_connect (column, "notify::fixed-width",
+ G_CALLBACK (cb_update_column_state),
+ priv->settings);
- key = g_strdup_printf ("col-%d-width", column_id);
- g_settings_bind (priv->settings, key, column, "fixed-width", G_SETTINGS_BIND_DEFAULT);
- g_free (key);
-
- key = g_strdup_printf ("col-%d-visible", column_id);
- g_settings_bind (priv->settings, key, column, "visible", G_SETTINGS_BIND_DEFAULT);
- g_free (key);
+ g_signal_connect (column, "notify::visible",
+ G_CALLBACK (cb_update_column_state),
+ priv->settings);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]