sync with 0.7.6cvs4
[claws.git] / src / messageview.c
index 9d2da805e347dc201cabeea97af9a1bc980438b4..72ab34eec79d1e8e0f90bfe5083c21dd4c8eeef3 100644 (file)
@@ -187,12 +187,12 @@ static gint disposition_notification_queue(PrefsAccount * account,
 
        tmp = g_strdup_printf("%s%cqueue.%d", g_get_tmp_dir(),
                              G_DIR_SEPARATOR, (gint)file);
-       if ((fp = fopen(tmp, "w")) == NULL) {
+       if ((fp = fopen(tmp, "wb")) == NULL) {
                FILE_OP_ERROR(tmp, "fopen");
                g_free(tmp);
                return -1;
        }
-       if ((src_fp = fopen(file, "r")) == NULL) {
+       if ((src_fp = fopen(file, "rb")) == NULL) {
                FILE_OP_ERROR(file, "fopen");
                fclose(fp);
                unlink(tmp);
@@ -297,7 +297,7 @@ static gint disposition_notification_send(MsgInfo * msginfo)
        g_snprintf(tmp, sizeof(tmp), "%s%ctmpmsg%d",
                   get_rc_dir(), G_DIR_SEPARATOR, (gint)msginfo);
 
-       if ((fp = fopen(tmp, "w")) == NULL) {
+       if ((fp = fopen(tmp, "wb")) == NULL) {
                FILE_OP_ERROR(tmp, "fopen");
                return -1;
        }
@@ -386,7 +386,11 @@ void messageview_show(MessageView *messageview, MsgInfo *msginfo,
        if (!mimeinfo) return;
 
        file = procmsg_get_message_file_path(msginfo);
-       g_return_if_fail(file != NULL);
+       if (!file) {
+               g_warning("can't get message file path.\n");
+               procmime_mimeinfo_free(mimeinfo);
+               return;
+       }
 
        /* FIXME - doesn't tmpmsginfo->flags have the value
         * of msginfo->flags after procheader_parse()???
@@ -400,7 +404,8 @@ void messageview_show(MessageView *messageview, MsgInfo *msginfo,
        if (prefs_common.return_receipt
            && (tmpmsginfo->dispositionnotificationto
                || tmpmsginfo->returnreceiptto)
-           && (MSG_IS_RETRCPT_PENDING(msginfo->flags))) {
+           && (MSG_IS_UNREAD(tmpmsginfo->flags))
+           && (MSG_IS_RETRCPT_PENDING(tmpmsginfo->flags))) {
                gint ok;
                
                if (alertpanel(_("Return Receipt"), _("Send return receipt ?"),
@@ -409,7 +414,7 @@ void messageview_show(MessageView *messageview, MsgInfo *msginfo,
                        if (ok < 0)
                                alertpanel_error(_("Error occurred while sending notification."));
                }
-               MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_RETRCPT_PENDING);      
+               MSG_UNSET_PERM_FLAGS(tmpmsginfo->flags, MSG_RETRCPT_PENDING);   
        }
 
        headerview_show(messageview->headerview, tmpmsginfo);
@@ -418,7 +423,8 @@ void messageview_show(MessageView *messageview, MsgInfo *msginfo,
        textview_set_all_headers(messageview->textview, all_headers);
        textview_set_all_headers(messageview->mimeview->textview, all_headers);
 
-       if (mimeinfo->mime_type != MIME_TEXT) {
+       if (mimeinfo->mime_type != MIME_TEXT &&
+           mimeinfo->mime_type != MIME_TEXT_HTML) {
                messageview_change_view_type(messageview, MVIEW_MIME);
                mimeview_show_message(messageview->mimeview, mimeinfo, file);
        } else {
@@ -500,7 +506,14 @@ void messageview_set_font(MessageView *messageview)
 
 void messageview_copy_clipboard(MessageView *messageview)
 {
-       switch (messageview->type) {
+       gint displaytype = /* force MVIEV_TEXT on first page */
+               ((messageview->type == MVIEW_MIME)
+               && (gtk_notebook_get_current_page(GTK_NOTEBOOK(
+                               messageview->mimeview->notebook)) > 0))
+               ? MVIEW_MIME
+               : MVIEW_TEXT;
+
+       switch (displaytype) {
        case MVIEW_TEXT:
                gtk_editable_copy_clipboard(GTK_EDITABLE(messageview->textview->text));
                break;
@@ -514,16 +527,20 @@ void messageview_copy_clipboard(MessageView *messageview)
 
 void messageview_select_all(MessageView *messageview)
 {
-       switch (messageview->type) {
-       case MVIEW_TEXT:
-               gtk_editable_select_region(GTK_EDITABLE(messageview->textview->text), 0, -1);
-               break;
-       case MVIEW_MIME:
-               if (messageview->mimeview->type == MIMEVIEW_TEXT)
-                       gtk_editable_select_region(GTK_EDITABLE(messageview->mimeview->textview->text), 0, -1);
-       default:
-               break;
+       GtkWidget *text = NULL;
+
+       if (messageview->type == MVIEW_TEXT)
+               text = messageview->textview->text;
+       else if (messageview->type == MVIEW_MIME) {
+               if (gtk_notebook_get_current_page
+                       (GTK_NOTEBOOK(messageview->mimeview->notebook)) == 0)
+                       text = messageview->textview->text;
+               else if (messageview->mimeview->type == MIMEVIEW_TEXT)
+                       text = messageview->mimeview->textview->text;
        }
+
+       if (text)
+               gtk_editable_select_region(GTK_EDITABLE(text), 0, -1);
 }
 
 void messageview_set_position(MessageView *messageview, gint pos)