* src/mimeview.[ch]
[claws.git] / src / messageview.c
index af4a969b46daa2c2012e72bc115036828b864af0..6faf45e60e9d97a9da17bc440dff878891239910 100644 (file)
@@ -301,7 +301,7 @@ MessageView *messageview_create(MainWindow *mainwin)
        textview = textview_create();
        textview->messageview = messageview;
 
-       mimeview = mimeview_create();
+       mimeview = mimeview_create(mainwin);
        mimeview->textview = textview_create();
        mimeview->textview->messageview = messageview;
        mimeview->messageview = messageview;
@@ -676,21 +676,13 @@ GList *messageview_get_window_list(void)
 void messageview_show(MessageView *messageview, MsgInfo *msginfo,
                      gboolean all_headers)
 {
-       FILE *fp;
        gchar *file;
        MimeInfo *mimeinfo;
 
        g_return_if_fail(msginfo != NULL);
 
-#if USE_GPGME
-       if ((fp = procmsg_open_message_decrypted(msginfo, &mimeinfo)) == NULL)
-               return;
-#else /* !USE_GPGME */
-       if ((fp = procmsg_open_message(msginfo)) == NULL) return;
-       mimeinfo = procmime_scan_mime_header(fp);
-#endif /* USE_GPGME */
-       fclose(fp);
-       if (!mimeinfo) return;
+       mimeinfo = procmime_scan_message(msginfo);
+       g_return_if_fail(mimeinfo != NULL);
 
        file = procmsg_get_message_file_path(msginfo);
        if (!file) {
@@ -709,8 +701,7 @@ 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 &&
-           mimeinfo->mime_type != MIME_TEXT_HTML) {
+       if (mimeinfo->mime_type != MIME_TEXT) {
                messageview_change_view_type(messageview, MVIEW_MIME);
                mimeview_show_message(messageview->mimeview, mimeinfo, file);
        } else {
@@ -768,6 +759,7 @@ void messageview_reflect_prefs_pixmap_theme(void)
        for (cur = msgview_list; cur != NULL; cur = cur->next) {
                msgview = (MessageView*)cur->data;
                toolbar_update(TOOLBAR_MSGVIEW, msgview);
+               mimeview_update(msgview->mimeview);
        }
 }
 
@@ -776,6 +768,7 @@ void messageview_clear(MessageView *messageview)
        procmsg_msginfo_free(messageview->msginfo);
        messageview->msginfo = NULL;
        messageview_change_view_type(messageview, MVIEW_TEXT);
+       messageview->filtered = FALSE;
        headerview_clear(messageview->headerview);
        textview_clear(messageview->textview);
        noticeview_hide(messageview->noticeview);
@@ -812,7 +805,6 @@ void messageview_destroy(MessageView *messageview)
 void messageview_delete(MessageView *msgview)
 {
        MsgInfo *msginfo = (MsgInfo*)msgview->msginfo;
-       SummaryView *summaryview = (SummaryView*)msgview->mainwin->summaryview;
        FolderItem *trash = folder_get_default_trash();
        GSList *msg_list;
 
@@ -1125,10 +1117,9 @@ static PrefsAccount *select_account_from_list(GList *ac_list)
        return account_find_from_id(account_id);
 }
 
-
 /* 
- * \brief return selected messageview text used by composing 
- *       to reply to selected text only
+ * \brief return selected messageview text, when nothing is 
+ *       selected and message was filtered, return complete text
  *
  * \param  pointer to Messageview 
  *
@@ -1136,21 +1127,31 @@ static PrefsAccount *select_account_from_list(GList *ac_list)
  */
 gchar *messageview_get_selection(MessageView *msgview)
 {
+       TextView *textview;
        gchar *text = NULL;
+       GtkEditable *edit = NULL;
+       gint body_pos = 0;
        
        g_return_val_if_fail(msgview != NULL, NULL);
 
-       text = gtkut_editable_get_selection
-               (GTK_EDITABLE(msgview->textview->text));
-       
-       if (!text && msgview->type == MVIEW_MIME
-           && msgview->mimeview->type == MIMEVIEW_TEXT
-           && msgview->mimeview->textview
-           && !msgview->mimeview->textview->default_text) {
-               text = gtkut_editable_get_selection 
-                       (GTK_EDITABLE(msgview->mimeview->textview->text));   
+       textview = messageview_get_current_textview(msgview);
+       if (textview) {
+               edit = GTK_EDITABLE(textview->text);
+               body_pos = textview->body_pos;
+       } else {
+               edit = GTK_EDITABLE(msgview->mimeview->textview->text);
+               body_pos = msgview->mimeview->textview->body_pos;
        }
 
+       g_return_val_if_fail(edit != NULL, NULL);
+
+       if (edit->has_selection)
+               text = gtkut_editable_get_selection(edit);
+       else if (msgview->filtered) 
+               text = gtk_editable_get_chars (edit, body_pos, -1);
+       else
+               text = NULL;
+       
        return text;
 }