summaryrefslogtreecommitdiff
path: root/src/trg-tree-view.c
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-05-13 20:46:33 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-05-13 20:46:33 +0000
commitbde5ae0e400dc61f2eb64e7ffb9707b9c69b9113 (patch)
treefe4f89db1d0376496b8048e4bc17a2e74545e4b5 /src/trg-tree-view.c
parent665e231ceb850f86ceedf80cdb6d13cca52671bf (diff)
issue 41 - remember sort column and type. also move all these stores from delete-event to destroy function so it works when the quit buttons are used, as well as from window manager.
Diffstat (limited to 'src/trg-tree-view.c')
-rw-r--r--src/trg-tree-view.c54
1 files changed, 52 insertions, 2 deletions
diff --git a/src/trg-tree-view.c b/src/trg-tree-view.c
index 0bf9f5b..cd1f709 100644
--- a/src/trg-tree-view.c
+++ b/src/trg-tree-view.c
@@ -321,14 +321,18 @@ static void trg_tree_view_add_column_after(TrgTreeView * tv,
void trg_tree_view_persist(TrgTreeView * tv)
{
GConfClient *gcc = gconf_client_get_default();
+ GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(tv));
GList *cols = gtk_tree_view_get_columns(GTK_TREE_VIEW(tv));
gint n_cols = g_list_length(cols);
+ gint sort_column_id;
+ GtkSortType sort_type;
+ const gchar *tree_view_name = G_OBJECT_TYPE_NAME(tv);
gchar *cols_key =
g_strdup_printf("/apps/transmission-remote-gtk/%s-columns",
- G_OBJECT_TYPE_NAME(tv));
+ tree_view_name);
gchar *widths_key =
g_strdup_printf("/apps/transmission-remote-gtk/%s-widths",
- G_OBJECT_TYPE_NAME(tv));
+ tree_view_name);
gchar **cols_v = g_new0(gchar *, n_cols + 1);
gchar **widths_v = g_new0(gchar *, n_cols + 1);
gchar *widths_js, *cols_js;
@@ -348,6 +352,20 @@ void trg_tree_view_persist(TrgTreeView * tv)
widths_js = g_strjoinv(",", widths_v);
cols_js = g_strjoinv(",", cols_v);
+ if (gtk_tree_sortable_get_sort_column_id
+ (GTK_TREE_SORTABLE(model), &sort_column_id, &sort_type)) {
+ gchar *sort_col_key =
+ g_strdup_printf("/apps/transmission-remote-gtk/%s-sort_col",
+ tree_view_name);
+ gchar *sort_type_key =
+ g_strdup_printf("/apps/transmission-remote-gtk/%s-sort_type",
+ tree_view_name);
+ gconf_client_set_int(gcc, sort_col_key, sort_column_id, NULL);
+ gconf_client_set_int(gcc, sort_type_key, (gint) sort_type, NULL);
+ g_free(sort_type_key);
+ g_free(sort_col_key);
+ }
+
gconf_client_set_string(gcc, cols_key, cols_js, NULL);
gconf_client_set_string(gcc, widths_key, widths_js, NULL);
@@ -361,6 +379,38 @@ void trg_tree_view_persist(TrgTreeView * tv)
g_object_unref(gcc);
}
+void trg_tree_view_restore_sort(TrgTreeView * tv)
+{
+ GConfClient *gcc = gconf_client_get_default();
+ GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(tv));
+ gchar *sort_col_key =
+ g_strdup_printf("/apps/transmission-remote-gtk/%s-sort_col",
+ G_OBJECT_TYPE_NAME(tv));
+ gchar *sort_type_key =
+ g_strdup_printf("/apps/transmission-remote-gtk/%s-sort_type",
+ G_OBJECT_TYPE_NAME(tv));
+ GConfValue *sort_col_gv =
+ gconf_client_get_without_default(gcc, sort_col_key, NULL);
+ GConfValue *sort_type_gv =
+ gconf_client_get_without_default(gcc, sort_type_key, NULL);
+ if (sort_col_gv) {
+ gint sort_col_value = gconf_value_get_int(sort_col_gv);
+ GtkSortType sort_type_value = GTK_SORT_ASCENDING;
+ if (sort_type_gv) {
+ sort_type_value =
+ (GtkSortType) gconf_value_get_int(sort_type_gv);
+ gconf_value_free(sort_type_gv);
+ }
+ gconf_value_free(sort_col_gv);
+ gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model),
+ sort_col_value,
+ sort_type_value);
+ }
+ g_free(sort_col_key);
+ g_free(sort_type_key);
+ g_object_unref(gcc);
+}
+
void trg_tree_view_setup_columns(TrgTreeView * tv)
{
TrgTreeViewPrivate *priv = TRG_TREE_VIEW_GET_PRIVATE(tv);