From 01735cf7050926fb1c1de8adecb391c657ad2204 Mon Sep 17 00:00:00 2001 From: infirit Date: Thu, 18 Dec 2014 19:44:39 +0100 Subject: Save column info on change instead of quit Taken from GSM commit: bc2a8c221604fe335b690ba7d180022bf0430fff From: Robert Roth Gnome bug: http://bugzilla.gnome.org/show_bug.cgi?id=649398 --- src/procdialogs.cpp | 9 +++++++++ src/procman.cpp | 29 +++-------------------------- src/proctable.cpp | 24 ++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/procdialogs.cpp b/src/procdialogs.cpp index e44fd20..449679d 100644 --- a/src/procdialogs.cpp +++ b/src/procdialogs.cpp @@ -382,6 +382,9 @@ field_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data) GtkTreeIter iter; GtkTreeViewColumn *column; gboolean toggled; + GSettings *settings = g_settings_get_child (ProcData::get_instance()->settings, "proctree"); + gchar *key; + int id; if (!path) return; @@ -394,6 +397,12 @@ field_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data) gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, !toggled, -1); gtk_tree_view_column_set_visible (column, !toggled); + id = gtk_tree_view_column_get_sort_column_id (column); + + key = g_strdup_printf ("col-%d-visible", id); + g_settings_set_boolean (settings, key, !toggled); + g_free (key); + gtk_tree_path_free (path); } diff --git a/src/procman.cpp b/src/procman.cpp index c19edb7..4e8d2ce 100644 --- a/src/procman.cpp +++ b/src/procman.cpp @@ -470,7 +470,7 @@ void procman_save_tree_state (GSettings *settings, GtkWidget *tree, const gchar *child_schema) { GtkTreeModel *model; - GList *it, *columns; + GList *columns; gint sort_col; GtkSortType order; @@ -488,31 +488,6 @@ procman_save_tree_state (GSettings *settings, GtkWidget *tree, const gchar *chil columns = gtk_tree_view_get_columns (GTK_TREE_VIEW (tree)); - if(!g_strcmp0(child_schema, "proctree")) - { - for(it = columns; it; it = it->next) - { - GtkTreeViewColumn *column; - gboolean visible; - gint width; - gchar *key; - int id; - - column = static_cast(it->data); - id = gtk_tree_view_column_get_sort_column_id (column); - visible = gtk_tree_view_column_get_visible (column); - width = gtk_tree_view_column_get_width (column); - - key = g_strdup_printf ("col-%d-width", id); - g_settings_set_int (pt_settings, key, width); - g_free (key); - - key = g_strdup_printf ("col-%d-visible", id); - g_settings_set_boolean (pt_settings, key, visible); - g_free (key); - } - } - if(!g_strcmp0(child_schema, "proctree") || !g_strcmp0(child_schema, "disktreenew")) { GSList *order; @@ -557,6 +532,8 @@ procman_save_config (ProcData *data) g_settings_set_int (settings, "y-position", data->config.ypos); g_settings_set_int (settings, "current-tab", data->config.current_tab); + + g_settings_sync (); } static guint32 diff --git a/src/proctable.cpp b/src/proctable.cpp index 1304077..686ca45 100644 --- a/src/proctable.cpp +++ b/src/proctable.cpp @@ -169,6 +169,28 @@ 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 (ProcData::get_instance()->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, @@ -293,6 +315,7 @@ proctable_new (ProcData * const procdata) 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); gtk_tree_view_append_column (GTK_TREE_VIEW (proctree), column); gtk_tree_view_set_expander_column (GTK_TREE_VIEW (proctree), column); @@ -308,6 +331,7 @@ proctable_new (ProcData * const procdata) 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); gtk_tree_view_column_set_reorderable(col, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(proctree), col); -- cgit v1.2.1