sync with 0.7.6cvs4
[claws.git] / src / messageview.c
index bf0b66e9243159dc84a6ba810fe5394c635b3eec..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,15 +414,17 @@ 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);
        procmsg_msginfo_free(tmpmsginfo);
 
        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 {
@@ -499,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;
@@ -513,50 +527,31 @@ 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)
 {
-       switch (messageview->type) {
-       case MVIEW_TEXT:
-               textview_set_position(messageview->textview, pos);
-               break;
-       case MVIEW_MIME:
-               if (messageview->mimeview->type == MIMEVIEW_TEXT)
-                       textview_set_position(messageview->mimeview->textview, pos);
-               break;
-       default:
-               break;
-       }
+       textview_set_position(messageview->textview, pos);
 }
 
 gboolean messageview_search_string(MessageView *messageview, const gchar *str,
                                   gboolean case_sens)
 {
-       switch (messageview->type) {
-       case MVIEW_TEXT:
-               return textview_search_string(messageview->textview,
-                                       str, case_sens);
-       case MVIEW_MIME:
-               if (messageview->mimeview->type == MIMEVIEW_TEXT)
-                       return textview_search_string(messageview->mimeview->textview,
-                                               str, case_sens);
-               else
-                       return FALSE;
-       default:
-               return FALSE;
-       }
-               
+       return textview_search_string(messageview->textview, str, case_sens);
        return FALSE;
 }
 
@@ -564,22 +559,9 @@ gboolean messageview_search_string_backward(MessageView *messageview,
                                            const gchar *str,
                                            gboolean case_sens)
 {
-       switch (messageview->type) {
-       case MVIEW_TEXT:
-               return textview_search_string_backward(messageview->textview,
-                                       str, case_sens);
-       case MVIEW_MIME:
-               if (messageview->mimeview->type == MIMEVIEW_TEXT)
-                       return textview_search_string_backward(messageview->mimeview->textview,
-                                               str, case_sens);
-               else
-                       return FALSE;
-       default:
-               return FALSE;
-       }
-               
+       return textview_search_string_backward(messageview->textview,
+                                              str, case_sens);
        return FALSE;
-
 }
 
 GtkWidget *messageview_get_text_widget(MessageView *messageview)