evolution r36950 - in branches/kill-bonobo: composer e-util mail shell ui widgets/misc



Author: mbarnes
Date: Wed Dec 31 20:24:59 2008
New Revision: 36950
URL: http://svn.gnome.org/viewvc/evolution?rev=36950&view=rev

Log:
Get the Character Encoding menu working.
Kill e_charset_picker_bonobo_ui_populate().


Modified:
   branches/kill-bonobo/composer/e-composer-actions.c
   branches/kill-bonobo/composer/e-composer-post-header.c
   branches/kill-bonobo/composer/e-composer-private.c
   branches/kill-bonobo/composer/e-composer-private.h
   branches/kill-bonobo/composer/e-msg-composer.c
   branches/kill-bonobo/e-util/e-util.c
   branches/kill-bonobo/e-util/e-util.h
   branches/kill-bonobo/mail/e-mail-browser.c
   branches/kill-bonobo/mail/e-mail-browser.h
   branches/kill-bonobo/mail/e-mail-reader.c
   branches/kill-bonobo/mail/e-mail-reader.h
   branches/kill-bonobo/mail/e-mail-shell-content.c
   branches/kill-bonobo/mail/e-mail-shell-view-actions.c
   branches/kill-bonobo/mail/e-mail-shell-view-private.h
   branches/kill-bonobo/mail/e-mail-shell-view.c
   branches/kill-bonobo/mail/em-folder-view.c
   branches/kill-bonobo/mail/evolution-mail.schemas.in
   branches/kill-bonobo/shell/e-shell-window-actions.c
   branches/kill-bonobo/ui/evolution-mail-reader.ui
   branches/kill-bonobo/ui/evolution-mail.ui
   branches/kill-bonobo/widgets/misc/e-charset-picker.c
   branches/kill-bonobo/widgets/misc/e-charset-picker.h

Modified: branches/kill-bonobo/composer/e-composer-actions.c
==============================================================================
--- branches/kill-bonobo/composer/e-composer-actions.c	(original)
+++ branches/kill-bonobo/composer/e-composer-actions.c	Wed Dec 31 20:24:59 2008
@@ -106,7 +106,7 @@
 	if (action != current)
 		return;
 
-	charset = gtk_action_get_name (GTK_ACTION (current));
+	charset = g_object_get_data (G_OBJECT (action), "charset");
 
 	g_free (composer->priv->charset);
 	composer->priv->charset = g_strdup (charset);
@@ -686,7 +686,7 @@
 	gtk_action_group_set_translation_domain (
 		action_group, GETTEXT_PACKAGE);
 	e_charset_add_radio_actions (
-		action_group, composer->priv->charset,
+		action_group, "charset-", composer->priv->charset,
 		G_CALLBACK (action_charset_cb), composer);
 	gtk_ui_manager_insert_action_group (manager, action_group, 0);
 

Modified: branches/kill-bonobo/composer/e-composer-post-header.c
==============================================================================
--- branches/kill-bonobo/composer/e-composer-post-header.c	(original)
+++ branches/kill-bonobo/composer/e-composer-post-header.c	Wed Dec 31 20:24:59 2008
@@ -393,12 +393,16 @@
                                               EMFolderTreeModel *model)
 {
 	g_return_if_fail (E_IS_COMPOSER_POST_HEADER (header));
-	g_return_if_fail (EM_IS_FOLDER_TREE_MODEL (model));
+
+	if (model != NULL) {
+		g_return_if_fail (EM_IS_FOLDER_TREE_MODEL (model));
+		g_object_ref (model);
+	}
 
 	if (header->priv->model != NULL)
 		g_object_unref (header->priv->model);
 
-	header->priv->model = g_object_ref (model);
+	header->priv->model = model;
 
 	g_object_notify (G_OBJECT (header), "folder-tree-model");
 }

Modified: branches/kill-bonobo/composer/e-composer-private.c
==============================================================================
--- branches/kill-bonobo/composer/e-composer-private.c	(original)
+++ branches/kill-bonobo/composer/e-composer-private.c	Wed Dec 31 20:24:59 2008
@@ -29,10 +29,12 @@
 	guint merge_id;
 
 	manager = gtkhtml_editor_get_ui_manager (GTKHTML_EDITOR (composer));
-	list = gtk_action_group_list_actions (composer->priv->charset_actions);
 	path = "/main-menu/edit-menu/pre-spell-check/charset-menu";
 	merge_id = gtk_ui_manager_new_merge_id (manager);
 
+	list = gtk_action_group_list_actions (composer->priv->charset_actions);
+	list = g_list_sort (list, (GCompareFunc) e_action_compare_by_label);
+
 	while (list != NULL) {
 		GtkAction *action = list->data;
 

Modified: branches/kill-bonobo/composer/e-composer-private.h
==============================================================================
--- branches/kill-bonobo/composer/e-composer-private.h	(original)
+++ branches/kill-bonobo/composer/e-composer-private.h	Wed Dec 31 20:24:59 2008
@@ -30,6 +30,7 @@
 #include "e-composer-autosave.h"
 #include "e-composer-header-table.h"
 #include "e-util/e-binding.h"
+#include "e-util/e-util.h"
 #include "e-util/gconf-bridge.h"
 
 #define E_MSG_COMPOSER_GET_PRIVATE(obj) \

Modified: branches/kill-bonobo/composer/e-msg-composer.c
==============================================================================
--- branches/kill-bonobo/composer/e-msg-composer.c	(original)
+++ branches/kill-bonobo/composer/e-msg-composer.c	Wed Dec 31 20:24:59 2008
@@ -66,7 +66,6 @@
 #include "e-util/e-error.h"
 #include "e-util/e-plugin-ui.h"
 #include "e-util/e-util-private.h"
-#include "e-util/e-util.h"
 #include "e-signature-combo-box.h"
 #include "shell/e-shell.h"
 

Modified: branches/kill-bonobo/e-util/e-util.c
==============================================================================
--- branches/kill-bonobo/e-util/e-util.c	(original)
+++ branches/kill-bonobo/e-util/e-util.c	Wed Dec 31 20:24:59 2008
@@ -164,6 +164,41 @@
 }
 
 /**
+ * e_action_compare_by_label:
+ * @action1: a #GtkAction
+ * @action2: a #GtkAction
+ *
+ * Compares the labels for @action1 and @action2 using g_utf8_collate().
+ *
+ * Returns: < 0 if @action1 compares before @action2, 0 if they
+ *          compare equal, > 0 if @action1 compares after @action2
+ **/
+gint
+e_action_compare_by_label (GtkAction *action1,
+                           GtkAction *action2)
+{
+	gchar *label1;
+	gchar *label2;
+	gint result;
+
+	/* XXX This is horribly inefficient but will generally only be
+	 *     used on short lists of actions during UI construction. */
+
+	if (action1 == action2)
+		return 0;
+
+	g_object_get (action1, "label", &label1, NULL);
+	g_object_get (action2, "label", &label2, NULL);
+
+	result = g_utf8_collate (label1, label2);
+
+	g_free (label1);
+	g_free (label2);
+
+	return result;
+}
+
+/**
  * e_action_group_remove_all_actions:
  * @action_group: a #GtkActionGroup
  *

Modified: branches/kill-bonobo/e-util/e-util.h
==============================================================================
--- branches/kill-bonobo/e-util/e-util.h	(original)
+++ branches/kill-bonobo/e-util/e-util.h	Wed Dec 31 20:24:59 2008
@@ -46,6 +46,8 @@
 						 const gchar *link_id);
 guint		e_load_ui_definition		(GtkUIManager *ui_manager,
 						 const gchar *basename);
+gint		e_action_compare_by_label	(GtkAction *action1,
+						 GtkAction *action2);
 void		e_action_group_remove_all_actions
 						(GtkActionGroup *action_group);
 

Modified: branches/kill-bonobo/mail/e-mail-browser.c
==============================================================================
--- branches/kill-bonobo/mail/e-mail-browser.c	(original)
+++ branches/kill-bonobo/mail/e-mail-browser.c	Wed Dec 31 20:24:59 2008
@@ -21,6 +21,7 @@
 
 #include "e-mail-browser.h"
 
+#include <string.h>
 #include <glib/gi18n.h>
 #include <camel/camel-folder.h>
 
@@ -220,8 +221,8 @@
 	switch (property_id) {
 		case PROP_SHELL_MODULE:
 			g_value_set_object (
-				value, e_mail_browser_get_shell_module (
-				E_MAIL_BROWSER (object)));
+				value, e_mail_reader_get_shell_module (
+				E_MAIL_READER (object)));
 			return;
 
 		case PROP_UI_MANAGER:
@@ -295,15 +296,19 @@
 	GtkUIManager *ui_manager;
 	GtkWidget *container;
 	GtkWidget *widget;
+	const gchar *domain;
+	guint merge_id;
 
 	priv = E_MAIL_BROWSER_GET_PRIVATE (object);
 
 	reader = E_MAIL_READER (object);
-	action_group = priv->action_group;
 	ui_manager = priv->ui_manager;
+	domain = GETTEXT_PACKAGE;
 
 	e_mail_reader_init (reader);
 
+	action_group = priv->action_group;
+	gtk_action_group_set_translation_domain (action_group, domain);
 	gtk_action_group_add_actions (
 		action_group, mail_browser_entries,
 		G_N_ELEMENTS (mail_browser_entries), object);
@@ -312,6 +317,9 @@
 	e_load_ui_definition (ui_manager, E_MAIL_READER_UI_DEFINITION);
 	gtk_ui_manager_add_ui_from_string (ui_manager, ui, -1, NULL);
 
+	merge_id = gtk_ui_manager_new_merge_id (ui_manager);
+	e_mail_reader_create_charset_menu (reader, ui_manager, merge_id);
+
 	accel_group = gtk_ui_manager_get_accel_group (ui_manager);
 	gtk_window_add_accel_group (GTK_WINDOW (object), accel_group);
 
@@ -369,16 +377,6 @@
 	return priv->action_group;
 }
 
-static CamelFolder *
-mail_browser_get_folder (EMailReader *reader)
-{
-}
-
-static const gchar *
-mail_browser_get_folder_uri (EMailReader *reader)
-{
-}
-
 static gboolean
 mail_browser_get_hide_deleted (EMailReader *reader)
 {
@@ -404,16 +402,14 @@
 	return MESSAGE_LIST (priv->message_list);
 }
 
-static EMFolderTreeModel *
-mail_browser_get_tree_model (EMailReader *reader)
+static EShellModule *
+mail_browser_get_shell_module (EMailReader *reader)
 {
 	EMailBrowserPrivate *priv;
-	EShellModule *shell_module;
 
 	priv = E_MAIL_BROWSER_GET_PRIVATE (reader);
-	shell_module = priv->shell_module;
 
-	return e_mail_shell_module_get_folder_tree_model (shell_module);
+	return priv->shell_module;
 }
 
 static GtkWindow *
@@ -452,12 +448,10 @@
 mail_browser_iface_init (EMailReaderIface *iface)
 {
 	iface->get_action_group = mail_browser_get_action_group;
-	iface->get_folder = mail_browser_get_folder;
-	iface->get_folder_uri = mail_browser_get_folder_uri;
 	iface->get_hide_deleted = mail_browser_get_hide_deleted;
 	iface->get_html_display = mail_browser_get_html_display;
 	iface->get_message_list = mail_browser_get_message_list;
-	iface->get_tree_model = mail_browser_get_tree_model;
+	iface->get_shell_module = mail_browser_get_shell_module;
 	iface->get_window = mail_browser_get_window;
 }
 
@@ -529,14 +523,6 @@
 		"shell-module", shell_module, NULL);
 }
 
-EShellModule *
-e_mail_browser_get_shell_module (EMailBrowser *browser)
-{
-	g_return_val_if_fail (E_IS_MAIL_BROWSER (browser), NULL);
-
-	return browser->priv->shell_module;
-}
-
 GtkUIManager *
 e_mail_browser_get_ui_manager (EMailBrowser *browser)
 {

Modified: branches/kill-bonobo/mail/e-mail-browser.h
==============================================================================
--- branches/kill-bonobo/mail/e-mail-browser.h	(original)
+++ branches/kill-bonobo/mail/e-mail-browser.h	Wed Dec 31 20:24:59 2008
@@ -61,7 +61,6 @@
 
 GType		e_mail_browser_get_type		(void);
 GtkWidget *	e_mail_browser_new		(EShellModule *shell_module);
-EShellModule *	e_mail_browser_get_shell_module	(EMailBrowser *browser);
 GtkUIManager *	e_mail_browser_get_ui_manager	(EMailBrowser *browser);
 
 G_END_DECLS

Modified: branches/kill-bonobo/mail/e-mail-reader.c
==============================================================================
--- branches/kill-bonobo/mail/e-mail-reader.c	(original)
+++ branches/kill-bonobo/mail/e-mail-reader.c	Wed Dec 31 20:24:59 2008
@@ -29,9 +29,12 @@
 #include <X11/XF86keysym.h>
 #endif
 
+#include "e-util/e-util.h"
 #include "e-util/gconf-bridge.h"
+#include "widgets/misc/e-charset-picker.h"
 
 #include "mail/e-mail-reader-utils.h"
+#include "mail/e-mail-shell-module.h"
 #include "mail/em-composer-utils.h"
 #include "mail/em-folder-selector.h"
 #include "mail/em-folder-tree.h"
@@ -53,10 +56,10 @@
 	GPtrArray *uids;
 	const gchar *address;
 
-	folder = e_mail_reader_get_folder (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 	window = e_mail_reader_get_window (reader);
 
+	folder = message_list->folder;
 	uids = message_list_get_selected (message_list);
 
 	if (uids->len != 1)
@@ -90,6 +93,24 @@
 }
 
 static void
+action_mail_charset_cb (GtkRadioAction *action,
+                        GtkRadioAction *current,
+                        EMailReader *reader)
+{
+	EMFormatHTMLDisplay *html_display;
+	const gchar *charset;
+
+	if (action != current)
+		return;
+
+	html_display = e_mail_reader_get_html_display (reader);
+	charset = g_object_get_data (G_OBJECT (action), "charset");
+
+	/* Charset for "Default" action will be NULL. */
+	em_format_set_charset ((EMFormat *) html_display, charset);
+}
+
+static void
 action_mail_check_for_junk_cb (GtkAction *action,
                                EMailReader *reader)
 {
@@ -97,9 +118,9 @@
 	CamelFolder *folder;
 	GPtrArray *uids;
 
-	folder = e_mail_reader_get_folder (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 
+	folder = message_list->folder;
 	uids = message_list_get_selected (message_list);
 
 	mail_filter_junk (folder, uids);
@@ -122,6 +143,7 @@
 action_mail_copy_cb (GtkAction *action,
                      EMailReader *reader)
 {
+	EShellModule *shell_module;
 	MessageList *message_list;
 	EMFolderTreeModel *model;
 	CamelFolder *folder;
@@ -130,13 +152,15 @@
 	GPtrArray *selected;
 	const gchar *uri;
 
-	folder = e_mail_reader_get_folder (reader);
 	message_list = e_mail_reader_get_message_list (reader);
-	model = e_mail_reader_get_tree_model (reader);
+	shell_module = e_mail_reader_get_shell_module (reader);
+	model = e_mail_shell_module_get_folder_tree_model (shell_module);
 
 	folder_tree = em_folder_tree_new_with_model (model);
 	selected = message_list_get_selected (message_list);
 
+	folder = message_list->folder;
+
 	em_folder_tree_set_excluded (
 		EM_FOLDER_TREE (folder_tree),
 		EMFT_EXCLUDE_NOSELECT | EMFT_EXCLUDE_VIRTUAL |
@@ -227,9 +251,9 @@
 	CamelFolder *folder;
 	GPtrArray *uids;
 
-	folder = e_mail_reader_get_folder (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 
+	folder = message_list->folder;
 	uids = message_list_get_selected (message_list);
 
 	mail_filter_on_demand (folder, uids);
@@ -252,11 +276,11 @@
 	GtkWindow *window;
 	GPtrArray *uids;
 
-	folder = e_mail_reader_get_folder (reader);
 	html_display = e_mail_reader_get_html_display (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 	window = e_mail_reader_get_window (reader);
 
+	folder = message_list->folder;
 	uids = message_list_get_selected (message_list);
 
 	em_utils_flag_for_followup_clear (window, folder, uids);
@@ -274,11 +298,11 @@
 	GtkWindow *window;
 	GPtrArray *uids;
 
-	folder = e_mail_reader_get_folder (reader);
 	html_display = e_mail_reader_get_html_display (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 	window = e_mail_reader_get_window (reader);
 
+	folder = message_list->folder;
 	uids = message_list_get_selected (message_list);
 
 	em_utils_flag_for_followup_completed (window, folder, uids);
@@ -295,10 +319,10 @@
 	GtkWindow *window;
 	GPtrArray *uids;
 
-	folder = e_mail_reader_get_folder (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 	window = e_mail_reader_get_window (reader);
 
+	folder = message_list->folder;
 	uids = message_list_get_selected (message_list);
 
 	em_utils_flag_for_followup (window, folder, uids);
@@ -314,14 +338,14 @@
 	GPtrArray *uids;
 	const gchar *folder_uri;
 
-	folder = e_mail_reader_get_folder (reader);
-	folder_uri = e_mail_reader_get_folder_uri (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 	window = e_mail_reader_get_window (reader);
 
 	if (!em_utils_check_user_can_send_mail (window))
 		return;
 
+	folder = message_list->folder;
+	folder_uri = message_list->folder_uri;
 	uids = message_list_get_selected (message_list);
 
 	em_utils_forward_messages (folder, uids, folder_uri);
@@ -337,14 +361,14 @@
 	GPtrArray *uids;
 	const gchar *folder_uri;
 
-	folder = e_mail_reader_get_folder (reader);
-	folder_uri = e_mail_reader_get_folder_uri (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 	window = e_mail_reader_get_window (reader);
 
 	if (!em_utils_check_user_can_send_mail (window))
 		return;
 
+	folder = message_list->folder;
+	folder_uri = message_list->folder_uri;
 	uids = message_list_get_selected (message_list);
 
 	em_utils_forward_attached (folder, uids, folder_uri);
@@ -360,14 +384,14 @@
 	GPtrArray *uids;
 	const gchar *folder_uri;
 
-	folder = e_mail_reader_get_folder (reader);
-	folder_uri = e_mail_reader_get_folder_uri (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 	window = e_mail_reader_get_window (reader);
 
 	if (!em_utils_check_user_can_send_mail (window))
 		return;
 
+	folder = message_list->folder;
+	folder_uri = message_list->folder_uri;
 	uids = message_list_get_selected (message_list);
 
 	em_utils_forward_inline (folder, uids, folder_uri);
@@ -383,14 +407,14 @@
 	GPtrArray *uids;
 	const gchar *folder_uri;
 
-	folder = e_mail_reader_get_folder (reader);
-	folder_uri = e_mail_reader_get_folder_uri (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 	window = e_mail_reader_get_window (reader);
 
 	if (!em_utils_check_user_can_send_mail (window))
 		return;
 
+	folder = message_list->folder;
+	folder_uri = message_list->folder_uri;
 	uids = message_list_get_selected (message_list);
 
 	em_utils_forward_quoted (folder, uids, folder_uri);
@@ -489,13 +513,13 @@
 	GtkWindow *window;
 	GPtrArray *uids;
 
-	folder = e_mail_reader_get_folder (reader);
 	window = e_mail_reader_get_window (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 
 	if (!em_utils_check_user_can_send_mail (window))
 		return;
 
+	folder = message_list->folder;
 	uids = message_list_get_selected (message_list);
 
 	em_utils_edit_messages (folder, uids, FALSE);
@@ -505,16 +529,16 @@
 action_mail_message_new_cb (GtkAction *action,
                             EMailReader *reader)
 {
+	MessageList *message_list;
 	GtkWindow *window;
-	const gchar *folder_uri;
 
-	folder_uri = e_mail_reader_get_folder_uri (reader);
+	message_list = e_mail_reader_get_message_list (reader);
 	window = e_mail_reader_get_window (reader);
 
 	if (!em_utils_check_user_can_send_mail (window))
 		return;
 
-	em_utils_compose_new_message (folder_uri);
+	em_utils_compose_new_message (message_list->folder_uri);
 }
 
 static void
@@ -529,17 +553,18 @@
 action_mail_message_post_cb (GtkAction *action,
                              EMailReader *reader)
 {
-	CamelFolder *folder;
+	MessageList *message_list;
 
-	folder = e_mail_reader_get_folder (reader);
+	message_list = e_mail_reader_get_message_list (reader);
 
-	em_utils_post_to_folder (folder);
+	em_utils_post_to_folder (message_list->folder);
 }
 
 static void
 action_mail_move_cb (GtkAction *action,
                      EMailReader *reader)
 {
+	EShellModule *shell_module;
 	MessageList *message_list;
 	EMFolderTreeModel *model;
 	CamelFolder *folder;
@@ -548,13 +573,15 @@
 	GPtrArray *selected;
 	const gchar *uri;
 
-	folder = e_mail_reader_get_folder (reader);
 	message_list = e_mail_reader_get_message_list (reader);
-	model = e_mail_reader_get_tree_model (reader);
+	shell_module = e_mail_reader_get_shell_module (reader);
+	model = e_mail_shell_module_get_folder_tree_model (shell_module);
 
 	folder_tree = em_folder_tree_new_with_model (model);
 	selected = message_list_get_selected (message_list);
 
+	folder = message_list->folder;
+
 	em_folder_tree_set_excluded (
 		EM_FOLDER_TREE (folder_tree),
 		EMFT_EXCLUDE_NOSELECT | EMFT_EXCLUDE_VIRTUAL |
@@ -727,10 +754,10 @@
 	GtkWindow *window;
 	const gchar *uid;
 
-	folder = e_mail_reader_get_folder (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 	window = e_mail_reader_get_window (reader);
 
+	folder = message_list->folder;
 	uid = message_list->cursor_uid;
 	g_return_if_fail (uid != NULL);
 
@@ -763,10 +790,10 @@
 	GtkWindow *window;
 	const gchar *uid;
 
-	folder = e_mail_reader_get_folder (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 	window = e_mail_reader_get_window (reader);
 
+	folder = message_list->folder;
 	uid = message_list->cursor_uid;
 	g_return_if_fail (uid != NULL);
 
@@ -792,10 +819,10 @@
 	GtkWindow *window;
 	GPtrArray *uids;
 
-	folder = e_mail_reader_get_folder (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 	window = e_mail_reader_get_window (reader);
 
+	folder = message_list->folder;
 	uids = message_list_get_selected (message_list);
 
 	em_utils_save_messages (window, folder, uids);
@@ -840,7 +867,17 @@
 action_mail_show_all_headers_cb (GtkToggleAction *action,
                                  EMailReader *reader)
 {
-	/* FIXME */
+	EMFormatHTMLDisplay *html_display;
+	em_format_mode_t mode;
+
+	html_display = e_mail_reader_get_html_display (reader);
+
+	if (gtk_toggle_action_get_active (action))
+		mode = EM_FORMAT_ALLHEADERS;
+	else
+		mode = EM_FORMAT_NORMAL;
+
+	em_format_set_mode ((EMFormat *) html_display, mode);
 }
 
 static void
@@ -859,9 +896,9 @@
 	GPtrArray *uids;
 	guint ii;
 
-	folder = e_mail_reader_get_folder (reader);
 	message_list = e_mail_reader_get_message_list (reader);
 
+	folder = message_list->folder;
 	uids = message_list_get_selected (message_list);
 
 	camel_folder_freeze (folder);
@@ -1449,8 +1486,61 @@
 }
 
 static void
+mail_reader_set_folder (EMailReader *reader,
+                        CamelFolder *folder,
+                        const gchar *folder_uri)
+{
+	EMFormatHTMLDisplay *html_display;
+	MessageList *message_list;
+	gboolean outgoing;
+
+	html_display = e_mail_reader_get_html_display (reader);
+	message_list = e_mail_reader_get_message_list (reader);
+
+	outgoing = em_utils_folder_is_drafts (folder, folder_uri) ||
+		em_utils_folder_is_outbox (folder, folder_uri) ||
+		em_utils_folder_is_sent (folder, folder_uri);
+
+	if (message_list->folder != NULL)
+		mail_sync_folder (message_list->folder, NULL, NULL);
+
+	em_format_format ((EMFormat *) html_display, NULL, NULL, NULL);
+	message_list_set_folder (message_list, folder, folder_uri, outgoing);
+}
+
+static void
+mail_reader_init_charset_actions (EMailReader *reader)
+{
+	GtkActionGroup *action_group;
+	GtkRadioAction *default_action;
+	GSList *radio_group;
+
+	action_group = e_mail_reader_get_action_group (reader);
+
+	radio_group = e_charset_add_radio_actions (
+		action_group, "mail-charset-", NULL,
+		G_CALLBACK (action_mail_charset_cb), reader);
+
+	/* XXX Add a tooltip! */
+	default_action = gtk_radio_action_new (
+		"mail-charset-default", _("Default"), NULL, NULL, -1);
+
+	gtk_radio_action_set_group (default_action, radio_group);
+
+	g_signal_connect (
+		default_action, "changed",
+		G_CALLBACK (action_mail_charset_cb), reader);
+
+	gtk_action_group_add_action (
+		action_group, GTK_ACTION (default_action));
+
+	gtk_radio_action_set_current_value (default_action, -1);
+}
+
+static void
 mail_reader_class_init (EMailReaderIface *iface)
 {
+	iface->set_folder = mail_reader_set_folder;
 }
 
 GType
@@ -1488,6 +1578,7 @@
 	GtkActionGroup *action_group;
 	GConfBridge *bridge;
 	GtkAction *action;
+	const gchar *action_name;
 	const gchar *key;
 
 	g_return_if_fail (E_IS_MAIL_READER (reader));
@@ -1502,12 +1593,20 @@
 		action_group, mail_reader_toggle_entries,
 		G_N_ELEMENTS (mail_reader_toggle_entries), reader);
 
+	mail_reader_init_charset_actions (reader);
+
 	/* Bind GObject properties to GConf keys. */
 
 	bridge = gconf_bridge_get ();
 
+	action_name = "mail-caret-mode";
 	key = "/apps/evolution/mail/display/caret_mode";
-	action = gtk_action_group_get_action (action_group, "mail-caret-mode");
+	action = gtk_action_group_get_action (action_group, action_name);
+	gconf_bridge_bind_property (bridge, key, G_OBJECT (action), "active");
+
+	action_name = "mail-show-all-headers";
+	key = "/apps/evolution/mail/display/show_all_headers";
+	action = gtk_action_group_get_action (action_group, action_name);
 	gconf_bridge_bind_property (bridge, key, G_OBJECT (action), "active");
 
 	/* Fine tuning. */
@@ -1548,32 +1647,6 @@
 	return iface->get_action_group (reader);
 }
 
-CamelFolder *
-e_mail_reader_get_folder (EMailReader *reader)
-{
-	EMailReaderIface *iface;
-
-	g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL);
-
-	iface = E_MAIL_READER_GET_IFACE (reader);
-	g_return_val_if_fail (iface->get_folder != NULL, NULL);
-
-	return iface->get_folder (reader);
-}
-
-const gchar *
-e_mail_reader_get_folder_uri (EMailReader *reader)
-{
-	EMailReaderIface *iface;
-
-	g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL);
-
-	iface = E_MAIL_READER_GET_IFACE (reader);
-	g_return_val_if_fail (iface->get_folder_uri != NULL, NULL);
-
-	return iface->get_folder_uri (reader);
-}
-
 gboolean
 e_mail_reader_get_hide_deleted (EMailReader *reader)
 {
@@ -1613,41 +1686,86 @@
 	return iface->get_message_list (reader);
 }
 
-EShellSettings *
-e_mail_reader_get_shell_settings (EMailReader *reader)
+EShellModule *
+e_mail_reader_get_shell_module (EMailReader *reader)
 {
 	EMailReaderIface *iface;
 
 	g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL);
 
 	iface = E_MAIL_READER_GET_IFACE (reader);
-	g_return_val_if_fail (iface->get_shell_settings != NULL, NULL);
+	g_return_val_if_fail (iface->get_shell_module != NULL, NULL);
 
-	return iface->get_shell_settings (reader);
+	return iface->get_shell_module (reader);
 }
 
-EMFolderTreeModel *
-e_mail_reader_get_tree_model (EMailReader *reader)
+GtkWindow *
+e_mail_reader_get_window (EMailReader *reader)
 {
 	EMailReaderIface *iface;
 
 	g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL);
 
 	iface = E_MAIL_READER_GET_IFACE (reader);
-	g_return_val_if_fail (iface->get_tree_model != NULL, NULL);
+	g_return_val_if_fail (iface->get_window != NULL, NULL);
 
-	return iface->get_tree_model (reader);
+	return iface->get_window (reader);
 }
 
-GtkWindow *
-e_mail_reader_get_window (EMailReader *reader)
+void
+e_mail_reader_set_folder (EMailReader *reader,
+                          CamelFolder *folder,
+                          const gchar *folder_uri)
 {
 	EMailReaderIface *iface;
 
-	g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL);
+	g_return_if_fail (E_IS_MAIL_READER (reader));
+	g_return_if_fail (CAMEL_IS_FOLDER (folder));
+	g_return_if_fail (folder_uri != NULL);
 
 	iface = E_MAIL_READER_GET_IFACE (reader);
-	g_return_val_if_fail (iface->get_window != NULL, NULL);
+	g_return_if_fail (iface->set_folder != NULL);
 
-	return iface->get_window (reader);
+	iface->set_folder (reader, folder, folder_uri);
+}
+
+void
+e_mail_reader_create_charset_menu (EMailReader *reader,
+                                   GtkUIManager *ui_manager,
+                                   guint merge_id)
+{
+	GtkActionGroup *action_group;
+	GtkAction *action;
+	const gchar *action_name;
+	const gchar *path;
+	GSList *list;
+
+	g_return_if_fail (E_IS_MAIL_READER (reader));
+	g_return_if_fail (GTK_IS_UI_MANAGER (ui_manager));
+
+	action_name = "mail-charset-default";
+	action_group = e_mail_reader_get_action_group (reader);
+	action = gtk_action_group_get_action (action_group, action_name);
+	g_return_if_fail (action != NULL);
+
+	list = gtk_radio_action_get_group (GTK_RADIO_ACTION (action));
+	list = g_slist_copy (list);
+	list = g_slist_remove (list, action);
+	list = g_slist_sort (list, (GCompareFunc) e_action_compare_by_label);
+
+	path = "/main-menu/view-menu/mail-message-view-actions/mail-encoding-menu";
+
+	while (list != NULL) {
+		action = list->data;
+
+		gtk_ui_manager_add_ui (
+			ui_manager, merge_id, path,
+			gtk_action_get_name (action),
+			gtk_action_get_name (action),
+			GTK_UI_MANAGER_AUTO, FALSE);
+
+		list = g_slist_delete_link (list, list);
+	}
+
+	gtk_ui_manager_ensure_update (ui_manager);
 }

Modified: branches/kill-bonobo/mail/e-mail-reader.h
==============================================================================
--- branches/kill-bonobo/mail/e-mail-reader.h	(original)
+++ branches/kill-bonobo/mail/e-mail-reader.h	Wed Dec 31 20:24:59 2008
@@ -24,10 +24,9 @@
 
 #include <gtk/gtk.h>
 #include <camel/camel-folder.h>
-#include <mail/em-folder-tree-model.h>
 #include <mail/em-format-html-display.h>
 #include <mail/message-list.h>
-#include <shell/e-shell-settings.h>
+#include <shell/e-shell-module.h>
 
 /* Standard GObject macros */
 #define E_TYPE_MAIL_READER \
@@ -53,19 +52,18 @@
 struct _EMailReaderIface {
 	GTypeInterface parent_iface;
 
-	/* XXX This is getting kinda bloated.  Try to reduce. */
 	GtkActionGroup *
 			(*get_action_group)	(EMailReader *reader);
-	CamelFolder *	(*get_folder)		(EMailReader *reader);
-	const gchar *	(*get_folder_uri)	(EMailReader *reader);
 	gboolean	(*get_hide_deleted)	(EMailReader *reader);
 	EMFormatHTMLDisplay *
 			(*get_html_display)	(EMailReader *reader);
 	MessageList *	(*get_message_list)	(EMailReader *reader);
-	EShellSettings *(*get_shell_settings)	(EMailReader *reader);
-	EMFolderTreeModel *
-			(*get_tree_model)	(EMailReader *reader);
+	EShellModule *	(*get_shell_module)	(EMailReader *reader);
 	GtkWindow *	(*get_window)		(EMailReader *reader);
+
+	void		(*set_folder)		(EMailReader *reader,
+						 CamelFolder *folder,
+						 const gchar *folder_uri);
 };
 
 GType		e_mail_reader_get_type		(void);
@@ -78,10 +76,15 @@
 EMFormatHTMLDisplay *
 		e_mail_reader_get_html_display	(EMailReader *reader);
 MessageList *	e_mail_reader_get_message_list	(EMailReader *reader);
-EShellSettings *e_mail_reader_get_shell_settings(EMailReader *reader);
-EMFolderTreeModel *
-		e_mail_reader_get_tree_model	(EMailReader *reader);
+EShellModule *	e_mail_reader_get_shell_module	(EMailReader *reader);
 GtkWindow *	e_mail_reader_get_window	(EMailReader *reader);
+void		e_mail_reader_set_folder	(EMailReader *reader,
+						 CamelFolder *folder,
+						 const gchar *folder_uri);
+void		e_mail_reader_create_charset_menu
+						(EMailReader *reader,
+						 GtkUIManager *ui_manager,
+						 guint merge_id);
 
 G_END_DECLS
 

Modified: branches/kill-bonobo/mail/e-mail-shell-content.c
==============================================================================
--- branches/kill-bonobo/mail/e-mail-shell-content.c	(original)
+++ branches/kill-bonobo/mail/e-mail-shell-content.c	Wed Dec 31 20:24:59 2008
@@ -376,30 +376,6 @@
 	return e_shell_window_get_action_group (shell_window, "mail");
 }
 
-static CamelFolder *
-mail_shell_content_get_folder (EMailReader *reader)
-{
-	EMailShellContent *mail_shell_content;
-	EMFolderView *folder_view;
-
-	mail_shell_content = E_MAIL_SHELL_CONTENT (reader);
-	folder_view = e_mail_shell_content_get_folder_view (mail_shell_content);
-
-	return folder_view->folder;
-}
-
-static const gchar *
-mail_shell_content_get_folder_uri (EMailReader *reader)
-{
-	EMailShellContent *mail_shell_content;
-	EMFolderView *folder_view;
-
-	mail_shell_content = E_MAIL_SHELL_CONTENT (reader);
-	folder_view = e_mail_shell_content_get_folder_view (mail_shell_content);
-
-	return folder_view->folder_uri;
-}
-
 static gboolean
 mail_shell_content_get_hide_deleted (EMailReader *reader)
 {
@@ -429,18 +405,16 @@
 	return folder_view->list;
 }
 
-static EMFolderTreeModel *
-mail_shell_content_get_tree_model (EMailReader *reader)
+static EShellModule *
+mail_shell_content_get_shell_module (EMailReader *reader)
 {
 	EShellContent *shell_content;
-	EShellModule *shell_module;
 	EShellView *shell_view;
 
 	shell_content = E_SHELL_CONTENT (reader);
 	shell_view = e_shell_content_get_shell_view (shell_content);
-	shell_module = e_shell_view_get_shell_module (shell_view);
 
-	return e_mail_shell_module_get_folder_tree_model (shell_module);
+	return e_shell_view_get_shell_module (shell_view);
 }
 
 static GtkWindow *
@@ -502,12 +476,10 @@
 mail_shell_content_iface_init (EMailReaderIface *iface)
 {
 	iface->get_action_group = mail_shell_content_get_action_group;
-	iface->get_folder = mail_shell_content_get_folder;
-	iface->get_folder_uri = mail_shell_content_get_folder_uri;
 	iface->get_hide_deleted = mail_shell_content_get_hide_deleted;
 	iface->get_html_display = mail_shell_content_get_html_display;
 	iface->get_message_list = mail_shell_content_get_message_list;
-	iface->get_tree_model = mail_shell_content_get_tree_model;
+	iface->get_shell_module = mail_shell_content_get_shell_module;
 	iface->get_window = mail_shell_content_get_window;
 }
 

Modified: branches/kill-bonobo/mail/e-mail-shell-view-actions.c
==============================================================================
--- branches/kill-bonobo/mail/e-mail-shell-view-actions.c	(original)
+++ branches/kill-bonobo/mail/e-mail-shell-view-actions.c	Wed Dec 31 20:24:59 2008
@@ -988,7 +988,6 @@
 	GtkActionGroup *action_group;
 	GtkUIManager *ui_manager;
 	GConfBridge *bridge;
-	GtkAction *action;
 	GObject *object;
 	const gchar *domain;
 	const gchar *key;

Modified: branches/kill-bonobo/mail/e-mail-shell-view-private.h
==============================================================================
--- branches/kill-bonobo/mail/e-mail-shell-view-private.h	(original)
+++ branches/kill-bonobo/mail/e-mail-shell-view-private.h	Wed Dec 31 20:24:59 2008
@@ -28,6 +28,7 @@
 #include <gtkhtml/gtkhtml.h>
 #include <camel/camel-vtrash-folder.h>
 
+#include "e-util/e-util.h"
 #include "e-util/gconf-bridge.h"
 #include "widgets/menus/gal-view-instance.h"
 
@@ -118,6 +119,9 @@
 	/* These are just for convenience. */
 	EMailShellContent *mail_shell_content;
 	EMailShellSidebar *mail_shell_sidebar;
+
+	/* For UI merging and unmerging. */
+	guint merge_id;
 };
 
 void		e_mail_shell_view_private_init

Modified: branches/kill-bonobo/mail/e-mail-shell-view.c
==============================================================================
--- branches/kill-bonobo/mail/e-mail-shell-view.c	(original)
+++ branches/kill-bonobo/mail/e-mail-shell-view.c	Wed Dec 31 20:24:59 2008
@@ -65,11 +65,38 @@
 }
 
 static void
+mail_shell_view_toggled (EShellView *shell_view)
+{
+	EMailShellViewPrivate *priv;
+	EShellWindow *shell_window;
+	GtkUIManager *ui_manager;
+	const gchar *basename;
+
+	/* Chain up to parent's toggled() method. */
+	E_SHELL_VIEW_CLASS (parent_class)->toggled (shell_view);
+
+	priv = E_MAIL_SHELL_VIEW_GET_PRIVATE (shell_view);
+
+	shell_window = e_shell_view_get_shell_window (shell_view);
+	ui_manager = e_shell_window_get_ui_manager (shell_window);
+	basename = E_MAIL_READER_UI_DEFINITION;
+
+	if (e_shell_view_is_active (shell_view)) {
+		priv->merge_id = e_load_ui_definition (ui_manager, basename);
+		e_mail_reader_create_charset_menu (
+			E_MAIL_READER (priv->mail_shell_content),
+			ui_manager, priv->merge_id);
+	} else
+		gtk_ui_manager_remove_ui (ui_manager, priv->merge_id);
+
+	gtk_ui_manager_ensure_update (ui_manager);
+}
+
+static void
 mail_shell_view_update_actions (EShellView *shell_view)
 {
 	EMailShellViewPrivate *priv;
 	EMailShellSidebar *mail_shell_sidebar;
-	EShellContent *shell_content;
 	EShellSidebar *shell_sidebar;
 	EShellWindow *shell_window;
 	EMFolderTree *folder_tree;
@@ -179,6 +206,7 @@
 	shell_view_class->type_module = type_module;
 	shell_view_class->new_shell_content = e_mail_shell_content_new;
 	shell_view_class->new_shell_sidebar = e_mail_shell_sidebar_new;
+	shell_view_class->toggled = mail_shell_view_toggled;
 	shell_view_class->update_actions = mail_shell_view_update_actions;
 }
 

Modified: branches/kill-bonobo/mail/em-folder-view.c
==============================================================================
--- branches/kill-bonobo/mail/em-folder-view.c	(original)
+++ branches/kill-bonobo/mail/em-folder-view.c	Wed Dec 31 20:24:59 2008
@@ -1210,61 +1210,61 @@
 	g_string_free(name, TRUE);
 }
 
-static void
-emfv_view_mode(BonoboUIComponent *uic, const char *path, Bonobo_UIComponent_EventType type, const char *state, void *data)
-{
-	EMFolderView *emfv = data;
-	int i;
-
-	if (type != Bonobo_UIComponent_STATE_CHANGED)
-		return;
-
-	/* TODO: I don't like this stuff much, is there any way we can move listening for such events
-	   elsehwere?  Probably not I guess, unless there's a EMFolderViewContainer for bonobo usage
-	   of a folder view */
-
-	i = state[0] != '0';
-
-			em_format_set_mode((EMFormat *)emfv->preview, i);
-
-			if (EM_FOLDER_VIEW_GET_CLASS (emfv)->update_message_style) {
-				GConfClient *gconf = mail_config_get_gconf_client ();
-
-				gconf_client_set_int (gconf, "/apps/evolution/mail/display/message_style", i, NULL);
-			}
-}
-
-static void
-emfv_caret_mode(BonoboUIComponent *uic, const char *path, Bonobo_UIComponent_EventType type, const char *state, void *data)
-{
-	EMFolderView *emfv = data;
-
-	if (type != Bonobo_UIComponent_STATE_CHANGED)
-		return;
-
-	em_format_html_display_set_caret_mode(emfv->preview, state[0] != '0');
-
-	gconf_client_set_bool(mail_config_get_gconf_client(), "/apps/evolution/mail/display/caret_mode", state[0] != '0', NULL);
-}
-
-static void
-emfv_charset_changed(BonoboUIComponent *uic, const char *path, Bonobo_UIComponent_EventType type, const char *state, void *data)
-{
-	EMFolderView *emfv = data;
-
-	if (type != Bonobo_UIComponent_STATE_CHANGED)
-		return;
+//static void
+//emfv_view_mode(BonoboUIComponent *uic, const char *path, Bonobo_UIComponent_EventType type, const char *state, void *data)
+//{
+//	EMFolderView *emfv = data;
+//	int i;
+//
+//	if (type != Bonobo_UIComponent_STATE_CHANGED)
+//		return;
+//
+//	/* TODO: I don't like this stuff much, is there any way we can move listening for such events
+//	   elsehwere?  Probably not I guess, unless there's a EMFolderViewContainer for bonobo usage
+//	   of a folder view */
+//
+//	i = state[0] != '0';
+//
+//			em_format_set_mode((EMFormat *)emfv->preview, i);
+//
+//			if (EM_FOLDER_VIEW_GET_CLASS (emfv)->update_message_style) {
+//				GConfClient *gconf = mail_config_get_gconf_client ();
+//
+//				gconf_client_set_int (gconf, "/apps/evolution/mail/display/message_style", i, NULL);
+//			}
+//}
 
-	/* menu items begin with "Charset-" = 8 characters */
-	if (state[0] != '0' && strlen(path) > 8) {
-		path += 8;
-		/* default charset used in mail view */
-		if (!strcmp(path, _("Default")))
-			path = NULL;
+//static void
+//emfv_caret_mode(BonoboUIComponent *uic, const char *path, Bonobo_UIComponent_EventType type, const char *state, void *data)
+//{
+//	EMFolderView *emfv = data;
+//
+//	if (type != Bonobo_UIComponent_STATE_CHANGED)
+//		return;
+//
+//	em_format_html_display_set_caret_mode(emfv->preview, state[0] != '0');
+//
+//	gconf_client_set_bool(mail_config_get_gconf_client(), "/apps/evolution/mail/display/caret_mode", state[0] != '0', NULL);
+//}
 
-		em_format_set_charset((EMFormat *)emfv->preview, path);
-	}
-}
+//static void
+//emfv_charset_changed(BonoboUIComponent *uic, const char *path, Bonobo_UIComponent_EventType type, const char *state, void *data)
+//{
+//	EMFolderView *emfv = data;
+//
+//	if (type != Bonobo_UIComponent_STATE_CHANGED)
+//		return;
+//
+//	/* menu items begin with "Charset-" = 8 characters */
+//	if (state[0] != '0' && strlen(path) > 8) {
+//		path += 8;
+//		/* default charset used in mail view */
+//		if (!strcmp(path, _("Default")))
+//			path = NULL;
+//
+//		em_format_set_charset((EMFormat *)emfv->preview, path);
+//	}
+//}
 
 static void
 emfv_activate(EMFolderView *emfv, BonoboUIComponent *uic, int act)
@@ -1285,21 +1285,21 @@
 		if (emfv->menu)
 			e_menu_activate((EMenu *)emfv->menu, uic, act);
 
-		state = emfv->preview->caret_mode;
-		bonobo_ui_component_set_prop(uic, "/commands/CaretMode", "state", state?"1":"0", NULL);
-		bonobo_ui_component_add_listener(uic, "CaretMode", emfv_caret_mode, emfv);
-
-		style = ((EMFormat *)emfv->preview)->mode?EM_FORMAT_ALLHEADERS:EM_FORMAT_NORMAL;
-		if (style)
-			bonobo_ui_component_set_prop(uic, "/commands/ViewFullHeaders", "state", "1", NULL);
-		bonobo_ui_component_add_listener(uic, "ViewFullHeaders", emfv_view_mode, emfv);
-		em_format_set_mode((EMFormat *)emfv->preview, style);
+//		state = emfv->preview->caret_mode;
+//		bonobo_ui_component_set_prop(uic, "/commands/CaretMode", "state", state?"1":"0", NULL);
+//		bonobo_ui_component_add_listener(uic, "CaretMode", emfv_caret_mode, emfv);
+
+//		style = ((EMFormat *)emfv->preview)->mode?EM_FORMAT_ALLHEADERS:EM_FORMAT_NORMAL;
+//		if (style)
+//			bonobo_ui_component_set_prop(uic, "/commands/ViewFullHeaders", "state", "1", NULL);
+//		bonobo_ui_component_add_listener(uic, "ViewFullHeaders", emfv_view_mode, emfv);
+//		em_format_set_mode((EMFormat *)emfv->preview, style);
 
 		if (emfv->folder)
 			bonobo_ui_component_set_prop(uic, "/commands/MessageEdit", "sensitive", "0", NULL);
 
-		/* default charset used in mail view */
-		e_charset_picker_bonobo_ui_populate (uic, "/menu/View", _("Default"), emfv_charset_changed, emfv);
+//		/* default charset used in mail view */
+//		e_charset_picker_bonobo_ui_populate (uic, "/menu/View", _("Default"), emfv_charset_changed, emfv);
 
 		emfv_enable_menus(emfv);
 		if (emfv->statusbar_active)

Modified: branches/kill-bonobo/mail/evolution-mail.schemas.in
==============================================================================
--- branches/kill-bonobo/mail/evolution-mail.schemas.in	(original)
+++ branches/kill-bonobo/mail/evolution-mail.schemas.in	Wed Dec 31 20:24:59 2008
@@ -354,6 +354,20 @@
     </schema>   
 
     <schema>
+      <key>/schema/apps/evolution/mail/display/show_all_headers</key>
+      <applyto>/apps/evolution/mail/display/show_all_headers</applyto>
+      <owner>evolution-mail</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+        <short>Show all message headers</short>
+        <long>
+          Show all the headers when viewing a messages.
+        </long>
+      </locale>
+    </schema>
+
+    <schema>
       <key>/schemas/apps/evolution/mail/display/headers</key>
       <applyto>/apps/evolution/mail/display/headers</applyto>
       <owner>evolution-mail</owner>

Modified: branches/kill-bonobo/shell/e-shell-window-actions.c
==============================================================================
--- branches/kill-bonobo/shell/e-shell-window-actions.c	(original)
+++ branches/kill-bonobo/shell/e-shell-window-actions.c	Wed Dec 31 20:24:59 2008
@@ -1753,27 +1753,6 @@
 	  -1 }
 };
 
-static gint
-shell_window_compare_actions (GtkAction *action1,
-                              GtkAction *action2)
-{
-	gchar *label1, *label2;
-	gint result;
-
-	/* XXX This is really inefficient, but we're only sorting
-	 *     a small number of actions (repeatedly, though). */
-
-	g_object_get (action1, "label", &label1, NULL);
-	g_object_get (action2, "label", &label2, NULL);
-
-	result = g_utf8_collate (label1, label2);
-
-	g_free (label1);
-	g_free (label2);
-
-	return result;
-}
-
 static void
 shell_window_extract_actions (EShellWindow *shell_window,
                               GList **source_list,
@@ -1914,13 +1893,13 @@
 
 	new_item_actions = g_list_sort (
 		gtk_action_group_list_actions (action_group),
-		(GCompareFunc) shell_window_compare_actions);
+		(GCompareFunc) e_action_compare_by_label);
 
 	action_group = shell_window->priv->new_source_actions;
 
 	new_source_actions = g_list_sort (
 		gtk_action_group_list_actions (action_group),
-		(GCompareFunc) shell_window_compare_actions);
+		(GCompareFunc) e_action_compare_by_label);
 
 	/* Give priority to actions that belong to this shell view. */
 

Modified: branches/kill-bonobo/ui/evolution-mail-reader.ui
==============================================================================
--- branches/kill-bonobo/ui/evolution-mail-reader.ui	(original)
+++ branches/kill-bonobo/ui/evolution-mail-reader.ui	Wed Dec 31 20:24:59 2008
@@ -35,7 +35,10 @@
           <menuitem action='mail-zoom-100'/>
         </menu>
         <separator/>
-        <menu action='mail-encoding-menu'/>
+        <menu action='mail-encoding-menu'>
+          <menuitem action='mail-charset-default'/>
+          <separator/>
+        </menu>
       </placeholder>
     </menu>
     <placeholder name='custom-menus'>

Modified: branches/kill-bonobo/ui/evolution-mail.ui
==============================================================================
--- branches/kill-bonobo/ui/evolution-mail.ui	(original)
+++ branches/kill-bonobo/ui/evolution-mail.ui	Wed Dec 31 20:24:59 2008
@@ -1,29 +1,12 @@
 <ui>
   <menubar name='main-menu'>
     <menu action='file-menu'>
-      <placeholder name='file-actions'>
-        <menuitem action='mail-save-as'/>
-      </placeholder>
-      <placeholder name='print-actions'>
-        <menuitem action='mail-print-preview'/>
-        <menuitem action='mail-print'/>
-      </placeholder>
       <placeholder name='long-running-actions'>
         <menuitem action='mail-empty-trash'/>
         <menuitem action='mail-download'/>
       </placeholder>
     </menu>
     <menu action='edit-menu'>
-      <placeholder name='edit-actions'>
-        <menuitem action='mail-clipboard-copy'/>
-        <separator/>
-        <menuitem action='mail-select-all'/>
-        <separator/>
-        <menuitem action='mail-delete'/>
-        <menuitem action='mail-undelete'/>
-        <separator/>
-        <menuitem action='mail-find'/>
-      </placeholder>
       <placeholder name='administrative-actions'>
         <menuitem action='mail-tools-filters'/>
         <menuitem action='mail-tools-search-folders'/>
@@ -38,26 +21,16 @@
           <menuitem action='mail-view-vertical'/>
         </menu>
       </placeholder>
-      <separator/>
-      <menuitem action='mail-threads-group-by'/>
-      <menuitem action='mail-threads-expand-all'/>
-      <menuitem action='mail-threads-collapse-all'/>
-      <separator/>
-      <menuitem action='mail-hide-deleted'/>
-      <menuitem action='mail-hide-selected'/>
-      <menuitem action='mail-hide-read'/>
-      <menuitem action='mail-show-hidden'/>
-      <separator/>
-      <menuitem action='mail-load-images'/>
-      <menuitem action='mail-show-all-headers'/>
-      <menuitem action='mail-caret-mode'/>
-      <menuitem action='mail-show-source'/>
-      <menu action='mail-zoom-menu'>
-        <menuitem action='mail-zoom-in'/>
-        <menuitem action='mail-zoom-out'/>
-        <menuitem action='mail-zoom-100'/>
-      </menu>
-      <menu action='mail-encoding-menu'/>
+      <placeholder name='mail-message-list-actions'>
+        <menuitem action='mail-threads-group-by'/>
+        <menuitem action='mail-threads-expand-all'/>
+        <menuitem action='mail-threads-collapse-all'/>
+        <separator/>
+        <menuitem action='mail-hide-deleted'/>
+        <menuitem action='mail-hide-selected'/>
+        <menuitem action='mail-hide-read'/>
+        <menuitem action='mail-show-hidden'/>
+      </placeholder>
     </menu>
     <placeholder name='custom-menus'>
       <menu action='mail-folder-menu'>
@@ -79,68 +52,7 @@
         <separator/>
         <menuitem action='mail-folder-properties'/>
       </menu>
-      <menu action='mail-message-menu'>
-        <menuitem action='mail-message-new'/>
-        <menuitem action='mail-message-post'/>
-        <menuitem action='mail-message-open'/>
-        <menuitem action='mail-message-edit'/>
-        <menuitem action='mail-add-sender'/>
-        <separator/>
-        <menu action='mail-goto-menu'>
-          <menuitem action='mail-next'/>
-          <menuitem action='mail-next-unread'/>
-          <menuitem action='mail-next-important'/>
-          <menuitem action='mail-next-thread'/>
-          <separator/>
-          <menuitem action='mail-previous'/>
-          <menuitem action='mail-previous-unread'/>
-          <menuitem action='mail-previous-important'/>
-        </menu>
-        <menuitem action='mail-reply-sender'/>
-        <menuitem action='mail-reply-list'/>
-        <menuitem action='mail-reply-all'/>
-        <menuitem action='mail-reply-post'/>
-        <menuitem action='mail-forward'/>
-        <menu action='mail-forward-as-menu'>
-          <menuitem action='mail-forward-attached'/>
-          <menuitem action='mail-forward-inline'/>
-          <menuitem action='mail-forward-quoted'/>
-          <separator/>
-          <menuitem action='mail-redirect'/>
-        </menu>
-        <separator/>
-        <menuitem action='mail-copy'/>
-        <menuitem action='mail-move'/>
-        <separator/>
-        <menu action='mail-mark-as-menu'>
-          <menuitem action="mail-mark-read"/>
-          <menuitem action="mail-mark-unread"/>
-          <separator/>
-          <menuitem action="mail-mark-important"/>
-          <menuitem action="mail-mark-unimportant"/>
-          <separator/>
-          <menuitem action="mail-mark-junk"/>
-          <menuitem action="mail-mark-notjunk"/>
-          <separator/>
-          <menuitem action="mail-flag-for-followup"/>
-          <menuitem action="mail-flag-clear"/>
-          <menuitem action="mail-flag-completed"/>
-        </menu>
-        <menuitem action='mail-filters-apply'/>
-        <menuitem action='mail-check-for-junk'/>
-        <separator/>
-        <menu action='mail-create-rule-menu'>
-          <menuitem action='mail-filter-on-subject'/>
-          <menuitem action='mail-filter-on-sender'/>
-          <menuitem action='mail-filter-on-recipients'/>
-          <menuitem action='mail-filter-on-mailing-list'/>
-          <separator/>
-          <menuitem action='mail-search-folder-from-subject'/>
-          <menuitem action='mail-search-folder-from-sender'/>
-          <menuitem action='mail-search-folder-from-recipients'/>
-          <menuitem action='mail-search-folder-from-mailing-list'/>
-        </menu>
-      </menu>
+      <menu action='mail-message-menu'/>
     </placeholder>
     <menu action='search-menu'>
       <placeholder name='search-actions'>
@@ -149,18 +61,10 @@
     </menu>
   </menubar>
   <toolbar name='main-toolbar'>
-    <toolitem action='mail-reply-sender'/>
-    <toolitem action='mail-reply-all'/>
-    <toolitem action='mail-forward'/>
-    <separator/>
-    <toolitem action='mail-print'/>
-    <toolitem action='mail-delete'/>
-    <toolitem action='mail-mark-junk'/>
-    <toolitem action='mail-mark-notjunk'/>
+    <placeholder name='mail-toolbar-common'/>
     <toolitem action='mail-stop'/>
     <separator/>
-    <toolitem action='mail-previous'/>
-    <toolitem action='mail-next'/>
+    <placeholder name='mail-toolbar-navigation'/>
   </toolbar>
   <popup name='mail-folder-popup'>
     <menuitem action='mail-folder-new'/>

Modified: branches/kill-bonobo/widgets/misc/e-charset-picker.c
==============================================================================
--- branches/kill-bonobo/widgets/misc/e-charset-picker.c	(original)
+++ branches/kill-bonobo/widgets/misc/e-charset-picker.c	Wed Dec 31 20:24:59 2008
@@ -440,6 +440,7 @@
 /**
  * e_charset_add_radio_actions:
  * @action_group: a #GtkActionGroup
+ * @action_prefix: a prefix for action names, or %NULL
  * @default_charset: the default character set, or %NULL to use the
  *                   locale character set
  * @callback: a callback function for actions in the group, or %NULL
@@ -453,8 +454,9 @@
  * the default will be added next, followed by the remaining character
  * sets.
  **/
-void
+GSList *
 e_charset_add_radio_actions (GtkActionGroup *action_group,
+                             const gchar *action_prefix,
                              const gchar *default_charset,
                              GCallback callback,
                              gpointer user_data)
@@ -464,12 +466,10 @@
 	const gchar *locale_charset;
 	gint def, ii;
 
-	g_return_if_fail (GTK_IS_ACTION_GROUP (action_group));
+	g_return_val_if_fail (GTK_IS_ACTION_GROUP (action_group), NULL);
 
-	/* XXX I could try to factor out code common to this
-	 *     function and e_charset_picker_bonobo_ui_populate()
-	 *     instead of duplicating it, but I expect the latter
-	 *     function to be obsolete in the foreseeable future. */
+	if (action_prefix == NULL)
+		action_prefix = "";
 
 	g_get_charset (&locale_charset);
 	if (!g_ascii_strcasecmp (locale_charset, "US-ASCII"))
@@ -482,13 +482,18 @@
 			break;
 
 	for (ii = 0; ii < G_N_ELEMENTS (charsets); ii++) {
+		const gchar *charset_name;
+		gchar *action_name;
 		gchar *escaped_name;
 		gchar *charset_label;
 		gchar **str_array;
 
+		charset_name = charsets[ii].name;
+		action_name = g_strconcat (action_prefix, charset_name, NULL);
+
 		/* Escape underlines in the character set name so
 		 * they're not treated as GtkLabel mnemonics. */
-		str_array = g_strsplit (charsets[ii].name, "_", -1);
+		str_array = g_strsplit (charset_name, "_", -1);
 		escaped_name = g_strjoinv ("__", str_array);
 		g_strfreev (str_array);
 
@@ -506,8 +511,14 @@
 		else
 			charset_label = g_strdup (escaped_name);
 
+		/* XXX Add a tooltip! */
 		action = gtk_radio_action_new (
-			charsets[ii].name, charset_label, NULL, NULL, ii);
+			action_name, charset_label, NULL, NULL, ii);
+
+		/* Character set name is static so no need to free it. */
+		g_object_set_data (
+			G_OBJECT (action), "charset",
+			(gpointer) charset_name);
 
 		gtk_radio_action_set_group (action, group);
 		group = gtk_radio_action_get_group (action);
@@ -521,22 +532,34 @@
 
 		g_object_unref (action);
 
+		g_free (action_name);
 		g_free (escaped_name);
 		g_free (charset_label);
 	}
 
 	if (def == G_N_ELEMENTS (charsets)) {
+		const gchar *charset_name;
+		gchar *action_name;
 		gchar *charset_label;
 		gchar **str_array;
 
+		charset_name = default_charset;
+		action_name = g_strconcat (action_prefix, charset_name, NULL);
+
 		/* Escape underlines in the character set name so
 		 * they're not treated as GtkLabel mnemonics. */
-		str_array = g_strsplit (default_charset, "_", -1);
+		str_array = g_strsplit (charset_name, "_", -1);
 		charset_label = g_strjoinv ("__", str_array);
 		g_strfreev (str_array);
 
+		/* XXX Add a tooltip! */
 		action = gtk_radio_action_new (
-			default_charset, charset_label, NULL, NULL, def);
+			action_name, charset_label, NULL, NULL, def);
+
+		/* Character set name is static so no need to free it. */
+		g_object_set_data (
+			G_OBJECT (action), "charset",
+			(gpointer) charset_name);
 
 		gtk_radio_action_set_group (action, group);
 		group = gtk_radio_action_get_group (action);
@@ -550,165 +573,13 @@
 
 		g_object_unref (action);
 
+		g_free (action_name);
 		g_free (charset_label);
 	}
 
 	/* Any of the actions in the action group will do. */
 	if (action != NULL)
 		gtk_radio_action_set_current_value (action, def);
-}
-
-/**
- * e_charset_picker_bonobo_ui_populate:
- * @uic: Bonobo UI Component
- * @path: menu path
- * @default_charset: the default character set, or %NULL to use the
- * locale character set.
- * @cb: Callback function
- * @user_data: data to be passed to the callback.
- *
- * This creates a Bonobo UI menu and fills it in with a selection
- * of available character sets. The @default_charset (or locale character
- * set if @default_charset is %NULL) will be listed first, and selected
- * by default (except that iso-8859-1 will always be used instead of
- * US-ASCII). Any other character sets of the same language class as
- * the default will be listed next, followed by the remaining character
- * sets.
- **/
-void
-e_charset_picker_bonobo_ui_populate (BonoboUIComponent *uic, const char *path,
-				     const char *default_charset,
-				     BonoboUIListenerFn cb, gpointer user_data)
-{
-	char *encoded_label, *label;
-	const char *locale_charset;
-	GString *menuitems;
-	int def, i;
-
-	g_get_charset (&locale_charset);
-	if (!g_ascii_strcasecmp (locale_charset, "US-ASCII"))
-		locale_charset = "iso-8859-1";
-
-	if (!default_charset)
-		default_charset = locale_charset;
-	for (def = 0; def < num_charsets; def++) {
-		if (!g_ascii_strcasecmp (charsets[def].name, default_charset))
-			break;
-	}
-
-	label = g_strdup (_("Ch_aracter Encoding"));
-	encoded_label = bonobo_ui_util_encode_str (label);
-	menuitems = g_string_new ("");
-	g_string_append_printf (menuitems, "<submenu name=\"ECharsetPicker\" label=\"%s\">\n",
-				encoded_label);
-	g_free (encoded_label);
-	g_free (label);
-
-	for (i = 0; i < num_charsets; i++) {
-		char *command;
-		char *charset_name, *u;
-
-		/* escape _'s in the charset name so that it doesn't become an underline in a GtkLabel */
-		if ((u = strchr (charsets[i].name, '_'))) {
-			int extra = 1;
-			char *s, *d;
-
-			while ((u = strchr (u + 1, '_')))
-				extra++;
-
-			d = charset_name = g_alloca (strlen (charsets[i].name) + extra + 1);
-			s = charsets[i].name;
-			while (*s != '\0') {
-				if (*s == '_')
-					*d++ = '_';
-				*d++ = *s++;
-			}
-			*d = '\0';
-		} else {
-			charset_name = charsets[i].name;
-		}
-
-		if (charsets[i].subclass) {
-			label = g_strdup_printf ("%s, %s (%s)",
-						 _(classnames[charsets[i].class]),
-						 _(charsets[i].subclass),
-						 charset_name);
-		} else if (charsets[i].class) {
-			label = g_strdup_printf ("%s (%s)",
-						 _(classnames[charsets[i].class]),
-						 charset_name);
-		} else {
-			label = g_strdup (charset_name);
-		}
-
-		encoded_label = bonobo_ui_util_encode_str (label);
-		g_free (label);
-
-		command = g_strdup_printf ("<cmd name=\"Charset-%s\" label=\"%s\" type=\"radio\""
-					   " group=\"charset_picker\" state=\"%d\"/>\n",
-					   charsets[i].name, encoded_label, i == def);
-
-		bonobo_ui_component_set (uic, "/commands", command, NULL);
-		g_free (command);
-
-		g_string_append_printf (menuitems, "  <menuitem name=\"Charset-%s\" verb=\"\"/>\n",
-					charsets[i].name);
-
-		g_free (encoded_label);
-
-		label = g_strdup_printf ("Charset-%s", charsets[i].name);
-		bonobo_ui_component_add_listener (uic, label, cb, user_data);
-		g_free (label);
-	}
-
-	if (def == num_charsets) {
-		char *command;
-		char *charset_name, *u;
-
-		/* escape _'s in the charset name so that it doesn't become an underline in a GtkLabel */
-		if ((u = strchr (default_charset, '_'))) {
-			int extra = 1;
-			char *s, *d;
-
-			while ((u = strchr (u + 1, '_')))
-				extra++;
-
-			d = charset_name = g_alloca (strlen (default_charset) + extra + 1);
-			s = (char *) default_charset;
-			while (*s != '\0') {
-				if (*s == '_')
-					*d++ = '_';
-				*d++ = *s++;
-			}
-			*d = '\0';
-		} else {
-			charset_name = (char *) default_charset;
-		}
-
-		label = g_strdup (charset_name);
-		encoded_label = bonobo_ui_util_encode_str (label);
-		g_free (label);
-
-		command = g_strdup_printf ("<cmd name=\"Charset-%s\" label=\"%s\" type=\"radio\""
-					   " group=\"charset_picker\" state=\"1\"/>\n",
-					   default_charset, encoded_label);
-
-		bonobo_ui_component_set (uic, "/commands", command, NULL);
-		g_free (command);
-
-		g_string_append (menuitems, "  <separator/>\n");
-		g_string_append_printf (menuitems, "  <menuitem name=\"Charset-%s\" verb=\"\"/>\n",
-					default_charset);
-
-		g_free (encoded_label);
-
-		label = g_strdup_printf ("Charset-%s", default_charset);
-		bonobo_ui_component_add_listener (uic, label, cb, user_data);
-		g_free (label);
-	}
-
-	g_string_append (menuitems, "</submenu>\n");
 
-	bonobo_ui_component_set (uic, path, menuitems->str, NULL);
-	g_string_free (menuitems, TRUE);
+	return group;
 }

Modified: branches/kill-bonobo/widgets/misc/e-charset-picker.h
==============================================================================
--- branches/kill-bonobo/widgets/misc/e-charset-picker.h	(original)
+++ branches/kill-bonobo/widgets/misc/e-charset-picker.h	Wed Dec 31 20:24:59 2008
@@ -33,18 +33,12 @@
 						 const char *default_charset,
 						 GtkWindow *parent);
 
-void		e_charset_add_radio_actions	(GtkActionGroup *action_group,
+GSList *	e_charset_add_radio_actions	(GtkActionGroup *action_group,
+						 const gchar *action_prefix,
 						 const gchar *default_charset,
 						 GCallback callback,
 						 gpointer user_data);
 
-void		e_charset_picker_bonobo_ui_populate
-						(BonoboUIComponent *uic,
-						 const char *path,
-						 const char *default_charset,
-						 BonoboUIListenerFn cb,
-						 gpointer user_data);
-
 G_END_DECLS
 
 #endif /* E_CHARSETPICKER_H */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]