Commit Diff


commit - 6216b7e249699bea8074e11fefdb9884a9762ba8
commit + eef80ebe430c6b4f835f0068c03002b2d44e627d
blob - d8f345024fd7f2814423fcd6e417be849fda3c47
blob + acba62c760d7d0f74cd712e6f936f948862e9cd0
--- src/messageview.c
+++ src/messageview.c
@@ -993,9 +993,6 @@ gint messageview_show(MessageView *messageview, MsgInf
 	mimeview_select_mimepart_icon(messageview->mimeview, root);
 done:
 	messageview_set_menu_sensitive(messageview);
-	/* plugins may hook in here to work with the message view */
-	hooks_invoke(MESSAGE_VIEW_SHOW_DONE_HOOKLIST, messageview);
-
 	g_free(file);
 
 	return 0;
blob - 4d5b226ff3349bdc13f52ac334475a0c41f04635
blob + 2ff07965593c99af0ff754d6f64ffd38d960e958
--- src/messageview.h
+++ src/messageview.h
@@ -28,8 +28,6 @@
 #include "procmime.h"
 #include "toolbar.h"
 
-#define MESSAGE_VIEW_SHOW_DONE_HOOKLIST "message_view_show_done_hooklist"
-
 struct _MessageView
 {
 	GtkWidget *vbox;
@@ -84,7 +82,7 @@ typedef struct _MimeInfoSearch MimeInfoSearch;
 MessageView *messageview_create			(MainWindow	*mainwin);
 MessageView *messageview_create_with_new_window	(MainWindow	*mainwin);
 
-void messageview_init				(MessageView	*messageview);
+void messageview_init(MessageView *messageview);
 gint messageview_show				(MessageView	*messageview,
 						 MsgInfo	*msginfo,
 						 gboolean	 all_headers);
blob - bb8a4f7520a1328a62843150357ab6ac44bd66a5
blob + 62b45e079317a09f437b0a56a3b533f22f09ac82
--- src/mimeview.c
+++ src/mimeview.c
@@ -76,13 +76,6 @@ static gint mimeview_button_pressed	(GtkWidget	*widget
 					 GdkEventButton	*event,
 					 MimeView	*mimeview);
 
-static void mimeview_drag_data_get      (GtkWidget	  *widget,
-					 GdkDragContext   *drag_context,
-					 GtkSelectionData *selection_data,
-					 guint		   info,
-					 guint		   time,
-					 MimeView	  *mimeview);
-
 static gboolean mimeview_scrolled	(GtkWidget	*widget,
 					 GdkEventScroll	*event,
 					 MimeView	*mimeview);
@@ -251,7 +244,6 @@ MimeView *mimeview_create(MainWindow *mainwin)
 	gchar *titles[N_MIMEVIEW_COLS];
 	gint cols;
 
-	debug_print("Creating MIME view...\n");
 	mimeview = g_new0(MimeView, 1);
 
 	titles[COL_MIMETYPE] = _("MIME Type");
@@ -302,15 +294,11 @@ MimeView *mimeview_create(MainWindow *mainwin)
 
 	gtk_widget_show(ctree);
 	gtk_container_add(GTK_CONTAINER(scrolledwin), ctree);
-	gtk_drag_source_set(ctree, GDK_BUTTON1_MASK|GDK_BUTTON3_MASK,
-			    mimeview_mime_types, 1, GDK_ACTION_COPY);
 
 	g_signal_connect(G_OBJECT(selection), "changed",
 			 G_CALLBACK(mimeview_selected), mimeview);
 	g_signal_connect(G_OBJECT(ctree), "button_release_event",
 			 G_CALLBACK(mimeview_button_pressed), mimeview);
-	g_signal_connect(G_OBJECT(ctree), "drag_data_get",
-			 G_CALLBACK(mimeview_drag_data_get), mimeview);
 
 	mime_notebook = gtk_notebook_new();
 	gtk_widget_set_name(GTK_WIDGET(mime_notebook), "mime_notebook");
@@ -406,6 +394,7 @@ MimeView *mimeview_create(MainWindow *mainwin)
 
 	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
 	gtk_widget_show(vbox);
+	gtk_box_pack_start(GTK_BOX(vbox), mime_notebook, TRUE, TRUE, 0);
 
 	paned = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
 	gtk_widget_show(paned);
@@ -457,23 +446,16 @@ void mimeview_show_message(MimeView *mimeview, MimeInf
 
 	mimeview_clear(mimeview);
 
-	cm_return_if_fail(file != NULL);
-	cm_return_if_fail(mimeinfo != NULL);
-
 	mimeview->mimeinfo = mimeinfo;
+	mimeview->file = strdup(file);
 
-	mimeview->file = g_strdup(file);
+	g_signal_handlers_block_by_func(G_OBJECT(ctree), mimeview_selected, mimeview);
 
-	g_signal_handlers_block_by_func(G_OBJECT(ctree), mimeview_selected,
-					mimeview);
-
 	mimeview_set_multipart_tree(mimeview, mimeinfo, NULL);
 	gtk_tree_view_expand_all(ctree);
-	icon_list_clear(mimeview);
 	icon_list_create(mimeview, mimeinfo);
 
-	g_signal_handlers_unblock_by_func(G_OBJECT(ctree),
-					  mimeview_selected, mimeview);
+	g_signal_handlers_unblock_by_func(G_OBJECT(ctree), mimeview_selected, mimeview);
 }
 
 static void mimeview_free_mimeinfo(MimeView *mimeview)
@@ -720,25 +702,14 @@ static const gchar *get_part_description(MimeInfo *par
 
 static void mimeview_show_message_part(MimeView *mimeview, MimeInfo *partinfo)
 {
+	if (!partinfo) return;
+
 	FILE *fp;
-	const gchar *fname;
-
-	if (!partinfo) return;
-
-	fname = mimeview->file;
-	if (!fname) return;
-
-	if ((fp = g_fopen(fname, "rb")) == NULL) {
-		FILE_OP_ERROR(fname, "g_fopen");
+	if ((fp = fopen(mimeview->file, "r")) == NULL) {
+		warn("open %s", mimeview->file);
 		return;
 	}
 
-	if (fseek(fp, partinfo->offset, SEEK_SET) < 0) {
-		FILE_OP_ERROR(mimeview->file, "fseek");
-		fclose(fp);
-		return;
-	}
-
 	mimeview_change_view_type(mimeview, MIMEVIEW_TEXT);
 	textview_show_part(mimeview->textview, partinfo, fp);
 
@@ -908,23 +879,6 @@ void mimeview_clear(MimeView *mimeview)
 	mimeview_change_view_type(mimeview, MIMEVIEW_TEXT);
 }
 
-static void redisplay_email(GtkWidget *widget, gpointer user_data)
-{
-	MimeView *mimeview = (MimeView *) user_data;
-	gtk_tree_path_free(mimeview->opened);
-	mimeview->opened = NULL;
-	mimeview_selected(gtk_tree_view_get_selection(
-			GTK_TREE_VIEW(mimeview->ctree)), mimeview);
-}
-
-void mimeview_show_part_as_text(MimeView *mimeview, MimeInfo *partinfo)
-{
-	cm_return_if_fail(mimeview != NULL);
-	cm_return_if_fail(partinfo != NULL);
-
-	mimeview_show_message_part(mimeview, partinfo);
-}
-
 static void mimeview_selected(GtkTreeSelection *selection, MimeView *mimeview)
 {
 	GtkTreeView *ctree = GTK_TREE_VIEW(mimeview->ctree);
@@ -954,7 +908,8 @@ static void mimeview_selected(GtkTreeSelection *select
 	gtk_tree_view_scroll_to_cell(ctree, path, NULL, TRUE, 0.5, 0);
 
 	partinfo = mimeview_get_node_part(mimeview, path);
-	if (!partinfo) return;
+	if (!partinfo)
+		return;
 
 	/* ungrab the mouse event */
 	if (gtk_widget_has_grab(GTK_WIDGET(ctree))) {
@@ -974,7 +929,6 @@ static void mimeview_selected(GtkTreeSelection *select
 		case MIMETYPE_MESSAGE:
 		case MIMETYPE_MULTIPART:
 			mimeview_show_message_part(mimeview, partinfo);
-
 			break;
 		default:
 			mimeview->textview->default_text = TRUE;
@@ -1157,119 +1111,6 @@ skip:
 #define BREAK_ON_MODIFIER_KEY() \
 	if ((event->state & (GDK_MOD1_MASK|GDK_CONTROL_MASK)) != 0) break
 
-static void mimeview_drag_data_get(GtkWidget	    *widget,
-				   GdkDragContext   *drag_context,
-				   GtkSelectionData *selection_data,
-				   guint	     info,
-				   guint	     time,
-				   MimeView	    *mimeview)
-{
-	gchar *filename = NULL, *uriname, *tmp = NULL;
-	MimeInfo *partinfo;
-	gint err;
-	gint count = 0;
-
-	if (!mimeview->opened) return;
-	if (!mimeview->file) return;
-
-	partinfo = mimeview_get_selected_part(mimeview);
-	if (!partinfo) return;
-
-	if (strlen(get_part_name(partinfo)) > 0) {
-		filename = g_path_get_basename(get_part_name(partinfo));
-		if (filename) {
-			if (*filename == '\0') {
-				g_free(filename);
-				return;
-			}
-		}
-	} else if (partinfo->type == MIMETYPE_MESSAGE
-		   && !g_ascii_strcasecmp(partinfo->subtype, "rfc822")) {
-		gchar *name = NULL;
-		GPtrArray *headers = NULL;
-		FILE *fp;
-
-		fp = g_fopen(partinfo->data.filename, "rb");
-		if (fp != NULL && fseek(fp, partinfo->offset, SEEK_SET) == 0) {
-			headers = procheader_get_header_array(fp);
-			if (headers) {
-				gint i;
-				for (i = 0; i < headers->len; i++) {
-					Header *header = g_ptr_array_index(headers, i);
-					if (procheader_headername_equal(header->name, "Subject")) {
-						unfold_line(header->body);
-						name = g_strconcat(header->body, ".txt", NULL);
-						subst_for_filename(name);
-					}
-				}
-				procheader_header_array_destroy(headers);
-			}
-		}
-		if (fp != NULL)
-			fclose(fp);
-		if (name)
-			filename = g_path_get_basename(name);
-		g_free(name);
-	}
-	if (filename == NULL)
-		filename = g_path_get_basename("Unnamed part");
-
-	if (!g_utf8_validate(filename, -1, NULL))
-		tmp = conv_codeset_strdup(filename,
-				conv_get_locale_charset_str(),
-				CS_UTF_8);
-
-	if (tmp == NULL) {
-		g_warning("filename not in UTF-8");
-		tmp = g_strdup(filename);
-	}
-	g_free(filename);
-	filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S,
-			       tmp, NULL);
-
-check_new_file:
-	if (is_file_exist(filename)) {
-		gchar *ext = NULL;
-		gchar *prefix = NULL;
-		gchar *new_name = NULL;
-		if (strrchr(tmp, '.')) {
-			prefix = g_strdup(tmp);
-			ext = g_strdup(strrchr(tmp, '.'));
-			*(strrchr(prefix, '.')) = '\0';
-		} else {
-			prefix = g_strdup(tmp);
-			ext = g_strdup("");
-		}
-		count++;
-		new_name = g_strdup_printf("%s.%d%s", prefix, count, ext);
-		g_free(prefix);
-		g_free(ext);
-		g_free(filename);
-		filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S,
-			       new_name, NULL);
-		g_free(new_name);
-		goto check_new_file;
-	}
-
-	g_free(tmp);
-
-	if ((err = procmime_get_part(filename, partinfo)) < 0)
-		alertpanel_error
-			(_("Couldn't save the part of multipart message: %s"),
-				g_strerror(-err));
-
-	tmp = g_filename_to_uri(filename, NULL, NULL);
-	uriname = g_strconcat(tmp, "\r\n", NULL);
-	g_free(tmp);
-
-	gtk_selection_data_set(selection_data,
-                   gtk_selection_data_get_target(selection_data), 8,
-			       (guchar *)uriname, strlen(uriname));
-
-	g_free(uriname);
-	g_free(filename);
-}
-
 /**
  * Returns a filename (with path) for an attachment
  * \param partinfo The attachment to save
@@ -2017,8 +1858,6 @@ static void icon_list_append_icon (MimeView *mimeview,
 	gtk_widget_set_tooltip_markup(button, tip);
 	g_free(tip);
 	gtk_widget_show_all(button);
-	gtk_drag_source_set(button, GDK_BUTTON1_MASK|GDK_BUTTON3_MASK,
-			    mimeview_mime_types, 1, GDK_ACTION_COPY);
 
 	g_signal_connect(G_OBJECT(button), "popup-menu",
 			 G_CALLBACK(icon_popup_menu), mimeview);
@@ -2026,8 +1865,6 @@ static void icon_list_append_icon (MimeView *mimeview,
 			 G_CALLBACK(icon_clicked_cb), mimeview);
 	g_signal_connect(G_OBJECT(button), "key_press_event",
 			 G_CALLBACK(icon_key_pressed), mimeview);
-	g_signal_connect(G_OBJECT(button), "drag_data_get",
-			 G_CALLBACK(mimeview_drag_data_get), mimeview);
 	gtk_container_add(GTK_CONTAINER(grid), button);
 }
 
@@ -2075,10 +1912,7 @@ static void icon_scroll_size_allocate_cb(GtkWidget *wi
 
 static void icon_list_create(MimeView *mimeview, MimeInfo *mimeinfo)
 {
-	gint min_width, width;
-
-	cm_return_if_fail(mimeinfo != NULL);
-
+	icon_list_clear(mimeview);
 	while (mimeinfo != NULL) {
 		if (mimeinfo->type != MIMETYPE_MULTIPART)
 			icon_list_append_icon(mimeview, mimeinfo);
@@ -2089,6 +1923,8 @@ static void icon_list_create(MimeView *mimeview, MimeI
 			 ? (MimeInfo *) mimeinfo->node->next->data
 			 : NULL;
 	}
+
+	gint min_width, width;
 	gtk_widget_get_preferred_width(mimeview->icon_mainbox, &min_width, &width);
 	if (min_width < width) {
 		gtk_widget_set_size_request(mimeview->icon_mainbox,
@@ -2169,7 +2005,6 @@ static gint mime_toggle_button_cb(GtkWidget *button, G
 void mimeview_update (MimeView *mimeview)
 {
 	if (mimeview && mimeview->mimeinfo) {
-		icon_list_clear(mimeview);
 		icon_list_create(mimeview, mimeview->mimeinfo);
 	}
 }
blob - d40b340e19bbd25e1bccce465a77aad292d47664
blob + 875ee32cd3bcdf17b021f5b9508e4a0857b693d3
--- src/mimeview.h
+++ src/mimeview.h
@@ -120,8 +120,6 @@ void mimeview_show_message	(MimeView	*mimeview,
 				 const gchar	*file);
 gboolean mimeview_show_part	(MimeView 	*mimeview,
 				 MimeInfo 	*partinfo);
-void mimeview_show_part_as_text (MimeView *mimeview,
-				 MimeInfo *partinfo);
 void mimeview_destroy		(MimeView	*mimeview);
 void mimeview_update		(MimeView 	*mimeview);
 void mimeview_clear		(MimeView	*mimeview);
blob - 701ad99e21e797b69271e888ad4526f641ead88f
blob + 918dfee20af7550444b760ad983680c6db7a4d9c
--- src/textview.c
+++ src/textview.c
@@ -502,9 +502,6 @@ void textview_reflect_prefs(TextView *textview)
 
 void textview_show_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp)
 {
-	cm_return_if_fail(mimeinfo != NULL);
-	cm_return_if_fail(fp != NULL);
-
 	textview->loading = TRUE;
 	textview->stop_loading = FALSE;
 
@@ -516,41 +513,32 @@ void textview_show_part(TextView *textview, MimeInfo *
 	} else {
 		if (fseek(fp, mimeinfo->offset, SEEK_SET) < 0)
 			perror("fseek");
-
 		textview_write_body(textview, mimeinfo);
 	}
 
 	textview->loading = FALSE;
 	textview->stop_loading = FALSE;
 	textview_set_position(textview, 0);
-
 }
 
 static void textview_add_part(TextView *textview, MimeInfo *mimeinfo)
 {
-	GtkTextView *text;
-	GtkTextBuffer *buffer;
-	GtkTextIter iter;
+	if (textview->stop_loading)
+		return;
+	if (mimeinfo->type == MIMETYPE_MULTIPART)
+		return;
+
 	gchar buf[BUFFSIZE];
 	GPtrArray *headers = NULL;
 	const gchar *name;
 	gchar *content_type;
-	gint charcount;
 
-
-	cm_return_if_fail(mimeinfo != NULL);
-	text = GTK_TEXT_VIEW(textview->text);
-	buffer = gtk_text_view_get_buffer(text);
-	charcount = gtk_text_buffer_get_char_count(buffer);
+	GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+	GtkTextBuffer *buffer = gtk_text_view_get_buffer(text);
+	int charcount = gtk_text_buffer_get_char_count(buffer);
+	GtkTextIter iter;
 	gtk_text_buffer_get_end_iter(buffer, &iter);
 
-	if (textview->stop_loading) {
-		return;
-	}
-	if (mimeinfo->type == MIMETYPE_MULTIPART) {
-		return;
-	}
-
 	textview->prev_quote_level = -1;
 
 	if ((mimeinfo->type == MIMETYPE_MESSAGE) && !g_ascii_strcasecmp(mimeinfo->subtype, "rfc822")) {
@@ -619,79 +607,53 @@ static void textview_add_part(TextView *textview, Mime
 
 static void recursive_add_parts(TextView *textview, GNode *node)
 {
-        GNode * iter;
-	MimeInfo *mimeinfo;
+	MimeInfo *mimeinfo = (MimeInfo *) node->data;
+	textview_add_part(textview, mimeinfo);
+	if (mimeinfo->type != MIMETYPE_MULTIPART && mimeinfo->type != MIMETYPE_MESSAGE) {
+		return;
+	}
 
-        mimeinfo = (MimeInfo *) node->data;
+	GNode *iter;
+	if (g_ascii_strcasecmp(mimeinfo->subtype, "alternative") != 0) {
+		for (iter = g_node_first_child(node); iter != NULL; iter = g_node_next_sibling(iter)) {
+			recursive_add_parts(textview, iter);
+		}
+		return;
+	}
 
-        textview_add_part(textview, mimeinfo);
-        if ((mimeinfo->type != MIMETYPE_MULTIPART) &&
-            (mimeinfo->type != MIMETYPE_MESSAGE)) {
-                return;
-        }
-        if (g_ascii_strcasecmp(mimeinfo->subtype, "alternative") == 0) {
-                GNode * preferred_body;
-                int preferred_score;
+	GNode *preferred_body = NULL;
+	int preferred_score = 0;
+	for (iter = g_node_first_child(node); iter != NULL; iter = g_node_next_sibling(iter)) {
+		int score = 1;
+		MimeInfo *submime = (MimeInfo *) iter->data;
+		if (submime->type == MIMETYPE_TEXT)
+			score++;
+		if (submime->subtype != NULL) {
+			if (g_ascii_strcasecmp(submime->subtype, "plain") == 0)
+				score++;
+		}
+		if (score > preferred_score) {
+			preferred_score = score;
+			preferred_body = iter;
+		}
+	}
 
-                /*
-                  text/plain : score 3
-                  text/ *    : score 2
-                  other      : score 1
-                */
-                preferred_body = NULL;
-                preferred_score = 0;
-
-                for (iter = g_node_first_child(node) ; iter != NULL ;
-                     iter = g_node_next_sibling(iter)) {
-                        int score;
-                        MimeInfo * submime;
-
-                        score = 1;
-                        submime = (MimeInfo *) iter->data;
-                        if (submime->type == MIMETYPE_TEXT)
-                                score = 2;
-
-                        if (submime->subtype != NULL) {
-                                if (g_ascii_strcasecmp(submime->subtype, "plain") == 0)
-                                        score = 3;
-                        }
-
-                        if (score > preferred_score) {
-                                preferred_score = score;
-                                preferred_body = iter;
-                        }
-                }
-
-                if (preferred_body != NULL) {
-                        recursive_add_parts(textview, preferred_body);
-                }
-        }
-        else {
-                for (iter = g_node_first_child(node) ; iter != NULL ;
-                     iter = g_node_next_sibling(iter)) {
-                        recursive_add_parts(textview, iter);
-                }
-        }
+	if (preferred_body != NULL)
+		recursive_add_parts(textview, preferred_body);
 }
 
 static void textview_add_parts(TextView *textview, MimeInfo *mimeinfo)
 {
-	cm_return_if_fail(mimeinfo != NULL);
-	cm_return_if_fail(mimeinfo->node != NULL);
-
 	recursive_add_parts(textview, mimeinfo->node);
 }
 
 void textview_show_error(TextView *textview)
 {
-	GtkTextView *text;
-	GtkTextBuffer *buffer;
-	GtkTextIter iter;
-
 	textview_clear(textview);
 
-	text = GTK_TEXT_VIEW(textview->text);
-	buffer = gtk_text_view_get_buffer(text);
+	GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+	GtkTextBuffer *buffer = gtk_text_view_get_buffer(text);
+	GtkTextIter iter;
 	gtk_text_buffer_get_start_iter(buffer, &iter);
 
 	TEXTVIEW_INSERT(_("\n"
@@ -706,14 +668,11 @@ void textview_show_error(TextView *textview)
 
 void textview_show_info(TextView *textview, const gchar *info_str)
 {
-	GtkTextView *text;
-	GtkTextBuffer *buffer;
-	GtkTextIter iter;
-
 	textview_clear(textview);
 
-	text = GTK_TEXT_VIEW(textview->text);
-	buffer = gtk_text_view_get_buffer(text);
+	GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+	GtkTextBuffer *buffer = gtk_text_view_get_buffer(text);
+	GtkTextIter iter;
 	gtk_text_buffer_get_start_iter(buffer, &iter);
 
 	TEXTVIEW_INSERT(info_str);
@@ -723,16 +682,10 @@ void textview_show_info(TextView *textview, const gcha
 
 void textview_show_mime_part(TextView *textview, MimeInfo *partinfo)
 {
-	GtkTextView *text;
-	GtkTextBuffer *buffer;
-	GtkTextIter iter;
-	const gchar *name;
-	gchar *content_type;
+	if (!partinfo)
+		return;
+
 	GtkUIManager *ui_manager;
-	gchar *shortcut;
-
-	if (!partinfo) return;
-
 	if (textview->messageview->window != NULL)
 		ui_manager = textview->messageview->ui_manager;
 	else
@@ -740,17 +693,18 @@ void textview_show_mime_part(TextView *textview, MimeI
 
 	textview_clear(textview);
 
-	text = GTK_TEXT_VIEW(textview->text);
-	buffer = gtk_text_view_get_buffer(text);
+	GtkTextView *text = GTK_TEXT_VIEW(textview->text);
+	GtkTextBuffer *buffer = gtk_text_view_get_buffer(text);
+	GtkTextIter iter;
 	gtk_text_buffer_get_start_iter(buffer, &iter);
 
 	TEXTVIEW_INSERT("\n");
 
-	name = procmime_mimeinfo_get_parameter(partinfo, "filename");
+	const char *name = procmime_mimeinfo_get_parameter(partinfo, "filename");
 	if (name == NULL)
 		name = procmime_mimeinfo_get_parameter(partinfo, "name");
 	if (name != NULL) {
-		content_type = procmime_get_content_type_str(partinfo->type,
+		char *content_type = procmime_get_content_type_str(partinfo->type,
 						     partinfo->subtype);
 		TEXTVIEW_INSERT("  ");
 		TEXTVIEW_INSERT_BOLD(name);
@@ -759,8 +713,7 @@ void textview_show_mime_part(TextView *textview, MimeI
 		TEXTVIEW_INSERT(", ");
 		TEXTVIEW_INSERT(to_human_readable((goffset)partinfo->length));
 		TEXTVIEW_INSERT("):\n\n");
-
-		g_free(content_type);
+		free(content_type);
 	}
 	TEXTVIEW_INSERT(_("  The following can be performed on this part\n"));
 	TEXTVIEW_INSERT(_("  by right-clicking the icon or list item:"));
@@ -768,40 +721,18 @@ void textview_show_mime_part(TextView *textview, MimeI
 
 	TEXTVIEW_INSERT(_("     - To save, select "));
 	TEXTVIEW_INSERT_LINK(_("'Save as...'"), "cm://save_as", NULL);
-	TEXTVIEW_INSERT(_(" (Shortcut key: '"));
-	shortcut = cm_menu_item_get_shortcut(ui_manager, "Menu/File/SavePartAs");
-	TEXTVIEW_INSERT(shortcut);
-	g_free(shortcut);
-	TEXTVIEW_INSERT(_("')"));
 	TEXTVIEW_INSERT("\n");
 
 	TEXTVIEW_INSERT(_("     - To display as text, select "));
 	TEXTVIEW_INSERT_LINK(_("'Display as text'"), "cm://display_as_text", NULL);
 
-	TEXTVIEW_INSERT(_(" (Shortcut key: '"));
-	shortcut = cm_menu_item_get_shortcut(ui_manager, "Menu/View/Part/AsText");
-	TEXTVIEW_INSERT(shortcut);
-	g_free(shortcut);
-	TEXTVIEW_INSERT(_("')"));
-	TEXTVIEW_INSERT("\n");
-
 	TEXTVIEW_INSERT(_("     - To open with an external program, select "));
 	TEXTVIEW_INSERT_LINK(_("'Open'"), "cm://open", NULL);
-
-	TEXTVIEW_INSERT(_(" (Shortcut key: '"));
-	shortcut = cm_menu_item_get_shortcut(ui_manager, "Menu/View/Part/Open");
-	TEXTVIEW_INSERT(shortcut);
-	g_free(shortcut);
 	TEXTVIEW_INSERT(_("')\n"));
 	TEXTVIEW_INSERT(_("       (alternately double-click, or click the middle "));
 	TEXTVIEW_INSERT(_("mouse button)\n"));
 	TEXTVIEW_INSERT(_("     - Or use "));
 	TEXTVIEW_INSERT_LINK(_("'Open with...'"), "cm://open_with", NULL);
-	TEXTVIEW_INSERT(_(" (Shortcut key: '"));
-	shortcut = cm_menu_item_get_shortcut(ui_manager, "Menu/View/Part/OpenWith");
-	TEXTVIEW_INSERT(shortcut);
-	g_free(shortcut);
-	TEXTVIEW_INSERT(_("')"));
 	TEXTVIEW_INSERT("\n");
 
 	textview_show_icon(textview, "dialog-information");
@@ -864,69 +795,7 @@ static void textview_write_body(TextView *textview, Mi
 			unlink(filename);
 		}
 		g_free(filename);
-	} else if ( g_ascii_strcasecmp(mimeinfo->subtype, "plain") &&
-		   (cmd = prefs_common.mime_textviewer) && *cmd &&
-		   (p = strchr(cmd, '%')) && *(p + 1) == 's') {
-		int pid, pfd[2];
-		const gchar *fname;
-
-		fname  = procmime_get_tmp_file_name(mimeinfo);
-		if (procmime_get_part(fname, mimeinfo)) goto textview_default;
-
-		g_snprintf(buf, sizeof(buf), cmd, fname);
-		debug_print("Viewing text content of type: %s (length: %ld) "
-			"using %s\n", mimeinfo->subtype, mimeinfo->length, buf);
-
-		if (pipe(pfd) < 0) {
-			g_snprintf(buf, sizeof(buf),
-				"pipe failed for textview\n\n%s\n", g_strerror(errno));
-			textview_write_line(textview, buf, conv, TRUE);
-			goto textview_default;
-		}
-		pid = fork();
-		if (pid < 0) {
-			g_snprintf(buf, sizeof(buf),
-				"fork failed for textview\n\n%s\n", g_strerror(errno));
-			textview_write_line(textview, buf, conv, TRUE);
-			close(pfd[0]);
-			close(pfd[1]);
-			goto textview_default;
-		}
-		if (pid == 0) { /* child */
-			int rc;
-			gchar **argv;
-			argv = strsplit_with_quote(buf, " ", 0);
-			close(1);
-			close(pfd[0]);
-			rc = dup(pfd[1]);
-			rc = execvp(argv[0], argv);
-			perror("execvp");
-			close(pfd[1]);
-			g_print(_("The command to view attachment "
-			        "as text failed:\n"
-			        "    %s\n"
-			        "Exit code %d\n"), buf, rc);
-			exit(255);
-		}
-		close(pfd[1]);
-		tmpfp = fdopen(pfd[0], "rb");
-		while (fgets(buf, sizeof(buf), tmpfp)) {
-			textview_write_line(textview, buf, conv, TRUE);
-
-			if (textview->stop_loading) {
-				fclose(tmpfp);
-				waitpid(pid, pfd, 0);
-				g_unlink(fname);
-				conv_code_converter_destroy(conv);
-				return;
-			}
-		}
-
-		fclose(tmpfp);
-		waitpid(pid, pfd, 0);
-		g_unlink(fname);
 	} else {
-textview_default:
 		if (!g_ascii_strcasecmp(mimeinfo->subtype, "x-patch")
 				|| !g_ascii_strcasecmp(mimeinfo->subtype, "x-diff"))
 			textview->is_diff = TRUE;
@@ -1686,8 +1555,6 @@ void textview_show_icon(TextView *textview, const gcha
 		GTK_TEXT_WINDOW_TEXT, wx, wy);
 
 	gtk_widget_show_all(textview->text);
-
-
 	return;
 }
 
@@ -1724,20 +1591,10 @@ static void textview_show_header(TextView *textview, G
 		if (procheader_headername_equal(header->name, "Date") &&
 		    prefs_common.msgview_date_format) {
 			gchar hbody[80];
-
 			procheader_date_parse(hbody, header->body, sizeof(hbody));
 			gtk_text_buffer_get_end_iter (buffer, &iter);
 			gtk_text_buffer_insert_with_tags_by_name
 				(buffer, &iter, hbody, -1, "header", NULL);
-		} else if ((procheader_headername_equal(header->name, "X-Mailer") ||
-				procheader_headername_equal(header->name,
-						 "X-Newsreader")) &&
-				(strstr(header->body, "Claws Mail") != NULL ||
-				strstr(header->body, "Sylpheed-Claws") != NULL)) {
-			gtk_text_buffer_get_end_iter (buffer, &iter);
-			gtk_text_buffer_insert_with_tags_by_name
-				(buffer, &iter, header->body, -1,
-				 "header", "emphasis", NULL);
 		} else {
 			gboolean hdr =
 			  procheader_headername_equal(header->name, "From") ||