summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Turner <mattst88@gentoo.org>2022-12-02 15:37:05 -0500
committerMatt Turner <mattst88@gentoo.org>2022-12-02 15:37:36 -0500
commitc1ff0f9f4d13b7c98e4619812cbdedb79865c701 (patch)
tree8a8bf3ec2aa56c41e4610b39d6cf2110f9daa32b /mail-client/evolution
parentsys-devel/binutils-hppa64: drop 2.39-r1, 2.39-r3 (diff)
downloadgentoo-c1ff0f9f4d13b7c98e4619812cbdedb79865c701.tar.gz
gentoo-c1ff0f9f4d13b7c98e4619812cbdedb79865c701.tar.bz2
gentoo-c1ff0f9f4d13b7c98e4619812cbdedb79865c701.zip
mail-client/evolution: Add the patches
Signed-off-by: Matt Turner <mattst88@gentoo.org>
Diffstat (limited to 'mail-client/evolution')
-rw-r--r--mail-client/evolution/files/3.44.4-I-1969-EShellWindow-The-New-menu-is-not-filled-after.patch119
-rw-r--r--mail-client/evolution/files/3.44.4-I-2001-Mail-Update-preview-s-iframe-height-to-match-.patch417
2 files changed, 536 insertions, 0 deletions
diff --git a/mail-client/evolution/files/3.44.4-I-1969-EShellWindow-The-New-menu-is-not-filled-after.patch b/mail-client/evolution/files/3.44.4-I-1969-EShellWindow-The-New-menu-is-not-filled-after.patch
new file mode 100644
index 000000000000..882448e2f07c
--- /dev/null
+++ b/mail-client/evolution/files/3.44.4-I-1969-EShellWindow-The-New-menu-is-not-filled-after.patch
@@ -0,0 +1,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
+
diff --git a/mail-client/evolution/files/3.44.4-I-2001-Mail-Update-preview-s-iframe-height-to-match-.patch b/mail-client/evolution/files/3.44.4-I-2001-Mail-Update-preview-s-iframe-height-to-match-.patch
new file mode 100644
index 000000000000..e7fe8acd07a6
--- /dev/null
+++ b/mail-client/evolution/files/3.44.4-I-2001-Mail-Update-preview-s-iframe-height-to-match-.patch
@@ -0,0 +1,417 @@
+From 44ac716d199b1c0a07a92014d2d64c28a077f876 Mon Sep 17 00:00:00 2001
+From: Milan Crha <mcrha@redhat.com>
+Date: Fri, 16 Sep 2022 08:47:07 +0200
+Subject: [PATCH 1/2] I#2001 - Mail: Update preview's iframe height to match
+ its content
+
+Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/2001
+---
+ data/webkit/e-web-view.js | 60 ++++++++++++----
+ data/webkit/webview.css | 32 ++++-----
+ src/em-format/e-mail-formatter-text-plain.c | 2 +-
+ src/mail/e-mail-display.c | 69 ++++++++++++++++++-
+ .../e-mail-formatter-text-highlight.c | 14 +++-
+ 5 files changed, 140 insertions(+), 37 deletions(-)
+
+diff --git a/data/webkit/e-web-view.js b/data/webkit/e-web-view.js
+index a8f99c4668..058b4e578c 100644
+--- a/data/webkit/e-web-view.js
++++ b/data/webkit/e-web-view.js
+@@ -772,6 +772,38 @@ Evo.EnsureMainDocumentInitialized = function()
+ Evo.initializeAndPostContentLoaded(null);
+ }
+
++Evo.mailDisplayUpdateIFramesHeightRecursive = function(doc)
++{
++ if (!doc)
++ return;
++
++ var ii, iframes;
++
++ iframes = doc.getElementsByTagName("iframe");
++
++ /* Update from bottom to top */
++ for (ii = 0; ii < iframes.length; ii++) {
++ Evo.mailDisplayUpdateIFramesHeightRecursive(iframes[ii].contentDocument);
++ }
++
++ if (!doc.body || !doc.defaultView || !doc.defaultView.frameElement)
++ return;
++
++ if (doc.defaultView.frameElement.height == doc.body.scrollHeight)
++ doc.defaultView.frameElement.height = 10;
++ doc.defaultView.frameElement.height = doc.body.scrollHeight + 2 + (doc.body.scrollWidth > doc.body.clientWidth ? 20 : 0);
++}
++
++Evo.MailDisplayUpdateIFramesHeight = function()
++{
++ var scrolly = document.defaultView ? document.defaultView.scrollY : -1;
++
++ Evo.mailDisplayUpdateIFramesHeightRecursive(document);
++
++ if (scrolly != -1 && document.defaultView.scrollY != scrolly)
++ document.defaultView.scrollTo(0, scrolly);
++}
++
+ if (this instanceof Window && this.document) {
+ this.document.onload = function() { Evo.initializeAndPostContentLoaded(this); };
+
+@@ -857,9 +889,8 @@ Evo.mailDisplayResizeContentToPreviewWidth = function()
+ local_width -= 2; /* 1 + 1 frame borders */
+ } else if (!iframes.length) {
+ /* Message main body */
+- local_width -= 8; /* 8 + 8 margins of body without iframes */
+- if (level > 1)
+- local_width -= 8;
++ local_width -= level * 20; /* 10 + 10 margins of body without iframes */
++ local_width -= 4;
+
+ Evo.addRuleIntoStyleSheetDocument(doc, "-e-mail-formatter-style-sheet", "body", "width: " + local_width + "px;");
+ Evo.addRuleIntoStyleSheetDocument(doc, "-e-mail-formatter-style-sheet", ".part-container", "width: " + local_width + "px;");
+@@ -869,7 +900,7 @@ Evo.mailDisplayResizeContentToPreviewWidth = function()
+ Evo.addRuleIntoStyleSheetDocument(doc, "-e-mail-formatter-style-sheet", "body",
+ "width: " + local_width + "px;");
+
+- local_width -= 2; /* 1 + 1 frame borders */
++ local_width -= 4; /* 2 + 2 frame borders */
+
+ Evo.addRuleIntoStyleSheetDocument(doc, "-e-mail-formatter-style-sheet", ".part-container-nostyle iframe",
+ "width: " + local_width + "px;");
+@@ -881,19 +912,15 @@ Evo.mailDisplayResizeContentToPreviewWidth = function()
+ Evo.addRuleIntoStyleSheetDocument(doc, "-e-mail-formatter-style-sheet", ".part-container iframe",
+ "width: " + (local_width - 10) + "px;");
+ } else {
+- local_width -= 20; /* 10 + 10 margins of body with iframes */
+- local_width -= 8; /* attachment margin */
+- local_width -= 2; /* 1 + 1 frame borders */
++ local_width -= (level - 1) * 20; /* 10 + 10 margins of body with iframes */
++ local_width -= 4; /* 2 + 2 frame borders */
++ local_width -= 10; /* attachment margin */
+
+- /* We need to subtract another 10 pixels from the iframe width to
+- * have the iframe's borders on the correct place. We can't subtract
+- * it from local_width as we don't want to propagate this change
+- * further. */
+ Evo.addRuleIntoStyleSheetDocument(doc, "-e-mail-formatter-style-sheet", ".part-container-nostyle iframe",
+- "width: " + (local_width - 10) + "px;");
++ "width: " + local_width + "px;");
+
+ Evo.addRuleIntoStyleSheetDocument(doc, "-e-mail-formatter-style-sheet", "body > .part-container-nostyle iframe",
+- "width: " + (local_width - 10) + "px;");
++ "width: " + local_width + "px;");
+ }
+
+ /* Add rules to every sub document */
+@@ -904,7 +931,7 @@ Evo.mailDisplayResizeContentToPreviewWidth = function()
+ var tmp_local_width = local_width;
+
+ if (level == 0) {
+- tmp_local_width -= 8; /* attachment's margin */
++ tmp_local_width -= 10; /* attachment's margin */
+
+ Evo.addRuleIntoStyleSheetDocument(doc, "-e-mail-formatter-style-sheet", ".attachment-wrapper iframe:not([src*=\"__formatas=\"])",
+ "width: " + tmp_local_width + "px;");
+@@ -913,7 +940,7 @@ Evo.mailDisplayResizeContentToPreviewWidth = function()
+ "width: " + tmp_local_width + "px;");
+
+ Evo.addRuleIntoStyleSheetDocument(doc, "-e-mail-formatter-style-sheet", "body > .part-container-nostyle iframe",
+- "width: " + local_width + "px;");
++ "width: " + tmp_local_width + "px;");
+ }
+
+ this.set_iframe_and_body_width (iframes[ii].contentDocument, tmp_local_width, original_width, level + 1);
+@@ -926,6 +953,7 @@ Evo.mailDisplayResizeContentToPreviewWidth = function()
+ width -= 20; /* 10 + 10 margins of body */
+
+ traversar.set_iframe_and_body_width(document, width, width, 0);
++ window.webkit.messageHandlers.scheduleIFramesHeightUpdate.postMessage(0);
+ }
+
+ Evo.mailDisplayUpdateMagicSpacebarState = function()
+@@ -1294,6 +1322,8 @@ Evo.MailDisplayShowAttachment = function(element_id, show)
+ window.webkit.messageHandlers.contentLoaded.postMessage(iframe_id);
+ Evo.mailDisplayUpdateMagicSpacebarState();
+ }
++ } else if (elem.ownerDocument.defaultView.frameElement) {
++ window.webkit.messageHandlers.scheduleIFramesHeightUpdate.postMessage(0);
+ }
+ }
+
+diff --git a/data/webkit/webview.css b/data/webkit/webview.css
+index 0d21253644..5b08388672 100644
+--- a/data/webkit/webview.css
++++ b/data/webkit/webview.css
+@@ -12,8 +12,8 @@ img {
+ }
+
+ body {
+- /* Use margin so that children can safely use width=100% */
+- margin: 5px 10px 5px 10px;
++ /* Use padding so that children can safely use width=100% */
++ padding: 8px;
+ }
+
+ body, div, p, td {
+@@ -38,21 +38,21 @@ img#__evo-contact-photo {
+
+ img.navigable {
+ cursor: pointer;
+- margin-right: 4px;
++ padding-right: 4px;
+ }
+
+ .attachments {
+ background: #FFF;
+ border: 1px solid silver;
+- margin: 10px 10px 10px 10px;
++ padding: 10px 10px 10px 10px;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+ }
+
+ .attachment {
+- margin-left: 8px;
+- margin-right: 0px;
++ padding-left: 8px;
++ padding-right: 0px;
+ }
+
+ .attachment td {
+@@ -66,21 +66,21 @@ iframe:not([id$=".itip"]) {
+
+ .part-container {
+ height: 100%;
+- margin-top: 2px;
+- margin-bottom: 2px;
++ padding: 0px;
+ }
+
+ .part-container-nostyle iframe {
+- margin-right: 10px;
++ margin: 0px;
++ padding-right: 0px;
+ }
+
+ .part-container-inner-margin {
+- margin: 8px;
++ padding: 0px;
+ }
+
+ object { /* GtkWidgets */
+- margin-top: 2px;
+- margin-bottom: 2px;
++ padding-top: 2px;
++ padding-bottom: 2px;
+ }
+
+ .__evo-highlight {
+@@ -175,7 +175,7 @@ th.rtl {
+ /***** PRINTING *******/
+
+ .printing-header {
+- margin-bottom: 20px;
++ padding-bottom: 20px;
+ }
+
+ .printing-header h1,
+@@ -195,7 +195,7 @@ th.rtl {
+ /******* ITIP *********/
+ .itip.icon {
+ float: left;
+- margin-right: 5px;
++ padding-right: 5px;
+ }
+
+ .itip.content {
+@@ -204,7 +204,7 @@ th.rtl {
+ }
+
+ .itip.description {
+- margin: 5px;
++ padding: 5px;
+ }
+
+ .itip tr {
+@@ -228,7 +228,7 @@ th.rtl {
+ }
+
+ #table_row_buttons img {
+- margin-right: 5px;
++ padding-right: 5px;
+ vertical-align: middle;
+ }
+
+diff --git a/src/em-format/e-mail-formatter-text-plain.c b/src/em-format/e-mail-formatter-text-plain.c
+index 7c6befda6b..3858bcdb3d 100644
+--- a/src/em-format/e-mail-formatter-text-plain.c
++++ b/src/em-format/e-mail-formatter-text-plain.c
+@@ -111,7 +111,7 @@ emfe_text_plain_format (EMailFormatterExtension *extension,
+ string =
+ "<div class=\"part-container pre "
+ "-e-web-view-background-color -e-web-view-text-color\" "
+- "style=\"border: none; padding: 8px; margin: 0;\">";
++ "style=\"border: none; padding: 0; margin: 0;\">";
+
+ g_output_stream_write_all (
+ stream, string, strlen (string),
+diff --git a/src/mail/e-mail-display.c b/src/mail/e-mail-display.c
+index cc38c65957..c60ab45cc5 100644
+--- a/src/mail/e-mail-display.c
++++ b/src/mail/e-mail-display.c
+@@ -83,6 +83,7 @@ struct _EMailDisplayPrivate {
+ GSettings *settings;
+
+ guint scheduled_reload;
++ guint iframes_height_update_id;
+
+ GHashTable *old_settings;
+
+@@ -537,6 +538,43 @@ initialize_web_view_colors (EMailDisplay *display,
+ e_web_view_get_cancellable (E_WEB_VIEW (display)));
+ }
+
++static gboolean
++mail_display_can_use_frame_flattening (void)
++{
++ guint wk_major, wk_minor;
++
++ wk_major = webkit_get_major_version ();
++ wk_minor = webkit_get_minor_version ();
++
++ /* The 2.38 is the last version, which supports frame-flattening;
++ prefer it over the manual and expensive calculations. */
++ return (wk_major < 2) || (wk_major == 2 && wk_minor <= 38);
++}
++
++static gboolean
++mail_display_iframes_height_update_cb (gpointer user_data)
++{
++ EMailDisplay *mail_display = user_data;
++
++ mail_display->priv->iframes_height_update_id = 0;
++
++ e_web_view_jsc_run_script (WEBKIT_WEB_VIEW (mail_display), e_web_view_get_cancellable (E_WEB_VIEW (mail_display)),
++ "Evo.MailDisplayUpdateIFramesHeight();");
++
++ return G_SOURCE_REMOVE;
++}
++
++static void
++mail_display_schedule_iframes_height_update (EMailDisplay *mail_display)
++{
++ if (mail_display_can_use_frame_flattening ())
++ return;
++
++ if (mail_display->priv->iframes_height_update_id)
++ g_source_remove (mail_display->priv->iframes_height_update_id);
++ mail_display->priv->iframes_height_update_id = g_timeout_add (100, mail_display_iframes_height_update_cb, mail_display);
++}
++
+ static void
+ mail_display_change_one_attachment_visibility (EMailDisplay *display,
+ EAttachment *attachment,
+@@ -1353,6 +1391,8 @@ mail_display_content_loaded_cb (EWebView *web_view,
+ gtk_widget_grab_focus (widget);
+ }
+ }
++
++ mail_display_schedule_iframes_height_update (mail_display);
+ }
+
+ static void
+@@ -1475,6 +1515,11 @@ mail_display_dispose (GObject *object)
+ priv->scheduled_reload = 0;
+ }
+
++ if (priv->iframes_height_update_id > 0) {
++ g_source_remove (priv->iframes_height_update_id);
++ priv->iframes_height_update_id = 0;
++ }
++
+ if (priv->settings != NULL) {
+ g_signal_handlers_disconnect_matched (
+ priv->settings, G_SIGNAL_MATCH_DATA,
+@@ -1599,6 +1644,18 @@ mail_display_magic_spacebar_state_changed_cb (WebKitUserContentManager *manager,
+ mail_display->priv->magic_spacebar_state = jsc_value_to_int32 (jsc_value);
+ }
+
++static void
++mail_display_schedule_iframes_height_update_cb (WebKitUserContentManager *manager,
++ WebKitJavascriptResult *js_result,
++ gpointer user_data)
++{
++ EMailDisplay *mail_display = user_data;
++
++ g_return_if_fail (mail_display != NULL);
++
++ mail_display_schedule_iframes_height_update (mail_display);
++}
++
+ static void
+ mail_display_constructed (GObject *object)
+ {
+@@ -1611,9 +1668,11 @@ mail_display_constructed (GObject *object)
+ /* Chain up to parent's constructed() method. */
+ G_OBJECT_CLASS (e_mail_display_parent_class)->constructed (object);
+
+- g_object_set (webkit_web_view_get_settings (WEBKIT_WEB_VIEW (object)),
+- "enable-frame-flattening", TRUE,
+- NULL);
++ if (mail_display_can_use_frame_flattening ()) {
++ g_object_set (webkit_web_view_get_settings (WEBKIT_WEB_VIEW (object)),
++ "enable-frame-flattening", TRUE,
++ NULL);
++ }
+
+ display = E_MAIL_DISPLAY (object);
+ web_view = E_WEB_VIEW (object);
+@@ -1661,8 +1720,12 @@ mail_display_constructed (GObject *object)
+ g_signal_connect_object (manager, "script-message-received::mailDisplayMagicSpacebarStateChanged",
+ G_CALLBACK (mail_display_magic_spacebar_state_changed_cb), display, 0);
+
++ g_signal_connect_object (manager, "script-message-received::scheduleIFramesHeightUpdate",
++ G_CALLBACK (mail_display_schedule_iframes_height_update_cb), display, 0);
++
+ webkit_user_content_manager_register_script_message_handler (manager, "mailDisplayHeadersCollapsed");
+ webkit_user_content_manager_register_script_message_handler (manager, "mailDisplayMagicSpacebarStateChanged");
++ webkit_user_content_manager_register_script_message_handler (manager, "scheduleIFramesHeightUpdate");
+
+ e_extensible_load_extensions (E_EXTENSIBLE (object));
+ }
+diff --git a/src/modules/text-highlight/e-mail-formatter-text-highlight.c b/src/modules/text-highlight/e-mail-formatter-text-highlight.c
+index d7c641c157..f1db9bf79c 100644
+--- a/src/modules/text-highlight/e-mail-formatter-text-highlight.c
++++ b/src/modules/text-highlight/e-mail-formatter-text-highlight.c
+@@ -135,16 +135,26 @@ text_hightlight_read_data_thread (gpointer user_data)
+ {
+ TextHighlightClosure *closure = user_data;
+ gint nbuffer = 10240;
++ gssize read;
++ gsize wrote = 0;
+ gchar *buffer;
+
+ g_return_val_if_fail (closure != NULL, NULL);
+
+ buffer = g_new (gchar, nbuffer);
+
++ strcpy (buffer, "<style>body{margin:0; padding:8px;}</style>");
++ read = strlen (buffer);
++
++ if (!g_output_stream_write_all (closure->output_stream, buffer, read, &wrote, closure->cancellable, &closure->error) ||
++ (gssize) wrote != read || closure->error) {
++ g_free (buffer);
++ return NULL;
++ }
++
+ while (!camel_stream_eos (closure->read_stream) &&
+ !g_cancellable_set_error_if_cancelled (closure->cancellable, &closure->error)) {
+- gssize read;
+- gsize wrote = 0;
++ wrote = 0;
+
+ read = camel_stream_read (closure->read_stream, buffer, nbuffer, closure->cancellable, &closure->error);
+ if (read < 0 || closure->error)
+--
+2.37.4
+