aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNorman Wang <zhichao.wang@sun.com>2008-12-22 11:11:09 +0800
committerJeff Cai <jeffcai@src.gnome.org>2008-12-22 11:11:09 +0800
commit324695cd77e3a654b24963dd6bc07c37f6f30644 (patch)
treec9d6bda3f63785e4967d83319a514346124c7527
parent49c240bf7927400a2df5513c83f923814acd325f (diff)
downloadgsoc2013-evolution-324695cd77e3a654b24963dd6bc07c37f6f30644.tar.gz
gsoc2013-evolution-324695cd77e3a654b24963dd6bc07c37f6f30644.tar.zst
gsoc2013-evolution-324695cd77e3a654b24963dd6bc07c37f6f30644.zip
** Fix for bug #558337
2008-12-22 Norman Wang <zhichao.wang@sun.com> ** Fix for bug #558337 * mail/em-subscribe-editor.c: Create a wrapper class MailMsgListNode of _zsubscribe_msg message. The MailMsgListNode class is the subclass of EDListNode class. So the _zsubscribe_msg can be added into the EDList. svn path=/trunk/; revision=36922
-rw-r--r--mail/ChangeLog8
-rw-r--r--mail/em-subscribe-editor.c28
2 files changed, 31 insertions, 5 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index f3be267b5b..b957caffa4 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,11 @@
+2008-12-22 Norman Wang <zhichao.wang@sun.com>
+
+ ** Fix for bug #558337
+
+ * mail/em-subscribe-editor.c: Create a wrapper class MailMsgListNode of
+ _zsubscribe_msg message. The MailMsgListNode class is the subclass of
+ EDListNode class. So the _zsubscribe_msg can be added into the EDList.
+
2008-12-16 Milan Crha <mcrha@redhat.com>
** Part of fix for bug #552583
diff --git a/mail/em-subscribe-editor.c b/mail/em-subscribe-editor.c
index 3eb738cd8d..a6ce5d7485 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);
}