summaryrefslogtreecommitdiff
blob: 882448e2f07cfe1a0b1d11f2c8570c997d67e97b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
From 080791256d78a6d97384b4eef0d411cdc73feeb0 Mon Sep 17 00:00:00 2001
From: Milan Crha <mcrha@redhat.com>
Date: Fri, 23 Sep 2022 11:34:51 +0200
Subject: [PATCH 2/2] I#1969 - EShellWindow: The 'New' menu is not filled after
 start

Related to https://gitlab.gnome.org/GNOME/evolution/-/issues/1969
---
 src/shell/e-shell-window.c | 45 ++++++++++++++++++++++++++++++++++++--
 1 file changed, 43 insertions(+), 2 deletions(-)

diff --git a/src/shell/e-shell-window.c b/src/shell/e-shell-window.c
index e7be30feee..86c83e5e1e 100644
--- a/src/shell/e-shell-window.c
+++ b/src/shell/e-shell-window.c
@@ -47,6 +47,7 @@ enum {
 enum {
 	CLOSE_ALERT,
 	SHELL_VIEW_CREATED,
+	UPDATE_NEW_MENU,
 	LAST_SIGNAL
 };
 
@@ -120,6 +121,17 @@ shell_window_toolbar_update_new_menu (GtkMenuToolButton *menu_tool_button,
 	gtk_menu_tool_button_set_menu (menu_tool_button, menu);
 }
 
+static void
+shell_window_toolbar_update_new_menu_sig (EShellWindow *shell_window,
+                                          GtkMenuToolButton *menu_tool_button)
+{
+	GtkWidget *menu;
+
+	/* Update the "New" menu tool button submenu. */
+	menu = e_shell_window_create_new_menu (shell_window);
+	gtk_menu_tool_button_set_menu (menu_tool_button, menu);
+}
+
 static gboolean
 shell_window_active_view_to_prefer_item (GBinding *binding,
                                          const GValue *source_value,
@@ -160,6 +172,8 @@ shell_window_set_notebook_page (EShellWindow *shell_window,
 	g_return_if_fail (page_num >= 0);
 
 	gtk_notebook_set_current_page (notebook, page_num);
+
+	g_signal_emit (shell_window, signals[UPDATE_NEW_MENU], 0, NULL);
 }
 
 static void
@@ -463,8 +477,8 @@ shell_window_construct_menubar (EShellWindow *shell_window)
 		main_menu, "visible",
 		G_BINDING_SYNC_CREATE);
 
-	e_signal_connect_notify (
-		shell_window, "notify::active-view",
+	g_signal_connect (
+		shell_window, "update-new-menu",
 		G_CALLBACK (shell_window_menubar_update_new_menu), NULL);
 
 	return main_menu;
@@ -544,6 +558,11 @@ shell_window_construct_toolbar (EShellWindow *shell_window)
 		G_CALLBACK (shell_window_toolbar_update_new_menu),
 		shell_window);
 
+	g_signal_connect_object (
+		shell_window, "update-new-menu",
+		G_CALLBACK (shell_window_toolbar_update_new_menu_sig),
+		item, 0);
+
 	gtk_box_pack_start (GTK_BOX (box), toolbar, TRUE, TRUE, 0);
 
 	toolbar = e_shell_window_get_managed_widget (
@@ -1133,6 +1152,24 @@ e_shell_window_class_init (EShellWindowClass *class)
 		G_TYPE_NONE, 1,
 		E_TYPE_SHELL_VIEW);
 
+	/*
+	 * EShellWindow::update-new-menu
+	 * @shell_window: the #EShellWindow
+	 *
+	 * Emitted when the 'New' menu should be updated.
+	 *
+	 * Since: 3.44.5
+	 */
+	signals[UPDATE_NEW_MENU] = g_signal_new (
+		"update-new-menu",
+		G_OBJECT_CLASS_TYPE (object_class),
+		G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+		0,
+		NULL, NULL,
+		g_cclosure_marshal_VOID__VOID,
+		G_TYPE_NONE, 0,
+		G_TYPE_NONE);
+
 	binding_set = gtk_binding_set_by_class (class);
 	gtk_binding_entry_add_signal (
 		binding_set, GDK_KEY_Escape, 0, "close-alert", 0);
@@ -2049,6 +2086,8 @@ e_shell_window_register_new_item_actions (EShellWindow *shell_window,
 				G_OBJECT (action),
 				"primary", GINT_TO_POINTER (TRUE));
 	}
+
+	g_signal_emit (shell_window, signals[UPDATE_NEW_MENU], 0, NULL);
 }
 
 /**
@@ -2126,6 +2165,8 @@ e_shell_window_register_new_source_actions (EShellWindow *shell_window,
 			G_OBJECT (action),
 			"backend-name", (gpointer) backend_name);
 	}
+
+	g_signal_emit (shell_window, signals[UPDATE_NEW_MENU], 0, NULL);
 }
 
 /**
-- 
2.37.4