X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-msg-view-window.c;h=110f09e740c914ddc71711a9d0d4e21096e34cf0;hp=a8fa99e0b359a1fa0eff6db4a5ff98dbfe2e9df2;hb=858271337fba8deddfd63653bc791ca3de8d668b;hpb=6b0b24bba6d96c8cc440e58fcae35485c6139adf diff --git a/src/hildon2/modest-msg-view-window.c b/src/hildon2/modest-msg-view-window.c index a8fa99e..110f09e 100644 --- a/src/hildon2/modest-msg-view-window.c +++ b/src/hildon2/modest-msg-view-window.c @@ -117,6 +117,7 @@ struct _ModestMsgViewWindowPrivate { GtkWidget *remove_attachment_banner; gchar *msg_uid; + gboolean is_other_body; GSList *sighandlers; }; @@ -448,6 +449,7 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj) priv->purge_timeout = 0; priv->remove_attachment_banner = NULL; priv->msg_uid = NULL; + priv->is_other_body = FALSE; priv->sighandlers = NULL; @@ -993,6 +995,7 @@ modest_msg_view_window_new_from_header_view (ModestHeaderView *header_view, TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN, &header, -1); message_reader (window, priv, header, row_reference); + g_object_unref (header); } gtk_tree_path_free (path); @@ -1040,10 +1043,11 @@ modest_msg_view_window_new_for_search_result (TnyMsg *msg, } ModestWindow * -modest_msg_view_window_new_for_attachment (TnyMsg *msg, - const gchar *modest_account_name, - const gchar *mailbox, - const gchar *msg_uid) +modest_msg_view_window_new_with_other_body (TnyMsg *msg, + TnyMimePart *other_body, + const gchar *modest_account_name, + const gchar *mailbox, + const gchar *msg_uid) { GObject *obj = NULL; ModestMsgViewWindowPrivate *priv; @@ -1056,7 +1060,12 @@ modest_msg_view_window_new_for_attachment (TnyMsg *msg, modest_msg_view_window_construct (MODEST_MSG_VIEW_WINDOW (obj), modest_account_name, mailbox, msg_uid); - tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg); + if (other_body) { + priv->is_other_body = TRUE; + modest_msg_view_set_msg_with_other_body (MODEST_MSG_VIEW (priv->msg_view), msg, other_body); + } else { + tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg); + } update_window_title (MODEST_MSG_VIEW_WINDOW (obj)); /* gtk_widget_show_all (GTK_WIDGET (obj)); */ @@ -1069,6 +1078,15 @@ modest_msg_view_window_new_for_attachment (TnyMsg *msg, return MODEST_WINDOW(obj); } +ModestWindow * +modest_msg_view_window_new_for_attachment (TnyMsg *msg, + const gchar *modest_account_name, + const gchar *mailbox, + const gchar *msg_uid) +{ + return modest_msg_view_window_new_with_other_body (msg, NULL, modest_account_name, mailbox, msg_uid); +} + static void modest_msg_view_window_on_row_changed (GtkTreeModel *header_model, GtkTreePath *arg1, @@ -1331,6 +1349,9 @@ modest_msg_view_window_get_header (ModestMsgViewWindow *self) g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self), NULL); priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self); + if (priv->is_other_body) + return NULL; + /* If the message was not obtained from a treemodel, * for instance if it was opened directly by the search UI: */ @@ -1842,14 +1863,14 @@ message_reader (ModestMsgViewWindow *window, g_return_val_if_fail (row_reference != NULL, FALSE); + /* We set the header from model while we're loading */ + tny_header_view_set_header (TNY_HEADER_VIEW (priv->msg_view), header); + gtk_window_set_title (GTK_WINDOW (window), _CS("ckdg_pb_updating")); + mgr = modest_runtime_get_window_mgr (); /* Msg download completed */ if (!(tny_header_get_flags (header) & TNY_HEADER_FLAG_CACHED)) { - /* We set the header from model while we're loading */ - tny_header_view_set_header (TNY_HEADER_VIEW (priv->msg_view), header); - gtk_window_set_title (GTK_WINDOW (window), _CS("ckdg_pb_updating")); - /* Ask the user if he wants to download the message if we're not online */ if (!tny_device_is_online (modest_runtime_get_device())) { @@ -1877,13 +1898,13 @@ message_reader (ModestMsgViewWindow *window, return TRUE; } } - + folder = tny_header_get_folder (header); account = tny_folder_get_account (folder); info = g_slice_new (MsgReaderInfo); info->header = g_object_ref (header); info->row_reference = gtk_tree_row_reference_copy (row_reference); - + message_reader_performer (FALSE, NULL, (GtkWindow *) window, account, info); g_object_unref (account); g_object_unref (folder); @@ -2495,7 +2516,7 @@ modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, if (tny_mime_part_is_purged (mime_part)) goto frees; - if (!modest_tny_mime_part_is_msg (mime_part)) { + if (!modest_tny_mime_part_is_msg (mime_part) && tny_mime_part_get_filename (mime_part)) { gchar *filepath = NULL; const gchar *att_filename = tny_mime_part_get_filename (mime_part); gboolean show_error_banner = FALSE; @@ -2536,6 +2557,29 @@ modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, g_free (filepath); if (show_error_banner) modest_platform_information_banner (NULL, NULL, _("mail_ib_file_operation_failed")); + } else if (!modest_tny_mime_part_is_msg (mime_part)) { + ModestWindowMgr *mgr; + mgr = modest_runtime_get_window_mgr (); + ModestWindow *msg_win = NULL; + TnyMsg *current_msg; + + gchar *account = g_strdup (modest_window_get_active_account (MODEST_WINDOW (window))); + const gchar *mailbox = modest_window_get_active_mailbox (MODEST_WINDOW (window)); + if (!account) + account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ()); + + current_msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW (window)); + msg_win = modest_msg_view_window_new_with_other_body (TNY_MSG (current_msg), TNY_MIME_PART (mime_part), + account, mailbox, attachment_uid); + g_object_unref (current_msg); + + modest_window_set_zoom (MODEST_WINDOW (msg_win), + modest_window_get_zoom (MODEST_WINDOW (window))); + if (modest_window_mgr_register_window (mgr, msg_win, MODEST_WINDOW (window))) + gtk_widget_show_all (GTK_WIDGET (msg_win)); + else + gtk_widget_destroy (GTK_WIDGET (msg_win)); + } else { /* message attachment */ TnyHeader *header = NULL; @@ -2691,10 +2735,11 @@ save_mime_parts_to_file_with_checks (SaveMimePartInfo *info) if (replaced_files == 1) { SaveMimePartPair *pair = files->data; - const gchar *filename = tny_mime_part_get_filename (pair->part); + const gchar *basename = strrchr (pair->filename, G_DIR_SEPARATOR) + 1; + gchar *message = g_strdup_printf ("%s\n%s", _FM("docm_nc_replace_file"), - (filename) ? filename : ""); + (basename) ? basename : ""); confirm_overwrite_dialog = hildon_note_new_confirmation (NULL, message); g_free (message); } else {