[evolution/express] Shell and UI manager cleanups.



commit 4f5cfe3089f291c9c02dcddd2e7fb7515af6a328
Author: Matthew Barnes <mbarnes redhat com>
Date:   Thu Mar 4 15:26:59 2010 -0500

    Shell and UI manager cleanups.
    
    Replace the EVO_EXPRESS environment variable with an --express command
    line option.  (Note, this adds a new translatable string for --help.)
    
    Add an EUIManager class with an "express-mode" property and custom load
    functions that use our new "express" preprocessor.  This replaces the UI
    manager functions in e-utils.c.
    
    (Also going to see if I can get GTK+ to add an "add_ui_from_string"
    method to GtkUIManagerClass that we can override.  Then we could just
    call gtk_ui_manager_add_ui_from_string() and the preprocessor would
    automatically do its thing and chain up.)
    
    Add an "express-mode" read-only GObject property to EShell.
    
    Add e_shell_configure_ui_manager() to e-shell-utils.c.  For now this
    just creates a one-way property binding:
    
        EShell:express-mode -> EUIManager:express-mode
    
    Call this immediately after e_ui_manager_new().  (EUIManager can't do
    this itself because it lives too low in the dependency hierarchy and
    doesn't know about EShell.)

 calendar/gui/dialogs/comp-editor.c             |    3 +-
 calendar/gui/dialogs/event-editor.c            |    4 +-
 calendar/gui/dialogs/memo-editor.c             |    4 +-
 calendar/gui/dialogs/task-editor.c             |    4 +-
 capplet/settings/mail-account-view.c           |    2 +-
 composer/e-msg-composer.c                      |    4 +-
 doc/reference/shell/eshell-sections.txt        |    2 +
 doc/reference/shell/tmpl/e-shell-switcher.sgml |    3 +-
 doc/reference/shell/tmpl/e-shell-utils.sgml    |    9 ++
 doc/reference/shell/tmpl/e-shell.sgml          |   14 +++
 e-util/Makefile.am                             |    2 +
 e-util/e-plugin-ui.c                           |   33 ++++---
 e-util/e-plugin-ui.h                           |   12 ++-
 e-util/e-util.c                                |  119 ------------------------
 e-util/e-util.h                                |    8 --
 mail/e-mail-browser.c                          |   28 ++++--
 mail/em-folder-tree-model.c                    |    6 +-
 mail/em-folder-tree.c                          |    9 ++-
 modules/mail/e-mail-shell-view-private.h       |    1 +
 modules/mail/e-mail-shell-view.c               |    3 +-
 shell/e-shell-utils.c                          |   25 +++++
 shell/e-shell-utils.h                          |    4 +
 shell/e-shell-view.c                           |    7 +-
 shell/e-shell-window-actions.c                 |   13 ++-
 shell/e-shell-window-private.c                 |   20 ++--
 shell/e-shell-window-private.h                 |    1 +
 shell/e-shell-window.c                         |   15 +---
 shell/e-shell-window.h                         |    1 -
 shell/e-shell.c                                |   86 ++++++++++++------
 shell/e-shell.h                                |    2 +-
 shell/main.c                                   |   21 ++++-
 widgets/misc/e-attachment-view.c               |    3 +-
 widgets/misc/e-web-view.c                      |    6 +-
 33 files changed, 238 insertions(+), 236 deletions(-)
---
diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c
index 1b6c3bd..f83b502 100644
--- a/calendar/gui/dialogs/comp-editor.c
+++ b/calendar/gui/dialogs/comp-editor.c
@@ -66,6 +66,7 @@
 #include "widgets/misc/e-attachment-paned.h"
 
 #include "e-util/e-alert-dialog.h"
+#include "e-util/e-ui-manager.h"
 
 #define COMP_EDITOR_GET_PRIVATE(obj) \
 	(G_TYPE_INSTANCE_GET_PRIVATE \
@@ -1608,7 +1609,7 @@ comp_editor_init (CompEditor *editor)
 	priv->warned = FALSE;
 	priv->is_group_item = FALSE;
 
-	priv->ui_manager = gtk_ui_manager_new ();
+	priv->ui_manager = e_ui_manager_new ();
 
 	if (comp_lite)
 		gtk_window_set_default_size ((GtkWindow *) editor, 800, 450);
diff --git a/calendar/gui/dialogs/event-editor.c b/calendar/gui/dialogs/event-editor.c
index 23256ad..6e8b049 100644
--- a/calendar/gui/dialogs/event-editor.c
+++ b/calendar/gui/dialogs/event-editor.c
@@ -507,8 +507,8 @@ event_editor_init (EventEditor *ee)
 	gtk_ui_manager_add_ui_from_string (ui_manager, ui, -1, &error);
 
 	id = "org.gnome.evolution.event-editor";
-	e_plugin_ui_register_manager (ui_manager, id, ee);
-	e_plugin_ui_enable_manager (ui_manager, id);
+	e_plugin_ui_register_manager (E_UI_MANAGER (ui_manager), id, ee);
+	e_plugin_ui_enable_manager (E_UI_MANAGER (ui_manager), id);
 
 	if (error != NULL) {
 		g_critical ("%s: %s", G_STRFUNC, error->message);
diff --git a/calendar/gui/dialogs/memo-editor.c b/calendar/gui/dialogs/memo-editor.c
index 8e988c0..8e2a561 100644
--- a/calendar/gui/dialogs/memo-editor.c
+++ b/calendar/gui/dialogs/memo-editor.c
@@ -143,8 +143,8 @@ memo_editor_init (MemoEditor *me)
 	gtk_ui_manager_add_ui_from_string (ui_manager, ui, -1, &error);
 
 	id = "org.gnome.evolution.memo-editor";
-	e_plugin_ui_register_manager (ui_manager, id, me);
-	e_plugin_ui_enable_manager (ui_manager, id);
+	e_plugin_ui_register_manager (E_UI_MANAGER (ui_manager), id, me);
+	e_plugin_ui_enable_manager (E_UI_MANAGER (ui_manager), id);
 
 	if (error != NULL) {
 		g_critical ("%s: %s", G_STRFUNC, error->message);
diff --git a/calendar/gui/dialogs/task-editor.c b/calendar/gui/dialogs/task-editor.c
index a3d4bae..c7e0440 100644
--- a/calendar/gui/dialogs/task-editor.c
+++ b/calendar/gui/dialogs/task-editor.c
@@ -365,8 +365,8 @@ task_editor_init (TaskEditor *te)
 	gtk_ui_manager_add_ui_from_string (ui_manager, ui, -1, &error);
 
 	id = "org.gnome.evolution.task-editor";
-	e_plugin_ui_register_manager (ui_manager, id, te);
-	e_plugin_ui_enable_manager (ui_manager, id);
+	e_plugin_ui_register_manager (E_UI_MANAGER (ui_manager), id, te);
+	e_plugin_ui_enable_manager (E_UI_MANAGER (ui_manager), id);
 
 	if (error != NULL) {
 		g_critical ("%s: %s", G_STRFUNC, error->message);
diff --git a/capplet/settings/mail-account-view.c b/capplet/settings/mail-account-view.c
index 9201fcf..b63b68b 100644
--- a/capplet/settings/mail-account-view.c
+++ b/capplet/settings/mail-account-view.c
@@ -662,7 +662,7 @@ mail_account_view_construct (MailAccountView *view)
 	em_account_editor_check (view->edit, mail_account_pages[0].path);
 	view->pages[0]->done = TRUE;
 
-	if (e_shell_get_express_mode (NULL))
+	if (e_shell_get_express_mode (e_shell_get_default ()))
 		gtk_widget_hide (em_account_editor_get_widget (view->edit, "identity_optional_frame"));
 }
 
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index b57bd15..86275b4 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -1745,8 +1745,8 @@ msg_composer_constructed (GObject *object)
 	gtkhtml_editor_set_changed (editor, FALSE);
 
 	id = "org.gnome.evolution.composer";
-	e_plugin_ui_register_manager (ui_manager, id, composer);
-	e_plugin_ui_enable_manager (ui_manager, id);
+	e_plugin_ui_register_manager (E_UI_MANAGER (ui_manager), id, composer);
+	e_plugin_ui_enable_manager (E_UI_MANAGER (ui_manager), id);
 }
 
 static void
diff --git a/doc/reference/shell/eshell-sections.txt b/doc/reference/shell/eshell-sections.txt
index 2ae9b91..be5171c 100644
--- a/doc/reference/shell/eshell-sections.txt
+++ b/doc/reference/shell/eshell-sections.txt
@@ -15,6 +15,7 @@ e_shell_watch_window
 e_shell_get_watched_windows
 e_shell_get_active_window
 e_shell_send_receive
+e_shell_get_express_mode
 e_shell_get_module_directory
 e_shell_get_network_available
 e_shell_set_network_available
@@ -238,6 +239,7 @@ EShellTaskbarPrivate
 <SECTION>
 <FILE>e-shell-utils</FILE>
 <TITLE>Shell Utilities</TITLE>
+e_shell_configure_ui_manager
 e_shell_configure_web_view
 e_shell_run_open_dialog
 e_shell_run_save_dialog
diff --git a/doc/reference/shell/tmpl/e-shell-switcher.sgml b/doc/reference/shell/tmpl/e-shell-switcher.sgml
index f656b65..33a6479 100644
--- a/doc/reference/shell/tmpl/e-shell-switcher.sgml
+++ b/doc/reference/shell/tmpl/e-shell-switcher.sgml
@@ -55,7 +55,8 @@ EShellSwitcher
 </para>
 
 @switcher: 
- action: 
+ switch_action: 
+ new_window_action: 
 
 
 <!-- ##### FUNCTION e_shell_switcher_get_style ##### -->
diff --git a/doc/reference/shell/tmpl/e-shell-utils.sgml b/doc/reference/shell/tmpl/e-shell-utils.sgml
index 5fb4913..a5768cf 100644
--- a/doc/reference/shell/tmpl/e-shell-utils.sgml
+++ b/doc/reference/shell/tmpl/e-shell-utils.sgml
@@ -17,6 +17,15 @@ Shell Utilities
 <!-- ##### SECTION Stability_Level ##### -->
 
 
+<!-- ##### FUNCTION e_shell_configure_ui_manager ##### -->
+<para>
+
+</para>
+
+ shell: 
+ ui_manager: 
+
+
 <!-- ##### FUNCTION e_shell_configure_web_view ##### -->
 <para>
 
diff --git a/doc/reference/shell/tmpl/e-shell.sgml b/doc/reference/shell/tmpl/e-shell.sgml
index 3946454..4d3f9a4 100644
--- a/doc/reference/shell/tmpl/e-shell.sgml
+++ b/doc/reference/shell/tmpl/e-shell.sgml
@@ -94,6 +94,11 @@ EShell
 
 @eshell: the object which received the signal.
 
+<!-- ##### ARG EShell:express-mode ##### -->
+<para>
+
+</para>
+
 <!-- ##### ARG EShell:geometry ##### -->
 <para>
 
@@ -241,6 +246,15 @@ EShell
 @parent: 
 
 
+<!-- ##### FUNCTION e_shell_get_express_mode ##### -->
+<para>
+
+</para>
+
+ shell: 
+ Returns: 
+
+
 <!-- ##### FUNCTION e_shell_get_module_directory ##### -->
 <para>
 
diff --git a/e-util/Makefile.am b/e-util/Makefile.am
index b34e037..bb0845c 100644
--- a/e-util/Makefile.am
+++ b/e-util/Makefile.am
@@ -51,6 +51,7 @@ eutilinclude_HEADERS = 				\
 	e-text-event-processor-types.h		\
 	e-text-event-processor.h		\
 	e-timeout-activity.h			\
+	e-ui-manager.h				\
 	e-util.h				\
 	e-unicode.h				\
 	e-xml-utils.h				\
@@ -127,6 +128,7 @@ libeutil_la_SOURCES =				\
 	e-text-event-processor-emacs-like.c	\
 	e-text-event-processor.c		\
 	e-timeout-activity.c			\
+	e-ui-manager.c				\
 	e-util.c				\
 	e-unicode.c				\
 	e-util-private.h			\
diff --git a/e-util/e-plugin-ui.c b/e-util/e-plugin-ui.c
index 133455b..9a9a4f2 100644
--- a/e-util/e-plugin-ui.c
+++ b/e-util/e-plugin-ui.c
@@ -16,7 +16,9 @@
  */
 
 #include "e-plugin-ui.h"
+
 #include "e-util.h"
+#include "e-ui-manager.h"
 
 #include <string.h>
 
@@ -165,7 +167,7 @@ static gpointer parent_class;
 
 static void
 plugin_ui_hook_unregister_manager (EPluginUIHook *hook,
-                                   GtkUIManager *ui_manager)
+                                   EUIManager *ui_manager)
 {
 	GHashTable *registry;
 
@@ -176,7 +178,7 @@ plugin_ui_hook_unregister_manager (EPluginUIHook *hook,
 
 static void
 plugin_ui_hook_register_manager (EPluginUIHook *hook,
-                                 GtkUIManager *ui_manager,
+                                 EUIManager *ui_manager,
                                  const gchar *id,
                                  gpointer user_data)
 {
@@ -227,7 +229,7 @@ plugin_ui_hook_register_manager (EPluginUIHook *hook,
 
 static guint
 plugin_ui_hook_merge_ui (EPluginUIHook *hook,
-                         GtkUIManager *ui_manager,
+                         EUIManager *ui_manager,
                          const gchar *id)
 {
 	GHashTable *hash_table;
@@ -239,7 +241,7 @@ plugin_ui_hook_merge_ui (EPluginUIHook *hook,
 	ui_definition = g_hash_table_lookup (hash_table, id);
 	g_return_val_if_fail (ui_definition != NULL, 0);
 
-	merge_id = e_load_ui_manager_definition_from_string (
+	merge_id = e_ui_manager_add_ui_from_string (
 		ui_manager, ui_definition, &error);
 
 	if (error != NULL) {
@@ -252,7 +254,7 @@ plugin_ui_hook_merge_ui (EPluginUIHook *hook,
 
 static void
 plugin_ui_enable_manager (EPluginUIHook *hook,
-                          GtkUIManager *ui_manager,
+                          EUIManager *ui_manager,
                           const gchar *id)
 {
 	GHashTable *hash_table;
@@ -300,7 +302,7 @@ plugin_ui_enable_manager (EPluginUIHook *hook,
 
 static void
 plugin_ui_disable_manager (EPluginUIHook *hook,
-                           GtkUIManager *ui_manager,
+                           EUIManager *ui_manager,
                            const gchar *id,
                            gboolean remove)
 {
@@ -336,7 +338,8 @@ plugin_ui_disable_manager (EPluginUIHook *hook,
 
 		/* Merge ID could be 0 if the plugin is disabled. */
 		if (merge_id > 0)
-			gtk_ui_manager_remove_ui (ui_manager, merge_id);
+			gtk_ui_manager_remove_ui (
+				GTK_UI_MANAGER (ui_manager), merge_id);
 
 		if (remove)
 			g_hash_table_remove (hash_table, id);
@@ -358,7 +361,7 @@ plugin_ui_enable_hook (EPluginUIHook *hook)
 	g_hash_table_iter_init (&iter, hash_table);
 
 	while (g_hash_table_iter_next (&iter, &key, NULL)) {
-		GtkUIManager *ui_manager = key;
+		EUIManager *ui_manager = key;
 		plugin_ui_enable_manager (hook, ui_manager, NULL);
 	}
 }
@@ -376,7 +379,7 @@ plugin_ui_disable_hook (EPluginUIHook *hook)
 	g_hash_table_iter_init (&iter, hash_table);
 
 	while (g_hash_table_iter_next (&iter, &key, NULL)) {
-		GtkUIManager *ui_manager = key;
+		EUIManager *ui_manager = key;
 		plugin_ui_disable_manager (hook, ui_manager, NULL, FALSE);
 	}
 }
@@ -546,13 +549,13 @@ e_plugin_ui_hook_get_type (void)
 }
 
 void
-e_plugin_ui_register_manager (GtkUIManager *ui_manager,
+e_plugin_ui_register_manager (EUIManager *ui_manager,
                               const gchar *id,
                               gpointer user_data)
 {
 	GSList *plugin_list;
 
-	g_return_if_fail (GTK_IS_UI_MANAGER (ui_manager));
+	g_return_if_fail (E_IS_UI_MANAGER (ui_manager));
 	g_return_if_fail (id != NULL);
 
 	/* Loop over all installed plugins. */
@@ -586,12 +589,12 @@ e_plugin_ui_register_manager (GtkUIManager *ui_manager,
 }
 
 void
-e_plugin_ui_enable_manager (GtkUIManager *ui_manager,
+e_plugin_ui_enable_manager (EUIManager *ui_manager,
                             const gchar *id)
 {
 	GSList *plugin_list;
 
-	g_return_if_fail (GTK_IS_UI_MANAGER (ui_manager));
+	g_return_if_fail (E_IS_UI_MANAGER (ui_manager));
 	g_return_if_fail (id != NULL);
 
 	/* Loop over all installed plugins. */
@@ -615,12 +618,12 @@ e_plugin_ui_enable_manager (GtkUIManager *ui_manager,
 }
 
 void
-e_plugin_ui_disable_manager (GtkUIManager *ui_manager,
+e_plugin_ui_disable_manager (EUIManager *ui_manager,
                              const gchar *id)
 {
 	GSList *plugin_list;
 
-	g_return_if_fail (GTK_IS_UI_MANAGER (ui_manager));
+	g_return_if_fail (E_IS_UI_MANAGER (ui_manager));
 	g_return_if_fail (id != NULL);
 
 	/* Loop over all installed plugins. */
diff --git a/e-util/e-plugin-ui.h b/e-util/e-plugin-ui.h
index c9bddaf..e0cbb32 100644
--- a/e-util/e-plugin-ui.h
+++ b/e-util/e-plugin-ui.h
@@ -19,7 +19,9 @@
 #define E_PLUGIN_UI_H
 
 #include <gtk/gtk.h>
-#include "e-plugin.h"
+
+#include <e-util/e-ui-manager.h>
+#include <e-util/e-plugin.h>
 
 /* Standard GObject macros */
 #define E_TYPE_PLUGIN_UI_HOOK \
@@ -57,17 +59,17 @@ struct _EPluginUIHookClass {
 
 /* Plugins with "org.gnome.evolution.ui" hooks should define a
  * function named e_plugin_ui_init() having this signature. */
-typedef gboolean	(*EPluginUIInitFunc)	(GtkUIManager *ui_manager,
+typedef gboolean	(*EPluginUIInitFunc)	(EUIManager *ui_manager,
 						 gpointer user_data);
 
 GType		e_plugin_ui_hook_get_type	(void);
 
-void		e_plugin_ui_register_manager	(GtkUIManager *ui_manager,
+void		e_plugin_ui_register_manager	(EUIManager *ui_manager,
 						 const gchar *id,
 						 gpointer user_data);
-void		e_plugin_ui_enable_manager	(GtkUIManager *ui_manager,
+void		e_plugin_ui_enable_manager	(EUIManager *ui_manager,
 						 const gchar *id);
-void		e_plugin_ui_disable_manager	(GtkUIManager *ui_manager,
+void		e_plugin_ui_disable_manager	(EUIManager *ui_manager,
 						 const gchar *id);
 
 G_END_DECLS
diff --git a/e-util/e-util.c b/e-util/e-util.c
index 3573952..cf5c0b0 100644
--- a/e-util/e-util.c
+++ b/e-util/e-util.c
@@ -310,125 +310,6 @@ e_load_ui_builder_definition (GtkBuilder *builder,
 	}
 }
 
-
-void
-e_load_ui_manager_set_express (GtkUIManager *ui_manager,
-			       gboolean      express)
-{
-	g_object_set_data (G_OBJECT (ui_manager),
-			   "e-ui-mgr-express",
-			   GUINT_TO_POINTER (express));
-}
-
-static gboolean
-e_load_ui_manager_get_express (GtkUIManager *ui_manager)
-{
-	gboolean express = GPOINTER_TO_UINT (
-		g_object_get_data (G_OBJECT (ui_manager),
-				   "e-ui-mgr-express"));
-	return express;
-}
-
-
-/**
- * e_load_ui_manager_definition_from_string:
- * @ui_manager: a #GtkUIManager
- * @string: the UI XML in NULL terminated string form
- *
- * Loads a UI definition into @ui_manager from Evolution's UI directory.
- * Depending on the mode signalled by the 'express' flag on the UI manager
- * a simplified version of the UI may be presented.
- *
- * Returns: The merge ID for the merged UI.  The merge ID can be used to
- *          unmerge the UI with gtk_ui_manager_remove_ui().
- **/
-guint
-e_load_ui_manager_definition_from_string (GtkUIManager *ui_manager,
-					  const gchar  *ui_string,
-					  GError      **error)
-{
-	int i;
-	guint merge_id;
-	gchar *filtered, **lines;
-	gboolean is_express, in_conditional = FALSE;
-	gboolean include = TRUE;
-
-	is_express = e_load_ui_manager_get_express (ui_manager);
-
-	/*
-	 * Very simple line based pre-processing based on comments:
-	 * <!-- if [!]EXPRESS -->\n ... \n<!-- endif -->\n
-	 */	
-	lines = g_strsplit (ui_string, "\n", -1);
-	for (i = 0; lines[i]; i++) {
-		char *p;
-		if ((p = strstr (lines[i], "<!-- if "))) {
-			gboolean not_express = lines[i][8] == '!';
-			include = is_express ^ not_express;
-/*			g_warning ("not express: %d from '%s' include to %d (%d)",
-				   not_express, lines[i], include, is_express); */
-			lines[i][0] = '\0';
-			in_conditional = TRUE;
-		} else if ((p = strstr (lines[i], "<!-- endif"))) {
-			lines[i][0] = '\0';
-			include = TRUE;
-			in_conditional = FALSE;
-		}
-/*		if (in_conditional)
-			g_warning ("conditional: (%d): '%s'", include, lines[i]); */
-		if (!include)
-			lines[i][0] = '\0';
-	}
-	filtered = g_strjoinv("\n", lines);
-
-	merge_id = gtk_ui_manager_add_ui_from_string (ui_manager, filtered, -1, error);
-
-	g_free (filtered);
-
-	return merge_id;
-}
-
-/**
- * e_load_ui_manager_definition:
- * @ui_manager: a #GtkUIManager
- * @basename: basename of the UI definition file
- *
- * Loads a UI definition into @ui_manager from Evolution's UI directory.
- * Failure here is fatal, since the application can't function without
- * its UI definitions. 
- * Depending on the mode signalled by the 'express' flag on the UI manager
- * a simplified version of the UI may be presented.
- *
- * Returns: The merge ID for the merged UI.  The merge ID can be used to
- *          unmerge the UI with gtk_ui_manager_remove_ui().
- **/
-guint
-e_load_ui_manager_definition (GtkUIManager *ui_manager,
-                              const gchar  *basename)
-{
-	gchar *filename;
-	guint merge_id = 0;
-	GError *error = NULL;
-	gchar *buffer;
-
-	g_return_val_if_fail (GTK_IS_UI_MANAGER (ui_manager), 0);
-	g_return_val_if_fail (basename != NULL, 0);
-
-	filename = g_build_filename (EVOLUTION_UIDIR, basename, NULL);
-
-	if (g_file_get_contents (filename, &buffer, NULL, &error))
-		merge_id = e_load_ui_manager_definition_from_string (ui_manager, buffer, &error);
-
-	g_free (filename);
-
-	if (error != NULL) {
-		g_error ("%s: %s", basename, error->message);
-		g_assert_not_reached ();
-	}
-
-	return merge_id;
-}
-
 /**
  * e_action_compare_by_label:
  * @action1: a #GtkAction
diff --git a/e-util/e-util.h b/e-util/e-util.h
index 34c02a2..dfbc6c0 100644
--- a/e-util/e-util.h
+++ b/e-util/e-util.h
@@ -65,14 +65,6 @@ GtkActionGroup *e_lookup_action_group		(GtkUIManager *ui_manager,
 						 const gchar *group_name);
 void		e_load_ui_builder_definition	(GtkBuilder *builder,
 						 const gchar *basename);
-void		e_load_ui_manager_set_express	(GtkUIManager *ui_manager,
-						 gboolean      express);
-guint		e_load_ui_manager_definition	(GtkUIManager *ui_manager,
-						 const gchar *basename);
-guint           e_load_ui_manager_definition_from_string
-						(GtkUIManager *ui_manager,
-						 const gchar  *ui_string,
-						 GError      **error);
 gint		e_action_compare_by_label	(GtkAction *action1,
 						 GtkAction *action2);
 void		e_action_group_remove_all_actions
diff --git a/mail/e-mail-browser.c b/mail/e-mail-browser.c
index 13934d9..5c36049 100644
--- a/mail/e-mail-browser.c
+++ b/mail/e-mail-browser.c
@@ -29,6 +29,7 @@
 #include "e-util/e-plugin-ui.h"
 #include "e-util/gconf-bridge.h"
 #include "shell/e-shell.h"
+#include "shell/e-shell-utils.h"
 #include "widgets/misc/e-popup-action.h"
 #include "widgets/misc/e-preview-pane.h"
 
@@ -505,10 +506,12 @@ mail_browser_constructed (GObject *object)
 		G_N_ELEMENTS (mail_browser_popup_entries));
 	gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
 
-	e_load_ui_manager_definition (ui_manager, E_MAIL_READER_UI_DEFINITION);
-	e_load_ui_manager_definition_from_string (ui_manager, ui, NULL);
+	e_ui_manager_add_ui_from_file (
+		E_UI_MANAGER (ui_manager), E_MAIL_READER_UI_DEFINITION);
+	e_ui_manager_add_ui_from_string (
+		E_UI_MANAGER (ui_manager), ui, NULL);
 
-	merge_id = gtk_ui_manager_new_merge_id (ui_manager);
+	merge_id = gtk_ui_manager_new_merge_id (GTK_UI_MANAGER (ui_manager));
 	e_mail_reader_create_charset_menu (reader, ui_manager, merge_id);
 
 	accel_group = gtk_ui_manager_get_accel_group (ui_manager);
@@ -577,8 +580,8 @@ mail_browser_constructed (GObject *object)
 	gconf_bridge_bind_property (bridge, key, object, "show-deleted");
 
 	id = "org.gnome.evolution.mail.browser";
-	e_plugin_ui_register_manager (ui_manager, id, object);
-	e_plugin_ui_enable_manager (ui_manager, id);
+	e_plugin_ui_register_manager (E_UI_MANAGER (ui_manager), id, object);
+	e_plugin_ui_enable_manager (E_UI_MANAGER (ui_manager), id);
 }
 
 static gboolean
@@ -770,14 +773,23 @@ mail_browser_iface_init (EMailReaderIface *iface)
 static void
 mail_browser_init (EMailBrowser *browser)
 {
+	EShell *shell;
+	EShellBackend *shell_backend;
+	GtkUIManager *ui_manager;
+	EMailReader *reader;
 	GConfBridge *bridge;
 	const gchar *prefix;
 
 	browser->priv = E_MAIL_BROWSER_GET_PRIVATE (browser);
 
-	browser->priv->ui_manager = gtk_ui_manager_new ();
-	e_load_ui_manager_set_express (browser->priv->ui_manager,
-				       e_shell_get_express_mode (NULL));
+	reader = E_MAIL_READER (browser);
+	shell_backend = e_mail_reader_get_shell_backend (reader);
+	shell = e_shell_backend_get_shell (shell_backend);
+
+	ui_manager = e_ui_manager_new ();
+	e_shell_configure_ui_manager (shell, E_UI_MANAGER (ui_manager));
+
+	browser->priv->ui_manager = ui_manager;
 	browser->priv->action_group = gtk_action_group_new ("mail-browser");
 	browser->priv->html_display = em_format_html_display_new ();
 
diff --git a/mail/em-folder-tree-model.c b/mail/em-folder-tree-model.c
index cedd234..3daacc5 100644
--- a/mail/em-folder-tree-model.c
+++ b/mail/em-folder-tree-model.c
@@ -121,12 +121,16 @@ folder_tree_model_sort (GtkTreeModel *model,
                         GtkTreeIter *b,
                         gpointer user_data)
 {
+	EShell *shell;
 	gchar *aname, *bname;
 	CamelStore *store;
 	gboolean is_store;
 	guint32 aflags, bflags;
 	gint rv = -2;
 
+	/* XXX Pass the EShell in as user_data. */
+	shell = e_shell_get_default ();
+
 	gtk_tree_model_get (
 		model, a,
 		COL_BOOL_IS_STORE, &is_store,
@@ -142,7 +146,7 @@ folder_tree_model_sort (GtkTreeModel *model,
 	if (is_store) {
 		/* On This Computer is always first, and Search Folders
 		 * is always last. */
-		if (e_shell_get_express_mode (NULL)) {
+		if (e_shell_get_express_mode (shell)) {
 			if (!strcmp (aname, _("On This Computer")) &&
 				!strcmp (bname, _("Search Folders")))
 				rv = -1;
diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c
index 4a7df71..bbb9ec3 100644
--- a/mail/em-folder-tree.c
+++ b/mail/em-folder-tree.c
@@ -2619,8 +2619,10 @@ sort_by_store_and_uri (gconstpointer name1, gconstpointer name2)
 
 /* restores state of a tree (collapsed/expanded) as stores in the given key_file */
 void
-em_folder_tree_restore_state (EMFolderTree *folder_tree, GKeyFile *key_file)
+em_folder_tree_restore_state (EMFolderTree *folder_tree,
+                              GKeyFile *key_file)
 {
+	EShell *shell;
 	GtkTreeModel *tree_model;
 	GtkTreeView *tree_view;
 	GtkTreeIter iter;
@@ -2633,6 +2635,9 @@ em_folder_tree_restore_state (EMFolderTree *folder_tree, GKeyFile *key_file)
 	if (key_file == NULL)
 		return;
 
+	/* XXX Pass this in. */
+	shell = e_shell_get_default ();
+
 	tree_view = GTK_TREE_VIEW (folder_tree);
 	tree_model = gtk_tree_view_get_model (tree_view);
 
@@ -2717,7 +2722,7 @@ em_folder_tree_restore_state (EMFolderTree *folder_tree, GKeyFile *key_file)
 
 		group_name = g_strdup_printf ("Store %s", uri);
 		
-		if (e_shell_get_express_mode (NULL)) {
+		if (e_shell_get_express_mode (shell)) {
 			gboolean system = FALSE;
 
 			if (strncmp (uri, "vfolder", 7) == 0 ||
diff --git a/modules/mail/e-mail-shell-view-private.h b/modules/mail/e-mail-shell-view-private.h
index 9cdd71d..de237af 100644
--- a/modules/mail/e-mail-shell-view-private.h
+++ b/modules/mail/e-mail-shell-view-private.h
@@ -38,6 +38,7 @@
 #include "e-util/e-binding.h"
 #include "e-util/gconf-bridge.h"
 #include "e-util/e-account-utils.h"
+#include "e-util/e-ui-manager.h"
 #include "filter/e-filter-part.h"
 #include "widgets/misc/e-web-view.h"
 #include "widgets/misc/e-popup-action.h"
diff --git a/modules/mail/e-mail-shell-view.c b/modules/mail/e-mail-shell-view.c
index c72a366..c342985 100644
--- a/modules/mail/e-mail-shell-view.c
+++ b/modules/mail/e-mail-shell-view.c
@@ -177,7 +177,8 @@ mail_shell_view_toggled (EShellView *shell_view)
 	basename = E_MAIL_READER_UI_DEFINITION;
 
 	if (view_is_active && priv->merge_id == 0) {
-		priv->merge_id = e_load_ui_manager_definition (ui_manager, basename);
+		priv->merge_id = e_ui_manager_add_ui_from_file (
+			E_UI_MANAGER (ui_manager), basename);
 		e_mail_reader_create_charset_menu (
 			E_MAIL_READER (priv->mail_shell_content),
 			ui_manager, priv->merge_id);
diff --git a/shell/e-shell-utils.c b/shell/e-shell-utils.c
index f954492..a584289 100644
--- a/shell/e-shell-utils.c
+++ b/shell/e-shell-utils.c
@@ -27,6 +27,31 @@
 #include "widgets/misc/e-import-assistant.h"
 
 /**
+ * e_shell_configure_ui_manager:
+ * @shell: an #EShell
+ * @ui_manager: an #EUIManager
+ *
+ * Adds shell integration to @ui_manager.  In particular, it keeps
+ * @ui_manager's EUIManager:express-mode property synchronized with
+ * @shell's EShell:express-mode property.
+ **/
+void
+e_shell_configure_ui_manager (EShell *shell,
+                              EUIManager *ui_manager)
+{
+	EShellSettings *shell_settings;
+
+	g_return_if_fail (E_IS_SHELL (shell));
+	g_return_if_fail (E_IS_UI_MANAGER (ui_manager));
+
+	shell_settings = e_shell_get_shell_settings (shell);
+
+	e_binding_new (
+		shell, "express-mode",
+		ui_manager, "express-mode");
+}
+
+/**
  * e_shell_configure_web_view:
  * @shell: an #EShell
  * @web_view: an #EWebView
diff --git a/shell/e-shell-utils.h b/shell/e-shell-utils.h
index 18e90aa..e705ded 100644
--- a/shell/e-shell-utils.h
+++ b/shell/e-shell-utils.h
@@ -30,9 +30,13 @@
 
 #include <shell/e-shell.h>
 #include <misc/e-web-view.h>
+#include <e-util/e-ui-manager.h>
 
 G_BEGIN_DECLS
 
+void		e_shell_configure_ui_manager	(EShell *shell,
+						 EUIManager *ui_manager);
+
 void		e_shell_configure_web_view	(EShell *shell,
 						 EWebView *web_view);
 
diff --git a/shell/e-shell-view.c b/shell/e-shell-view.c
index 4a96a99..13607d4 100644
--- a/shell/e-shell-view.c
+++ b/shell/e-shell-view.c
@@ -524,11 +524,12 @@ shell_view_toggled (EShellView *shell_view)
 	id = shell_view_class->ui_manager_id;
 
 	if (view_is_active && priv->merge_id == 0) {
-		priv->merge_id = e_load_ui_manager_definition (ui_manager, basename);
-		e_plugin_ui_enable_manager (ui_manager, id);
+		priv->merge_id = e_ui_manager_add_ui_from_file (
+			E_UI_MANAGER (ui_manager), basename);
+		e_plugin_ui_enable_manager (E_UI_MANAGER (ui_manager), id);
 
 	} else if (!view_is_active && priv->merge_id != 0) {
-		e_plugin_ui_disable_manager (ui_manager, id);
+		e_plugin_ui_disable_manager (E_UI_MANAGER (ui_manager), id);
 		gtk_ui_manager_remove_ui (ui_manager, priv->merge_id);
 		priv->merge_id = 0;
 	}
diff --git a/shell/e-shell-window-actions.c b/shell/e-shell-window-actions.c
index c2c5aea..b4330e9 100644
--- a/shell/e-shell-window-actions.c
+++ b/shell/e-shell-window-actions.c
@@ -1887,7 +1887,8 @@ e_shell_window_actions_init (EShellWindow *shell_window)
 	g_return_if_fail (E_IS_SHELL_WINDOW (shell_window));
 
 	ui_manager = e_shell_window_get_ui_manager (shell_window);
-	e_load_ui_manager_definition (ui_manager, "evolution-shell.ui");
+	e_ui_manager_add_ui_from_file (
+		E_UI_MANAGER (ui_manager), "evolution-shell.ui");
 
 	/* Shell Actions */
 	action_group = ACTION_GROUP (SHELL);
@@ -2024,6 +2025,7 @@ express_filter_new_actions (GList *list)
 GtkWidget *
 e_shell_window_create_new_menu (EShellWindow *shell_window)
 {
+	EShell *shell;
 	GtkActionGroup *action_group;
 	GList *new_item_actions;
 	GList *new_source_actions;
@@ -2031,6 +2033,8 @@ e_shell_window_create_new_menu (EShellWindow *shell_window)
 	GtkWidget *menu;
 	GtkWidget *separator;
 
+	shell = e_shell_window_get_shell (shell_window);
+
 	/* Get sorted lists of "new item" and "new source" actions. */
 
 	action_group = ACTION_GROUP (NEW_ITEM);
@@ -2058,7 +2062,7 @@ e_shell_window_create_new_menu (EShellWindow *shell_window)
 	for (iter = list; iter != NULL; iter = iter->next)
 		iter->data = gtk_action_create_menu_item (iter->data);
 
-	if (e_shell_window_get_express_mode (shell_window)) {
+	if (e_shell_get_express_mode (shell)) {
 		new_item_actions = express_filter_new_actions (new_item_actions);
 		g_list_free (new_source_actions);
 		new_source_actions = NULL;
@@ -2325,8 +2329,9 @@ e_shell_window_update_view_menu (EShellWindow *shell_window)
 		gtk_action_group_add_action (action_group, action);
 
 		gtk_ui_manager_add_ui (
-			ui_manager, merge_id, path, action_name,
-			action_name, GTK_UI_MANAGER_AUTO, FALSE);
+			ui_manager, merge_id,
+			path, action_name, action_name,
+			GTK_UI_MANAGER_AUTO, FALSE);
 
 		g_free (action_name);
 		g_free (tooltip);
diff --git a/shell/e-shell-window-private.c b/shell/e-shell-window-private.c
index 07f8f5b..e70e766 100644
--- a/shell/e-shell-window-private.c
+++ b/shell/e-shell-window-private.c
@@ -228,7 +228,7 @@ e_shell_window_private_init (EShellWindow *shell_window)
 
 	signal_handler_ids = g_array_new (FALSE, FALSE, sizeof (gulong));
 
-	priv->ui_manager = gtk_ui_manager_new ();
+	priv->ui_manager = e_ui_manager_new ();
 	priv->loaded_views = loaded_views;
 	priv->signal_handler_ids = signal_handler_ids;
 
@@ -282,20 +282,20 @@ e_shell_window_private_constructed (EShellWindow *shell_window)
 
 	e_shell_watch_window (shell, window);
 
-	e_load_ui_manager_set_express (priv->ui_manager,
-				       e_shell_get_express_mode (shell));
+	ui_manager = e_shell_window_get_ui_manager (shell_window);
+	e_shell_configure_ui_manager (shell, E_UI_MANAGER (ui_manager));
 
 	/* Defer actions and menu merging until we have set express mode */
 
 	e_shell_window_actions_init (shell_window);
 
-	accel_group = gtk_ui_manager_get_accel_group (priv->ui_manager);
+	accel_group = gtk_ui_manager_get_accel_group (ui_manager);
 	gtk_window_add_accel_group (GTK_WINDOW (shell_window), accel_group);
 
-	merge_id = gtk_ui_manager_new_merge_id (priv->ui_manager);
+	merge_id = gtk_ui_manager_new_merge_id (ui_manager);
 	priv->custom_rule_merge_id = merge_id;
 
-	merge_id = gtk_ui_manager_new_merge_id (priv->ui_manager);
+	merge_id = gtk_ui_manager_new_merge_id (ui_manager);
 	priv->gal_view_merge_id = merge_id;
 
 
@@ -425,7 +425,7 @@ e_shell_window_private_constructed (EShellWindow *shell_window)
 	key = "/apps/evolution/shell/view_defaults/statusbar_visible";
 	gconf_bridge_bind_property (bridge, key, object, "taskbar-visible");
 
-	if (e_shell_get_express_mode(NULL)) {
+	if (e_shell_get_express_mode (shell)) {
 		e_shell_window_set_switcher_visible (shell_window, FALSE);
 	} else {
 		object = G_OBJECT (shell_window);
@@ -456,9 +456,9 @@ e_shell_window_private_constructed (EShellWindow *shell_window)
 	shell_window_init_switcher_style (shell_window);
 
 	id = "org.gnome.evolution.shell";
-	ui_manager = e_shell_window_get_ui_manager (shell_window);
-	e_plugin_ui_register_manager (ui_manager, id, shell_window);
-	e_plugin_ui_enable_manager (ui_manager, id);
+	e_plugin_ui_register_manager (
+		E_UI_MANAGER (ui_manager), id, shell_window);
+	e_plugin_ui_enable_manager (E_UI_MANAGER (ui_manager), id);
 }
 
 void
diff --git a/shell/e-shell-window-private.h b/shell/e-shell-window-private.h
index b11222d..6050ce1 100644
--- a/shell/e-shell-window-private.h
+++ b/shell/e-shell-window-private.h
@@ -41,6 +41,7 @@
 #include <e-shell-view.h>
 #include <e-shell-switcher.h>
 #include <e-shell-window-actions.h>
+#include <e-shell-utils.h>
 
 #define E_SHELL_WINDOW_GET_PRIVATE(obj) \
 	(G_TYPE_INSTANCE_GET_PRIVATE \
diff --git a/shell/e-shell-window.c b/shell/e-shell-window.c
index 8cb1ed8..2834457 100644
--- a/shell/e-shell-window.c
+++ b/shell/e-shell-window.c
@@ -541,7 +541,8 @@ shell_window_create_shell_view (EShellWindow *shell_window,
 	/* Register the GtkUIManager ID for the shell view. */
 	id = E_SHELL_VIEW_GET_CLASS (shell_view)->ui_manager_id;
 	ui_manager = e_shell_window_get_ui_manager (shell_window);
-	e_plugin_ui_register_manager (ui_manager, id, shell_view);
+	e_plugin_ui_register_manager (
+		E_UI_MANAGER (ui_manager), id, shell_view);
 
 	/* Add pages to the various shell window notebooks. */
 
@@ -1149,18 +1150,6 @@ e_shell_window_get_safe_mode (EShellWindow *shell_window)
 }
 
 /**
- * e_shell_window_get_safe_mode:
- * @shell_window: an #EShellWindow
- *
- * Returns %TRUE if @shell_window is in "express mode".
- **/
-gboolean
-e_shell_window_get_express_mode	(EShellWindow *shell_window)
-{
-	return e_shell_get_express_mode (e_shell_window_get_shell (shell_window));
-}
-
-/**
  * e_shell_window_set_safe_mode:
  * @shell_window: an #EShellWindow
  * @safe_mode: whether to put @shell_window into "safe mode"
diff --git a/shell/e-shell-window.h b/shell/e-shell-window.h
index 3d8696a..0bd7107 100644
--- a/shell/e-shell-window.h
+++ b/shell/e-shell-window.h
@@ -117,7 +117,6 @@ void		e_shell_window_set_active_view	(EShellWindow *shell_window,
 gboolean	e_shell_window_get_safe_mode	(EShellWindow *shell_window);
 void		e_shell_window_set_safe_mode	(EShellWindow *shell_window,
 						 gboolean safe_mode);
-gboolean	e_shell_window_get_express_mode	(EShellWindow *shell_window);
 void		e_shell_window_add_action_group (EShellWindow *shell_window,
 						 const gchar *group_name);
 gboolean	e_shell_window_get_sidebar_visible
diff --git a/shell/e-shell.c b/shell/e-shell.c
index 48c724f..2627d95 100644
--- a/shell/e-shell.c
+++ b/shell/e-shell.c
@@ -59,11 +59,12 @@ struct _EShellPrivate {
 	guint online		: 1;
 	guint quit_cancelled	: 1;
 	guint safe_mode		: 1;
-	guint express		: 1;
+	guint express_mode	: 1;
 };
 
 enum {
 	PROP_0,
+	PROP_EXPRESS_MODE,
 	PROP_GEOMETRY,
 	PROP_MODULE_DIRECTORY,
 	PROP_NETWORK_AVAILABLE,
@@ -477,6 +478,13 @@ shell_sm_quit_cb (EShell *shell,
 }
 
 static void
+shell_set_express_mode (EShell *shell,
+                        gboolean express_mode)
+{
+	shell->priv->express_mode = express_mode;
+}
+
+static void
 shell_set_geometry (EShell *shell,
                     const gchar *geometry)
 {
@@ -501,6 +509,12 @@ shell_set_property (GObject *object,
                     GParamSpec *pspec)
 {
 	switch (property_id) {
+		case PROP_EXPRESS_MODE:
+			shell_set_express_mode (
+				E_SHELL (object),
+				g_value_get_boolean (value));
+			return;
+
 		case PROP_GEOMETRY:
 			shell_set_geometry (
 				E_SHELL (object),
@@ -536,6 +550,12 @@ shell_get_property (GObject *object,
                     GParamSpec *pspec)
 {
 	switch (property_id) {
+		case PROP_EXPRESS_MODE:
+			g_value_set_boolean (
+				value, e_shell_get_express_mode (
+				E_SHELL (object)));
+			return;
+
 		case PROP_MODULE_DIRECTORY:
 			g_value_set_string (
 				value, e_shell_get_module_directory (
@@ -624,14 +644,16 @@ shell_finalize (GObject *object)
 static void
 shell_constructed (GObject *object)
 {
+	EShellPrivate *priv;
+
+	priv = E_SHELL_GET_PRIVATE (object);
+
 	/* The first EShell instance is the default. */
 	if (default_shell == NULL) {
 		default_shell = object;
 		g_object_add_weak_pointer (object, &default_shell);
 	}
 
-	E_SHELL (object)->priv->express = e_shell_get_express_mode (NULL);
-
 	/* UniqueApp will have by this point determined whether we're
 	 * the only Evolution process running.  If so, proceed normally.
 	 * Otherwise we just issue commands to the other process. */
@@ -762,6 +784,23 @@ shell_class_init (EShellClass *class)
 	class->window_destroyed = shell_window_destroyed;
 
 	/**
+	 * EShell:express-mode
+	 *
+	 * Express mode alters Evolution's user interface to be more
+	 * usable on devices with small screens.
+	 **/
+	g_object_class_install_property (
+		object_class,
+		PROP_EXPRESS_MODE,
+		g_param_spec_boolean (
+			"express-mode",
+			"Express Mode",
+			"Whether express mode is enabled",
+			FALSE,
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT_ONLY));
+
+	/**
 	 * EShell:geometry
 	 *
 	 * User-specified initial window geometry string to apply
@@ -1565,6 +1604,22 @@ e_shell_send_receive (EShell *shell,
 }
 
 /**
+ * e_shell_get_express_mode:
+ * @shell: an #EShell
+ *
+ * Returns %TRUE if Evolution is in express mode.
+ *
+ * Returns: %TRUE if Evolution is in express mode
+ **/
+gboolean
+e_shell_get_express_mode (EShell *shell)
+{
+	g_return_val_if_fail (E_IS_SHELL (shell), FALSE);
+
+	return shell->priv->express_mode;
+}
+
+/**
  * e_shell_get_module_directory:
  * @shell: an #EShell
  *
@@ -1673,31 +1728,6 @@ e_shell_set_online (EShell *shell,
 }
 
 /**
- * e_shell_get_express_mode:
- * @shell: an #EShell, or NULL for the global value
- *
- * Returns %TRUE if Evolution is in express mode, %FALSE if Evolution not.
- *
- **/
-gboolean
-e_shell_get_express_mode (EShell *shell)
-{
-	if (shell)
-		return shell->priv->express;
-
-	if (g_getenv ("EVO_EXPRESS"))
-		return TRUE;
-
-	shell = e_shell_get_default ();
-	g_return_val_if_fail (shell != NULL, FALSE);
-
-	return gconf_client_get_bool (
-		shell->priv->gconf_client,
-		"/apps/evolution/shell/express_mode",
-		NULL);
-}
-
-/**
  * e_shell_get_preferences_window:
  * @shell: an #EShell
  *
diff --git a/shell/e-shell.h b/shell/e-shell.h
index 33d1e1c..5ff9abb 100644
--- a/shell/e-shell.h
+++ b/shell/e-shell.h
@@ -114,6 +114,7 @@ GList *		e_shell_get_watched_windows	(EShell *shell);
 GtkWindow *     e_shell_get_active_window	(EShell *shell);
 void		e_shell_send_receive		(EShell *shell,
 						 GtkWindow *parent);
+gboolean	e_shell_get_express_mode	(EShell *shell);
 const gchar *	e_shell_get_module_directory	(EShell *shell);
 gboolean	e_shell_get_network_available	(EShell *shell);
 void		e_shell_set_network_available	(EShell *shell,
@@ -121,7 +122,6 @@ void		e_shell_set_network_available	(EShell *shell,
 gboolean	e_shell_get_online		(EShell *shell);
 void		e_shell_set_online		(EShell *shell,
 						 gboolean online);
-gboolean	e_shell_get_express_mode	(EShell *shell);
 GtkWidget *	e_shell_get_preferences_window	(EShell *shell);
 void		e_shell_event			(EShell *shell,
 						 const gchar *event_name,
diff --git a/shell/main.c b/shell/main.c
index 72e9aed..40ce874 100644
--- a/shell/main.c
+++ b/shell/main.c
@@ -77,6 +77,7 @@
 #endif
 
 /* Command-line options.  */
+static gboolean express_mode = FALSE;
 static gboolean start_online = FALSE;
 static gboolean start_offline = FALSE;
 static gboolean setup_only = FALSE;
@@ -322,6 +323,8 @@ static GOptionEntry entries[] = {
 	  N_("Start in offline mode"), NULL },
 	{ "online", '\0', 0, G_OPTION_ARG_NONE, &start_online,
 	  N_("Start in online mode"), NULL },
+	{ "express", '\0', 0, G_OPTION_ARG_NONE, &express_mode,
+	  N_("Start in \"express\" mode"), NULL },
 #ifdef KILL_PROCESS_CMD
 	{ "force-shutdown", '\0', 0, G_OPTION_ARG_NONE, &force_shutdown,
 	  N_("Forcibly shut down Evolution"), NULL },
@@ -412,11 +415,12 @@ create_default_shell (void)
 	GError *error = NULL;
 
 	client = gconf_client_get_default ();
-	key = "/apps/evolution/shell/start_offline";
 
 	/* Requesting online or offline mode from the command-line
 	 * should be persistent, just like selecting it in the UI. */
 
+	key = "/apps/evolution/shell/start_offline";
+
 	if (start_online) {
 		online = TRUE;
 		gconf_client_set_bool (client, key, FALSE, &error);
@@ -433,7 +437,19 @@ create_default_shell (void)
 
 	if (error != NULL) {
 		g_warning ("%s", error->message);
-		g_error_free (error);
+		g_clear_error (&error);
+	}
+
+	/* Determine whether to run Evolution in "express" mode. */
+
+	key = "/apps/evolution/shell/express_mode";
+
+	if (!express_mode)
+		express_mode = gconf_client_get_bool (client, key, &error);
+
+	if (error != NULL) {
+		g_warning ("%s", error->message);
+		g_clear_error (&error);
 	}
 
 	shell = g_object_new (
@@ -441,6 +457,7 @@ create_default_shell (void)
 		"name", "org.gnome.Evolution",
 		"geometry", geometry,
 		"module-directory", EVOLUTION_MODULEDIR,
+		"express-mode", express_mode,
 		"online", online,
 		NULL);
 
diff --git a/widgets/misc/e-attachment-view.c b/widgets/misc/e-attachment-view.c
index 1d76b5d..9725604 100644
--- a/widgets/misc/e-attachment-view.c
+++ b/widgets/misc/e-attachment-view.c
@@ -28,6 +28,7 @@
 
 #include "e-util/e-binding.h"
 #include "e-util/e-selection.h"
+#include "e-util/e-ui-manager.h"
 #include "e-util/e-util.h"
 #include "e-attachment-dialog.h"
 #include "e-attachment-handler-image.h"
@@ -787,7 +788,7 @@ e_attachment_view_init (EAttachmentView *view)
 
 	priv = e_attachment_view_get_private (view);
 
-	ui_manager = gtk_ui_manager_new ();
+	ui_manager = e_ui_manager_new ();
 	priv->merge_id = gtk_ui_manager_new_merge_id (ui_manager);
 	priv->ui_manager = ui_manager;
 
diff --git a/widgets/misc/e-web-view.c b/widgets/misc/e-web-view.c
index ce41c32..8744bef 100644
--- a/widgets/misc/e-web-view.c
+++ b/widgets/misc/e-web-view.c
@@ -1229,7 +1229,7 @@ web_view_init (EWebView *web_view)
 
 	web_view->priv = E_WEB_VIEW_GET_PRIVATE (web_view);
 
-	ui_manager = gtk_ui_manager_new ();
+	ui_manager = e_ui_manager_new ();
 	web_view->priv->ui_manager = ui_manager;
 
 	g_signal_connect_swapped (
@@ -1331,8 +1331,8 @@ web_view_init (EWebView *web_view)
 		g_error ("%s", error->message);
 
 	id = "org.gnome.evolution.webview";
-	e_plugin_ui_register_manager (ui_manager, id, web_view);
-	e_plugin_ui_enable_manager (ui_manager, id);
+	e_plugin_ui_register_manager (E_UI_MANAGER (ui_manager), id, web_view);
+	e_plugin_ui_enable_manager (E_UI_MANAGER (ui_manager), id);
 }
 
 GType



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