diff options
author | Michael Meeks <michael.meeks@novell.com> | 2010-03-03 18:36:43 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2010-03-14 09:53:16 +0800 |
commit | 19eea41c74154855cb68ee3a1fb41e2ec136b764 (patch) | |
tree | 4c638c63b1bdca7a2352795c1da0e30fc5b14e7e | |
parent | 3d95369f38b22dea1fc22bb3f2cf306ae82aed9d (diff) | |
download | gsoc2013-evolution-19eea41c74154855cb68ee3a1fb41e2ec136b764.tar.gz gsoc2013-evolution-19eea41c74154855cb68ee3a1fb41e2ec136b764.tar.zst gsoc2013-evolution-19eea41c74154855cb68ee3a1fb41e2ec136b764.zip |
clean up the 'express' mode hooks for UI Managers and start to
extend them to plugins - use a simple one-off boolean on the UI Manager
instead of exhaustively trying to propagate this information everywhere.
-rw-r--r-- | e-util/e-plugin-ui.c | 5 | ||||
-rw-r--r-- | e-util/e-util.c | 122 | ||||
-rw-r--r-- | e-util/e-util.h | 9 | ||||
-rw-r--r-- | mail/e-mail-browser.c | 7 | ||||
-rw-r--r-- | modules/mail/e-mail-shell-view.c | 6 | ||||
-rw-r--r-- | shell/e-shell-view.c | 6 | ||||
-rw-r--r-- | shell/e-shell-window-actions.c | 6 | ||||
-rw-r--r-- | shell/e-shell-window-private.c | 32 | ||||
-rw-r--r-- | ui/evolution-shell.ui | 2 |
9 files changed, 123 insertions, 72 deletions
diff --git a/e-util/e-plugin-ui.c b/e-util/e-plugin-ui.c index c3b5b0df20..3ca8703d5a 100644 --- a/e-util/e-plugin-ui.c +++ b/e-util/e-plugin-ui.c @@ -16,6 +16,7 @@ */ #include "e-plugin-ui.h" +#include "e-util.h" #include <string.h> @@ -238,8 +239,8 @@ 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 = gtk_ui_manager_add_ui_from_string ( - ui_manager, ui_definition, -1, &error); + merge_id = e_load_ui_manager_definition_from_string ( + ui_manager, ui_definition, &error); if (error != NULL) { g_warning ("%s", error->message); diff --git a/e-util/e-util.c b/e-util/e-util.c index 16f665171b..f86ee1bff4 100644 --- a/e-util/e-util.c +++ b/e-util/e-util.c @@ -310,24 +310,103 @@ e_load_ui_builder_definition (GtkBuilder *builder, } } + +void +e_load_ui_manager_set_express (GtkUIManager *ui_manager, + gboolean express) +{ + fprintf (stderr, "set express on %p to %d\n", ui_manager, 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")); + fprintf (stderr, "get express on %p to %d\n", ui_manager, 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 - * @is_express: are we in 'express' mode ? * * 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 @is_express a - * simplified version of the UI may be presented. + * 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, - gboolean is_express) + const gchar *basename) { gchar *filename; guint merge_id = 0; @@ -339,37 +418,8 @@ e_load_ui_manager_definition (GtkUIManager *ui_manager, filename = g_build_filename (EVOLUTION_UIDIR, basename, NULL); - /* - * Very simple line based pre-processing based on comments: - * <!-- if [!]EXPRESS --> ... <!-- endif --> - */ - if (g_file_get_contents (filename, &buffer, NULL, &error)) { - int i; - gchar *filtered, **lines; - gboolean include = TRUE; - - lines = g_strsplit (buffer, "\n", -1); - for (i = 0; lines[i]; i++) { - char *p; - if ((p = strstr (lines[i], "<!-- if "))) { - gboolean not_express = lines[i][8] == '!'; - lines[i][0] = '\0'; - include = is_express ^ not_express; - fprintf (stderr, "not exporess: %d from '%s' include to %d\n", - not_express, lines[i], include); - } else if ((p = strstr (lines[i], "<!-- endif"))) { - lines[i][0] = '\0'; - include = TRUE; - } - 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); - } + 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); diff --git a/e-util/e-util.h b/e-util/e-util.h index 5d369595bb..34c02a2507 100644 --- a/e-util/e-util.h +++ b/e-util/e-util.h @@ -65,9 +65,14 @@ 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, - gboolean express); + 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 91dacbb392..13934d9c59 100644 --- a/mail/e-mail-browser.c +++ b/mail/e-mail-browser.c @@ -505,9 +505,8 @@ 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_shell_get_express_mode (shell)); - gtk_ui_manager_add_ui_from_string (ui_manager, ui, -1, NULL); + e_load_ui_manager_definition (ui_manager, E_MAIL_READER_UI_DEFINITION); + e_load_ui_manager_definition_from_string (ui_manager, ui, NULL); merge_id = gtk_ui_manager_new_merge_id (ui_manager); e_mail_reader_create_charset_menu (reader, ui_manager, merge_id); @@ -777,6 +776,8 @@ mail_browser_init (EMailBrowser *browser) 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)); browser->priv->action_group = gtk_action_group_new ("mail-browser"); browser->priv->html_display = em_format_html_display_new (); diff --git a/modules/mail/e-mail-shell-view.c b/modules/mail/e-mail-shell-view.c index d922689b56..c72a366159 100644 --- a/modules/mail/e-mail-shell-view.c +++ b/modules/mail/e-mail-shell-view.c @@ -177,11 +177,7 @@ mail_shell_view_toggled (EShellView *shell_view) basename = E_MAIL_READER_UI_DEFINITION; if (view_is_active && priv->merge_id == 0) { - gboolean express = e_shell_get_express_mode ( - e_shell_backend_get_shell ( - e_shell_view_get_shell_backend (shell_view))); - priv->merge_id = e_load_ui_manager_definition ( - ui_manager, basename, express); + priv->merge_id = e_load_ui_manager_definition (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-view.c b/shell/e-shell-view.c index d029627153..b23966b627 100644 --- a/shell/e-shell-view.c +++ b/shell/e-shell-view.c @@ -594,11 +594,7 @@ shell_view_toggled (EShellView *shell_view) id = shell_view_class->ui_manager_id; if (view_is_active && priv->merge_id == 0) { - gboolean express = e_shell_get_express_mode ( - e_shell_backend_get_shell ( - e_shell_view_get_shell_backend (shell_view))); - priv->merge_id = e_load_ui_manager_definition ( - ui_manager, basename, express); + priv->merge_id = e_load_ui_manager_definition (ui_manager, basename); e_plugin_ui_enable_manager (ui_manager, id); } else if (!view_is_active && priv->merge_id != 0) { diff --git a/shell/e-shell-window-actions.c b/shell/e-shell-window-actions.c index b29a96e49b..a07fb1d5f2 100644 --- a/shell/e-shell-window-actions.c +++ b/shell/e-shell-window-actions.c @@ -1867,16 +1867,12 @@ e_shell_window_actions_init (EShellWindow *shell_window) GtkActionGroup *action_group; EFocusTracker *focus_tracker; GtkUIManager *ui_manager; - gboolean express; gchar *path; g_return_if_fail (E_IS_SHELL_WINDOW (shell_window)); - express = e_shell_get_express_mode ( - e_shell_window_get_shell (shell_window)); ui_manager = e_shell_window_get_ui_manager (shell_window); - - e_load_ui_manager_definition (ui_manager, "evolution-shell.ui", express); + e_load_ui_manager_definition (ui_manager, "evolution-shell.ui"); /* Shell Actions */ action_group = ACTION_GROUP (SHELL); diff --git a/shell/e-shell-window-private.c b/shell/e-shell-window-private.c index d380d25021..32d870563a 100644 --- a/shell/e-shell-window-private.c +++ b/shell/e-shell-window-private.c @@ -220,8 +220,6 @@ e_shell_window_private_init (EShellWindow *shell_window) EShellWindowPrivate *priv = shell_window->priv; GHashTable *loaded_views; GArray *signal_handler_ids; - GtkAccelGroup *accel_group; - guint merge_id; loaded_views = g_hash_table_new_full ( g_str_hash, g_str_equal, @@ -249,19 +247,8 @@ e_shell_window_private_init (EShellWindow *shell_window) e_shell_window_add_action_group (shell_window, "lockdown-print-setup"); e_shell_window_add_action_group (shell_window, "lockdown-save-to-disk"); - merge_id = gtk_ui_manager_new_merge_id (priv->ui_manager); - priv->custom_rule_merge_id = merge_id; - - merge_id = gtk_ui_manager_new_merge_id (priv->ui_manager); - priv->gal_view_merge_id = merge_id; - gtk_window_set_title (GTK_WINDOW (shell_window), _("Evolution")); - e_shell_window_actions_init (shell_window); - - accel_group = gtk_ui_manager_get_accel_group (priv->ui_manager); - gtk_window_add_accel_group (GTK_WINDOW (shell_window), accel_group); - g_signal_connect_swapped ( priv->ui_manager, "connect-proxy", G_CALLBACK (shell_window_connect_proxy_cb), shell_window); @@ -275,6 +262,7 @@ e_shell_window_private_constructed (EShellWindow *shell_window) EShell *shell; GConfBridge *bridge; GtkAction *action; + GtkAccelGroup *accel_group; GtkActionGroup *action_group; GtkUIManager *ui_manager; GtkBox *box; @@ -282,6 +270,7 @@ e_shell_window_private_constructed (EShellWindow *shell_window) GtkWidget *widget; GtkWindow *window; GObject *object; + guint merge_id; const gchar *key; const gchar *id; @@ -292,6 +281,23 @@ 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)); + + /* 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); + gtk_window_add_accel_group (GTK_WINDOW (shell_window), accel_group); + + merge_id = gtk_ui_manager_new_merge_id (priv->ui_manager); + priv->custom_rule_merge_id = merge_id; + + merge_id = gtk_ui_manager_new_merge_id (priv->ui_manager); + priv->gal_view_merge_id = merge_id; + + /* Construct window widgets. */ widget = gtk_vbox_new (FALSE, 0); diff --git a/ui/evolution-shell.ui b/ui/evolution-shell.ui index 3b3211a50c..4fe9de2bc9 100644 --- a/ui/evolution-shell.ui +++ b/ui/evolution-shell.ui @@ -92,7 +92,7 @@ <toolitem action='send-receive'/> <separator/> <placeholder name='toolbar-actions'/> -<!-- if !EXPRESS --> +<!-- if EXPRESS --> <toolitem action='preferences'/> <!-- endif --> </toolbar> |