evolution r36923 - branches/gnome-2-24/mail



Author: jeffcai
Date: Mon Dec 22 05:40:14 2008
New Revision: 36923
URL: http://svn.gnome.org/viewvc/evolution?rev=36923&view=rev

Log:
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.


Modified:
   branches/gnome-2-24/mail/ChangeLog
   branches/gnome-2-24/mail/em-subscribe-editor.c

Modified: branches/gnome-2-24/mail/em-subscribe-editor.c
==============================================================================
--- branches/gnome-2-24/mail/em-subscribe-editor.c	(original)
+++ branches/gnome-2-24/mail/em-subscribe-editor.c	Mon Dec 22 05:40:14 2008
@@ -111,6 +111,12 @@
 	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 @@
 	GtkTreeModel *model;
 	EMSubscribeNode *node;
 	gboolean subscribed, issub;
+	MailMsgListNode *msgListNode;
 
 	m->sub->subscribe_id = -1;
 	if (m->sub->cancel)
@@ -209,10 +216,13 @@
 	}
 
 	/* 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 @@
 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 @@
 		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 @@
 sub_destroy(GtkWidget *w, EMSubscribe *sub)
 {
 	struct _zsubscribe_msg *m;
+	MailMsgListNode *msgListNode;	
 
 	d(printf("subscribe closed\n"));
 	sub->cancel = TRUE;
@@ -551,8 +565,12 @@
 	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);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]