[evolution] Bug 269852 - Label should be on "Message" menu when mail is selected ]I[
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Bug 269852 - Label should be on "Message" menu when mail is selected ]I[
- Date: Mon, 30 Jul 2018 11:51:10 +0000 (UTC)
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]