From 40085e043615d8f1cdb583d014d774724e15d9b3 Mon Sep 17 00:00:00 2001 From: Sankarasivasubramanian Pasupathilingam Date: Wed, 16 Jul 2008 11:41:04 +0000 Subject: Pushing changes from the madagascar branch related to the on-disk summary work. svn path=/trunk/; revision=35747 --- mail/message-list.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index 8fd0ea8092..ffa00bc927 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include @@ -4062,6 +4063,7 @@ regen_list_exec (struct _regen_list_msg *m) e_profile_event_emit("list.threaduids", m->folder->full_name, 0); + //camel_folder_summary_reload_from_db (m->folder->summary, NULL); if (!camel_operation_cancel_check(m->base.cancel)) { /* update/build a new tree */ if (m->dotree) { @@ -4071,6 +4073,10 @@ regen_list_exec (struct _regen_list_msg *m) m->tree = camel_folder_thread_messages_new (m->folder, showuids, m->thread_subject); } else { m->summary = g_ptr_array_new (); + if (showuids->len != camel_folder_summary_cache_size (m->folder->summary) ) { + CamelException ex; + camel_folder_summary_reload_from_db (m->folder->summary, &ex); + } for (i = 0; i < showuids->len; i++) { info = camel_folder_get_message_info (m->folder, showuids->pdata[i]); if (info) -- cgit v1.2.3 From 6c12d74cb15df7c26e79b19ac66ce7a89b76f71c Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Sun, 20 Jul 2008 19:23:41 +0000 Subject: Committing on behalf of Milan Crha 2008-07-09 Milan Crha ** Fix for bug #228725 * gui/widgets/e-minicard-view.h: (struct _EMinicardView): * gui/widgets/e-minicard-view.c: (set_empty_message), (stop_state_changed), (e_minicard_view_set_property), (e_minicard_view_dispose), (e_minicard_view_init): Show different message in a view when searching. svn path=/trunk/; revision=35783 --- mail/message-list.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index ffa00bc927..8c62fc4244 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -4316,6 +4316,15 @@ mail_regen_list (MessageList *ml, const char *search, const char *hideexpr, Came camel_folder_thread_messages_ref(m->tree); } + if (message_list_length (ml) <= 0) { + /* there is some info why the message list is empty, let it be something useful */ + char *txt = g_strconcat (_("Generating message list"), "..." , NULL); + + e_tree_set_info_message (m->ml->tree, txt); + + g_free (txt); + } + /* if we're busy already kick off timeout processing, so normal updates are immediate */ if (ml->regen == NULL) ml_regen_timeout(m); -- cgit v1.2.3 From e202e2f07ff9359e70f8c35d44160ff7ddd49a8b Mon Sep 17 00:00:00 2001 From: Srinivasa Ragavan Date: Thu, 31 Jul 2008 04:19:28 +0000 Subject: ** Fix for bug #545436 2008-07-31 Srinivasa Ragavan ** Fix for bug #545436 * mail/message-list.c: Check the info before accessing it. svn path=/trunk/; revision=35870 --- mail/message-list.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index 8c62fc4244..6467f73d7a 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -2590,7 +2590,7 @@ find_next_selectable (MessageList *ml) return NULL; info = get_message_info (ml, node); - if (is_node_selectable (ml, info)) + if (info && is_node_selectable (ml, info)) return NULL; last = e_tree_row_count (ml->tree); @@ -2604,7 +2604,7 @@ find_next_selectable (MessageList *ml) while (vrow < last) { node = e_tree_node_at_row (et, vrow); info = get_message_info (ml, node); - if (is_node_selectable (ml, info)) + if (info && is_node_selectable (ml, info)) return g_strdup (camel_message_info_uid (info)); vrow ++; } @@ -2616,7 +2616,7 @@ find_next_selectable (MessageList *ml) while (vrow >= 0) { node = e_tree_node_at_row (et, vrow); info = get_message_info (ml, node); - if (is_node_selectable (ml, info)) + if (info && is_node_selectable (ml, info)) return g_strdup (camel_message_info_uid (info)); vrow --; } -- cgit v1.2.3 From dff4ba705503c7414e9ca60fc4476024bdfd968b Mon Sep 17 00:00:00 2001 From: Srinivasa Ragavan Date: Tue, 5 Aug 2008 13:38:05 +0000 Subject: Fix a performance issue, where we can just go by the presence than the 2008-08-05 Srinivasa Ragavan * mail/message-list.c: Fix a performance issue, where we can just go by the presence than the exact count. svn path=/trunk/; revision=35907 --- mail/message-list.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index 6467f73d7a..e12d304505 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -3645,6 +3645,9 @@ glib_crapback(void *key, void *data, void *x) struct _glibsuxcrap *y = x; CamelMessageInfo *mi; + if(y->count) + return; + mi = camel_folder_get_message_info(y->folder, key); if (mi) { y->count++; @@ -3652,7 +3655,7 @@ glib_crapback(void *key, void *data, void *x) } } -/* returns number of hidden messages */ +/* returns 0 or 1 depending if there are hidden messages */ unsigned int message_list_hidden(MessageList *ml) { -- cgit v1.2.3 From 048d28f277a04f0c0a1575914804409ad8fa6ad4 Mon Sep 17 00:00:00 2001 From: Srinivasa Ragavan Date: Mon, 11 Aug 2008 06:28:32 +0000 Subject: Don't use uninitialized exception. It leads to freeing uninitialized 2008-08-11 Srinivasa Ragavan * mail/message-list.c: Don't use uninitialized exception. It leads to freeing uninitialized memory. svn path=/trunk/; revision=35951 --- mail/message-list.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index e12d304505..d6d5ec7f50 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -4076,9 +4076,15 @@ regen_list_exec (struct _regen_list_msg *m) m->tree = camel_folder_thread_messages_new (m->folder, showuids, m->thread_subject); } else { m->summary = g_ptr_array_new (); - if (showuids->len != camel_folder_summary_cache_size (m->folder->summary) ) { - CamelException ex; + if (showuids->len > camel_folder_summary_cache_size (m->folder->summary) ) { + CamelException ex; + camel_exception_init (&ex); camel_folder_summary_reload_from_db (m->folder->summary, &ex); + if (camel_exception_is_set (&ex)) { + g_warning ("Exception while reloading: %s\n", camel_exception_get_description (&ex)); + camel_exception_clear (&ex); + } + } for (i = 0; i < showuids->len; i++) { info = camel_folder_get_message_info (m->folder, showuids->pdata[i]); -- cgit v1.2.3 From c29e1c65703bc651f786130024da2efcedcf607d Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 11 Aug 2008 09:48:17 +0000 Subject: ** Fix for bug #352695 2008-08-11 Milan Crha ** Fix for bug #352695 * widgets/table/e-tree-table-adapter.h: (e_tree_table_adapter_save_expanded_state_xml), (e_tree_table_adapter_load_expanded_state_xml): * widgets/table/e-tree-table-adapter.c: (e_tree_table_adapter_save_expanded_state_xml), (e_tree_table_adapter_save_expanded_state), (e_tree_table_adapter_load_expanded_state_xml), (e_tree_table_adapter_load_expanded_state): * widgets/table/e-tree.h: (e_tree_save_expanded_state_xml), (e_tree_load_expanded_state_xml): * widgets/table/e-tree.c: (e_tree_save_expanded_state_xml), (e_tree_load_expanded_state_xml): Be able to store expanded state also in memory, not only on the disk. * mail/message-list.c: (struct _MessageListPrivate), (save_tree_state), (load_tree_state), (on_model_row_changed), (message_list_init), (message_list_construct), (struct _regen_list_msg), (regen_list_done), (regen_list_free), (mail_regen_list): Be able to recognize whether there has been any change on any row in a list and save expanded state only in case there was any change. Also use in-memory storing of the expanded state in case we do not want to rewrite full view It's for searches only, and it's not stored between sessions. svn path=/trunk/; revision=35953 --- mail/message-list.c | 57 ++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 11 deletions(-) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index d6d5ec7f50..73e2d30931 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -111,6 +111,7 @@ struct _MessageListPrivate { gboolean destroyed; gboolean thread_latest; + gboolean any_row_changed; /* save state before regen list when this is set to true */ }; static struct { @@ -1798,6 +1799,8 @@ save_tree_state(MessageList *ml) filename = mail_config_folder_to_cachename(ml->folder, "et-expanded-"); e_tree_save_expanded_state(ml->tree, filename); g_free(filename); + + ml->priv->any_row_changed = FALSE; } static void @@ -1811,18 +1814,23 @@ load_tree_expand_all (MessageList *ml, gboolean state) save_tree_state (ml); } static void -load_tree_state (MessageList *ml) +load_tree_state (MessageList *ml, xmlDoc *expand_state) { - char *filename; - if (ml->folder == NULL || ml->tree == NULL) return; - filename = mail_config_folder_to_cachename (ml->folder, "et-expanded-"); - e_tree_load_expanded_state (ml->tree, filename); - g_free (filename); -} + if (expand_state) { + e_tree_load_expanded_state_xml (ml->tree, expand_state); + } else { + char *filename; + + filename = mail_config_folder_to_cachename (ml->folder, "et-expanded-"); + e_tree_load_expanded_state (ml->tree, filename); + g_free (filename); + } + ml->priv->any_row_changed = FALSE; +} void message_list_save_state (MessageList *ml) @@ -2173,6 +2181,12 @@ ml_scrolled (GtkAdjustment *adj, MessageList *ml) g_signal_emit (ml, message_list_signals[MESSAGE_LIST_SCROLLED], 0); } +static void +on_model_row_changed (ETableModel *model, int row, MessageList *ml) +{ + ml->priv->any_row_changed = TRUE; +} + /* * GObject::init */ @@ -2213,6 +2227,7 @@ message_list_init (MessageList *message_list) p->invisible = gtk_invisible_new(); p->destroyed = FALSE; g_object_ref_sink(p->invisible); + p->any_row_changed = FALSE; matom = gdk_atom_intern ("x-uid-list", FALSE); gtk_selection_add_target(p->invisible, GDK_SELECTION_CLIPBOARD, matom, 0); @@ -2430,6 +2445,8 @@ message_list_construct (MessageList *message_list) atk_object_set_name(a11y, _("Messages")); } + g_signal_connect (e_tree_get_table_adapter (message_list->tree), "model_row_changed", G_CALLBACK (on_model_row_changed), message_list); + g_signal_connect((message_list->tree), "cursor_activated", G_CALLBACK (on_cursor_activated_cmd), message_list); @@ -3870,6 +3887,8 @@ struct _regen_list_msg { GPtrArray *summary; int last_row; /* last selected (cursor) row */ + + xmlDoc *expand_state; /* stored expanded state of the previous view */ }; /* @@ -4128,10 +4147,14 @@ regen_list_done (struct _regen_list_msg *m) e_profile_event_emit("list.buildtree", m->folder->full_name, 0); if (m->dotree) { - if (m->ml->just_set_folder) + if (m->ml->just_set_folder) { m->ml->just_set_folder = FALSE; - else /* Saving the tree state causes bug 352695 but fixes bug 387312 */ - save_tree_state (m->ml); + if (m->expand_state) { + /* rather load state from disk than use the memory data when changing folders */ + xmlFreeDoc (m->expand_state); + m->expand_state = NULL; + } + } build_tree (m->ml, m->tree, m->changes); if (m->ml->thread_tree) @@ -4144,7 +4167,7 @@ regen_list_done (struct _regen_list_msg *m) else if (m->ml->collapse_all) load_tree_expand_all (m->ml, FALSE); else - load_tree_state (m->ml); + load_tree_state (m->ml, m->expand_state); m->ml->expand_all = 0; m->ml->collapse_all = 0; @@ -4189,6 +4212,7 @@ regen_list_done (struct _regen_list_msg *m) e_tree_set_info_message (m->ml->tree, NULL); g_signal_emit (m->ml, message_list_signals[MESSAGE_LIST_BUILT], 0); + m->ml->priv->any_row_changed = FALSE; } static void @@ -4218,6 +4242,9 @@ regen_list_free (struct _regen_list_msg *m) /* we have to poke this here as well since we might've been cancelled and regened wont get called */ m->ml->regen = g_list_remove(m->ml->regen, m); + if (m->expand_state) + xmlFreeDoc (m->expand_state); + g_object_unref(m->ml); } @@ -4316,6 +4343,7 @@ mail_regen_list (MessageList *ml, const char *search, const char *hideexpr, Came m->folder = ml->folder; camel_object_ref(m->folder); m->last_row = -1; + m->expand_state = NULL; if ((!m->hidedel || !m->dotree) && ml->thread_tree) { camel_folder_thread_messages_unref(ml->thread_tree); @@ -4332,6 +4360,13 @@ mail_regen_list (MessageList *ml, const char *search, const char *hideexpr, Came e_tree_set_info_message (m->ml->tree, txt); g_free (txt); + } else if (ml->priv->any_row_changed && m->dotree && !ml->just_set_folder && (!ml->search || g_str_equal (ml->search, " "))) { + /* there has been some change on any row, if it was an expand state change, + then let it save; if not, then nothing happen. */ + message_list_save_state (ml); + } else if (m->dotree && !ml->just_set_folder) { + /* remember actual expand state and restore it after regen */ + m->expand_state = e_tree_save_expanded_state_xml (ml->tree); } /* if we're busy already kick off timeout processing, so normal updates are immediate */ -- cgit v1.2.3 From 28a98b7973e5fd9341fbc7faa6f49b7d0b8d4de9 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 11 Aug 2008 10:08:14 +0000 Subject: ** Fix for bug #519292 2008-08-11 Milan Crha ** Fix for bug #519292 * mail/message-list.c: (load_tree_expand_all): Drop function. * mail/message-list.c: (regen_list_done): Rather use desired expanded state value when creating the tree instead of the default model's value for this to have 'expand/collapse all' commands work better and quicker. * widgets/tablee-tree.h: (e_tree_load_all_expanded_state): * widgets/tablee-tree.c: (e_tree_load_all_expanded_state): * widgets/tablee-tree-table-adapter.h: (e_tree_table_adapter_load_all_expanded_state): * widgets/tablee-tree-table-adapter.c: (e_tree_table_adapter_load_all_expanded_state), (set_expanded_state_func), (set_collapsed_state_func): Drop functions in favor of new functions. * widgets/tablee-tree.h: (e_tree_force_expanded_state): * widgets/tablee-tree.c: (e_tree_force_expanded_state): * widgets/tablee-tree-table-adapter.h: (e_tree_table_adapter_force_expanded_state): * widgets/tablee-tree-table-adapter.c: (e_tree_table_adapter_force_expanded_state), (struct ETreeTableAdapterPriv), (create_gnode), (etta_init): Use either default value of the model to expanded state of new node or use the one which has been set (forced) by new functions. svn path=/trunk/; revision=35954 --- mail/message-list.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index 73e2d30931..3f43f58cb6 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -1803,16 +1803,6 @@ save_tree_state(MessageList *ml) ml->priv->any_row_changed = FALSE; } -static void -load_tree_expand_all (MessageList *ml, gboolean state) -{ - - if (ml->folder == NULL || ml->tree == NULL) - return; - - e_tree_load_all_expanded_state (ml->tree, state); - save_tree_state (ml); -} static void load_tree_state (MessageList *ml, xmlDoc *expand_state) { @@ -4147,6 +4137,8 @@ regen_list_done (struct _regen_list_msg *m) e_profile_event_emit("list.buildtree", m->folder->full_name, 0); if (m->dotree) { + gboolean forcing_expand_state = m->ml->expand_all || m->ml->collapse_all; + if (m->ml->just_set_folder) { m->ml->just_set_folder = FALSE; if (m->expand_state) { @@ -4156,17 +4148,21 @@ regen_list_done (struct _regen_list_msg *m) } } + if (forcing_expand_state) + e_tree_force_expanded_state (m->ml->tree, m->ml->expand_all ? 1 : -1); + build_tree (m->ml, m->tree, m->changes); if (m->ml->thread_tree) camel_folder_thread_messages_unref(m->ml->thread_tree); m->ml->thread_tree = m->tree; m->tree = NULL; - if (m->ml->expand_all) - load_tree_expand_all (m->ml, TRUE); - else if (m->ml->collapse_all) - load_tree_expand_all (m->ml, FALSE); - else + if (forcing_expand_state) { + if (m->ml->folder != NULL && m->ml->tree != NULL) + save_tree_state (m->ml); + /* do not forget to set this back to use the default value... */ + e_tree_force_expanded_state (m->ml->tree, 0); + } else load_tree_state (m->ml, m->expand_state); m->ml->expand_all = 0; -- cgit v1.2.3 From e01e6e3c5535ea63493385a1a8f22438f64ba9e3 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 12 Aug 2008 12:37:10 +0000 Subject: ** Fix for bug #519292 2008-08-12 Milan Crha ** Fix for bug #519292 * message-list.c: (read_boolean_with_default), (message_list_construct): Read 'thread_expand' and 'thread_latest' safely with TRUE as default if key doesn't exist. svn path=/trunk/; revision=35968 --- mail/message-list.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index 3f43f58cb6..4382b0bd82 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -2373,6 +2373,25 @@ message_list_class_init (MessageListClass *message_list_class) message_list_init_images (); } +static gboolean +read_boolean_with_default (GConfClient *gconf, const char *key, gboolean def_value) +{ + GConfValue *value; + gboolean res; + + g_return_val_if_fail (gconf != NULL, def_value); + g_return_val_if_fail (key != NULL, def_value); + + value = gconf_client_get (gconf, key, NULL); + if (!value) + return def_value; + + res = gconf_value_get_bool (value); + gconf_value_free (value); + + return res; +} + static void message_list_construct (MessageList *message_list) { @@ -2406,11 +2425,11 @@ message_list_construct (MessageList *message_list) message_list); e_tree_memory_set_expanded_default(E_TREE_MEMORY(message_list->model), - gconf_client_get_bool (gconf, - "/apps/evolution/mail/display/thread_expand", - NULL)); + read_boolean_with_default (gconf, + "/apps/evolution/mail/display/thread_expand", + TRUE)); - message_list->priv->thread_latest = gconf_client_get_bool (gconf, "/apps/evolution/mail/display/thread_latest", NULL); + message_list->priv->thread_latest = read_boolean_with_default (gconf, "/apps/evolution/mail/display/thread_latest", TRUE); /* * The etree -- cgit v1.2.3 From b52cf4cc095e7165f2509a6b091ba07781047350 Mon Sep 17 00:00:00 2001 From: Suman Manjunath Date: Mon, 1 Sep 2008 04:27:02 +0000 Subject: Milan Crha ** Fix for bug #543135 (Write error message to the right stream, do not try to set information message to the message list when it's not visible). svn path=/trunk/; revision=36240 --- mail/message-list.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index 4382b0bd82..927297b8eb 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -4217,14 +4217,16 @@ regen_list_done (struct _regen_list_msg *m) } } - if (message_list_length (m->ml) <= 0) { - /* space is used to indicate no search too */ - if (m->ml->search && strcmp (m->ml->search, " ") != 0) - e_tree_set_info_message (m->ml->tree, _("No message satisfies your search criteria. Either clear search with Search->Clear menu item or change it.")); - else - e_tree_set_info_message (m->ml->tree, _("There are no messages in this folder.")); - } else - e_tree_set_info_message (m->ml->tree, NULL); + if (GTK_WIDGET_VISIBLE (GTK_WIDGET (m->ml))) { + if (message_list_length (m->ml) <= 0) { + /* space is used to indicate no search too */ + if (m->ml->search && strcmp (m->ml->search, " ") != 0) + e_tree_set_info_message (m->ml->tree, _("No message satisfies your search criteria. Either clear search with Search->Clear menu item or change it.")); + else + e_tree_set_info_message (m->ml->tree, _("There are no messages in this folder.")); + } else + e_tree_set_info_message (m->ml->tree, NULL); + } g_signal_emit (m->ml, message_list_signals[MESSAGE_LIST_BUILT], 0); m->ml->priv->any_row_changed = FALSE; @@ -4369,12 +4371,14 @@ mail_regen_list (MessageList *ml, const char *search, const char *hideexpr, Came } if (message_list_length (ml) <= 0) { - /* there is some info why the message list is empty, let it be something useful */ - char *txt = g_strconcat (_("Generating message list"), "..." , NULL); + if (GTK_WIDGET_VISIBLE (GTK_WIDGET (ml))) { + /* there is some info why the message list is empty, let it be something useful */ + char *txt = g_strconcat (_("Generating message list"), "..." , NULL); - e_tree_set_info_message (m->ml->tree, txt); + e_tree_set_info_message (m->ml->tree, txt); - g_free (txt); + g_free (txt); + } } else if (ml->priv->any_row_changed && m->dotree && !ml->just_set_folder && (!ml->search || g_str_equal (ml->search, " "))) { /* there has been some change on any row, if it was an expand state change, then let it save; if not, then nothing happen. */ -- cgit v1.2.3 From 97fd6bc629e26597d48214e39e630d5000df9ddc Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 24 Sep 2008 11:56:11 +0000 Subject: ** Fix for bug #313225 2008-09-24 Milan Crha ** Fix for bug #313225 * mail/message-list.c: (struct states_pixmaps), (ml_tree_value_at), (message_list_create_extras): Show meeting icon in 'Attachment' column on messages with '$has_cal' user flag set. * plugins/itip-formatter/itip-formatter.c: (format_itip): Set the user flag '$has_cal' on the message when formatting a calendar attachment. svn path=/trunk/; revision=36445 --- mail/message-list.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index 927297b8eb..9d69adabcb 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -236,6 +236,7 @@ static struct { { "stock_score-highest", NULL }, { "stock_mail-flag-for-followup", NULL }, { "stock_mail-flag-for-followup-done", NULL }, + { "stock_new-meeting", NULL } }; /* FIXME: junk prefs */ @@ -1341,6 +1342,8 @@ ml_tree_value_at (ETreeModel *etm, ETreePath path, int col, void *model_data) str = camel_message_info_user_tag(msg_info, "follow-up"); return (void *)(str ? str : ""); case COL_ATTACHMENT: + if (camel_message_info_user_flag (msg_info, "$has_cal")) + return GINT_TO_POINTER (2); return GINT_TO_POINTER ((camel_message_info_flags(msg_info) & CAMEL_MESSAGE_ATTACHMENTS) != 0); case COL_FROM: str = camel_message_info_from (msg_info); @@ -1735,8 +1738,9 @@ message_list_create_extras (void) for (i = 0; i < 2; i++) images [i] = states_pixmaps [i + 6].pixbuf; + images [2] = states_pixmaps [18].pixbuf; - e_table_extras_add_cell (extras, "render_attachment", e_cell_toggle_new (0, 2, images)); + e_table_extras_add_cell (extras, "render_attachment", e_cell_toggle_new (0, 3, images)); images [1] = states_pixmaps [8].pixbuf; e_table_extras_add_cell (extras, "render_flagged", e_cell_toggle_new (0, 2, images)); -- cgit v1.2.3 From bfc8b8784d22d4eb4e7286cc6ef35dd5be5419a4 Mon Sep 17 00:00:00 2001 From: Sankarasivasubramanian Pasupathilingam Date: Mon, 29 Sep 2008 08:36:04 +0000 Subject: License changes from GPL to LGPL svn path=/trunk/; revision=36465 --- mail/message-list.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index 9d69adabcb..ab3b1c0922 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -1,24 +1,24 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * Authors: Miguel de Icaza (miguel@ximian.com) - * Bertrand Guiheneuf (bg@aful.org) - * And just about everyone else in evolution ... + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) version 3. * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * You should have received a copy of the GNU Lesser General Public + * License along with the program; if not, see * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * Authors: + * Miguel de Icaza (miguel@ximian.com) + * Bertrand Guiheneuf (bg@aful.org) + * And just about everyone else in evolution ... + * + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * */ -- cgit v1.2.3 From 4fd6e00afa491bd490f5c44f5abe6858b860e5ff Mon Sep 17 00:00:00 2001 From: Sankarasivasubramanian Pasupathilingam Date: Tue, 30 Sep 2008 07:59:12 +0000 Subject: Added new column "Subject - Trimmed". Patch by hpj. svn path=/trunk/; revision=36498 --- mail/message-list.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index ab3b1c0922..4819528945 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -1269,6 +1269,61 @@ get_all_labels (CamelMessageInfo *msg_info, char **label_str, gboolean get_tags) return count; } +static const char * +get_trimmed_subject (CamelMessageInfo *info) +{ + const char *subject; + const char *mlist; + int mlist_len = 0; + gboolean found_mlist; + + subject = camel_message_info_subject (info); + if (!subject || !*subject) + return subject; + + mlist = camel_message_info_mlist (info); + + if (mlist && *mlist) { + const char *mlist_end; + + mlist_end = strchr (mlist, '@'); + if (mlist_end) + mlist_len = mlist_end - mlist; + else + mlist_len = strlen (mlist); + } + + do { + found_mlist = FALSE; + + while (!g_ascii_strncasecmp ((char *) subject, "Re:", 3)) { + subject += 3; + + /* jump over any spaces */ + while (*subject && isspace ((int) *subject)) + subject++; + } + + if (mlist_len && + *subject == '[' && + !g_ascii_strncasecmp ((char *) subject + 1, mlist, mlist_len) && + subject [1 + mlist_len] == ']') { + subject += 1 + mlist_len + 1; /* jump over "[mailing-list]" */ + found_mlist = TRUE; + + /* jump over any spaces */ + while (*subject && isspace ((int) *subject)) + subject++; + } + } while (found_mlist); + + /* jump over any spaces */ + while (*subject && isspace ((int) *subject)) + subject++; + + return subject; +} + static void * ml_tree_value_at (ETreeModel *etm, ETreePath path, int col, void *model_data) { @@ -1353,6 +1408,12 @@ ml_tree_value_at (ETreeModel *etm, ETreePath path, int col, void *model_data) case COL_SUBJECT: str = camel_message_info_subject (msg_info); return (void *)(str ? str : ""); + case COL_SUBJECT_TRIMMED: + /* FIXME: "Trimmed subject" is not normalized yet. + I do not find a way in evo gui to configure the normalized columns like from_norm + Hence this FIXME should remain until we have a COL_SUBJECT_TRIMMED_NORM. */ + str = get_trimmed_subject (msg_info); + return (void *)(str ? str : ""); case COL_SUBJECT_NORM: return (void *) get_normalised_string (message_list, msg_info, col); case COL_SENT: { -- cgit v1.2.3 From d3038251f3519510429e9bab428a8fea1b010b4b Mon Sep 17 00:00:00 2001 From: Sankarasivasubramanian Pasupathilingam Date: Tue, 30 Sep 2008 09:13:21 +0000 Subject: Remove unnecessary FIXME. normalized columns are for internal * mail/message-list.c: Remove unnecessary FIXME. normalized columns are for internal manipulation. svn path=/trunk/; revision=36499 --- mail/message-list.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index 4819528945..d8d92af49d 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -1409,9 +1409,6 @@ ml_tree_value_at (ETreeModel *etm, ETreePath path, int col, void *model_data) str = camel_message_info_subject (msg_info); return (void *)(str ? str : ""); case COL_SUBJECT_TRIMMED: - /* FIXME: "Trimmed subject" is not normalized yet. - I do not find a way in evo gui to configure the normalized columns like from_norm - Hence this FIXME should remain until we have a COL_SUBJECT_TRIMMED_NORM. */ str = get_trimmed_subject (msg_info); return (void *)(str ? str : ""); case COL_SUBJECT_NORM: -- cgit v1.2.3 From 3acdc755d63edcc65ef58adefbced984d37e7c50 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Sun, 19 Oct 2008 17:08:50 +0000 Subject: ** Fix for bug #438155 2008-10-19 Milan Crha ** Fix for bug #438155 * message-list.h: (struct _MessageList): message-list.c: (message_list_init), (message_list_finalise), (regen_list_done), (regen_list_free), (ml_regen_timeout), (mail_regen_cancel): Guard access to the 'regen' list with a lock. svn path=/trunk/; revision=36652 --- mail/message-list.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index d8d92af49d..7333467fd1 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -2274,6 +2274,8 @@ message_list_init (MessageList *message_list) message_list->cursor_uid = NULL; message_list->last_sel_single = FALSE; + message_list->regen_lock = g_mutex_new (); + /* TODO: Should this only get the selection if we're realised? */ p = message_list->priv = g_malloc0(sizeof(*message_list->priv)); p->invisible = gtk_invisible_new(); @@ -2375,6 +2377,7 @@ message_list_finalise (GObject *object) g_free(message_list->cursor_uid); g_mutex_free(message_list->hide_lock); + g_mutex_free (message_list->regen_lock); g_free(message_list->folder_uri); message_list->folder_uri = NULL; @@ -4256,7 +4259,9 @@ regen_list_done (struct _regen_list_msg *m) 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); if (m->ml->regen == NULL && m->ml->pending_select_uid) { char *uid = m->ml->pending_select_uid; @@ -4319,7 +4324,9 @@ regen_list_free (struct _regen_list_msg *m) camel_folder_change_info_free (m->changes); /* we have to poke this here as well since we might've been cancelled and regened wont get called */ + g_mutex_lock (m->ml->regen_lock); m->ml->regen = g_list_remove(m->ml->regen, m); + g_mutex_unlock (m->ml->regen_lock); if (m->expand_state) xmlFreeDoc (m->expand_state); @@ -4340,7 +4347,9 @@ ml_regen_timeout(struct _regen_list_msg *m) { e_profile_event_emit("list.regenerate", m->folder->full_name, 0); + g_mutex_lock (m->ml->regen_lock); m->ml->regen = g_list_prepend(m->ml->regen, m); + g_mutex_unlock (m->ml->regen_lock); /* TODO: we should manage our own thread stuff, would make cancelling outstanding stuff easier */ mail_msg_fast_ordered_push (m); @@ -4355,8 +4364,11 @@ mail_regen_cancel(MessageList *ml) { /* cancel any outstanding regeneration requests, not we don't clear, they clear themselves */ if (ml->regen) { - GList *l = ml->regen; + GList *l; + + g_mutex_lock (ml->regen_lock); + l = ml->regen; while (l) { MailMsg *mm = l->data; @@ -4364,6 +4376,8 @@ mail_regen_cancel(MessageList *ml) camel_operation_cancel(mm->cancel); l = l->next; } + + g_mutex_unlock (ml->regen_lock); } /* including unqueued ones */ -- cgit v1.2.3 From 65145381a69be1ac144c6e6dc7c2ab3fdb05d3b7 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 10 Dec 2008 11:05:01 +0000 Subject: ** Fix for bug #563870 2008-12-10 Milan Crha ** Fix for bug #563870 * e-util/e-util-labels.h: (e_util_labels_get_filter_options): * e-util/e-util-labels.c: (e_util_labels_get_filter_options): New helper function to be used in FilterOption. * filter/Makefile.am: * filter/filter-label.h: * filter/filter-label.c: Drop, not used anywhere. * filter/filter-element.c: * filter/rule-context.c: Remove dropped include and code. * filter/filter-option.c: (get_dynamic_options), (xml_create), (get_widget): Evaluate dynamic options even on create, to have them available for saved searches even before the widget itself is shown. * mail/vfoldertypes.xml: * mail/filtertypes.xml: * mail/searchtypes.xml: Use dynamic filter option. * mail/message-list.c: Drop unused header include. svn path=/trunk/; revision=36863 --- mail/message-list.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index 7333467fd1..70795478bf 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -66,8 +66,6 @@ #include "table/e-cell-vbox.h" #include "table/e-cell-hbox.h" -#include "filter/filter-label.h" - #include "em-popup.h" #include "em-utils.h" #include "mail-config.h" -- cgit v1.2.3 From 3529d0384d97e4ce36843b1d6af6dc82b3a27930 Mon Sep 17 00:00:00 2001 From: Srinivasa Ragavan Date: Mon, 15 Dec 2008 06:53:32 +0000 Subject: ** Fix for #546637 2008-12-15 Srinivasa Ragavan ** Fix for #546637 * message-list.c: (message_list_finalise), (regen_list_exec), (regen_list_done): Don't loose uids. svn path=/trunk/; revision=36886 --- mail/message-list.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index 70795478bf..0ac1bc7844 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -2359,6 +2359,11 @@ message_list_finalise (GObject *object) g_hash_table_destroy (message_list->normalised_hash); + if (message_list->ensure_uid) { + g_free (message_list->ensure_uid); + message_list->ensure_uid = NULL; + } + if (message_list->thread_tree) camel_folder_thread_messages_unref(message_list->thread_tree); @@ -4031,13 +4036,11 @@ regen_list_exec (struct _regen_list_msg *m) uids = camel_folder_get_uids (m->folder); } else { searchuids = uids = camel_folder_search_by_expression (m->folder, expr, &m->base.ex); - /* If m->changes is not NULL, then it means we are called from folder_changed event, thus we will keep the selected message to be sure it doesn't disappear because it no longer belong to our search filter. */ - if (uids && m->ml->search && ((m->changes && m->ml->cursor_uid) || m->ml->ensure_uid)) { + if (uids && ((m->changes && m->ml->cursor_uid) || m->ml->ensure_uid)) { const char *looking_for = m->ml->cursor_uid; - /* ensure_uid has precedence of cursor_uid */ if (m->ml->ensure_uid) looking_for = m->ml->ensure_uid; @@ -4202,10 +4205,6 @@ regen_list_done (struct _regen_list_msg *m) if (m->ml->priv->destroyed) return; - if (m->ml->ensure_uid) { - g_free (m->ml->ensure_uid); - m->ml->ensure_uid = NULL; - } if (!m->complete) return; -- cgit v1.2.3 From 1b43d4200b3e05da66a1dd036308037ef08e59e8 Mon Sep 17 00:00:00 2001 From: Srinivasa Ragavan Date: Thu, 29 Jan 2009 15:28:03 +0000 Subject: ** Fix for bug #567654 2009-01-29 Srinivasa Ragavan ** Fix for bug #567654 * message-list.c: (regen_list_exec): Don't free the reffable string. svn path=/trunk/; revision=37167 --- mail/message-list.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index 0ac1bc7844..7487f12ad2 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -4061,7 +4061,7 @@ regen_list_exec (struct _regen_list_msg *m) on the flag whether we can view deleted messages or not. */ if (!was_deleted || (was_deleted && !m->hidedel)) - g_ptr_array_add (uids, g_strdup (looking_for)); + g_ptr_array_add (uids, camel_pstring_strdup (looking_for)); } } } -- cgit v1.2.3 From ca220a5f4df760f6f77b8a6c168043d06f11957e Mon Sep 17 00:00:00 2001 From: Srinivasa Ragavan Date: Fri, 30 Jan 2009 04:54:41 +0000 Subject: Fix compiler warnings 2009-01-30 Srinivasa Ragavan * message-list.c: (regen_list_exec): Fix compiler warnings svn path=/trunk/; revision=37183 --- mail/message-list.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index 7487f12ad2..1b6932cb29 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -42,6 +42,7 @@ #include #include #include +#include #include @@ -4061,7 +4062,7 @@ regen_list_exec (struct _regen_list_msg *m) on the flag whether we can view deleted messages or not. */ if (!was_deleted || (was_deleted && !m->hidedel)) - g_ptr_array_add (uids, camel_pstring_strdup (looking_for)); + g_ptr_array_add (uids, (gpointer) camel_pstring_strdup (looking_for)); } } } -- cgit v1.2.3 From 0ecdda6ca11bc1380f1c9809eb4cd838713edad1 Mon Sep 17 00:00:00 2001 From: Tobias Mueller Date: Fri, 3 Apr 2009 22:41:56 +0000 Subject: ** Fix for bug #569765 2008-04-04 Tobias Mueller ** Fix for bug #569765 * message-list.c: Don't keep the selected message in the message list if it is removed from the folder. Patch by Matt McCutchen svn path=/trunk/; revision=37493 --- mail/message-list.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'mail/message-list.c') diff --git a/mail/message-list.c b/mail/message-list.c index 1b6932cb29..a2a9989bda 100644 --- a/mail/message-list.c +++ b/mail/message-list.c @@ -4053,16 +4053,22 @@ regen_list_exec (struct _regen_list_msg *m) /* cursor_uid has been filtered out */ if (i == uids->len) { - gboolean was_deleted = (camel_folder_get_message_flags (m->folder, looking_for) & CAMEL_MESSAGE_DELETED) != 0; + CamelMessageInfo *looking_info = camel_folder_get_message_info (m->folder, looking_for); - /* I would really like to check for CAMEL_MESSAGE_FOLDER_FLAGGED on a message, - so I would know whether it was changed locally, and then just check the changes - struct whether change came from the server, but with periodical save it doesn't - matter. So here just check whether the file was deleted and we show it based - on the flag whether we can view deleted messages or not. */ + if (looking_info) { + gboolean was_deleted = (camel_message_info_flags (looking_info) & CAMEL_MESSAGE_DELETED) != 0; - if (!was_deleted || (was_deleted && !m->hidedel)) - g_ptr_array_add (uids, (gpointer) camel_pstring_strdup (looking_for)); + /* I would really like to check for CAMEL_MESSAGE_FOLDER_FLAGGED on a message, + so I would know whether it was changed locally, and then just check the changes + struct whether change came from the server, but with periodical save it doesn't + matter. So here just check whether the file was deleted and we show it based + on the flag whether we can view deleted messages or not. */ + + if (!was_deleted || (was_deleted && !m->hidedel)) + g_ptr_array_add (uids, (gpointer) camel_pstring_strdup (looking_for)); + + camel_folder_free_message_info (m->folder, looking_info); + } } } } -- cgit v1.2.3