aboutsummaryrefslogtreecommitdiff
path: root/src/messageview.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2006-12-07 04:01:38 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2006-12-07 04:01:38 +0000
commitb4741da89216ec4b07e3561bbebe0f28133c3068 (patch)
tree2a60aa6d2d8325cb39cd804f8eb505c6730bc318 /src/messageview.c
parent2515f7f6cf2eeb78ac384c69001cd1be1e45a659 (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/messageview.c')
-rw-r--r--src/messageview.c54
1 files changed, 51 insertions, 3 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);