aboutsummaryrefslogtreecommitdiffstats
path: root/mail/message-list.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/message-list.c')
-rw-r--r--mail/message-list.c27
1 files changed, 10 insertions, 17 deletions
diff --git a/mail/message-list.c b/mail/message-list.c
index fdb6e912c7..2cb0f081c2 100644
--- a/mail/message-list.c
+++ b/mail/message-list.c
@@ -1120,6 +1120,7 @@ message_list_init (GtkObject *object)
message_list->hide_lock = g_mutex_new();
message_list->uid_nodemap = g_hash_table_new (g_str_hash, g_str_equal);
+ message_list->async_event = mail_async_event_new();
}
static void
@@ -1127,6 +1128,8 @@ message_list_destroy (GtkObject *object)
{
MessageList *message_list = MESSAGE_LIST (object);
+ mail_async_event_destroy(message_list->async_event);
+
if (message_list->folder) {
save_tree_state(message_list);
hide_save_state(message_list);
@@ -1868,9 +1871,8 @@ main_folder_changed (CamelObject *o, gpointer event_data, gpointer user_data)
static void
folder_changed (CamelObject *o, gpointer event_data, gpointer user_data)
{
- /* similarly to message_changed, copy the change list and propagate it to
- the main thread and free it */
CamelFolderChangeInfo *changes;
+ MessageList *ml = MESSAGE_LIST (user_data);
if (event_data) {
changes = camel_folder_change_info_new();
@@ -1878,29 +1880,20 @@ folder_changed (CamelObject *o, gpointer event_data, gpointer user_data)
} else {
changes = NULL;
}
- mail_proxy_event (main_folder_changed, o, changes, user_data);
+
+ mail_async_event_emit(ml->async_event, main_folder_changed, o, changes, user_data);
}
static void
-main_message_changed (CamelObject *o, gpointer uid, gpointer user_data)
+message_changed (CamelObject *o, gpointer event_data, gpointer user_data)
{
- MessageList *ml = MESSAGE_LIST (user_data);
CamelFolderChangeInfo *changes;
+ MessageList *ml = MESSAGE_LIST (user_data);
changes = camel_folder_change_info_new();
- camel_folder_change_info_change_uid(changes, uid);
- main_folder_changed(o, changes, ml);
- g_free(uid);
-}
+ camel_folder_change_info_change_uid(changes, (char *)event_data);
-static void
-message_changed (CamelObject *o, gpointer event_data, gpointer user_data)
-{
- /* Here we copy the data because our thread may free the copy that we would reference.
- * The other thread would be passed a uid parameter that pointed to freed data.
- * We copy it and free it in the handler.
- */
- mail_proxy_event (main_message_changed, o, g_strdup ((gchar *)event_data), user_data);
+ mail_async_event_emit(ml->async_event, main_folder_changed, o, changes, user_data);
}
void