[evolution] Bug 269852 - Label should be on "Message" menu when mail is selected ]I[



commit 1a23ecf70f67e331f54ad1b6e58fd5c8902bb937
Author: Milan Crha <mcrha redhat com>
Date:   Mon Jul 30 13:47:17 2018 +0200

    Bug 269852 - Label should be on "Message" menu when mail is selected ]I[
    
    Main menu's Message->Mark As->Label->... had been visible in all views,
    not only in the Mail view.

 src/mail/e-mail-reader.c                | 42 +++++++++++++++++++++++++++++++++
 src/mail/e-mail-reader.h                |  4 +++-
 src/modules/mail/e-mail-shell-content.c | 18 ++++++++++++++
 src/modules/mail/e-mail-shell-view.c    |  6 ++---
 4 files changed, 66 insertions(+), 4 deletions(-)
---
diff --git a/src/mail/e-mail-reader.c b/src/mail/e-mail-reader.c
index 95773c9c68..bb8a22f4e4 100644
--- a/src/mail/e-mail-reader.c
+++ b/src/mail/e-mail-reader.c
@@ -3470,6 +3470,34 @@ mail_reader_reload (EMailReader *reader)
        e_mail_display_reload (mail_display);
 }
 
+static void
+mail_reader_remove_ui (EMailReader *reader)
+{
+       EMailReaderPrivate *priv;
+       GtkWindow *window;
+       GtkUIManager *ui_manager = NULL;
+
+       g_return_if_fail (E_IS_MAIL_READER (reader));
+
+       priv = E_MAIL_READER_GET_PRIVATE (reader);
+
+       if (!priv->main_menu_label_merge_id)
+               return;
+
+       window = e_mail_reader_get_window (reader);
+       g_return_if_fail (window != NULL);
+
+       if (E_IS_SHELL_WINDOW (window))
+               ui_manager = e_shell_window_get_ui_manager (E_SHELL_WINDOW (window));
+       else if (E_IS_MAIL_BROWSER (window))
+               ui_manager = e_mail_browser_get_ui_manager (E_MAIL_BROWSER (window));
+
+       g_return_if_fail (ui_manager != NULL);
+       g_return_if_fail (GTK_IS_UI_MANAGER (ui_manager));
+
+       gtk_ui_manager_remove_ui (ui_manager, priv->main_menu_label_merge_id);
+}
+
 static void
 mail_reader_message_loaded_cb (CamelFolder *folder,
                                GAsyncResult *result,
@@ -4737,6 +4765,7 @@ e_mail_reader_default_init (EMailReaderInterface *iface)
        iface->update_actions = mail_reader_update_actions;
        iface->close_on_delete_or_junk = mail_reader_close_on_delete_or_junk;
        iface->reload = mail_reader_reload;
+       iface->remove_ui = mail_reader_remove_ui;
 
        g_object_interface_install_property (
                iface,
@@ -6346,3 +6375,16 @@ e_mail_reader_reload (EMailReader *reader)
 
        iface->reload (reader);
 }
+
+void
+e_mail_reader_remove_ui (EMailReader *reader)
+{
+       EMailReaderInterface *iface;
+
+       g_return_if_fail (E_IS_MAIL_READER (reader));
+
+       iface = E_MAIL_READER_GET_INTERFACE (reader);
+       g_return_if_fail (iface->remove_ui != NULL);
+
+       iface->remove_ui (reader);
+}
diff --git a/src/mail/e-mail-reader.h b/src/mail/e-mail-reader.h
index 3510163c25..de17f70bf5 100644
--- a/src/mail/e-mail-reader.h
+++ b/src/mail/e-mail-reader.h
@@ -138,9 +138,10 @@ struct _EMailReaderInterface {
        gboolean        (*close_on_delete_or_junk)
                                                (EMailReader *reader);
        void            (*reload)               (EMailReader *reader);
+       void            (*remove_ui)            (EMailReader *reader);
 
        /* Padding for future expansion */
-       gpointer reserved[2];
+       gpointer reserved[1];
 };
 
 GType          e_mail_reader_get_type          (void);
@@ -215,6 +216,7 @@ void                e_mail_reader_composer_created  (EMailReader *reader,
 void           e_mail_reader_connect_remote_content
                                                (EMailReader *reader);
 void           e_mail_reader_reload            (EMailReader *reader);
+void           e_mail_reader_remove_ui         (EMailReader *reader);
 
 G_END_DECLS
 
diff --git a/src/modules/mail/e-mail-shell-content.c b/src/modules/mail/e-mail-shell-content.c
index 2ca0e53429..dd507c0794 100644
--- a/src/modules/mail/e-mail-shell-content.c
+++ b/src/modules/mail/e-mail-shell-content.c
@@ -616,6 +616,23 @@ mail_shell_content_reload (EMailReader *reader)
        e_mail_reader_reload (reader);
 }
 
+static void
+mail_shell_content_remove_ui (EMailReader *reader)
+{
+       EMailShellContent *mail_shell_content;
+
+       mail_shell_content = E_MAIL_SHELL_CONTENT (reader);
+
+       if (!mail_shell_content->priv->mail_view)
+               return;
+
+       /* Forward this to our internal EMailView, which
+        * also implements the EMailReader interface. */
+       reader = E_MAIL_READER (mail_shell_content->priv->mail_view);
+
+       e_mail_reader_remove_ui (reader);
+}
+
 static void
 e_mail_shell_content_class_init (EMailShellContentClass *class)
 {
@@ -706,6 +723,7 @@ e_mail_shell_content_reader_init (EMailReaderInterface *iface)
        iface->open_selected_mail = mail_shell_content_open_selected_mail;
        iface->update_actions = mail_shell_content_update_actions;
        iface->reload = mail_shell_content_reload;
+       iface->remove_ui = mail_shell_content_remove_ui;
 }
 
 static void
diff --git a/src/modules/mail/e-mail-shell-view.c b/src/modules/mail/e-mail-shell-view.c
index 1f4758f43b..7449fe64bb 100644
--- a/src/modules/mail/e-mail-shell-view.c
+++ b/src/modules/mail/e-mail-shell-view.c
@@ -426,6 +426,7 @@ mail_shell_view_toggled (EShellView *shell_view)
 {
        EMailShellViewPrivate *priv;
        EShellWindow *shell_window;
+       EMailReader *reader;
        GtkUIManager *ui_manager;
        const gchar *basename;
        gboolean view_is_active;
@@ -435,19 +436,18 @@ mail_shell_view_toggled (EShellView *shell_view)
        shell_window = e_shell_view_get_shell_window (shell_view);
        ui_manager = e_shell_window_get_ui_manager (shell_window);
        view_is_active = e_shell_view_is_active (shell_view);
+       reader = E_MAIL_READER (e_mail_shell_content_get_mail_view (priv->mail_shell_content));
        basename = E_MAIL_READER_UI_DEFINITION;
 
        if (view_is_active && priv->merge_id == 0) {
-               EMailReader *reader;
-
                priv->merge_id = e_load_ui_manager_definition (ui_manager, basename);
 
-               reader = E_MAIL_READER (e_mail_shell_content_get_mail_view (priv->mail_shell_content));
                e_mail_reader_create_charset_menu (reader, ui_manager, priv->merge_id);
 
                /* This also fills the Label menu */
                e_mail_reader_update_actions (reader, e_mail_reader_check_state (reader));
        } else if (!view_is_active && priv->merge_id != 0) {
+               e_mail_reader_remove_ui (reader);
                gtk_ui_manager_remove_ui (ui_manager, priv->merge_id);
                gtk_ui_manager_ensure_update (ui_manager);
                priv->merge_id = 0;


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