From e335802981396bacf6d20a2168853d94ba15df9c Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 5 Nov 2007 11:49:53 +0000 Subject: ** Fix for bug #343011 (restore collapse state of selected folder after 2007-11-05 Milan Crha ** Fix for bug #343011 (restore collapse state of selected folder after start) * em-folder-tree.c: (emft_maybe_expand_row): Do not expand subtree of a node, only make it visible. * em-folder-tree-model.h: (em_folder_tree_model_get_expanded_uri), (em_folder_tree_model_set_expanded_uri): * em-folder-tree-model.c: (em_folder_tree_model_get_expanded_uri), (em_folder_tree_model_set_expanded_uri): Same as ..._get/_set_expanded, but using 'uri', instead of 'key'. * em-folder-tree-model.c: (emftm_uri_to_key): New helper function. * mail-component.c: (impl_createView): Restore collapsed state after selecting last selected folder, if necessary. svn path=/trunk/; revision=34503 --- mail/em-folder-tree.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'mail/em-folder-tree.c') diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c index be97353e42..acf317a15c 100644 --- a/mail/em-folder-tree.c +++ b/mail/em-folder-tree.c @@ -675,6 +675,7 @@ emft_maybe_expand_row (EMFolderTreeModel *model, GtkTreePath *tree_path, GtkTree char *full_name; char *key; struct _selected_uri *u; + gboolean is_expanded; gtk_tree_model_get ((GtkTreeModel *) model, iter, COL_STRING_FULL_NAME, &full_name, @@ -693,10 +694,18 @@ emft_maybe_expand_row (EMFolderTreeModel *model, GtkTreePath *tree_path, GtkTree key = g_strdup_printf ("local/%s", full_name ? full_name : ""); } + is_expanded = em_folder_tree_model_get_expanded (model, key); u = g_hash_table_lookup(priv->select_uris_table, key); - if (em_folder_tree_model_get_expanded (model, key) || u) { - gtk_tree_view_expand_to_path (priv->treeview, tree_path); - gtk_tree_view_expand_row (priv->treeview, tree_path, FALSE); + if (is_expanded || u) { + if (is_expanded) { + gtk_tree_view_expand_to_path (priv->treeview, tree_path); + gtk_tree_view_expand_row (priv->treeview, tree_path, FALSE); + } else { + char *c = strrchr (key, '/'); + + *c = '\0'; + emft_expand_node (model, key, emft); + } if (u) emft_select_uri(emft, tree_path, u); -- cgit v1.2.3