[anjal] Support forwarding of mails



commit 95841f924c4a97142a647ca68741fe4e4f90a692
Author: Srinivasa Ragavan <sragavan novell com>
Date:   Mon Jul 20 14:29:21 2009 +0530

    Support forwarding of mails

 src/mail-conv-view.c    |    8 ++++++--
 src/mail-conv-view.h    |    2 +-
 src/mail-folder-view.c  |    6 +++---
 src/mail-message-view.c |   20 +++++++++++++++++---
 src/mail-message-view.h |    2 +-
 5 files changed, 28 insertions(+), 10 deletions(-)
---
diff --git a/src/mail-conv-view.c b/src/mail-conv-view.c
index 847e4c7..437454a 100644
--- a/src/mail-conv-view.c
+++ b/src/mail-conv-view.c
@@ -46,6 +46,7 @@ struct  _MailConvViewPrivate {
 	gint position;
 	gboolean once;
 	MailMessageView *last_child;
+	char *folder_uri;
 };
 
 static void
@@ -66,6 +67,7 @@ mail_conv_view_finalize (GObject *object)
 	MailConvView *shell = (MailConvView *)object;
 	MailConvViewPrivate *priv = shell->priv;
 
+	g_free (priv->folder_uri);
 	g_free (priv);
 	
 	G_OBJECT_CLASS (mail_conv_view_parent_class)->finalize (object);
@@ -363,7 +365,7 @@ mcv_msg_load_chain (MailMessageView *mmv, MailConvView *mcv)
 }
 
 void
-mail_conv_view_set_thread (MailConvView *mcv, CamelFolder *folder, GPtrArray *array)
+mail_conv_view_set_thread (MailConvView *mcv, CamelFolder *folder, const char *uri, GPtrArray *array)
 {
 	GtkWidget *tmp = NULL;
 	int i, j;
@@ -372,6 +374,8 @@ mail_conv_view_set_thread (MailConvView *mcv, CamelFolder *folder, GPtrArray *ar
 	GtkWidget *unread = NULL;
 	gboolean last_mail_shown = FALSE;
 	
+	mcv->priv->folder_uri = g_strdup(uri);
+
 	if (mcv->child_box) {
 		tmp = mcv->child_box;
 		gtk_widget_hide (tmp);
@@ -395,7 +399,7 @@ mail_conv_view_set_thread (MailConvView *mcv, CamelFolder *folder, GPtrArray *ar
 		gtk_box_pack_start ((GtkBox *)mcv->child_box, child, FALSE, FALSE, 4);
 		gtk_widget_show (child);
 		
-		mail_message_view_set_message ((MailMessageView *)child, folder, array->pdata[i], i == (array->len -1));
+		mail_message_view_set_message ((MailMessageView *)child, folder, uri, array->pdata[i], i == (array->len -1));
 		g_signal_connect (child, "message-selected", G_CALLBACK(mcv_message_selected), mcv);
 		g_signal_connect (child, "message-removed", G_CALLBACK(mcv_message_removed), mcv);
 		g_signal_connect (child, "message-reply", G_CALLBACK(mcv_message_reply), mcv);
diff --git a/src/mail-conv-view.h b/src/mail-conv-view.h
index 301d235..9a0492e 100644
--- a/src/mail-conv-view.h
+++ b/src/mail-conv-view.h
@@ -61,7 +61,7 @@ typedef struct _MailConvViewClass {
 } MailConvViewClass;
 
 MailConvView * mail_conv_view_new (void);
-void mail_conv_view_set_thread (MailConvView *, CamelFolder *folder, GPtrArray *);
+void mail_conv_view_set_thread (MailConvView *, CamelFolder *folder, const char *uri, GPtrArray *);
 void mail_conv_view_activate (MailConvView *mcv, GtkWidget *tree, GtkWidget *folder_tree, GtkWidget *check_mail, GtkWidget *sort_by, gboolean act);
 GtkWidget *mail_conv_view_get_tab_widget (MailConvView *);
 #endif
diff --git a/src/mail-folder-view.c b/src/mail-folder-view.c
index f99ee29..a6b218e 100644
--- a/src/mail-folder-view.c
+++ b/src/mail-folder-view.c
@@ -1006,7 +1006,7 @@ mfv_popup_open_new_tab (EPopup *ep, EPopupItem *pitem, void *data)
 	 if (!mcv)
 		  return;
 
-	 mail_conv_view_set_thread (mcv, mfv->priv->folder, uids);
+	 mail_conv_view_set_thread (mcv, mfv->priv->folder, mfv->uri, uids);
 }
 
 static void
@@ -1179,7 +1179,7 @@ mfv_button_clicked (GtkWidget *w, GdkEventButton *event, MailFolderView *mfv)
 				if (outgoing)
 					mfv_open_composer (mfv, (char *)uids->pdata[0]);
 				else
-					mail_conv_view_set_thread (mcv, mfv->priv->folder, uids);
+					mail_conv_view_set_thread (mcv, mfv->priv->folder, mfv->uri, uids);
 			}
 			gtk_tree_path_free(path);
 		} 
@@ -1227,7 +1227,7 @@ mfv_message_activated (GtkTreeView       *tree_view,  GtkTreePath       *path, G
 		
 		/* FIXME: Handle 'Sent' messages */
 		if (!outgoing)
-			mail_conv_view_set_thread (shell->mail, shell->priv->folder, msgs);
+			mail_conv_view_set_thread (shell->mail, shell->priv->folder, shell->uri, msgs);
 		else
 			mfv_open_composer(shell, msgs->pdata[0]);
 	}
diff --git a/src/mail-message-view.c b/src/mail-message-view.c
index b02394a..8e12263 100644
--- a/src/mail-message-view.c
+++ b/src/mail-message-view.c
@@ -77,6 +77,8 @@ struct  _MailMessageViewPrivate {
 	GtkWidget *attach_area;
 	GtkWidget *html_headers;
 	GtkWidget *table_headers;
+
+	char *folder_uri;
 };
 
 G_DEFINE_TYPE (MailMessageView, mail_message_view, GTK_TYPE_VBOX)
@@ -126,6 +128,7 @@ mail_message_view_finalize (GObject *object)
 		gtk_widget_destroy (shell->composer);
 	g_object_unref (shell->efwd);
 	g_free ((char *)priv->uid);
+	g_free (priv->folder_uri);
 	g_free (priv->normal[0]);
 	g_free (priv->normal[1]);
 	g_free (priv->bold[0]);
@@ -409,6 +412,13 @@ discard_composer_cb (GtkWidget *w, MailMessageView *mmv)
 	gtk_widget_hide (mmv->comp_view);
 	gtk_widget_hide (mmv->discard);
 	gtk_widget_hide (mmv->pop_out);
+	mmv->composer = NULL;
+	gtk_widget_destroy (mmv->frame);
+	mmv->frame = gtk_frame_new (NULL);
+	gtk_frame_set_shadow_type ((GtkFrame *)mmv->frame, GTK_SHADOW_IN);
+	gtk_widget_destroy(mmv->cbox);
+	mmv->cbox = gtk_hbox_new (FALSE, 0);
+
 	/* FIXME: Destroy the composer in here */
 }
 
@@ -479,7 +489,10 @@ construct_reply_composer (MailMessageView *mmv, int mode)
 		GtkWidget *box = gtk_vbox_new (FALSE, 0);
 		gtk_widget_show(box);
 		
-		mmv->composer = (GtkWidget *)em_utils_reply_to_message (mmv->priv->folder, mmv->priv->uid, mmv->priv->msg, mode, NULL);
+		if (mode != -1)
+			mmv->composer = (GtkWidget *)em_utils_reply_to_message (mmv->priv->folder, mmv->priv->uid, mmv->priv->msg, mode, NULL);
+		else 
+			mmv->composer = (GtkWidget *)em_utils_forward_message (mmv->priv->msg, mmv->priv->folder_uri);
 		mmv->comp_view = g_object_get_data((GObject *)mmv->composer,"vbox");
 		gtk_widget_reparent (mmv->comp_view, box);
 		gtk_widget_set_size_request (mmv->comp_view, -1, 400);	
@@ -524,7 +537,7 @@ invoke_reply_all_composer_cb (GtkWidget *w, MailMessageView *mmv)
 static void
 invoke_forward_composer_cb (GtkWidget *w, MailMessageView *mmv)
 {
-
+	construct_reply_composer (mmv, -1); /* Hack this to treat as Forward*/
 }
 
 static void
@@ -1058,7 +1071,7 @@ unread_leave(GtkWidget *widget, GdkEventCrossing *event, gpointer user_data)
 }
 
 void
-mail_message_view_set_message (MailMessageView *mmview, CamelFolder *folder, const char *uid, gboolean show_composer)
+mail_message_view_set_message (MailMessageView *mmview, CamelFolder *folder, const char *uri, const char *uid, gboolean show_composer)
 {
 	 GtkWidget *tmp,  *menu;
 	 GdkPixbuf *img;
@@ -1077,6 +1090,7 @@ mail_message_view_set_message (MailMessageView *mmview, CamelFolder *folder, con
 	/* FIXME: Ref & Use */
 	mmview->priv->uid = g_strdup(uid);
 	mmview->priv->folder = folder;
+	mmview->priv->folder_uri = g_strdup (uri);
 
 	box = gtk_vbox_new (FALSE, 0);
 	gtk_widget_show (box);
diff --git a/src/mail-message-view.h b/src/mail-message-view.h
index 6707a12..7199c95 100644
--- a/src/mail-message-view.h
+++ b/src/mail-message-view.h
@@ -74,7 +74,7 @@ typedef struct _MailMessageViewClass {
 } MailMessageViewClass;
 
 MailMessageView * mail_message_view_new (void);
-void mail_message_view_set_message (MailMessageView *mmview, struct _CamelFolder *folder, const char *uid, gboolean show_composer);
+void mail_message_view_set_message (MailMessageView *mmview, struct _CamelFolder *folder,const char *uri, const char *uid, gboolean show_composer);
 GtkWidget * mail_message_view_create_webview (MailMessageView *mmv, GtkWidget *box);
 CamelStream * mail_message_view_create_webstream (gpointer web, GtkWidget *w);
 GtkWidget * mail_message_view_get_focus_widget (MailMessageView *mmv);



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