diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2006-12-07 04:01:38 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2006-12-07 04:01:38 +0000 |
commit | b4741da89216ec4b07e3561bbebe0f28133c3068 (patch) | |
tree | 2a60aa6d2d8325cb39cd804f8eb505c6730bc318 /src | |
parent | 2515f7f6cf2eeb78ac384c69001cd1be1e45a659 (diff) |
give the priority to the separated message view's encoding setting on display and on reply.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@1399 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src')
-rw-r--r-- | src/messageview.c | 54 | ||||
-rw-r--r-- | src/textview.c | 54 |
2 files changed, 77 insertions, 31 deletions
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); |