X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=523d26016225511fa502bcea8d43a05c4e07051f;hb=fc3bc62ab94ccdeb864ceefd9023ae4ad0f10e6f;hp=caa0c3e7d8d33bcf590a00bc682e0144f863ed19;hpb=554b43b43c2c4b02ed0ff74070a94f59170bd3c8;p=modest diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index caa0c3e..523d260 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -115,6 +115,8 @@ typedef struct _ReplyForwardHelper { gchar *mailbox; GtkWidget *parent_window; TnyHeader *header; + TnyHeader *top_header; + TnyMsg *msg_part; TnyList *parts; } ReplyForwardHelper; @@ -825,8 +827,7 @@ modest_ui_actions_compose_msg(ModestWindow *win, TnyMsg *msg = NULL; TnyAccount *account = NULL; TnyFolder *folder = NULL; - gchar *from_str = NULL, *signature = NULL, *body = NULL; - gchar *recipient = NULL; + gchar *from_str = NULL, *signature = NULL, *body = NULL, *recipient = NULL, *tmp = NULL; gboolean use_signature = FALSE; ModestWindow *msg_win = NULL; ModestAccountMgr *mgr = modest_runtime_get_account_mgr(); @@ -895,34 +896,17 @@ modest_ui_actions_compose_msg(ModestWindow *win, goto cleanup; } + recipient = modest_text_utils_get_email_address (from_str); - signature = modest_account_mgr_get_signature_from_recipient (mgr, recipient, &use_signature); + tmp = modest_account_mgr_get_signature_from_recipient (modest_runtime_get_account_mgr (), + recipient, + &use_signature); + signature = modest_text_utils_create_colored_signature (tmp); + g_free (tmp); g_free (recipient); - if (body_str != NULL) { - body = use_signature ? g_strconcat(body_str, "\n", - MODEST_TEXT_UTILS_SIGNATURE_MARKER, - "\n", signature, NULL) : g_strdup(body_str); - } else { - - gchar *gray_color_markup = NULL, *color_begin = NULL, *color_end = NULL; - GdkColor color; - - if (win && gtk_style_lookup_color (gtk_widget_get_style ((GtkWidget *) win), - "SecondaryTextColor", &color)) - gray_color_markup = modest_text_utils_get_color_string (&color); - if (!gray_color_markup) - gray_color_markup = g_strdup ("#babababababa"); - color_begin = g_strdup_printf ("", gray_color_markup); - color_end = ""; - - body = use_signature ? g_strconcat("
\n", color_begin, - MODEST_TEXT_UTILS_SIGNATURE_MARKER, "
\n", - signature, color_end, NULL) : g_strdup(""); - - g_free (gray_color_markup); - g_free (color_begin); - } + body = use_signature ? g_strconcat ((body_str) ? body_str : "", signature, NULL) : + g_strdup(body_str); msg = modest_tny_msg_new_html_plain (to_str, from_str, cc_str, bcc_str, subject_str, NULL, NULL, body, NULL, NULL, NULL, NULL, NULL); @@ -1258,7 +1242,7 @@ open_msg_cb (ModestMailOperation *mail_op, win = modest_msg_view_window_new_with_header_model (msg, account, mailbox, (const gchar*) uid, helper->model, helper->rowref); } else { - win = modest_msg_view_window_new_for_attachment (msg, account, mailbox, (const gchar*) uid); + win = modest_msg_view_window_new_for_attachment (msg, NULL, account, mailbox, (const gchar*) uid); } g_free (uid); } @@ -1487,7 +1471,8 @@ open_msg_performer(gboolean canceled, gboolean can_open; gchar *account_name = get_info_from_header (helper->header, &is_draft, &can_open); - if (!g_strcmp0 (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_ID)) { + if (!g_strcmp0 (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) || + !g_strcmp0 (account_name, MODEST_MMC_ACCOUNT_ID)) { g_free (account_name); account_name = g_strdup (modest_window_get_active_account (MODEST_WINDOW (parent_window))); } @@ -1718,6 +1703,8 @@ create_reply_forward_helper (ReplyForwardAction action, ModestWindow *win, guint reply_forward_type, TnyHeader *header, + TnyMsg *msg_part, + TnyHeader *top_header, TnyList *parts) { ReplyForwardHelper *rf_helper = NULL; @@ -1729,6 +1716,8 @@ create_reply_forward_helper (ReplyForwardAction action, rf_helper->action = action; rf_helper->parent_window = (MODEST_IS_WINDOW (win)) ? GTK_WIDGET (win) : NULL; rf_helper->header = (header) ? g_object_ref (header) : NULL; + rf_helper->top_header = (top_header) ? g_object_ref (top_header) : NULL; + rf_helper->msg_part = (msg_part) ? g_object_ref (msg_part) : NULL; rf_helper->account_name = (active_acc) ? g_strdup (active_acc) : modest_account_mgr_get_default_account (modest_runtime_get_account_mgr()); @@ -1758,6 +1747,10 @@ free_reply_forward_helper (gpointer data) g_free (helper->mailbox); if (helper->header) g_object_unref (helper->header); + if (helper->top_header) + g_object_unref (helper->top_header); + if (helper->msg_part) + g_object_unref (helper->msg_part); if (helper->parts) g_object_unref (helper->parts); if (helper->parent_window) @@ -1781,9 +1774,8 @@ reply_forward_cb (ModestMailOperation *mail_op, gchar *from = NULL; TnyAccount *account = NULL; ModestWindowMgr *mgr = NULL; - gchar *signature = NULL; + gchar *signature = NULL, *recipient = NULL; gboolean use_signature; - gchar *recipient; /* If there was any error. The mail operation could be NULL, this means that we already have the message downloaded and @@ -1794,9 +1786,10 @@ reply_forward_cb (ModestMailOperation *mail_op, from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(), rf_helper->account_name, rf_helper->mailbox); + recipient = modest_text_utils_get_email_address (from); - signature = modest_account_mgr_get_signature_from_recipient (modest_runtime_get_account_mgr(), - recipient, + signature = modest_account_mgr_get_signature_from_recipient (modest_runtime_get_account_mgr (), + recipient, &use_signature); g_free (recipient); @@ -1806,18 +1799,18 @@ reply_forward_cb (ModestMailOperation *mail_op, information. The summary can lack some data */ TnyHeader *msg_header; case ACTION_REPLY: - msg_header = tny_msg_get_header (msg); + msg_header = tny_msg_get_header (rf_helper->msg_part?rf_helper->msg_part:msg); new_msg = - modest_tny_msg_create_reply_msg (msg, msg_header, from, + modest_tny_msg_create_reply_msg (rf_helper->msg_part?rf_helper->msg_part:msg, msg_header, from, (use_signature) ? signature : NULL, rf_helper->reply_forward_type, MODEST_TNY_MSG_REPLY_MODE_SENDER); g_object_unref (msg_header); break; case ACTION_REPLY_TO_ALL: - msg_header = tny_msg_get_header (msg); + msg_header = tny_msg_get_header (rf_helper->msg_part?rf_helper->msg_part:msg); new_msg = - modest_tny_msg_create_reply_msg (msg, msg_header, from, + modest_tny_msg_create_reply_msg (rf_helper->msg_part?rf_helper->msg_part:msg, msg_header, from, (use_signature) ? signature : NULL, rf_helper->reply_forward_type, MODEST_TNY_MSG_REPLY_MODE_ALL); @@ -1826,7 +1819,8 @@ reply_forward_cb (ModestMailOperation *mail_op, break; case ACTION_FORWARD: new_msg = - modest_tny_msg_create_forward_msg (msg, from, (use_signature) ? signature : NULL, + modest_tny_msg_create_forward_msg (rf_helper->msg_part?rf_helper->msg_part:msg, from, + (use_signature) ? signature : NULL, rf_helper->reply_forward_type); edit_type = MODEST_EDIT_TYPE_FORWARD; break; @@ -1958,7 +1952,7 @@ reply_forward_performer (gboolean canceled, modest_ui_actions_disk_operations_error_handler, NULL, NULL); modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op); - modest_mail_operation_get_msg_and_parts (mail_op, rf_helper->header, rf_helper->parts, TRUE, reply_forward_cb, rf_helper); + modest_mail_operation_get_msg_and_parts (mail_op, rf_helper->top_header, rf_helper->parts, TRUE, reply_forward_cb, rf_helper); /* Frees */ g_object_unref(mail_op); @@ -2064,21 +2058,25 @@ reply_forward (ReplyForwardAction action, ModestWindow *win) if (MODEST_IS_MSG_VIEW_WINDOW (win)) { TnyMsg *msg = NULL; + TnyMsg *top_msg = NULL; TnyHeader *header = NULL; /* Get header and message. Do not free them here, the reply_forward_cb must do it */ msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW(win)); + top_msg = modest_msg_view_window_get_top_message (MODEST_MSG_VIEW_WINDOW(win)); header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (win)); if (msg && header && (action != ACTION_FORWARD || all_parts_retrieved (TNY_MIME_PART (msg)))) { /* Create helper */ rf_helper = create_reply_forward_helper (action, win, - reply_forward_type, header, NULL); + reply_forward_type, header, NULL, NULL, NULL); reply_forward_cb (NULL, header, FALSE, msg, NULL, rf_helper); } else { gboolean do_download = TRUE; if (msg && header && action == ACTION_FORWARD) { + if (top_msg == NULL) + top_msg = g_object_ref (msg); /* Not all parts retrieved. Then we have to retrieve them all before * creating the forward message */ if (!tny_device_is_online (modest_runtime_get_device ())) { @@ -2099,21 +2097,24 @@ reply_forward (ReplyForwardAction action, ModestWindow *win) TnyList *pending_parts; TnyFolder *folder; TnyAccount *account; + TnyHeader *top_header; /* Create helper */ - pending_parts = forward_pending_parts (msg); + top_header = tny_msg_get_header (top_msg); + pending_parts = forward_pending_parts (top_msg); rf_helper = create_reply_forward_helper (action, win, - reply_forward_type, header, pending_parts); + reply_forward_type, header, msg, top_header, pending_parts); g_object_unref (pending_parts); - folder = tny_header_get_folder (header); + folder = tny_header_get_folder (top_header); account = tny_folder_get_account (folder); modest_platform_connect_and_perform (GTK_WINDOW (win), TRUE, account, reply_forward_performer, rf_helper); - g_object_unref (folder); + if (folder) g_object_unref (folder); g_object_unref (account); + if (top_header) g_object_unref (top_header); } } else { @@ -2123,6 +2124,8 @@ reply_forward (ReplyForwardAction action, ModestWindow *win) if (msg) g_object_unref (msg); + if (top_msg) + g_object_unref (top_msg); if (header) g_object_unref (header); } else { @@ -2186,7 +2189,7 @@ reply_forward (ReplyForwardAction action, ModestWindow *win) if (download) { /* Create helper */ rf_helper = create_reply_forward_helper (action, win, - reply_forward_type, header, NULL); + reply_forward_type, header, NULL, NULL, NULL); if (uncached_msgs > 0) { modest_platform_connect_and_perform (GTK_WINDOW (win), TRUE, account, @@ -2212,6 +2215,68 @@ reply_forward (ReplyForwardAction action, ModestWindow *win) } void +modest_ui_actions_reply_calendar (ModestWindow *win, TnyMsg *msg, TnyList *header_pairs) +{ + gchar *from; + gchar *recipient; + gchar *signature; + gboolean use_signature; + TnyMsg *new_msg; + GtkWidget *msg_win; + gdouble parent_zoom; + const gchar *account_name; + const gchar *mailbox; + TnyHeader *msg_header; + ModestWindowMgr *mgr; + + g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW(win)); + + /* we check for low-mem; in that case, show a warning, and don't allow + * reply/forward (because it could potentially require a lot of memory */ + if (modest_platform_check_memory_low (MODEST_WINDOW(win), TRUE)) + return; + + account_name = modest_window_get_active_account (MODEST_WINDOW (win)); + mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (win)); + from = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(), + account_name, mailbox); + recipient = modest_text_utils_get_email_address (from); + signature = modest_account_mgr_get_signature_from_recipient (modest_runtime_get_account_mgr(), + recipient, + &use_signature); + g_free (recipient); + + msg_header = tny_msg_get_header (msg); + new_msg = + modest_tny_msg_create_reply_calendar_msg (msg, msg_header, from, + (use_signature) ? signature : NULL, + header_pairs); + g_object_unref (msg_header); + + g_free (from); + g_free (signature); + + if (!new_msg) { + g_warning ("%s: failed to create message\n", __FUNCTION__); + goto cleanup; + } + + msg_win = (GtkWidget *) modest_msg_edit_window_new (new_msg, account_name, mailbox, FALSE); + mgr = modest_runtime_get_window_mgr (); + modest_window_mgr_register_window (mgr, MODEST_WINDOW (msg_win), (ModestWindow *) win); + + parent_zoom = modest_window_get_zoom (MODEST_WINDOW (win)); + modest_window_set_zoom (MODEST_WINDOW (msg_win), parent_zoom); + + /* Show edit window */ + gtk_widget_show_all (GTK_WIDGET (msg_win)); + +cleanup: + if (new_msg) + g_object_unref (G_OBJECT (new_msg)); +} + +void modest_ui_actions_on_reply (GtkAction *action, ModestWindow *win) { g_return_if_fail (MODEST_IS_WINDOW(win)); @@ -7082,7 +7147,7 @@ modest_ui_actions_on_delete_account (GtkWindow *parent_window, distinguish if the notification belongs to this account or not, so for safety reasons we remove them all */ - modest_platform_remove_new_mail_notifications (FALSE); + modest_platform_remove_new_mail_notifications (FALSE, account_name); } else { g_warning ("%s: modest_account_mgr_remove_account() failed.\n", __FUNCTION__); }