diff options
author | Matthew Barnes <mbarnes@src.gnome.org> | 2009-01-12 12:12:01 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@src.gnome.org> | 2009-01-12 12:12:01 +0800 |
commit | c7d3c9f95609123035ebaa267f9d2e6ecfa8c2e8 (patch) | |
tree | 246bdb714e24e1b0c9a8ce4a3e45a46b230316de /mail/em-subscribe-editor.c | |
parent | f8b33bc4ebe9dd8043674141b5fe4660efaa99e8 (diff) | |
download | gsoc2013-evolution-c7d3c9f95609123035ebaa267f9d2e6ecfa8c2e8.tar gsoc2013-evolution-c7d3c9f95609123035ebaa267f9d2e6ecfa8c2e8.tar.gz gsoc2013-evolution-c7d3c9f95609123035ebaa267f9d2e6ecfa8c2e8.tar.bz2 gsoc2013-evolution-c7d3c9f95609123035ebaa267f9d2e6ecfa8c2e8.tar.lz gsoc2013-evolution-c7d3c9f95609123035ebaa267f9d2e6ecfa8c2e8.tar.xz gsoc2013-evolution-c7d3c9f95609123035ebaa267f9d2e6ecfa8c2e8.tar.zst gsoc2013-evolution-c7d3c9f95609123035ebaa267f9d2e6ecfa8c2e8.zip |
Merge revisions 36866:37046 from trunk.
svn path=/branches/kill-bonobo/; revision=37050
Diffstat (limited to 'mail/em-subscribe-editor.c')
-rw-r--r-- | mail/em-subscribe-editor.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/mail/em-subscribe-editor.c b/mail/em-subscribe-editor.c index 548029e0ba..8146b66bb6 100644 --- a/mail/em-subscribe-editor.c +++ b/mail/em-subscribe-editor.c @@ -111,6 +111,12 @@ struct _EMSubscribeNode { GtkTreePath *path; }; +typedef struct _MailMsgListNode MailMsgListNode; +struct _MailMsgListNode { + EDListNode node; + MailMsg *msg; +}; + static void sub_editor_busy(EMSubscribeEditor *se, int dir); static int sub_queue_fill_level(EMSubscribe *sub, EMSubscribeNode *node); static void sub_selection_changed(GtkTreeSelection *selection, EMSubscribe *sub); @@ -185,6 +191,7 @@ sub_folder_done (struct _zsubscribe_msg *m) GtkTreeModel *model; EMSubscribeNode *node; gboolean subscribed, issub; + MailMsgListNode *msgListNode; m->sub->subscribe_id = -1; if (m->sub->cancel) @@ -209,10 +216,13 @@ sub_folder_done (struct _zsubscribe_msg *m) } /* queue any further ones, or if out, update the ui */ - next = (struct _zsubscribe_msg *)e_dlist_remhead(&m->sub->subscribe); - if (next) { + msgListNode = (MailMsgListNode *) e_dlist_remhead(&m->sub->subscribe); + if (msgListNode) { + next = (struct _zsubscribe_msg *) msgListNode->msg; + /* Free the memory of the MailMsgListNode which won't be used anymore. */ + g_free(msgListNode); next->sub->subscribe_id = next->base.seq; - mail_msg_unordered_push (next); + mail_msg_unordered_push (next); } else { /* should it go off the model instead? */ sub_selection_changed(gtk_tree_view_get_selection(m->sub->tree), m->sub); @@ -239,6 +249,7 @@ static int sub_subscribe_folder (EMSubscribe *sub, EMSubscribeNode *node, int state, const char *spath) { struct _zsubscribe_msg *m; + MailMsgListNode *msgListNode; int id; m = mail_msg_new (&sub_subscribe_folder_info); @@ -254,8 +265,10 @@ sub_subscribe_folder (EMSubscribe *sub, EMSubscribeNode *node, int state, const d(printf("running subscribe folder '%s'\n", spath)); mail_msg_unordered_push (m); } else { + msgListNode = g_malloc0(sizeof(MailMsgListNode)); + msgListNode->msg = (MailMsg *) m; d(printf("queueing subscribe folder '%s'\n", spath)); - e_dlist_addtail(&sub->subscribe, (EDListNode *)m); + e_dlist_addtail(&sub->subscribe, (EDListNode *)msgListNode); } return id; @@ -541,6 +554,7 @@ static void sub_destroy(GtkWidget *w, EMSubscribe *sub) { struct _zsubscribe_msg *m; + MailMsgListNode *msgListNode; d(printf("subscribe closed\n")); sub->cancel = TRUE; @@ -551,8 +565,12 @@ sub_destroy(GtkWidget *w, EMSubscribe *sub) if (sub->subscribe_id != -1) mail_msg_cancel(sub->subscribe_id); - while ( (m = (struct _zsubscribe_msg *)e_dlist_remhead(&sub->subscribe)) ) + while ( (msgListNode = (MailMsgListNode *)e_dlist_remhead(&sub->subscribe))) { + m = (struct _zsubscribe_msg *) msgListNode->msg; + /* Free the memory of MailMsgListNode which won't be used anymore. */ + g_free(msgListNode); mail_msg_unref(m); + } sub_unref(sub); } |