aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--ChangeLog.ja6
-rw-r--r--src/messageview.c54
-rw-r--r--src/textview.c54
4 files changed, 89 insertions, 31 deletions
diff --git a/ChangeLog b/ChangeLog
index 812b79b2..a1e193ad 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-12-07
+
+ * src/messageview.c
+ src/textview.c: give the priority to the separated message view's
+ encoding setting on display and on reply.
+
2006-12-06
* src/printing.c: layout_set_headers(): fixed a memory leak.
diff --git a/ChangeLog.ja b/ChangeLog.ja
index 07171ce6..5138d45b 100644
--- a/ChangeLog.ja
+++ b/ChangeLog.ja
@@ -1,3 +1,9 @@
+2006-12-07
+
+ * src/messageview.c
+ src/textview.c: 別ウィンドウのメッセージビューのエンコーディング
+ の設定を表示と返信のときに優先させるようにした。
+
2006-12-06
* src/printing.c: layout_set_headers(): メモリリークを修正。
diff --git a/src/messageview.c b/src/messageview.c
index 1b436a71..3e707005 100644
--- a/src/messageview.c
+++ b/src/messageview.c
@@ -70,6 +70,9 @@ static void messageview_change_view_type(MessageView *messageview,
MessageType type);
static void messageview_set_menu_state (MessageView *messageview);
+static void messageview_set_encoding_menu
+ (MessageView *messageview);
+
static gint messageview_delete_cb (GtkWidget *widget,
GdkEventAny *event,
MessageView *messageview);
@@ -427,8 +430,6 @@ MessageView *messageview_create_with_new_window(void)
msgview->statusbar_cid = gtk_statusbar_get_context_id
(GTK_STATUSBAR(statusbar), "Message View");
- gtk_widget_show_all(window);
-
msgview->new_window = TRUE;
msgview->window = window;
msgview->window_vbox = window_vbox;
@@ -437,8 +438,12 @@ MessageView *messageview_create_with_new_window(void)
msgview->menu_locked = FALSE;
msgview->visible = TRUE;
+ gtk_widget_show_all(window);
+
messageview_init(msgview);
+ messageview_set_encoding_menu(msgview);
+
ifactory = gtk_item_factory_from_widget(menubar);
#ifndef G_OS_WIN32
action_update_msgview_menu(ifactory, msgview);
@@ -561,6 +566,41 @@ static void messageview_set_menu_state(MessageView *messageview)
messageview->menu_locked = FALSE;
}
+static void messageview_set_encoding_menu(MessageView *messageview)
+{
+ GtkItemFactoryEntry *entry;
+ GtkItemFactory *ifactory;
+ CharSet encoding;
+ gchar *path, *p, *q;
+ GtkWidget *item;
+
+ encoding = conv_get_charset_from_str(prefs_common.force_charset);
+ ifactory = gtk_item_factory_from_widget(messageview->menubar);
+
+ for (entry = msgview_entries; entry->callback != view_source_cb;
+ entry++) {
+ if (entry->callback == set_charset_cb &&
+ (CharSet)entry->callback_action == encoding) {
+ p = q = path = g_strdup(entry->path);
+ while (*p) {
+ if (*p == '_') {
+ if (p[1] == '_') {
+ p++;
+ *q++ = '_';
+ }
+ } else
+ *q++ = *p;
+ p++;
+ }
+ *q = '\0';
+ item = gtk_item_factory_get_item(ifactory, path);
+ gtk_widget_activate(item);
+ g_free(path);
+ break;
+ }
+ }
+}
+
void messageview_clear(MessageView *messageview)
{
procmsg_msginfo_free(messageview->msginfo);
@@ -794,7 +834,9 @@ static void set_charset_cb(gpointer data, guint action, GtkWidget *widget)
charset = conv_get_charset_str((CharSet)action);
g_free(messageview->forced_charset);
messageview->forced_charset = g_strdup(charset);
- messageview_show(messageview, messageview->msginfo, FALSE);
+ if (messageview->msginfo)
+ messageview_show(messageview, messageview->msginfo,
+ FALSE);
}
}
@@ -852,6 +894,7 @@ static void reply_cb(gpointer data, guint action, GtkWidget *widget)
MsgInfo *msginfo;
gchar *text = NULL;
ComposeMode mode = (ComposeMode)action;
+ gchar *prev_force_charset;
msginfo = messageview->msginfo;
mlist = g_slist_append(NULL, msginfo);
@@ -867,6 +910,9 @@ static void reply_cb(gpointer data, guint action, GtkWidget *widget)
mode |= prefs_common.reply_with_quote
? COMPOSE_WITH_QUOTE : COMPOSE_WITHOUT_QUOTE;
+ prev_force_charset = prefs_common.force_charset;
+ prefs_common.force_charset = messageview->forced_charset;
+
switch (COMPOSE_MODE(mode)) {
case COMPOSE_REPLY:
case COMPOSE_REPLY_TO_SENDER:
@@ -888,6 +934,8 @@ static void reply_cb(gpointer data, guint action, GtkWidget *widget)
mode);
}
+ prefs_common.force_charset = prev_force_charset;
+
/* summary_set_marks_selected(summaryview); */
g_free(text);
g_slist_free(mlist);
diff --git a/src/textview.c b/src/textview.c
index 6ba4a262..d6b2e269 100644
--- a/src/textview.c
+++ b/src/textview.c
@@ -437,6 +437,26 @@ void textview_reflect_prefs(TextView *textview)
prefs_common.textview_cursor_visible);
}
+static const gchar *textview_get_src_encoding(TextView *textview,
+ MimeInfo *mimeinfo)
+{
+ const gchar *charset;
+
+ if (textview->messageview->forced_charset)
+ charset = textview->messageview->forced_charset;
+ else if (!textview->messageview->new_window &&
+ prefs_common.force_charset)
+ charset = prefs_common.force_charset;
+ else if (mimeinfo->charset)
+ charset = mimeinfo->charset;
+ else if (prefs_common.default_encoding)
+ charset = prefs_common.default_encoding;
+ else
+ charset = NULL;
+
+ return charset;
+}
+
void textview_show_message(TextView *textview, MimeInfo *mimeinfo,
const gchar *file)
{
@@ -445,7 +465,7 @@ void textview_show_message(TextView *textview, MimeInfo *mimeinfo,
GtkTextMark *mark;
GtkTextIter iter;
FILE *fp;
- const gchar *charset = NULL;
+ const gchar *charset;
GPtrArray *headers = NULL;
buffer = gtk_text_view_get_buffer(text);
@@ -455,15 +475,7 @@ void textview_show_message(TextView *textview, MimeInfo *mimeinfo,
return;
}
- if (textview->messageview->forced_charset)
- charset = textview->messageview->forced_charset;
- else if (prefs_common.force_charset)
- charset = prefs_common.force_charset;
- else if (mimeinfo->charset)
- charset = mimeinfo->charset;
- else if (prefs_common.default_encoding)
- charset = prefs_common.default_encoding;
-
+ charset = textview_get_src_encoding(textview, mimeinfo);
textview_set_font(textview, charset);
textview_clear(textview);
@@ -496,7 +508,7 @@ void textview_show_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp)
gchar buf[BUFFSIZE];
const gchar *boundary = NULL;
gint boundary_len = 0;
- const gchar *charset = NULL;
+ const gchar *charset;
GPtrArray *headers = NULL;
gboolean is_rfc822_part = FALSE;
GtkTextView *text = GTK_TEXT_VIEW(textview->text);
@@ -518,14 +530,7 @@ void textview_show_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp)
boundary_len = strlen(boundary);
}
- if (textview->messageview->forced_charset)
- charset = textview->messageview->forced_charset;
- else if (prefs_common.force_charset)
- charset = prefs_common.force_charset;
- else if (mimeinfo->charset)
- charset = mimeinfo->charset;
- else if (prefs_common.default_encoding)
- charset = prefs_common.default_encoding;
+ charset = textview_get_src_encoding(textview, mimeinfo);
if (!boundary && mimeinfo->mime_type == MIME_TEXT) {
if (fseek(fp, mimeinfo->fpos, SEEK_SET) < 0)
@@ -605,7 +610,7 @@ static void textview_add_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp)
gchar buf[BUFFSIZE];
const gchar *boundary = NULL;
gint boundary_len = 0;
- const gchar *charset = NULL;
+ const gchar *charset;
GPtrArray *headers = NULL;
g_return_if_fail(mimeinfo != NULL);
@@ -629,14 +634,7 @@ static void textview_add_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp)
while (fgets(buf, sizeof(buf), fp) != NULL)
if (buf[0] == '\r' || buf[0] == '\n') break;
- if (textview->messageview->forced_charset)
- charset = textview->messageview->forced_charset;
- else if (prefs_common.force_charset)
- charset = prefs_common.force_charset;
- else if (mimeinfo->charset)
- charset = mimeinfo->charset;
- else if (prefs_common.default_encoding)
- charset = prefs_common.default_encoding;
+ charset = textview_get_src_encoding(textview, mimeinfo);
if (mimeinfo->mime_type == MIME_MESSAGE_RFC822) {
headers = textview_scan_header(textview, fp, charset);