diff options
author | Milan Crha <mcrha@redhat.com> | 2011-06-01 22:14:05 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2011-06-01 22:14:05 +0800 |
commit | 2b4ed0052e6c4e1e068c0b1674aca0354b9a9994 (patch) | |
tree | 862a653b9e16259d7b733d0090538e76c6e1f939 | |
parent | eecafa06bd69a07d376f3e4b28c99eac45cb1012 (diff) | |
download | gsoc2013-evolution-2b4ed0052e6c4e1e068c0b1674aca0354b9a9994.tar gsoc2013-evolution-2b4ed0052e6c4e1e068c0b1674aca0354b9a9994.tar.gz gsoc2013-evolution-2b4ed0052e6c4e1e068c0b1674aca0354b9a9994.tar.bz2 gsoc2013-evolution-2b4ed0052e6c4e1e068c0b1674aca0354b9a9994.tar.lz gsoc2013-evolution-2b4ed0052e6c4e1e068c0b1674aca0354b9a9994.tar.xz gsoc2013-evolution-2b4ed0052e6c4e1e068c0b1674aca0354b9a9994.tar.zst gsoc2013-evolution-2b4ed0052e6c4e1e068c0b1674aca0354b9a9994.zip |
Bug #578245 - View settings for threads getting lost
-rw-r--r-- | mail/mail-config.c | 8 | ||||
-rw-r--r-- | mail/message-list.c | 47 |
2 files changed, 26 insertions, 29 deletions
diff --git a/mail/mail-config.c b/mail/mail-config.c index d1f87b9dd6..e910ba01b8 100644 --- a/mail/mail-config.c +++ b/mail/mail-config.c @@ -339,6 +339,14 @@ mail_config_folder_to_cachename (CamelFolder *folder, const gchar *prefix) const gchar *config_dir; config_dir = mail_session_get_config_dir (); + + basename = g_build_filename (config_dir, "folders", NULL); + if (!g_file_test (basename, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) { + /* create the folder if does not exist */ + g_mkdir_with_parents (basename, 0700); + } + g_free (basename); + url = g_strdup (camel_folder_get_uri (folder)); e_filename_make_safe (url); basename = g_strdup_printf ("%s%s", prefix, url); diff --git a/mail/message-list.c b/mail/message-list.c index 76ab58a60c..d77fa18c43 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -2062,10 +2062,10 @@ save_tree_state (MessageList *ml) { gchar *filename; - if (ml->folder == NULL) + if (ml->folder == NULL || (ml->search && *ml->search)) return; - filename = mail_config_folder_to_cachename(ml->folder, "et-expanded-"); + filename = mail_config_folder_to_cachename (ml->folder, "et-expanded-"); e_tree_save_expanded_state (E_TREE (ml), filename); g_free (filename); @@ -2080,7 +2080,8 @@ load_tree_state (MessageList *ml, xmlDoc *expand_state) if (expand_state) { e_tree_load_expanded_state_xml (E_TREE (ml), expand_state); - } else { + } else if (!ml->search || !*ml->search) { + /* only when not searching */ gchar *filename; filename = mail_config_folder_to_cachename (ml->folder, "et-expanded-"); @@ -2103,31 +2104,16 @@ message_list_setup_etree (MessageList *message_list, gboolean outgoing) /* build the spec based on the folder, and possibly from a saved file */ /* otherwise, leave default */ if (message_list->folder) { - CamelStore *parent_store; - gchar *path; - gchar *name; gint data = 1; - struct stat st; ETableItem *item; item = e_tree_get_item (E_TREE (message_list)); g_object_set (message_list, "uniform_row_height", TRUE, NULL); - - parent_store = camel_folder_get_parent_store (message_list->folder); - name = camel_service_get_name (CAMEL_SERVICE (parent_store), TRUE); - d(printf ("folder name is '%s'\n", name)); - - path = mail_config_folder_to_cachename (message_list->folder, "et-expanded-"); g_object_set_data (G_OBJECT (((GnomeCanvasItem *) item)->canvas), "freeze-cursor", &data); - if (path && g_stat (path, &st) == 0 && st.st_size > 0 && S_ISREG (st.st_mode)) { - /* build based on saved file */ - e_tree_load_expanded_state (E_TREE (message_list), path); - } - g_free (path); - - g_free (name); + /* build based on saved file */ + load_tree_state (message_list, NULL); } } @@ -4649,6 +4635,7 @@ regen_list_done (struct _regen_list_msg *m) { ETree *tree; GCancellable *cancellable; + gboolean searching; cancellable = e_activity_get_cancellable (m->base.activity); @@ -4673,6 +4660,13 @@ regen_list_done (struct _regen_list_msg *m) e_profile_event_emit("list.buildtree", camel_folder_get_full_name (m->folder), 0); + if (m->ml->search && m->ml->search != m->search) + g_free (m->ml->search); + m->ml->search = m->search; + m->search = NULL; + + searching = m->ml->search && *m->ml->search; + if (m->dotree) { gboolean forcing_expand_state = m->ml->expand_all || m->ml->collapse_all; @@ -4685,8 +4679,8 @@ regen_list_done (struct _regen_list_msg *m) } } - if (forcing_expand_state) - e_tree_force_expanded_state (tree, m->ml->expand_all ? 1 : -1); + if (forcing_expand_state || searching) + e_tree_force_expanded_state (tree, (m->ml->expand_all || searching) ? 1 : -1); build_tree (m->ml, m->tree, m->changes); if (m->ml->thread_tree) @@ -4694,8 +4688,8 @@ regen_list_done (struct _regen_list_msg *m) m->ml->thread_tree = m->tree; m->tree = NULL; - if (forcing_expand_state) { - if (m->ml->folder != NULL && tree != NULL) + if (forcing_expand_state || searching) { + if (m->ml->folder != NULL && tree != NULL && !searching) save_tree_state (m->ml); /* do not forget to set this back to use the default value... */ e_tree_force_expanded_state (tree, 0); @@ -4707,11 +4701,6 @@ regen_list_done (struct _regen_list_msg *m) } else build_flat (m->ml, m->summary, m->changes); - if (m->ml->search && m->ml->search != m->search) - g_free (m->ml->search); - m->ml->search = m->search; - m->search = NULL; - g_mutex_lock (m->ml->regen_lock); m->ml->regen = g_list_remove (m->ml->regen, m); g_mutex_unlock (m->ml->regen_lock); |