aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2004-05-04 02:59:05 +0800
committerJeffrey Stedfast <fejj@src.gnome.org>2004-05-04 02:59:05 +0800
commit77c5ed36148a3a83099ecc17bf48ad8d5068773a (patch)
treea1fe17dd8df81c4ef0e01ecba475e8f28a76a720
parent697c34cf89935ae92ab52a61f2db9730092144f2 (diff)
downloadgsoc2013-evolution-77c5ed36148a3a83099ecc17bf48ad8d5068773a.tar.gz
gsoc2013-evolution-77c5ed36148a3a83099ecc17bf48ad8d5068773a.tar.zst
gsoc2013-evolution-77c5ed36148a3a83099ecc17bf48ad8d5068773a.zip
Fix for bug #57968
2004-05-03 Jeffrey Stedfast <fejj@ximian.com> Fix for bug #57968 * message-list.c (message_list_set_folder): Save the tree/hide state of the current folder before clearing the message-list. (message_list_set_folder): Note that a new folder has just been set (now needed by the regen code to tell whether or not it should save the tree state before clearing the tree). (message_list_destroy): Save the tree/hide state before destroying the message-info's, not after. (regen_list_regened): If the regen is being performed in response to a message_list_set_folder, don't save the tree state before clearing the tree or we'll clobber the real state with bogus data. svn path=/trunk/; revision=25767
-rw-r--r--mail/ChangeLog15
-rw-r--r--mail/mail-account-gui.c2
-rw-r--r--mail/message-list.c21
-rw-r--r--mail/message-list.h3
4 files changed, 33 insertions, 8 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 944c504bff..16f32343b7 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,18 @@
+2004-05-03 Jeffrey Stedfast <fejj@ximian.com>
+
+ Fix for bug #57968
+
+ * message-list.c (message_list_set_folder): Save the tree/hide
+ state of the current folder before clearing the message-list.
+ (message_list_set_folder): Note that a new folder has just been
+ set (now needed by the regen code to tell whether or not it should
+ save the tree state before clearing the tree).
+ (message_list_destroy): Save the tree/hide state before destroying
+ the message-info's, not after.
+ (regen_list_regened): If the regen is being performed in response
+ to a message_list_set_folder, don't save the tree state before
+ clearing the tree or we'll clobber the real state with bogus data.
+
2004-05-03 William Jon McCann <mccann@jhu.edu>
* mail-account-gui.c: Add gtkdialog header to fix build.
diff --git a/mail/mail-account-gui.c b/mail/mail-account-gui.c
index adc2e4d844..85af00c601 100644
--- a/mail/mail-account-gui.c
+++ b/mail/mail-account-gui.c
@@ -338,7 +338,7 @@ service_complete (MailAccountGuiService *service, GHashTable *extra_config, GtkW
return TRUE;
}
-gboolean
+static gboolean
mail_account_gui_check_for_license (CamelProvider *prov)
{
GConfClient *gconf;
diff --git a/mail/message-list.c b/mail/message-list.c
index c34a1444b1..138832c007 100644
--- a/mail/message-list.c
+++ b/mail/message-list.c
@@ -1625,14 +1625,15 @@ message_list_destroy(GtkObject *object)
if (message_list->folder) {
/* need to do this before removing folder, folderinfo's might not exist after */
+ save_tree_state(message_list);
+ save_hide_state(message_list);
+
if (message_list->uid_nodemap) {
g_hash_table_foreach(message_list->uid_nodemap, (GHFunc)clear_info, message_list);
g_hash_table_destroy (message_list->uid_nodemap);
message_list->uid_nodemap = NULL;
}
- save_tree_state(message_list);
- save_hide_state(message_list);
camel_object_unhook_event(message_list->folder, "folder_changed", folder_changed, message_list);
camel_object_unref (message_list->folder);
message_list->folder = NULL;
@@ -2543,10 +2544,14 @@ message_list_set_folder (MessageList *message_list, CamelFolder *folder, const c
}
}
+ if (message_list->folder != NULL) {
+ save_tree_state (message_list);
+ save_hide_state (message_list);
+ }
+
clear_tree (message_list);
if (message_list->folder) {
- save_hide_state(message_list);
camel_object_unhook_event((CamelObject *)message_list->folder, "folder_changed",
folder_changed, message_list);
camel_object_unref (message_list->folder);
@@ -2575,6 +2580,7 @@ message_list_set_folder (MessageList *message_list, CamelFolder *folder, const c
camel_object_ref (folder);
message_list->folder = folder;
+ message_list->just_set_folder = TRUE;
/* Setup the strikeout effect for non-trash folders */
if (!(folder->folder_flags & CAMEL_FOLDER_IS_TRASH))
@@ -2681,10 +2687,8 @@ on_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event, Mess
else
return FALSE;
- info = get_message_info (list, path);
- if (info == NULL) {
+ if (!(info = get_message_info (list, path)))
return FALSE;
- }
/* If a message was marked as deleted and the user flags it as
important, marks it as needing a reply, marks it as unread,
@@ -3286,7 +3290,10 @@ regen_list_regened (struct _mail_msg *mm)
return;
if (m->dotree) {
- save_tree_state (m->ml);
+ if (m->ml->just_set_folder)
+ m->ml->just_set_folder = FALSE;
+ else
+ save_tree_state (m->ml);
build_tree (m->ml, m->tree, m->changes);
if (m->ml->thread_tree)
diff --git a/mail/message-list.h b/mail/message-list.h
index 7a7ccfa78a..c4fed0537b 100644
--- a/mail/message-list.h
+++ b/mail/message-list.h
@@ -108,6 +108,9 @@ struct _MessageList {
/* Current search string, or %NULL */
char *search;
+ /* are we regenerating the message_list because set_folder was just called? */
+ guint just_set_folder : 1;
+
/* Are we displaying threaded view? */
guint threaded : 1;