GtkWidget *remove_attachment_banner;
gchar *msg_uid;
+ gboolean is_other_body;
GSList *sighandlers;
};
priv->purge_timeout = 0;
priv->remove_attachment_banner = NULL;
priv->msg_uid = NULL;
+ priv->is_other_body = FALSE;
priv->sighandlers = NULL;
ModestMsgViewWindowPrivate *priv = NULL;
TnyFolder *header_folder = NULL;
ModestHeaderView *header_view = NULL;
- ModestWindow *main_window = NULL;
ModestWindowMgr *mgr = NULL;
MODEST_DEBUG_BLOCK (
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
- /* Remember the message list's TreeModel so we can detect changes
+ /* Remember the message list's TreeModel so we can detect changes
* and change the list selection when necessary: */
-
- main_window = modest_window_mgr_get_main_window(mgr, FALSE); /* don't create */
- if (main_window) {
- header_view = MODEST_HEADER_VIEW(modest_main_window_get_child_widget(
- MODEST_MAIN_WINDOW(main_window),
- MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW));
- }
-
- if (header_view != NULL){
- header_folder = modest_header_view_get_folder(header_view);
- /* This could happen if the header folder was
- unseleted before opening this msg window (for
- example if the user selects an account in the
- folder view of the main window */
- if (header_folder) {
- priv->is_outbox = (modest_tny_folder_guess_folder_type (header_folder) == TNY_FOLDER_TYPE_OUTBOX);
- priv->header_folder_id = tny_folder_get_id(header_folder);
- g_assert(priv->header_folder_id != NULL);
- g_object_unref(header_folder);
- }
+ header_folder = modest_header_view_get_folder (header_view);
+ if (header_folder) {
+ priv->is_outbox = (modest_tny_folder_guess_folder_type (header_folder) ==
+ TNY_FOLDER_TYPE_OUTBOX);
+ priv->header_folder_id = tny_folder_get_id (header_folder);
+ g_object_unref(header_folder);
}
/* Setup row references and connect signals */
}
ModestWindow *
-modest_msg_view_window_new_from_header_view (ModestHeaderView *header_view,
- const gchar *modest_account_name,
+modest_msg_view_window_new_from_header_view (ModestHeaderView *header_view,
+ const gchar *modest_account_name,
const gchar *mailbox,
- const gchar *msg_uid,
- GtkTreeRowReference *row_reference)
+ const gchar *msg_uid,
+ GtkTreeRowReference *row_reference)
{
ModestMsgViewWindow *window = NULL;
ModestMsgViewWindowPrivate *priv = NULL;
example if the user selects an account in the
folder view of the main window */
if (header_folder) {
- priv->is_outbox = (modest_tny_folder_guess_folder_type (header_folder) == TNY_FOLDER_TYPE_OUTBOX);
+ priv->is_outbox = (modest_tny_folder_guess_folder_type (header_folder) ==
+ TNY_FOLDER_TYPE_OUTBOX);
priv->header_folder_id = tny_folder_get_id(header_folder);
- g_assert(priv->header_folder_id != NULL);
g_object_unref(header_folder);
}
}
if (header_view != NULL){
modest_header_view_add_observer(header_view,
- MODEST_HEADER_VIEW_OBSERVER(window));
+ MODEST_HEADER_VIEW_OBSERVER(window));
}
tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), NULL);
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);
}
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;
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)); */
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,
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:
*/
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())) {
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);
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;
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;
}
if (replaced_files) {
GtkWidget *confirm_overwrite_dialog;
- const gchar *message = (replaced_files == 1) ?
- _FM("docm_nc_replace_file") : _FM("docm_nc_replace_multiple");
- confirm_overwrite_dialog = hildon_note_new_confirmation (NULL, message);
- if (gtk_dialog_run (GTK_DIALOG (confirm_overwrite_dialog)) != GTK_RESPONSE_OK) {
- is_ok = FALSE;
+
+ if (replaced_files == 1) {
+ SaveMimePartPair *pair = files->data;
+ const gchar *basename = strrchr (pair->filename, G_DIR_SEPARATOR) + 1;
+
+ gchar *message = g_strdup_printf ("%s\n%s",
+ _FM("docm_nc_replace_file"),
+ (basename) ? basename : "");
+ confirm_overwrite_dialog = hildon_note_new_confirmation (NULL, message);
+ g_free (message);
+ } else {
+ confirm_overwrite_dialog = hildon_note_new_confirmation (NULL,
+ _FM("docm_nc_replace_multiple"));
}
+ if (gtk_dialog_run (GTK_DIALOG (confirm_overwrite_dialog)) != GTK_RESPONSE_OK)
+ is_ok = FALSE;
+
gtk_widget_destroy (confirm_overwrite_dialog);
}
modest_msg_view_window_remove_attachments (ModestMsgViewWindow *window, gboolean get_all)
{
ModestMsgViewWindowPrivate *priv;
- TnyList *mime_parts = NULL;
+ TnyList *mime_parts = NULL, *tmp;
gchar *confirmation_message;
gint response;
gint n_attachments;
* because we don't have selection
*/
mime_parts = modest_msg_view_get_attachments (MODEST_MSG_VIEW (priv->msg_view));
-
- /* Remove already purged messages from mime parts list */
- iter = tny_list_create_iterator (mime_parts);
+
+ /* Remove already purged messages from mime parts list. We use
+ a copy of the list to remove items in the original one */
+ tmp = tny_list_copy (mime_parts);
+ iter = tny_list_create_iterator (tmp);
while (!tny_iterator_is_done (iter)) {
TnyMimePart *part = TNY_MIME_PART (tny_iterator_get_current (iter));
- tny_iterator_next (iter);
- if (tny_mime_part_is_purged (part)) {
+ if (tny_mime_part_is_purged (part))
tny_list_remove (mime_parts, (GObject *) part);
- }
+
g_object_unref (part);
+ tny_iterator_next (iter);
}
+ g_object_unref (tmp);
g_object_unref (iter);
if (!modest_maemo_utils_select_attachments (GTK_WINDOW (window), mime_parts, TRUE) ||
}
priv->purge_timeout = g_timeout_add (2000, show_remove_attachment_information, window);
-
+
iter = tny_list_create_iterator (mime_parts);
while (!tny_iterator_is_done (iter)) {
TnyMimePart *part;
g_object_unref (priv->remove_attachment_banner);
priv->remove_attachment_banner = NULL;
}
-
-
}