diff --git a/dist b/dist new file mode 100644 index 0000000000000000000000000000000000000000..89c1faffc18349bb12eee2371e9dc43bf419b95c --- /dev/null +++ b/dist @@ -0,0 +1 @@ +an9 diff --git a/download b/download new file mode 100644 index 0000000000000000000000000000000000000000..71879c17eb16b77b04a83fc66942def74a41e178 --- /dev/null +++ b/download @@ -0,0 +1 @@ +ec866ca2cb5ee60c00de9be0beec5f2a evolution-3.40.4.tar.xz diff --git a/emoji.data b/emoji.data new file mode 100644 index 0000000000000000000000000000000000000000..fdf919d66f49c9e2256fc9cf705df58c231e88bf Binary files /dev/null and b/emoji.data differ diff --git a/evolution-3.28.5-cmake-variable-name-comparison.patch b/evolution-3.28.5-cmake-variable-name-comparison.patch deleted file mode 100644 index 88b9a112e0cbfa45f4b0af044a74932821fce7a0..0000000000000000000000000000000000000000 --- a/evolution-3.28.5-cmake-variable-name-comparison.patch +++ /dev/null @@ -1,44 +0,0 @@ -diff -up evolution-data-server-3.28.5/cmake/modules/PrintableOptions.cmake.cmake-variable-name-comparison evolution-data-server-3.28.5/cmake/modules/PrintableOptions.cmake ---- evolution-data-server-3.28.5/cmake/modules/PrintableOptions.cmake.cmake-variable-name-comparison 2021-06-16 16:45:58.554763738 +0200 -+++ evolution-data-server-3.28.5/cmake/modules/PrintableOptions.cmake 2021-06-16 16:47:13.343021509 +0200 -@@ -19,32 +19,32 @@ - # prints all the build options previously added with the above functions - - macro(add_printable_variable_bare _name) -- if(_name STREQUAL "") -+ if("${_name}" STREQUAL "") - message(FATAL_ERROR "variable name cannot be empty") -- endif(_name STREQUAL "") -+ endif("${_name}" STREQUAL "") - list(APPEND _printable_options ${_name}) - endmacro() - - macro(add_printable_option _name _description _default_value) -- if(_name STREQUAL "") -+ if("${_name}" STREQUAL "") - message(FATAL_ERROR "option name cannot be empty") -- endif(_name STREQUAL "") -+ endif("${_name}" STREQUAL "") - option(${_name} ${_description} ${_default_value}) - add_printable_variable_bare(${_name}) - endmacro() - - macro(add_printable_variable _name _description _default_value) -- if(_name STREQUAL "") -+ if("${_name}" STREQUAL "") - message(FATAL_ERROR "variable name cannot be empty") -- endif(_name STREQUAL "") -+ endif("${_name}" STREQUAL "") - set(${_name} ${_default_value} CACHE STRING ${_description}) - add_printable_variable_bare(${_name}) - endmacro() - - macro(add_printable_variable_path _name _description _default_value) -- if(_name STREQUAL "") -+ if("${_name}" STREQUAL "") - message(FATAL_ERROR "path variable name cannot be empty") -- endif(_name STREQUAL "") -+ endif("${_name}" STREQUAL "") - set(${_name} ${_default_value} CACHE PATH ${_description}) - add_printable_variable_bare(${_name}) - endmacro() diff --git a/evolution-3.28.5-config-lookup-crash.patch b/evolution-3.28.5-config-lookup-crash.patch deleted file mode 100644 index 345325197fdce5caa47d827b9e25d0ab98ed18bd..0000000000000000000000000000000000000000 --- a/evolution-3.28.5-config-lookup-crash.patch +++ /dev/null @@ -1,37 +0,0 @@ -diff --git a/src/e-util/e-collection-account-wizard.c b/src/e-util/e-collection-account-wizard.c -index 49b1ac4a96..84ccd3fd53 100644 ---- a/src/e-util/e-collection-account-wizard.c -+++ b/src/e-util/e-collection-account-wizard.c -@@ -1858,8 +1858,6 @@ collection_account_wizard_dispose (GObject *object) - wizard->priv->store_passwords = NULL; - } - -- g_warn_if_fail (wizard->priv->running_result == NULL); -- - if (wizard->priv->running_result) { - e_simple_async_result_complete_idle (wizard->priv->running_result); - g_clear_object (&wizard->priv->running_result); -diff --git a/src/e-util/e-config-lookup.c b/src/e-util/e-config-lookup.c -index d0eff38ef2..3b68fa6876 100644 ---- a/src/e-util/e-config-lookup.c -+++ b/src/e-util/e-config-lookup.c -@@ -277,6 +277,11 @@ config_lookup_dispose (GObject *object) - - e_config_lookup_cancel_all (config_lookup); - -+ if (config_lookup->priv->pool) { -+ g_thread_pool_free (config_lookup->priv->pool, TRUE, TRUE); -+ config_lookup->priv->pool = NULL; -+ } -+ - g_mutex_lock (&config_lookup->priv->property_lock); - - g_clear_object (&config_lookup->priv->run_cancellable); -@@ -305,7 +310,6 @@ config_lookup_finalize (GObject *object) - EConfigLookup *config_lookup = E_CONFIG_LOOKUP (object); - - g_slist_free_full (config_lookup->priv->results, g_object_unref); -- g_thread_pool_free (config_lookup->priv->pool, TRUE, FALSE); - g_mutex_clear (&config_lookup->priv->property_lock); - - /* Chain up to parent's method. */ diff --git a/evolution-3.28.5-crash-empty-attendee.patch b/evolution-3.28.5-crash-empty-attendee.patch deleted file mode 100644 index a56af4f803aac0326cdcd6d07f710a87d3a01e75..0000000000000000000000000000000000000000 --- a/evolution-3.28.5-crash-empty-attendee.patch +++ /dev/null @@ -1,314 +0,0 @@ -diff -up evolution-3.28.5/src/calendar/gui/e-comp-editor.c.crash-empty-attendee evolution-3.28.5/src/calendar/gui/e-comp-editor.c ---- evolution-3.28.5/src/calendar/gui/e-comp-editor.c.crash-empty-attendee 2018-07-30 15:37:05.000000000 +0200 -+++ evolution-3.28.5/src/calendar/gui/e-comp-editor.c 2020-05-15 12:24:47.067773299 +0200 -@@ -112,10 +112,10 @@ ece_restore_focus (ECompEditor *comp_edi - g_return_if_fail (E_IS_COMP_EDITOR (comp_editor)); - - if (comp_editor->priv->restore_focus) { -- gtk_widget_grab_focus (comp_editor->priv->restore_focus); -- - if (GTK_IS_ENTRY (comp_editor->priv->restore_focus)) -- gtk_editable_set_position (GTK_EDITABLE (comp_editor->priv->restore_focus), 0); -+ gtk_entry_grab_focus_without_selecting (GTK_ENTRY (comp_editor->priv->restore_focus)); -+ else -+ gtk_widget_grab_focus (comp_editor->priv->restore_focus); - - comp_editor->priv->restore_focus = NULL; - } -@@ -2610,6 +2610,7 @@ e_comp_editor_fill_component (ECompEdito - icalcomponent *component) - { - ECompEditorClass *comp_editor_class; -+ GtkWidget *focused_widget; - gboolean is_valid; - - g_return_val_if_fail (E_IS_COMP_EDITOR (comp_editor), FALSE); -@@ -2619,8 +2620,34 @@ e_comp_editor_fill_component (ECompEdito - g_return_val_if_fail (comp_editor_class != NULL, FALSE); - g_return_val_if_fail (comp_editor_class->fill_component != NULL, FALSE); - -+ focused_widget = gtk_window_get_focus (GTK_WINDOW (comp_editor)); -+ if (focused_widget) { -+ GtkWidget *parent, *ce_widget = GTK_WIDGET (comp_editor); -+ -+ /* When a cell-renderer is focused and editing the cell content, -+ then unfocus it may mean to free the currently focused widget, -+ thus get the GtkTreeView in such cases. */ -+ parent = focused_widget; -+ while (parent = gtk_widget_get_parent (parent), parent && parent != ce_widget) { -+ if (GTK_IS_TREE_VIEW (parent)) { -+ focused_widget = parent; -+ break; -+ } -+ } -+ -+ /* Save any pending changes */ -+ gtk_window_set_focus (GTK_WINDOW (comp_editor), NULL); -+ } -+ - is_valid = comp_editor_class->fill_component (comp_editor, component); - -+ if (focused_widget) { -+ if (GTK_IS_ENTRY (focused_widget)) -+ gtk_entry_grab_focus_without_selecting (GTK_ENTRY (focused_widget)); -+ else -+ gtk_widget_grab_focus (focused_widget); -+ } -+ - if (is_valid && comp_editor->priv->validation_alert) { - e_alert_response (comp_editor->priv->validation_alert, GTK_RESPONSE_CLOSE); - g_clear_object (&comp_editor->priv->validation_alert); -diff -up evolution-3.28.5/src/calendar/gui/e-comp-editor-event.c.crash-empty-attendee evolution-3.28.5/src/calendar/gui/e-comp-editor-event.c ---- evolution-3.28.5/src/calendar/gui/e-comp-editor-event.c.crash-empty-attendee 2020-05-15 12:23:49.488776711 +0200 -+++ evolution-3.28.5/src/calendar/gui/e-comp-editor-event.c 2020-05-15 12:24:47.064773299 +0200 -@@ -67,14 +67,14 @@ ece_event_update_times (ECompEditorEvent - EDateEdit *date_edit, - gboolean change_end_datetime) - { -- GtkWidget *widget; - guint flags; - - g_return_if_fail (E_IS_COMP_EDITOR_EVENT (event_editor)); - g_return_if_fail (E_IS_DATE_EDIT (date_edit)); - -- widget = e_date_edit_get_entry (date_edit); -- if (widget && gtk_widget_has_focus (widget)) -+ if (e_date_edit_has_focus (date_edit) || -+ !e_date_edit_date_is_valid (date_edit) || -+ !e_date_edit_time_is_valid (date_edit)) - return; - - if (!e_comp_editor_get_updating (E_COMP_EDITOR (event_editor))) { -diff -up evolution-3.28.5/src/calendar/gui/e-comp-editor-property-part.c.crash-empty-attendee evolution-3.28.5/src/calendar/gui/e-comp-editor-property-part.c ---- evolution-3.28.5/src/calendar/gui/e-comp-editor-property-part.c.crash-empty-attendee 2020-05-15 12:24:06.520775702 +0200 -+++ evolution-3.28.5/src/calendar/gui/e-comp-editor-property-part.c 2020-05-15 12:30:44.589752111 +0200 -@@ -589,6 +589,23 @@ struct _ECompEditorPropertyPartDatetimeP - G_DEFINE_ABSTRACT_TYPE (ECompEditorPropertyPartDatetime, e_comp_editor_property_part_datetime, E_TYPE_COMP_EDITOR_PROPERTY_PART) - - static void -+ecepp_datetime_changed_cb (ECompEditorPropertyPart *property_part) -+{ -+ GtkWidget *edit_widget; -+ -+ g_return_if_fail (E_IS_COMP_EDITOR_PROPERTY_PART_DATETIME (property_part)); -+ -+ edit_widget = e_comp_editor_property_part_get_edit_widget (property_part); -+ -+ if (!edit_widget || e_date_edit_has_focus (E_DATE_EDIT (edit_widget)) || -+ !e_date_edit_date_is_valid (E_DATE_EDIT (edit_widget)) || -+ !e_date_edit_time_is_valid (E_DATE_EDIT (edit_widget))) -+ return; -+ -+ e_comp_editor_property_part_emit_changed (property_part); -+} -+ -+static void - ecepp_datetime_create_widgets (ECompEditorPropertyPart *property_part, - GtkWidget **out_label_widget, - GtkWidget **out_edit_widget) -@@ -616,9 +633,9 @@ ecepp_datetime_create_widgets (ECompEdit - gtk_widget_show (*out_edit_widget); - - g_signal_connect_swapped (*out_edit_widget, "changed", -- G_CALLBACK (e_comp_editor_property_part_emit_changed), property_part); -+ G_CALLBACK (ecepp_datetime_changed_cb), property_part); - g_signal_connect_swapped (*out_edit_widget, "notify::show-time", -- G_CALLBACK (e_comp_editor_property_part_emit_changed), property_part); -+ G_CALLBACK (ecepp_datetime_changed_cb), property_part); - } - - static void -diff -up evolution-3.28.5/src/e-util/e-dateedit.c.crash-empty-attendee evolution-3.28.5/src/e-util/e-dateedit.c ---- evolution-3.28.5/src/e-util/e-dateedit.c.crash-empty-attendee 2020-05-15 12:22:47.352780394 +0200 -+++ evolution-3.28.5/src/e-util/e-dateedit.c 2020-05-15 12:24:47.068773299 +0200 -@@ -527,6 +527,13 @@ e_date_edit_new (void) - } - - static void -+on_time_entry_changed_cb (GtkEditable *editable, -+ EDateEdit *dedit) -+{ -+ e_date_edit_check_time_changed (dedit); -+} -+ -+static void - create_children (EDateEdit *dedit) - { - EDateEditPrivate *priv; -@@ -636,6 +643,9 @@ create_children (EDateEdit *dedit) - g_signal_connect_after ( - child, "focus_out_event", - G_CALLBACK (on_time_entry_focus_out), dedit); -+ g_signal_connect ( -+ child, "changed", -+ G_CALLBACK (on_time_entry_changed_cb), dedit); - g_signal_connect_after ( - priv->time_combo, "changed", - G_CALLBACK (on_date_edit_time_selected), dedit); -@@ -2000,7 +2010,6 @@ on_date_entry_focus_out (GtkEntry *entry - EDateEdit *dedit) - { - struct tm tmp_tm; -- GtkWidget *msg_dialog; - - tmp_tm.tm_year = 0; - tmp_tm.tm_mon = 0; -@@ -2009,21 +2018,9 @@ on_date_entry_focus_out (GtkEntry *entry - e_date_edit_check_date_changed (dedit); - - if (!e_date_edit_date_is_valid (dedit)) { -- msg_dialog = gtk_message_dialog_new ( -- NULL, -- GTK_DIALOG_MODAL, -- GTK_MESSAGE_WARNING, -- GTK_BUTTONS_OK, -- "%s", _("Invalid Date Value")); -- gtk_dialog_run (GTK_DIALOG (msg_dialog)); -- gtk_widget_destroy (msg_dialog); -- e_date_edit_get_date ( -- dedit, &tmp_tm.tm_year, -- &tmp_tm.tm_mon, &tmp_tm.tm_mday); -- e_date_edit_set_date ( -- dedit, tmp_tm.tm_year, -- tmp_tm.tm_mon, tmp_tm.tm_mday); -- gtk_widget_grab_focus (GTK_WIDGET (entry)); -+ gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY, "dialog-warning"); -+ gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_SECONDARY, _("Invalid Date Value")); -+ gtk_entry_grab_focus_without_selecting (entry); - return FALSE; - } else if (e_date_edit_get_date ( - dedit, &tmp_tm.tm_year, &tmp_tm.tm_mon, &tmp_tm.tm_mday)) { -@@ -2041,6 +2038,10 @@ on_date_entry_focus_out (GtkEntry *entry - dedit->priv->date_set_to_none = TRUE; - e_date_edit_update_date_entry (dedit); - } -+ -+ gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY, NULL); -+ gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_SECONDARY, NULL); -+ - return FALSE; - } - -@@ -2049,23 +2050,17 @@ on_time_entry_focus_out (GtkEntry *entry - GdkEventFocus *event, - EDateEdit *dedit) - { -- GtkWidget *msg_dialog; -- - e_date_edit_check_time_changed (dedit); - - if (!e_date_edit_time_is_valid (dedit)) { -- msg_dialog = gtk_message_dialog_new ( -- NULL, -- GTK_DIALOG_MODAL, -- GTK_MESSAGE_WARNING, -- GTK_BUTTONS_OK, -- "%s", _("Invalid Time Value")); -- gtk_dialog_run (GTK_DIALOG (msg_dialog)); -- gtk_widget_destroy (msg_dialog); -- e_date_edit_set_time (dedit,e_date_edit_get_time (dedit)); -- gtk_widget_grab_focus (GTK_WIDGET (entry)); -- return FALSE; -+ gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_PRIMARY, "dialog-warning"); -+ gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_PRIMARY, _("Invalid Time Value")); -+ gtk_entry_grab_focus_without_selecting (entry); -+ } else { -+ gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_PRIMARY, NULL); -+ gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_PRIMARY, NULL); - } -+ - return FALSE; - } - -@@ -2363,7 +2358,7 @@ e_date_edit_check_time_changed (EDateEdi - tmp_tm.tm_min); - - if (time_changed) { -- e_date_edit_update_time_entry (dedit); -+ /* Do not call e_date_edit_update_time_entry (dedit); let the user correct the value */ - g_signal_emit (dedit, signals[CHANGED], 0); - } - } -@@ -2467,6 +2462,20 @@ e_date_edit_set_date_internal (EDateEdit - } - } - -+ if (date_changed) { -+ GtkEntry *entry; -+ -+ entry = GTK_ENTRY (dedit->priv->date_entry); -+ -+ if (priv->date_is_valid) { -+ gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY, NULL); -+ gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_SECONDARY, NULL); -+ } else { -+ gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_SECONDARY, "dialog-warning"); -+ gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_SECONDARY, _("Invalid Date Value")); -+ } -+ } -+ - return date_changed; - } - -@@ -2510,6 +2519,20 @@ e_date_edit_set_time_internal (EDateEdit - } - } - -+ if (time_changed) { -+ GtkEntry *entry; -+ -+ entry = GTK_ENTRY (gtk_bin_get_child (GTK_BIN (dedit->priv->time_combo))); -+ -+ if (priv->time_is_valid) { -+ gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_PRIMARY, NULL); -+ gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_PRIMARY, NULL); -+ } else { -+ gtk_entry_set_icon_from_icon_name (entry, GTK_ENTRY_ICON_PRIMARY, "dialog-warning"); -+ gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_PRIMARY, _("Invalid Time Value")); -+ } -+ } -+ - return time_changed; - } - -@@ -2561,3 +2584,13 @@ e_date_edit_get_entry (EDateEdit *dedit) - - return GTK_WIDGET (dedit->priv->date_entry); - } -+ -+gboolean -+e_date_edit_has_focus (EDateEdit *dedit) -+{ -+ g_return_val_if_fail (E_IS_DATE_EDIT (dedit), FALSE); -+ -+ return gtk_widget_has_focus (GTK_WIDGET (dedit)) || -+ (dedit->priv->date_entry && gtk_widget_has_focus (dedit->priv->date_entry)) || -+ (dedit->priv->time_combo && gtk_widget_has_focus (dedit->priv->time_combo)); -+} -diff -up evolution-3.28.5/src/e-util/e-dateedit.h.crash-empty-attendee evolution-3.28.5/src/e-util/e-dateedit.h ---- evolution-3.28.5/src/e-util/e-dateedit.h.crash-empty-attendee 2020-05-15 12:24:41.256773643 +0200 -+++ evolution-3.28.5/src/e-util/e-dateedit.h 2020-05-15 12:24:47.068773299 +0200 -@@ -211,6 +211,8 @@ void e_date_edit_set_get_time_callback - - GtkWidget * e_date_edit_get_entry (EDateEdit *dedit); - -+gboolean e_date_edit_has_focus (EDateEdit *dedit); -+ - G_END_DECLS - - #endif /* E_DATE_EDIT_H */ -diff -up evolution-3.28.5/src/modules/calendar/e-cal-shell-content.c.crash-empty-attendee evolution-3.28.5/src/modules/calendar/e-cal-shell-content.c ---- evolution-3.28.5/src/modules/calendar/e-cal-shell-content.c.crash-empty-attendee 2018-07-30 15:37:05.000000000 +0200 -+++ evolution-3.28.5/src/modules/calendar/e-cal-shell-content.c 2020-05-15 12:21:11.487786075 +0200 -@@ -847,9 +847,9 @@ cal_shell_content_get_attendee_prop (ica - while (prop != NULL) { - const gchar *attendee; - -- attendee = icalproperty_get_attendee (prop); -+ attendee = itip_strip_mailto (icalproperty_get_attendee (prop)); - -- if (g_str_equal (itip_strip_mailto (attendee), address)) -+ if (attendee && g_ascii_strcasecmp (attendee, address) == 0) - return prop; - - prop = icalcomponent_get_next_property ( diff --git a/evolution-3.28.5-cve-2018-15587-reposition-signature-bar.patch b/evolution-3.28.5-cve-2018-15587-reposition-signature-bar.patch deleted file mode 100644 index de50995c09b7ae901e8dd38e88c4b3ba22607546..0000000000000000000000000000000000000000 --- a/evolution-3.28.5-cve-2018-15587-reposition-signature-bar.patch +++ /dev/null @@ -1,383 +0,0 @@ -diff -up evolution-3.28.5/src/em-format/e-mail-formatter-utils.c.cve-2018-15587-reposition-signature-bar evolution-3.28.5/src/em-format/e-mail-formatter-utils.c ---- evolution-3.28.5/src/em-format/e-mail-formatter-utils.c.cve-2018-15587-reposition-signature-bar 2018-07-30 15:37:05.000000000 +0200 -+++ evolution-3.28.5/src/em-format/e-mail-formatter-utils.c 2019-10-24 16:21:32.730944332 +0200 -@@ -549,71 +549,136 @@ e_mail_formatter_format_security_header - EMailPart *part, - guint32 flags) - { -- const gchar* part_id; -- gchar* part_id_prefix; -- GString* tmp; -+ struct _validity_flags { -+ guint32 flags; -+ const gchar *description_complete; -+ const gchar *description_partial; -+ } validity_flags[] = { -+ { E_MAIL_PART_VALIDITY_PGP | E_MAIL_PART_VALIDITY_SIGNED, N_("GPG signed"), N_("partially GPG signed") }, -+ { E_MAIL_PART_VALIDITY_PGP | E_MAIL_PART_VALIDITY_ENCRYPTED, N_("GPG encrypted"), N_("partially GPG encrypted") }, -+ { E_MAIL_PART_VALIDITY_SMIME | E_MAIL_PART_VALIDITY_SIGNED, N_("S/MIME signed"), N_("partially S/MIME signed") }, -+ { E_MAIL_PART_VALIDITY_SMIME | E_MAIL_PART_VALIDITY_ENCRYPTED, N_("S/MIME encrypted"), N_("partially S/MIME encrypted") } -+ }; -+ const gchar *part_id; -+ gchar *part_id_prefix; - GQueue queue = G_QUEUE_INIT; - GList *head, *link; -+ guint32 check_valid_flags = 0; -+ gint part_id_prefix_len; -+ gboolean is_partial = FALSE; -+ guint ii; - - g_return_if_fail (E_IS_MAIL_PART_HEADERS (part)); - - /* Get prefix of this PURI */ - part_id = e_mail_part_get_id (part); - part_id_prefix = g_strndup (part_id, g_strrstr (part_id, ".") - part_id); -- -- /* Add encryption/signature header */ -- tmp = g_string_new (""); -+ part_id_prefix_len = strlen (part_id_prefix); - - e_mail_part_list_queue_parts (context->part_list, NULL, &queue); - - head = g_queue_peek_head_link (&queue); - -- /* Find first secured part. */ -- for (link = head; link != NULL; link = g_list_next(link)) { -+ /* Ignore the main message, the headers and the end parts */ -+ #define should_skip_part(_id) \ -+ (g_strcmp0 (_id, part_id_prefix) == 0 || \ -+ (_id && g_str_has_suffix (_id, ".rfc822.end")) || \ -+ (_id && strlen (_id) == part_id_prefix_len + 8 /* strlen (".headers") */ && \ -+ g_strcmp0 (_id + part_id_prefix_len, ".headers") == 0)) -+ -+ /* Check parts for this ID. */ -+ for (link = head; link != NULL; link = g_list_next (link)) { - EMailPart *mail_part = link->data; -+ const gchar *id = e_mail_part_get_id (mail_part); - -- if (!e_mail_part_has_validity (mail_part)) -+ if (!e_mail_part_id_has_prefix (mail_part, part_id_prefix)) - continue; - -- if (!e_mail_part_id_has_prefix (mail_part, part_id_prefix)) -+ if (should_skip_part (id)) - continue; - -- if (e_mail_part_get_validity (mail_part, E_MAIL_PART_VALIDITY_PGP | E_MAIL_PART_VALIDITY_SIGNED)) { -- g_string_append (tmp, _("GPG signed")); -+ if (!e_mail_part_has_validity (mail_part)) { -+ /* A part without validity, thus it's partially signed/encrypted */ -+ is_partial = TRUE; -+ } else { -+ guint32 validies = 0; -+ for (ii = 0; ii < G_N_ELEMENTS (validity_flags); ii++) { -+ if (e_mail_part_get_validity (mail_part, validity_flags[ii].flags)) -+ validies |= validity_flags[ii].flags; -+ } -+ check_valid_flags |= validies; - } - -- if (e_mail_part_get_validity (mail_part, E_MAIL_PART_VALIDITY_PGP | E_MAIL_PART_VALIDITY_ENCRYPTED)) { -- if (tmp->len > 0) -- g_string_append (tmp, ", "); -- g_string_append (tmp, _("GPG encrypted")); -- } -+ /* Do not traverse sub-messages */ -+ if (g_str_has_suffix (e_mail_part_get_id (mail_part), ".rfc822") && -+ !g_str_equal (e_mail_part_get_id (mail_part), part_id_prefix)) -+ link = e_mail_formatter_find_rfc822_end_iter (link); -+ } - -- if (e_mail_part_get_validity (mail_part, E_MAIL_PART_VALIDITY_SMIME | E_MAIL_PART_VALIDITY_SIGNED)) { -- if (tmp->len > 0) -- g_string_append (tmp, ", "); -- g_string_append (tmp, _("S/MIME signed")); -+ if (check_valid_flags) { -+ GString *tmp; -+ -+ if (!is_partial) { -+ for (link = head; link != NULL && !is_partial; link = g_list_next (link)) { -+ EMailPart *mail_part = link->data; -+ const gchar *id = e_mail_part_get_id (mail_part); -+ -+ if (!e_mail_part_id_has_prefix (mail_part, part_id_prefix)) -+ continue; -+ -+ if (should_skip_part (id)) -+ continue; -+ -+ if (!e_mail_part_has_validity (mail_part)) { -+ /* A part without validity, thus it's partially signed/encrypted */ -+ is_partial = TRUE; -+ break; -+ } -+ -+ is_partial = !e_mail_part_get_validity (mail_part, check_valid_flags); -+ -+ /* Do not traverse sub-messages */ -+ if (g_str_has_suffix (e_mail_part_get_id (mail_part), ".rfc822") && -+ !g_str_equal (e_mail_part_get_id (mail_part), part_id_prefix)) -+ link = e_mail_formatter_find_rfc822_end_iter (link); -+ } - } - -- if (e_mail_part_get_validity (mail_part, E_MAIL_PART_VALIDITY_SMIME | E_MAIL_PART_VALIDITY_ENCRYPTED)) { -- if (tmp->len > 0) -- g_string_append (tmp, ", "); -- g_string_append (tmp, _("S/MIME encrypted")); -+ /* Add encryption/signature header */ -+ tmp = g_string_new (""); -+ -+ for (link = head; link; link = g_list_next (link)) { -+ EMailPart *mail_part = link->data; -+ const gchar *id = e_mail_part_get_id (mail_part); -+ -+ if (!e_mail_part_has_validity (mail_part) || -+ !e_mail_part_id_has_prefix (mail_part, part_id_prefix)) -+ continue; -+ -+ if (should_skip_part (id)) -+ continue; -+ -+ for (ii = 0; ii < G_N_ELEMENTS (validity_flags); ii++) { -+ if (e_mail_part_get_validity (mail_part, validity_flags[ii].flags)) { -+ if (tmp->len > 0) -+ g_string_append (tmp, ", "); -+ g_string_append (tmp, is_partial ? _(validity_flags[ii].description_partial) : _(validity_flags[ii].description_complete)); -+ } -+ } -+ -+ break; - } - -- break; -- } -+ if (tmp->len > 0) -+ e_mail_formatter_format_header (formatter, buffer, _("Security"), tmp->str, flags, "UTF-8"); - -- if (tmp->len > 0) { -- e_mail_formatter_format_header ( -- formatter, buffer, -- _("Security"), tmp->str, -- flags, -- "UTF-8"); -+ g_string_free (tmp, TRUE); - } - -+ #undef should_skip_part -+ - while (!g_queue_is_empty (&queue)) - g_object_unref (g_queue_pop_head (&queue)); - -- g_string_free (tmp, TRUE); - g_free (part_id_prefix); - } -diff -up evolution-3.28.5/src/em-format/e-mail-parser-application-smime.c.cve-2018-15587-reposition-signature-bar evolution-3.28.5/src/em-format/e-mail-parser-application-smime.c ---- evolution-3.28.5/src/em-format/e-mail-parser-application-smime.c.cve-2018-15587-reposition-signature-bar 2018-07-30 15:37:05.000000000 +0200 -+++ evolution-3.28.5/src/em-format/e-mail-parser-application-smime.c 2019-10-24 16:21:32.730944332 +0200 -@@ -22,6 +22,7 @@ - - #include - -+#include "e-mail-formatter-utils.h" - #include "e-mail-parser-extension.h" - #include "e-mail-part-utils.h" - -@@ -104,6 +105,10 @@ empe_app_smime_parse (EMailParserExtensi - mail_part, valid, - E_MAIL_PART_VALIDITY_ENCRYPTED | - E_MAIL_PART_VALIDITY_SMIME); -+ -+ /* Do not traverse sub-messages */ -+ if (g_str_has_suffix (e_mail_part_get_id (mail_part), ".rfc822")) -+ link = e_mail_formatter_find_rfc822_end_iter (link); - } - - e_queue_transfer (&work_queue, out_mail_parts); -diff -up evolution-3.28.5/src/em-format/e-mail-parser.c.cve-2018-15587-reposition-signature-bar evolution-3.28.5/src/em-format/e-mail-parser.c ---- evolution-3.28.5/src/em-format/e-mail-parser.c.cve-2018-15587-reposition-signature-bar 2018-07-30 15:37:05.000000000 +0200 -+++ evolution-3.28.5/src/em-format/e-mail-parser.c 2019-10-24 16:21:32.729944332 +0200 -@@ -79,6 +79,67 @@ GType e_mail_parser_application_smime_ge - static gpointer parent_class; - - static void -+mail_parser_move_security_before_headers (GQueue *part_queue) -+{ -+ GList *link, *last_headers = NULL; -+ GSList *headers_stack = NULL; -+ -+ link = g_queue_peek_head_link (part_queue); -+ while (link) { -+ EMailPart *part = link->data; -+ const gchar *id; -+ -+ if (!part) { -+ link = g_list_next (link); -+ continue; -+ } -+ -+ id = e_mail_part_get_id (part); -+ if (!id) { -+ link = g_list_next (link); -+ continue; -+ } -+ -+ if (g_str_has_suffix (id, ".rfc822")) { -+ headers_stack = g_slist_prepend (headers_stack, last_headers); -+ last_headers = NULL; -+ } else if (g_str_has_suffix (id, ".rfc822.end")) { -+ g_warn_if_fail (headers_stack != NULL); -+ -+ if (headers_stack) { -+ last_headers = headers_stack->data; -+ headers_stack = g_slist_remove (headers_stack, last_headers); -+ } else { -+ last_headers = NULL; -+ } -+ } -+ -+ if (g_strcmp0 (e_mail_part_get_mime_type (part), "application/vnd.evolution.headers") == 0) { -+ last_headers = link; -+ link = g_list_next (link); -+ } else if (g_strcmp0 (e_mail_part_get_mime_type (part), "application/vnd.evolution.secure-button") == 0) { -+ g_warn_if_fail (last_headers != NULL); -+ -+ if (last_headers) { -+ GList *next = g_list_next (link); -+ -+ g_warn_if_fail (g_queue_remove (part_queue, part)); -+ g_queue_insert_before (part_queue, last_headers, part); -+ -+ link = next; -+ } else { -+ link = g_list_next (link); -+ } -+ } else { -+ link = g_list_next (link); -+ } -+ } -+ -+ g_warn_if_fail (headers_stack == NULL); -+ g_slist_free (headers_stack); -+} -+ -+static void - mail_parser_run (EMailParser *parser, - EMailPartList *part_list, - GCancellable *cancellable) -@@ -132,6 +193,8 @@ mail_parser_run (EMailParser *parser, - break; - } - -+ mail_parser_move_security_before_headers (&mail_part_queue); -+ - while (!g_queue_is_empty (&mail_part_queue)) { - mail_part = g_queue_pop_head (&mail_part_queue); - e_mail_part_list_add_part (part_list, mail_part); -diff -up evolution-3.28.5/src/em-format/e-mail-parser-inlinepgp-encrypted.c.cve-2018-15587-reposition-signature-bar evolution-3.28.5/src/em-format/e-mail-parser-inlinepgp-encrypted.c ---- evolution-3.28.5/src/em-format/e-mail-parser-inlinepgp-encrypted.c.cve-2018-15587-reposition-signature-bar 2018-07-30 15:37:05.000000000 +0200 -+++ evolution-3.28.5/src/em-format/e-mail-parser-inlinepgp-encrypted.c 2019-10-24 16:21:32.730944332 +0200 -@@ -22,6 +22,7 @@ - - #include - -+#include "e-mail-formatter-utils.h" - #include "e-mail-parser-extension.h" - #include "e-mail-part-utils.h" - -@@ -135,6 +136,10 @@ empe_inlinepgp_encrypted_parse (EMailPar - mail_part, valid, - E_MAIL_PART_VALIDITY_ENCRYPTED | - E_MAIL_PART_VALIDITY_PGP); -+ -+ /* Do not traverse sub-messages */ -+ if (g_str_has_suffix (e_mail_part_get_id (mail_part), ".rfc822")) -+ link = e_mail_formatter_find_rfc822_end_iter (link); - } - - e_queue_transfer (&work_queue, out_mail_parts); -diff -up evolution-3.28.5/src/em-format/e-mail-parser-inlinepgp-signed.c.cve-2018-15587-reposition-signature-bar evolution-3.28.5/src/em-format/e-mail-parser-inlinepgp-signed.c ---- evolution-3.28.5/src/em-format/e-mail-parser-inlinepgp-signed.c.cve-2018-15587-reposition-signature-bar 2018-07-30 15:37:05.000000000 +0200 -+++ evolution-3.28.5/src/em-format/e-mail-parser-inlinepgp-signed.c 2019-10-24 16:21:32.731944332 +0200 -@@ -22,6 +22,7 @@ - - #include - -+#include "e-mail-formatter-utils.h" - #include "e-mail-parser-extension.h" - #include "e-mail-part-utils.h" - -@@ -142,6 +143,10 @@ empe_inlinepgp_signed_parse (EMailParser - mail_part, valid, - E_MAIL_PART_VALIDITY_SIGNED | - E_MAIL_PART_VALIDITY_PGP); -+ -+ /* Do not traverse sub-messages */ -+ if (g_str_has_suffix (e_mail_part_get_id (mail_part), ".rfc822")) -+ link = e_mail_formatter_find_rfc822_end_iter (link); - } - - e_queue_transfer (&work_queue, out_mail_parts); -diff -up evolution-3.28.5/src/em-format/e-mail-parser-multipart-encrypted.c.cve-2018-15587-reposition-signature-bar evolution-3.28.5/src/em-format/e-mail-parser-multipart-encrypted.c ---- evolution-3.28.5/src/em-format/e-mail-parser-multipart-encrypted.c.cve-2018-15587-reposition-signature-bar 2018-07-30 15:37:05.000000000 +0200 -+++ evolution-3.28.5/src/em-format/e-mail-parser-multipart-encrypted.c 2019-10-24 16:21:32.731944332 +0200 -@@ -21,6 +21,7 @@ - - #include - -+#include "e-mail-formatter-utils.h" - #include "e-mail-parser-extension.h" - #include "e-mail-part-utils.h" - -@@ -126,6 +127,10 @@ empe_mp_encrypted_parse (EMailParserExte - mail_part, valid, - E_MAIL_PART_VALIDITY_ENCRYPTED | - E_MAIL_PART_VALIDITY_PGP); -+ -+ /* Do not traverse sub-messages */ -+ if (g_str_has_suffix (e_mail_part_get_id (mail_part), ".rfc822")) -+ link = e_mail_formatter_find_rfc822_end_iter (link); - } - - e_queue_transfer (&work_queue, out_mail_parts); -diff -up evolution-3.28.5/src/em-format/e-mail-parser-multipart-signed.c.cve-2018-15587-reposition-signature-bar evolution-3.28.5/src/em-format/e-mail-parser-multipart-signed.c ---- evolution-3.28.5/src/em-format/e-mail-parser-multipart-signed.c.cve-2018-15587-reposition-signature-bar 2018-07-30 15:37:05.000000000 +0200 -+++ evolution-3.28.5/src/em-format/e-mail-parser-multipart-signed.c 2019-10-24 16:21:32.731944332 +0200 -@@ -21,6 +21,7 @@ - - #include - -+#include "e-mail-formatter-utils.h" - #include "e-mail-parser-extension.h" - #include "e-mail-part-utils.h" - -@@ -170,6 +171,10 @@ empe_mp_signed_parse (EMailParserExtensi - e_mail_part_update_validity ( - mail_part, valid, - validity_type | E_MAIL_PART_VALIDITY_SIGNED); -+ -+ /* Do not traverse sub-messages */ -+ if (g_str_has_suffix (e_mail_part_get_id (mail_part), ".rfc822")) -+ link = e_mail_formatter_find_rfc822_end_iter (link); - } - - e_queue_transfer (&work_queue, out_mail_parts); -diff -up evolution-3.28.5/src/em-format/e-mail-part.c.cve-2018-15587-reposition-signature-bar evolution-3.28.5/src/em-format/e-mail-part.c ---- evolution-3.28.5/src/em-format/e-mail-part.c.cve-2018-15587-reposition-signature-bar 2018-07-30 15:37:05.000000000 +0200 -+++ evolution-3.28.5/src/em-format/e-mail-part.c 2019-10-24 16:21:32.731944332 +0200 -@@ -662,6 +662,15 @@ e_mail_part_update_validity (EMailPart * - - mask = E_MAIL_PART_VALIDITY_PGP | E_MAIL_PART_VALIDITY_SMIME; - -+ /* Auto-add flags when the related part is present */ -+ if (!(validity_type & E_MAIL_PART_VALIDITY_SIGNED) && -+ validity->sign.status != CAMEL_CIPHER_VALIDITY_SIGN_NONE) -+ validity_type |= E_MAIL_PART_VALIDITY_SIGNED; -+ -+ if (!(validity_type & E_MAIL_PART_VALIDITY_ENCRYPTED) && -+ validity->encrypt.status != CAMEL_CIPHER_VALIDITY_ENCRYPT_NONE) -+ validity_type |= E_MAIL_PART_VALIDITY_ENCRYPTED; -+ - pair = mail_part_find_validity_pair (part, validity_type & mask); - if (pair != NULL) { - pair->validity_type |= validity_type; diff --git a/evolution-3.28.5-deselect-task-memo-list.patch b/evolution-3.28.5-deselect-task-memo-list.patch deleted file mode 100644 index 5ca5888bebd675485a92f9f5e28876505073de10..0000000000000000000000000000000000000000 --- a/evolution-3.28.5-deselect-task-memo-list.patch +++ /dev/null @@ -1,46 +0,0 @@ -diff -up evolution-3.28.5/src/modules/calendar/e-cal-base-shell-sidebar.c.deselect-task-memo-list evolution-3.28.5/src/modules/calendar/e-cal-base-shell-sidebar.c ---- evolution-3.28.5/src/modules/calendar/e-cal-base-shell-sidebar.c.deselect-task-memo-list 2018-07-30 15:37:05.000000000 +0200 -+++ evolution-3.28.5/src/modules/calendar/e-cal-base-shell-sidebar.c 2018-10-01 12:20:09.864492453 +0200 -@@ -296,6 +296,7 @@ typedef struct _OpenClientData { - ECalBaseShellSidebar *sidebar; - ESource *source; - EClient *client; -+ gboolean was_cancelled; - } OpenClientData; - - static void -@@ -304,9 +305,14 @@ open_client_data_free (gpointer pdata) - OpenClientData *data = pdata; - - if (data) { -+ /* To free the cancellable in the 'value' pair, which is useless now */ -+ g_hash_table_insert (data->sidebar->priv->selected_uids, -+ g_strdup (e_source_get_uid (data->source)), -+ NULL); -+ - if (data->client) { - g_signal_emit (data->sidebar, signals[CLIENT_OPENED], 0, data->client); -- } else { -+ } else if (!data->was_cancelled) { - ESourceSelector *selector = e_cal_base_shell_sidebar_get_selector (data->sidebar); - e_source_selector_unselect_source (selector, data->source); - } -@@ -333,6 +339,7 @@ e_cal_base_shell_sidebar_open_client_thr - selector = E_CLIENT_SELECTOR (e_cal_base_shell_sidebar_get_selector (data->sidebar)); - data->client = e_client_selector_get_client_sync ( - selector, data->source, TRUE, (guint32) -1, cancellable, &local_error); -+ data->was_cancelled = g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_CANCELLED); - - e_util_propagate_open_source_job_error (job_data, data->extension_name, local_error, error); - } -@@ -350,6 +357,10 @@ e_cal_base_shell_sidebar_ensure_source_o - g_return_if_fail (E_IS_CAL_BASE_SHELL_SIDEBAR (sidebar)); - g_return_if_fail (E_IS_SOURCE (source)); - -+ /* Skip it when it's already opening or opened */ -+ if (g_hash_table_contains (sidebar->priv->selected_uids, e_source_get_uid (source))) -+ return; -+ - shell_view = e_shell_sidebar_get_shell_view (E_SHELL_SIDEBAR (sidebar)); - - switch (e_cal_base_shell_view_get_source_type (shell_view)) { diff --git a/evolution-3.28.5-ecalendaritem-settings.patch b/evolution-3.28.5-ecalendaritem-settings.patch deleted file mode 100644 index bcc24d1e6e3bdbd5bc1ce7c04fd46b0eb74cb57c..0000000000000000000000000000000000000000 --- a/evolution-3.28.5-ecalendaritem-settings.patch +++ /dev/null @@ -1,156 +0,0 @@ -diff -up evolution-3.28.5/src/e-util/e-calendar-item.c.ecalendaritem-settings evolution-3.28.5/src/e-util/e-calendar-item.c ---- evolution-3.28.5/src/e-util/e-calendar-item.c.ecalendaritem-settings 2018-07-30 15:37:05.000000000 +0200 -+++ evolution-3.28.5/src/e-util/e-calendar-item.c 2020-09-30 15:16:45.798634705 +0200 -@@ -45,6 +45,7 @@ static const gint e_calendar_item_days_i - e_calendar_item_days_in_month[month] + (((month) == 1 \ - && ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))) ? 1 : 0) - -+static void e_calendar_item_constructed (GObject *object); - static void e_calendar_item_dispose (GObject *object); - static void e_calendar_item_get_property (GObject *object, - guint property_id, -@@ -264,6 +265,7 @@ e_calendar_item_class_init (ECalendarIte - GnomeCanvasItemClass *item_class; - - object_class = G_OBJECT_CLASS (class); -+ object_class->constructed = e_calendar_item_constructed; - object_class->dispose = e_calendar_item_dispose; - object_class->get_property = e_calendar_item_get_property; - object_class->set_property = e_calendar_item_set_property; -@@ -637,6 +639,16 @@ e_calendar_item_init (ECalendarItem *cal - } - - static void -+e_calendar_item_constructed (GObject *object) -+{ -+ ECalendarItem *calitem = E_CALENDAR_ITEM (object); -+ -+ G_OBJECT_CLASS (e_calendar_item_parent_class)->constructed (object); -+ -+ e_extensible_load_extensions (E_EXTENSIBLE (calitem)); -+} -+ -+static void - e_calendar_item_dispose (GObject *object) - { - ECalendarItem *calitem; -@@ -787,28 +799,32 @@ e_calendar_item_set_property (GObject *o - dvalue = g_value_get_double (value); - if (calitem->x1 != dvalue) { - calitem->x1 = dvalue; -- gnome_canvas_item_request_update (item); -+ if (item->canvas) -+ gnome_canvas_item_request_update (item); - } - return; - case PROP_Y1: - dvalue = g_value_get_double (value); - if (calitem->y1 != dvalue) { - calitem->y1 = dvalue; -- gnome_canvas_item_request_update (item); -+ if (item->canvas) -+ gnome_canvas_item_request_update (item); - } - return; - case PROP_X2: - dvalue = g_value_get_double (value); - if (calitem->x2 != dvalue) { - calitem->x2 = dvalue; -- gnome_canvas_item_request_update (item); -+ if (item->canvas) -+ gnome_canvas_item_request_update (item); - } - return; - case PROP_Y2: - dvalue = g_value_get_double (value); - if (calitem->y2 != dvalue) { - calitem->y2 = dvalue; -- gnome_canvas_item_request_update (item); -+ if (item->canvas) -+ gnome_canvas_item_request_update (item); - } - return; - case PROP_FONT_DESC: -@@ -816,21 +832,24 @@ e_calendar_item_set_property (GObject *o - if (calitem->font_desc) - pango_font_description_free (calitem->font_desc); - calitem->font_desc = pango_font_description_copy (font_desc); -- gnome_canvas_item_request_update (item); -+ if (item->canvas) -+ gnome_canvas_item_request_update (item); - return; - case PROP_WEEK_NUMBER_FONT_DESC: - font_desc = g_value_get_boxed (value); - if (calitem->week_number_font_desc) - pango_font_description_free (calitem->week_number_font_desc); - calitem->week_number_font_desc = pango_font_description_copy (font_desc); -- gnome_canvas_item_request_update (item); -+ if (item->canvas) -+ gnome_canvas_item_request_update (item); - return; - case PROP_MINIMUM_ROWS: - ivalue = g_value_get_int (value); - ivalue = MAX (1, ivalue); - if (calitem->min_rows != ivalue) { - calitem->min_rows = ivalue; -- gnome_canvas_item_request_update (item); -+ if (item->canvas) -+ gnome_canvas_item_request_update (item); - } - return; - case PROP_MINIMUM_COLUMNS: -@@ -838,35 +857,40 @@ e_calendar_item_set_property (GObject *o - ivalue = MAX (1, ivalue); - if (calitem->min_cols != ivalue) { - calitem->min_cols = ivalue; -- gnome_canvas_item_request_update (item); -+ if (item->canvas) -+ gnome_canvas_item_request_update (item); - } - return; - case PROP_MAXIMUM_ROWS: - ivalue = g_value_get_int (value); - if (calitem->max_rows != ivalue) { - calitem->max_rows = ivalue; -- gnome_canvas_item_request_update (item); -+ if (item->canvas) -+ gnome_canvas_item_request_update (item); - } - return; - case PROP_MAXIMUM_COLUMNS: - ivalue = g_value_get_int (value); - if (calitem->max_cols != ivalue) { - calitem->max_cols = ivalue; -- gnome_canvas_item_request_update (item); -+ if (item->canvas) -+ gnome_canvas_item_request_update (item); - } - return; - case PROP_WEEK_START_DAY: - ivalue = g_value_get_enum (value); - if (calitem->week_start_day != ivalue) { - calitem->week_start_day = ivalue; -- gnome_canvas_item_request_update (item); -+ if (item->canvas) -+ gnome_canvas_item_request_update (item); - } - return; - case PROP_SHOW_WEEK_NUMBERS: - bvalue = g_value_get_boolean (value); - if (calitem->show_week_numbers != bvalue) { - calitem->show_week_numbers = bvalue; -- gnome_canvas_item_request_update (item); -+ if (item->canvas) -+ gnome_canvas_item_request_update (item); - } - return; - case PROP_KEEP_WDAYS_ON_WEEKNUM_CLICK: -@@ -908,8 +932,6 @@ e_calendar_item_realize (GnomeCanvasItem - calitem = E_CALENDAR_ITEM (item); - - e_calendar_item_style_updated (GTK_WIDGET (item->canvas), calitem); -- -- e_extensible_load_extensions (E_EXTENSIBLE (calitem)); - } - - static void diff --git a/evolution-3.28.5-extra-new-line-before-url.patch b/evolution-3.28.5-extra-new-line-before-url.patch deleted file mode 100644 index 8ed38095faad9a626c4df5bad194000dc95e7182..0000000000000000000000000000000000000000 --- a/evolution-3.28.5-extra-new-line-before-url.patch +++ /dev/null @@ -1,66 +0,0 @@ -diff -up evolution-3.28.5/src/e-util/test-html-editor-units-bugs.c.extra-new-line-before-url evolution-3.28.5/src/e-util/test-html-editor-units-bugs.c ---- evolution-3.28.5/src/e-util/test-html-editor-units-bugs.c.extra-new-line-before-url 2018-09-03 15:40:14.491506323 +0200 -+++ evolution-3.28.5/src/e-util/test-html-editor-units-bugs.c 2018-09-03 15:40:14.494506323 +0200 -@@ -1319,6 +1319,44 @@ test_issue_86 (TestFixture *fixture) - g_free (converted); - } - -+static void -+test_issue_103 (TestFixture *fixture) -+{ -+ #define LONG_URL "https://www.example.com/123456789012345678901234567890123456789012345678901234567890" -+ #define SHORTER_URL "https://www.example.com/1234567890123456789012345678901234567890" -+ #define SHORT_URL "https://www.example.com/" -+ -+ if (!test_utils_run_simple_test (fixture, -+ "mode:plain\n" -+ "type:before\\n" -+ LONG_URL "\\n" -+ "after\\n" -+ "prefix text " SHORTER_URL " suffix\\n" -+ "prefix " SHORT_URL " suffix\\n" -+ "end\n", -+ HTML_PREFIX "
before
" -+ "" -+ "
after
" -+ "
prefix text " SHORTER_URL " suffix
" -+ "
prefix " SHORT_URL " suffix
" -+ "
end
" -+ HTML_SUFFIX, -+ "before\n" -+ LONG_URL "\n" -+ "after\n" -+ "prefix text \n" -+ SHORTER_URL " suffix\n" -+ "prefix " SHORT_URL " suffix\n" -+ "end")) { -+ g_test_fail (); -+ return; -+ } -+ -+ #undef SHORT_URL -+ #undef SHORTER_URL -+ #undef LONG_URL -+} -+ - void - test_add_html_editor_bug_tests (void) - { -@@ -1349,4 +1387,5 @@ test_add_html_editor_bug_tests (void) - test_utils_add_test ("/bug/788829", test_bug_788829); - test_utils_add_test ("/bug/750636", test_bug_750636); - test_utils_add_test ("/issue/86", test_issue_86); -+ test_utils_add_test ("/issue/103", test_issue_103); - } -diff -up evolution-3.28.5/src/modules/webkit-editor/web-extension/e-editor-dom-functions.c.extra-new-line-before-url evolution-3.28.5/src/modules/webkit-editor/web-extension/e-editor-dom-functions.c ---- evolution-3.28.5/src/modules/webkit-editor/web-extension/e-editor-dom-functions.c.extra-new-line-before-url 2018-09-03 15:40:14.493506323 +0200 -+++ evolution-3.28.5/src/modules/webkit-editor/web-extension/e-editor-dom-functions.c 2018-09-03 15:40:14.496506323 +0200 -@@ -14089,7 +14089,7 @@ wrap_lines (EEditorPage *editor_page, - - next_sibling = webkit_dom_node_get_next_sibling (node); - /* If the anchor doesn't fit on the line, add it to a separate line. */ -- if ((line_length + anchor_length) > length_to_wrap) { -+ if (line_length > 0 && (line_length + anchor_length) > length_to_wrap) { - /* Put
before the anchor, thus it starts on a new line */ - element = webkit_dom_document_create_element (document, "BR", NULL); - element_add_class (element, "-x-evo-wrap-br"); diff --git a/evolution-3.28.5-gala11yetableitem-ref-child.patch b/evolution-3.28.5-gala11yetableitem-ref-child.patch deleted file mode 100644 index d4ecebf89376407d837e1cc604b83c0779d12517..0000000000000000000000000000000000000000 --- a/evolution-3.28.5-gala11yetableitem-ref-child.patch +++ /dev/null @@ -1,200 +0,0 @@ -From d928258bb4f3e21973089183463c4dab11558b73 Mon Sep 17 00:00:00 2001 -From: Milan Crha -Date: Wed, 18 Sep 2019 14:12:44 +0200 -Subject: I#624 - GalA11yETableItem: Incorrect implementation of - AtkObjectClass::ref_child() - -Closes https://gitlab.gnome.org/GNOME/evolution/issues/624 - -diff --git a/src/e-util/gal-a11y-e-table-item.c b/src/e-util/gal-a11y-e-table-item.c -index cf06fb3f4f..be302ed09d 100644 ---- a/src/e-util/gal-a11y-e-table-item.c -+++ b/src/e-util/gal-a11y-e-table-item.c -@@ -61,6 +61,7 @@ struct _GalA11yETableItemPrivate { - ESelectionModel *selection; - AtkStateSet *state_set; - GtkWidget *widget; -+ GHashTable *a11y_column_headers; /* ETableCol * ~> GalA11yETableColumnHeader * */ - }; - - static gboolean gal_a11y_e_table_item_ref_selection (GalA11yETableItem *a11y, -@@ -124,6 +125,11 @@ item_finalized (gpointer user_data, - if (priv->selection) - gal_a11y_e_table_item_unref_selection (a11y); - -+ if (priv->columns) { -+ free_columns (priv->columns); -+ priv->columns = NULL; -+ } -+ - g_object_unref (a11y); - } - -@@ -273,11 +279,60 @@ eti_a11y_reset_focus_object (GalA11yETableItem *a11y, - g_signal_emit_by_name (a11y, "active-descendant-changed", cell); - } - -+static void eti_column_header_a11y_gone (gpointer user_data, GObject *a11y_col_header); -+ -+static void -+eti_table_column_gone (gpointer user_data, -+ GObject *col) -+{ -+ GalA11yETableItem *a11y = user_data; -+ GalA11yETableItemPrivate *priv; -+ GalA11yETableColumnHeader *a11y_col_header; -+ -+ g_return_if_fail (GAL_A11Y_IS_E_TABLE_ITEM (a11y)); -+ -+ priv = GET_PRIVATE (a11y); -+ -+ a11y_col_header = g_hash_table_lookup (priv->a11y_column_headers, col); -+ g_hash_table_remove (priv->a11y_column_headers, col); -+ -+ if (a11y_col_header) -+ g_object_weak_unref (G_OBJECT (a11y_col_header), eti_column_header_a11y_gone, a11y); -+} -+ -+static void -+eti_column_header_a11y_gone (gpointer user_data, -+ GObject *a11y_col_header) -+{ -+ GalA11yETableItem *a11y = user_data; -+ GalA11yETableItemPrivate *priv; -+ GHashTableIter iter; -+ gpointer key, value; -+ -+ g_return_if_fail (GAL_A11Y_IS_E_TABLE_ITEM (a11y)); -+ -+ priv = GET_PRIVATE (a11y); -+ -+ g_hash_table_iter_init (&iter, priv->a11y_column_headers); -+ while (g_hash_table_iter_next (&iter, &key, &value)) { -+ ETableCol *col = key; -+ GalA11yETableColumnHeader *stored_a11y_col_header = value; -+ -+ if (((GObject *) stored_a11y_col_header) == a11y_col_header) { -+ g_object_weak_unref (G_OBJECT (col), eti_table_column_gone, a11y); -+ g_hash_table_remove (priv->a11y_column_headers, col); -+ break; -+ } -+ } -+} -+ - static void - eti_dispose (GObject *object) - { - GalA11yETableItem *a11y = GAL_A11Y_E_TABLE_ITEM (object); - GalA11yETableItemPrivate *priv = GET_PRIVATE (a11y); -+ GHashTableIter iter; -+ gpointer key, value; - - if (priv->columns) { - free_columns (priv->columns); -@@ -289,10 +344,35 @@ eti_dispose (GObject *object) - priv->item = NULL; - } - -+ g_clear_object (&priv->state_set); -+ -+ g_hash_table_iter_init (&iter, priv->a11y_column_headers); -+ while (g_hash_table_iter_next (&iter, &key, &value)) { -+ ETableCol *col = key; -+ GalA11yETableColumnHeader *a11y_col_header = value; -+ -+ g_object_weak_unref (G_OBJECT (col), eti_table_column_gone, a11y); -+ g_object_weak_unref (G_OBJECT (a11y_col_header), eti_column_header_a11y_gone, a11y); -+ } -+ -+ g_hash_table_remove_all (priv->a11y_column_headers); -+ - if (parent_class->dispose) - parent_class->dispose (object); - } - -+static void -+eti_finalize (GObject *object) -+{ -+ GalA11yETableItem *a11y = GAL_A11Y_E_TABLE_ITEM (object); -+ GalA11yETableItemPrivate *priv = GET_PRIVATE (a11y); -+ -+ g_hash_table_destroy (priv->a11y_column_headers); -+ -+ if (parent_class->finalize) -+ parent_class->finalize (object); -+} -+ - /* Static functions */ - static gint - eti_get_n_children (AtkObject *accessible) -@@ -318,12 +398,24 @@ eti_ref_child (AtkObject *accessible, - return NULL; - - if (index < item->cols) { -+ GalA11yETableItemPrivate *priv = GET_PRIVATE (accessible); - ETableCol *ecol; - AtkObject *child; - - ecol = e_table_header_get_column (item->header, index); -- child = gal_a11y_e_table_column_header_new (ecol, item, accessible); -- return child; -+ child = g_hash_table_lookup (priv->a11y_column_headers, ecol); -+ -+ if (!child) { -+ child = gal_a11y_e_table_column_header_new (ecol, item, accessible); -+ if (child) { -+ g_hash_table_insert (priv->a11y_column_headers, ecol, child); -+ -+ g_object_weak_ref (G_OBJECT (ecol), eti_table_column_gone, accessible); -+ g_object_weak_ref (G_OBJECT (child), eti_column_header_a11y_gone, accessible); -+ } -+ } -+ -+ return child ? g_object_ref (child) : NULL; - } - index -= item->cols; - -@@ -966,6 +1058,7 @@ eti_header_structure_changed (ETableHeader *eth, - g_free (state); - g_free (reorder); - g_free (prev_state); -+ free_columns (cols); - return; - } - -@@ -1051,6 +1144,7 @@ eti_class_init (GalA11yETableItemClass *class) - parent_class = g_type_class_ref (PARENT_TYPE); - - object_class->dispose = eti_dispose; -+ object_class->finalize = eti_finalize; - - atk_object_class->get_n_children = eti_get_n_children; - atk_object_class->ref_child = eti_ref_child; -@@ -1069,6 +1163,7 @@ eti_init (GalA11yETableItem *a11y) - priv->selection_row_changed_id = 0; - priv->cursor_changed_id = 0; - priv->selection = NULL; -+ priv->a11y_column_headers = g_hash_table_new (g_direct_hash, g_direct_equal); - } - - /* atk selection */ -@@ -1189,14 +1284,17 @@ gal_a11y_e_table_item_new (ETableItem *item) - - accessible = ATK_OBJECT (a11y); - -- GET_PRIVATE (a11y)->item = item; - /* Initialize cell data. */ - GET_PRIVATE (a11y)->cols = item->cols; - GET_PRIVATE (a11y)->rows = item->rows >= 0 ? item->rows : 0; - - GET_PRIVATE (a11y)->columns = e_table_header_get_columns (item->header); -- if (GET_PRIVATE (a11y)->columns == NULL) -+ if (GET_PRIVATE (a11y)->columns == NULL) { -+ g_clear_object (&a11y); - return NULL; -+ } -+ -+ GET_PRIVATE (a11y)->item = item; - - g_signal_connect ( - item, "selection_model_removed", diff --git a/evolution-3.28.5-help-contents-link.patch b/evolution-3.28.5-help-contents-link.patch deleted file mode 100644 index ebd43ed7dd1a1c0df4d90f870b0150a58f9f5c2c..0000000000000000000000000000000000000000 --- a/evolution-3.28.5-help-contents-link.patch +++ /dev/null @@ -1,36 +0,0 @@ -From fe293e9f75ef3a7fec90e9b11f9c5935ae98445c Mon Sep 17 00:00:00 2001 -From: Milan Crha -Date: Mon, 17 Sep 2018 22:46:40 +0200 -Subject: [PATCH] I#129 - Use unversioned URL to help.gnome.org - -Closes https://gitlab.gnome.org/GNOME/evolution/issues/129 ---- - src/e-util/e-misc-utils.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/src/e-util/e-misc-utils.c b/src/e-util/e-misc-utils.c -index c6f4e105b3..3801337fc2 100644 ---- a/src/e-util/e-misc-utils.c -+++ b/src/e-util/e-misc-utils.c -@@ -319,7 +319,9 @@ e_display_help (GtkWindow *parent, - uri = g_string_new ("help:" PACKAGE); - } else { - uri = g_string_new ("https://help.gnome.org/users/" PACKAGE "/"); -- g_string_append_printf (uri, "%d.%d", EDS_MAJOR_VERSION, EDS_MINOR_VERSION); -+ /* Use '/stable/' until https://bugzilla.gnome.org/show_bug.cgi?id=785522 is fixed */ -+ g_string_append (uri, "stable/"); -+ /* g_string_append_printf (uri, "%d.%d", EDS_MAJOR_VERSION, EDS_MINOR_VERSION); */ - } - - timestamp = gtk_get_current_event_time (); -@@ -327,7 +329,6 @@ e_display_help (GtkWindow *parent, - if (parent != NULL) - screen = gtk_widget_get_screen (GTK_WIDGET (parent)); - -- - if (link_id != NULL) { - g_string_append (uri, "/"); - g_string_append (uri, link_id); --- -2.21.0 - diff --git a/evolution-3.28.5-intltool-cache.patch b/evolution-3.28.5-intltool-cache.patch deleted file mode 100644 index 2476af28aee3131244e2f7629a09b281153bdf25..0000000000000000000000000000000000000000 --- a/evolution-3.28.5-intltool-cache.patch +++ /dev/null @@ -1,42 +0,0 @@ -From f315ca6a601e77220323bff4ac7782b54c862a0c Mon Sep 17 00:00:00 2001 -From: Milan Crha -Date: Tue, 30 Oct 2018 15:50:58 +0100 -Subject: [PATCH] Make sure intltool-merge cache is created only once - -Similar to https://gitlab.gnome.org/GNOME/evolution/issues/196 -when intltool-merge is called in parallel, it could either rewrite -the ongoing attempt to build it or use an incomplete data, which -results in broken output files (.desktop, .metainfo and so on). -This change ensures the intltool-merge cache is created only once -and any other requests which would use it will wait until it's created. ---- - cmake/modules/FindIntltool.cmake | 11 ++++++++++- - 1 file changed, 10 insertions(+), 1 deletion(-) - -diff --git a/cmake/modules/FindIntltool.cmake b/cmake/modules/FindIntltool.cmake -index 2cda2549eb..8e223e9d7f 100644 ---- a/cmake/modules/FindIntltool.cmake -+++ b/cmake/modules/FindIntltool.cmake -@@ -176,9 +176,18 @@ macro(intltool_merge _in_filename _out_filename) - DEPENDS ${_in} - ) - else(_has_no_translations) -+ if(NOT TARGET intltool-merge-cache) -+ add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/po/.intltool-merge-cache -+ COMMAND ${INTLTOOL_MERGE} ${_args} --quiet --cache="${CMAKE_BINARY_DIR}/po/.intltool-merge-cache" "${GETTEXT_PO_DIR}" "${_in}" "${_out}" -+ DEPENDS ${_in} -+ ) -+ add_custom_target(intltool-merge-cache ALL -+ DEPENDS ${CMAKE_BINARY_DIR}/po/.intltool-merge-cache) -+ endif(NOT TARGET intltool-merge-cache) -+ - add_custom_command(OUTPUT ${_out} - COMMAND ${INTLTOOL_MERGE} ${_args} --quiet --cache="${CMAKE_BINARY_DIR}/po/.intltool-merge-cache" "${GETTEXT_PO_DIR}" "${_in}" "${_out}" -- DEPENDS ${_in} -+ DEPENDS ${_in} intltool-merge-cache - ) - endif(_has_no_translations) - endmacro(intltool_merge) --- -2.18.1 - diff --git a/evolution-3.28.5-mail-account-name-sync-in-wizard.patch b/evolution-3.28.5-mail-account-name-sync-in-wizard.patch deleted file mode 100644 index a44cff04bcaf55e543361ca33c78d7ade170b603..0000000000000000000000000000000000000000 --- a/evolution-3.28.5-mail-account-name-sync-in-wizard.patch +++ /dev/null @@ -1,133 +0,0 @@ -From 44fbd35658e842a146daf31c53d8dbd670dd21bb Mon Sep 17 00:00:00 2001 -From: Milan Crha -Date: Tue, 3 Dec 2019 12:05:25 +0100 -Subject: [PATCH] I#729 - New Mail account wizard ignores email address change - -Closes https://gitlab.gnome.org/GNOME/evolution/issues/729 ---- - src/mail/e-mail-config-assistant.c | 25 +++++++++++++++++++++++-- - src/mail/e-mail-config-summary-page.c | 23 ++++++++++++++++++++--- - src/mail/e-mail-config-summary-page.h | 2 ++ - 3 files changed, 45 insertions(+), 5 deletions(-) - -diff --git a/src/mail/e-mail-config-assistant.c b/src/mail/e-mail-config-assistant.c -index 5307f1f90e..0c8da3c015 100644 ---- a/src/mail/e-mail-config-assistant.c -+++ b/src/mail/e-mail-config-assistant.c -@@ -1069,7 +1069,26 @@ mail_config_assistant_prepare (GtkAssistant *assistant, - e_named_parameters_free (params); - } - -- if (E_IS_MAIL_CONFIG_RECEIVING_PAGE (page) && first_visit) { -+ if (!first_visit && E_IS_MAIL_CONFIG_IDENTITY_PAGE (page)) { -+ ESource *source; -+ ESourceMailIdentity *extension; -+ const gchar *email_address; -+ const gchar *extension_name; -+ -+ source = priv->identity_source; -+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY; -+ extension = e_source_get_extension (source, extension_name); -+ email_address = e_source_mail_identity_get_address (extension); -+ -+ /* Set the value to an empty string when going back to the identity page, -+ thus when moving away from it the source's display name is updated -+ with the new address, in case it changed. Do not modify the display -+ name when the user changed it. */ -+ if (g_strcmp0 (e_mail_config_summary_page_get_account_name (priv->summary_page), email_address) == 0) -+ e_source_set_display_name (source, ""); -+ } -+ -+ if (E_IS_MAIL_CONFIG_RECEIVING_PAGE (page)) { - ESource *source; - ESourceMailIdentity *extension; - const gchar *email_address; -@@ -1084,7 +1103,9 @@ mail_config_assistant_prepare (GtkAssistant *assistant, - extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY; - extension = e_source_get_extension (source, extension_name); - email_address = e_source_mail_identity_get_address (extension); -- e_source_set_display_name (source, email_address); -+ -+ if (first_visit || g_strcmp0 (e_source_get_display_name (source), "") == 0) -+ e_source_set_display_name (source, email_address); - } - - if (first_visit && ( -diff --git a/src/mail/e-mail-config-summary-page.c b/src/mail/e-mail-config-summary-page.c -index fb0306d3e1..20c669ad65 100644 ---- a/src/mail/e-mail-config-summary-page.c -+++ b/src/mail/e-mail-config-summary-page.c -@@ -53,6 +53,8 @@ struct _EMailConfigSummaryPagePrivate { - GtkLabel *send_user_label; - GtkLabel *send_security_label; - GtkEntry *account_name_entry; -+ -+ GBinding *account_name_binding; - }; - - enum { -@@ -549,9 +551,6 @@ mail_config_summary_page_refresh (EMailConfigSummaryPage *page) - const gchar *extension_name; - const gchar *value; - -- value = e_source_get_display_name (source); -- gtk_entry_set_text (priv->account_name_entry, value); -- - extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY; - extension = e_source_get_extension (source, extension_name); - -@@ -830,6 +829,14 @@ e_mail_config_summary_page_get_internal_box (EMailConfigSummaryPage *page) - return page->priv->main_box; - } - -+const gchar * -+e_mail_config_summary_page_get_account_name (EMailConfigSummaryPage *page) -+{ -+ g_return_val_if_fail (E_IS_MAIL_CONFIG_SUMMARY_PAGE (page), NULL); -+ -+ return gtk_entry_get_text (page->priv->account_name_entry); -+} -+ - void - e_mail_config_summary_page_refresh (EMailConfigSummaryPage *page) - { -@@ -934,6 +941,11 @@ e_mail_config_summary_page_set_identity_source (EMailConfigSummaryPage *page, - page->priv->identity_source = identity_source; - page->priv->identity_source_changed_id = 0; - -+ if (page->priv->account_name_binding) { -+ g_binding_unbind (page->priv->account_name_binding); -+ page->priv->account_name_binding = NULL; -+ } -+ - if (identity_source != NULL) { - gulong handler_id; - -@@ -943,6 +955,11 @@ e_mail_config_summary_page_set_identity_source (EMailConfigSummaryPage *page, - page); - - page->priv->identity_source_changed_id = handler_id; -+ -+ page->priv->account_name_binding = -+ e_binding_bind_property (identity_source, "display-name", -+ page->priv->account_name_entry, "text", -+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE); - } - - g_object_notify (G_OBJECT (page), "identity-source"); -diff --git a/src/mail/e-mail-config-summary-page.h b/src/mail/e-mail-config-summary-page.h -index af793dc8b6..64d0af875c 100644 ---- a/src/mail/e-mail-config-summary-page.h -+++ b/src/mail/e-mail-config-summary-page.h -@@ -68,6 +68,8 @@ EMailConfigPage * - e_mail_config_summary_page_new (void); - GtkBox * e_mail_config_summary_page_get_internal_box - (EMailConfigSummaryPage *page); -+const gchar * e_mail_config_summary_page_get_account_name -+ (EMailConfigSummaryPage *page); - void e_mail_config_summary_page_refresh - (EMailConfigSummaryPage *page); - EMailConfigServiceBackend * --- -2.21.0 - diff --git a/evolution-3.28.5-mangled-deeper-html-quotes.patch b/evolution-3.28.5-mangled-deeper-html-quotes.patch deleted file mode 100644 index 1bc0c99b522918a2dd3b52d5d2b1d49b7a69f5ed..0000000000000000000000000000000000000000 --- a/evolution-3.28.5-mangled-deeper-html-quotes.patch +++ /dev/null @@ -1,338 +0,0 @@ -diff -up evolution-3.28.5/src/e-util/test-html-editor-units-bugs.c.mangled-deeper-html-quotes evolution-3.28.5/src/e-util/test-html-editor-units-bugs.c ---- evolution-3.28.5/src/e-util/test-html-editor-units-bugs.c.mangled-deeper-html-quotes 2018-07-30 15:37:05.000000000 +0200 -+++ evolution-3.28.5/src/e-util/test-html-editor-units-bugs.c 2018-09-03 15:31:08.028513879 +0200 -@@ -1205,6 +1205,120 @@ test_bug_750636 (TestFixture *fixture) - g_test_fail (); - } - -+static void -+test_issue_86 (TestFixture *fixture) -+{ -+ const gchar *source_text = -+ "normal text\n" -+ "\n" -+ "> level 1\n" -+ "> level 1\n" -+ "> > level 2\n" -+ "> > level 2\n" -+ "> >\n" -+ "> > level 2\n" -+ ">\n" -+ "> level 1\n" -+ "> level 1\n" -+ ">\n" -+ "> > > level 3\n" -+ "> > > level 3\n" -+ ">\n" -+ "> > level 2\n" -+ "> > level 2\n" -+ ">\n" -+ "> level 1\n" -+ "\n" -+ "back normal text\n"; -+ gchar *converted, *to_insert; -+ -+ if (!test_utils_process_commands (fixture, -+ "mode:html\n")) { -+ g_test_fail (); -+ return; -+ } -+ -+ converted = camel_text_to_html (source_text, -+ CAMEL_MIME_FILTER_TOHTML_PRE | -+ CAMEL_MIME_FILTER_TOHTML_CONVERT_URLS | -+ CAMEL_MIME_FILTER_TOHTML_CONVERT_ADDRESSES | -+ CAMEL_MIME_FILTER_TOHTML_QUOTE_CITATION, -+ 0xDDDDDD); -+ -+ g_return_if_fail (converted != NULL); -+ -+ to_insert = g_strconcat (converted, -+ "" -+ "", -+ NULL); -+ -+ test_utils_insert_content (fixture, to_insert, -+ E_CONTENT_EDITOR_INSERT_REPLACE_ALL | E_CONTENT_EDITOR_INSERT_TEXT_HTML); -+ -+ if (!test_utils_run_simple_test (fixture, -+ "", -+ HTML_PREFIX "
On Today, User wrote:
" -+ "
" -+ "
normal text
" -+ "

" -+ "
" -+ "
level 1
" -+ "
level 1
" -+ "
" -+ "
level 2
" -+ "
level 2
" -+ "

" -+ "
level 2
" -+ "
" -+ "

" -+ "
level 1
" -+ "
level 1
" -+ "

" -+ "
" -+ "
" -+ "
level 3
" -+ "
level 3
" -+ "
" -+ "
" -+ "

" -+ "
" -+ "
level 2
" -+ "
level 2
" -+ "
" -+ "

" -+ "
level 1
" -+ "
" -+ "

" -+ "
back normal text
" -+ "
" HTML_SUFFIX, -+ "On Today, User wrote:\n" -+ "> normal text\n" -+ "> \n" -+ "> > level 1\n" -+ "> > level 1\n" -+ "> > > level 2\n" -+ "> > > level 2\n" -+ "> > > \n" -+ "> > > level 2\n" -+ "> > \n" -+ "> > level 1\n" -+ "> > level 1\n" -+ "> > \n" -+ "> > > > level 3\n" -+ "> > > > level 3\n" -+ "> > \n" -+ "> > > level 2\n" -+ "> > > level 2\n" -+ "> > \n" -+ "> > level 1\n" -+ "> \n" -+ "> back normal text")) -+ g_test_fail (); -+ -+ g_free (to_insert); -+ g_free (converted); -+} -+ - void - test_add_html_editor_bug_tests (void) - { -@@ -1234,4 +1348,5 @@ test_add_html_editor_bug_tests (void) - test_utils_add_test ("/bug/780088", test_bug_780088); - test_utils_add_test ("/bug/788829", test_bug_788829); - test_utils_add_test ("/bug/750636", test_bug_750636); -+ test_utils_add_test ("/issue/86", test_issue_86); - } -diff -up evolution-3.28.5/src/modules/webkit-editor/web-extension/e-editor-dom-functions.c.mangled-deeper-html-quotes evolution-3.28.5/src/modules/webkit-editor/web-extension/e-editor-dom-functions.c ---- evolution-3.28.5/src/modules/webkit-editor/web-extension/e-editor-dom-functions.c.mangled-deeper-html-quotes 2018-07-30 15:37:05.000000000 +0200 -+++ evolution-3.28.5/src/modules/webkit-editor/web-extension/e-editor-dom-functions.c 2018-09-03 15:32:41.220512591 +0200 -@@ -6230,7 +6230,6 @@ e_editor_dom_convert_content (EEditorPag - WEBKIT_DOM_NODE (content_wrapper), - WEBKIT_DOM_NODE (e_editor_dom_prepare_paragraph (editor_page, FALSE)), - NULL); -- - if (!cite_body) { - if (!empty) { - WebKitDOMNode *child; -@@ -8754,6 +8753,133 @@ adapt_to_editor_dom_changes (WebKitDOMDo - g_clear_object (&collection); - } - -+static void -+traverse_nodes_to_split_pre (WebKitDOMDocument *document, -+ WebKitDOMNode *node, -+ WebKitDOMNode *new_parent, /* can be NULL, then prepend to out_new_nodes */ -+ gboolean is_in_pre, -+ GSList **out_new_nodes) /* WebKitDOMNode * */ -+{ -+ if (is_in_pre && WEBKIT_DOM_IS_TEXT (node)) { -+ gchar *text; -+ -+ text = webkit_dom_text_get_whole_text (WEBKIT_DOM_TEXT (node)); -+ if (text) { -+ WebKitDOMElement *pre; -+ gint ii; -+ gchar **strv; -+ -+ strv = g_strsplit (text, "\n", -1); -+ -+ for (ii = 0; strv && strv[ii]; ii++) { -+ if (*(strv[ii])) { -+ gint len = strlen (strv[ii]); -+ -+ if (strv[ii][len - 1] == '\r') { -+ strv[ii][len - 1] = '\0'; -+ } -+ } -+ -+ /*
 is shown as a block, thus adding a new line at the end behaves like two 
-s */ -+ if (!*(strv[ii]) && !strv[ii + 1]) -+ break; -+ -+ pre = webkit_dom_document_create_element (document, "pre", NULL); -+ -+ if (*(strv[ii])) { -+ webkit_dom_html_element_set_inner_text (WEBKIT_DOM_HTML_ELEMENT (pre), strv[ii], NULL); -+ } else { -+ WebKitDOMElement *br; -+ -+ br = webkit_dom_document_create_element (document, "br", NULL); -+ webkit_dom_node_append_child (WEBKIT_DOM_NODE (pre), WEBKIT_DOM_NODE (br), NULL); -+ } -+ -+ if (new_parent) -+ webkit_dom_node_append_child (new_parent, WEBKIT_DOM_NODE (pre), NULL); -+ else -+ *out_new_nodes = g_slist_prepend (*out_new_nodes, pre); -+ } -+ -+ g_strfreev (strv); -+ } -+ -+ g_free (text); -+ } else if (WEBKIT_DOM_IS_HTML_PRE_ELEMENT (node)) { -+ is_in_pre = TRUE; -+ } else { -+ WebKitDOMNode *nd; -+ GError *error = NULL; -+ -+ nd = webkit_dom_node_clone_node_with_error (node, FALSE, &error); -+ if (nd) { -+ if (new_parent) -+ webkit_dom_node_append_child (new_parent, nd, NULL); -+ else -+ *out_new_nodes = g_slist_prepend (*out_new_nodes, nd); -+ -+ new_parent = nd; -+ } else { -+ g_warning ("%s: Failed to clone node %s: %s\n", G_STRFUNC, G_OBJECT_TYPE_NAME (node), error ? error->message : "Unknown error"); -+ } -+ } -+ -+ for (node = webkit_dom_node_get_first_child (node); -+ node; -+ node = webkit_dom_node_get_next_sibling (node)) { -+ traverse_nodes_to_split_pre (document, node, new_parent, is_in_pre, out_new_nodes); -+ } -+} -+ -+static void -+maybe_split_pre_paragraphs (WebKitDOMDocument *document) -+{ -+ WebKitDOMHTMLElement *body; -+ WebKitDOMNodeList *list; -+ -+ body = webkit_dom_document_get_body (document); -+ if (!body) -+ return; -+ -+ list = webkit_dom_document_query_selector_all (document, "pre", NULL); -+ if (webkit_dom_node_list_get_length (list)) { -+ WebKitDOMNode *body_node, *node, *current; -+ GSList *new_nodes = NULL, *to_remove = NULL, *link; -+ -+ g_clear_object (&list); -+ -+ body_node = WEBKIT_DOM_NODE (body); -+ webkit_dom_node_normalize (body_node); -+ -+ for (current = webkit_dom_node_get_first_child (body_node); -+ current; -+ current = webkit_dom_node_get_next_sibling (current)) { -+ traverse_nodes_to_split_pre (document, current, NULL, FALSE, &new_nodes); -+ to_remove = g_slist_prepend (to_remove, current); -+ } -+ -+ for (link = to_remove; link; link = g_slist_next (link)) { -+ node = link->data; -+ -+ webkit_dom_node_remove_child (body_node, node, NULL); -+ } -+ -+ /* They are in reverse order, thus reverse it */ -+ new_nodes = g_slist_reverse (new_nodes); -+ -+ for (link = new_nodes; link; link = g_slist_next (link)) { -+ node = link->data; -+ -+ webkit_dom_node_append_child (body_node, node, NULL); -+ } -+ -+ g_slist_free (to_remove); -+ g_slist_free (new_nodes); -+ } -+ -+ g_clear_object (&list); -+} -+ - void - e_editor_dom_process_content_after_load (EEditorPage *editor_page) - { -@@ -8803,60 +8929,8 @@ e_editor_dom_process_content_after_load - } - - goto out; -- } else { -- WebKitDOMNodeList *list; -- gulong ii; -- -- list = webkit_dom_document_query_selector_all (document, "pre", NULL); -- for (ii = webkit_dom_node_list_get_length (list); ii--;) { -- WebKitDOMNode *node = webkit_dom_node_list_item (list, ii), *parent; -- WebKitDOMElement *element; -- gchar *inner_html; -- -- element = WEBKIT_DOM_ELEMENT (node); -- parent = webkit_dom_node_get_parent_node (node); -- inner_html = webkit_dom_element_get_inner_html (element); -- -- if (inner_html && *inner_html) { -- gchar **strv; -- -- strv = g_strsplit (inner_html, "\n", -1); -- if (strv && strv[0] && strv[1]) { -- WebKitDOMElement *pre; -- gint jj; -- -- for (jj = 0; strv[jj]; jj++) { -- pre = webkit_dom_document_create_element (document, "pre", NULL); -- if (*(strv[jj])) { -- gint len = strlen (strv[jj]); -- -- if (strv[jj][len - 1] == '\r') { -- strv[jj][len - 1] = '\0'; -- } -- } -- -- if (*(strv[jj])) { -- webkit_dom_html_element_set_inner_html (WEBKIT_DOM_HTML_ELEMENT (pre), strv[jj], NULL); -- } else { -- WebKitDOMElement *br; -- -- br = webkit_dom_document_create_element (document, "br", NULL); -- webkit_dom_node_append_child (WEBKIT_DOM_NODE (pre), WEBKIT_DOM_NODE (br), NULL); -- } -- -- webkit_dom_node_insert_before (parent, WEBKIT_DOM_NODE (pre), node, NULL); -- } -- -- remove_node (node); -- } -- -- g_strfreev (strv); -- } -- -- g_free (inner_html); -- } -- -- g_clear_object (&list); -+ } else if (!webkit_dom_element_has_attribute (WEBKIT_DOM_ELEMENT (body), "data-evo-draft")) { -+ maybe_split_pre_paragraphs (document); - } - - adapt_to_editor_dom_changes (document); diff --git a/evolution-3.28.5-webkitgtk-2.28.patch b/evolution-3.28.5-webkitgtk-2.28.patch deleted file mode 100644 index d0f1de6d3895db2bbcf636081817e238811f6aba..0000000000000000000000000000000000000000 --- a/evolution-3.28.5-webkitgtk-2.28.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff -up evolution-3.28.5/src/e-util/e-misc-utils.c.webkitgtk-2.28 evolution-3.28.5/src/e-util/e-misc-utils.c ---- evolution-3.28.5/src/e-util/e-misc-utils.c.webkitgtk-2.28 2020-06-11 15:56:03.324428384 +0200 -+++ evolution-3.28.5/src/e-util/e-misc-utils.c 2020-06-11 15:56:03.334428384 +0200 -@@ -3633,7 +3633,7 @@ e_util_claim_dbus_proxy_call_error (GDBu - g_return_if_fail (method_name != NULL); - - if (in_error && !g_error_matches (in_error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) -- g_warning ("Failed to call a DBus Proxy method %s::%s: %s", -+ printf ("Failed to call a DBus Proxy method %s::%s: %s\n", - g_dbus_proxy_get_name (dbus_proxy), method_name, in_error->message); - } - -diff -up evolution-3.28.5/src/e-util/e-web-view.c.webkitgtk-2.28 evolution-3.28.5/src/e-util/e-web-view.c ---- evolution-3.28.5/src/e-util/e-web-view.c.webkitgtk-2.28 2018-07-30 15:37:05.000000000 +0200 -+++ evolution-3.28.5/src/e-util/e-web-view.c 2020-06-11 15:57:24.375430212 +0200 -@@ -1221,6 +1221,9 @@ web_view_initialize (WebKitWebView *web_ - g_object_unref (settings); - } - -+static void -+web_view_load_uri (EWebView *web_view, -+ const gchar *uri); - - static void - web_view_constructed (GObject *object) -@@ -1265,6 +1268,9 @@ web_view_constructed (GObject *object) - web_view_initialize (WEBKIT_WEB_VIEW (object)); - - web_view_set_find_controller (E_WEB_VIEW (object)); -+ -+ /* Initialize the WebPage content for WebKitGTK 2.28 */ -+ web_view_load_uri (E_WEB_VIEW (object), NULL); - } - - static void diff --git a/evolution-3.28.5-webkitgtk-2.30.patch b/evolution-3.28.5-webkitgtk-2.30.patch deleted file mode 100644 index 7ec8815a482f53e583e1868550efdb7746ac3e5f..0000000000000000000000000000000000000000 --- a/evolution-3.28.5-webkitgtk-2.30.patch +++ /dev/null @@ -1,39 +0,0 @@ -diff -up evolution-3.28.5/src/modules/webkit-editor/e-webkit-editor.c.webkitgtk-2.30 evolution-3.28.5/src/modules/webkit-editor/e-webkit-editor.c ---- evolution-3.28.5/src/modules/webkit-editor/e-webkit-editor.c.webkitgtk-2.30 2018-07-30 15:37:05.000000000 +0200 -+++ evolution-3.28.5/src/modules/webkit-editor/e-webkit-editor.c 2020-11-30 10:37:53.797115765 +0100 -@@ -6111,11 +6111,12 @@ webkit_editor_drag_data_received_cb (Gtk - info == E_DND_TARGET_TYPE_UTF8_STRING || info == E_DND_TARGET_TYPE_STRING || - info == E_DND_TARGET_TYPE_TEXT_PLAIN || info == E_DND_TARGET_TYPE_TEXT_PLAIN_UTF8) { - gdk_drag_status (context, gdk_drag_context_get_selected_action(context), time); -- if (!GTK_WIDGET_CLASS (e_webkit_editor_parent_class)->drag_drop (widget, context, x, y, time)) { -- g_warning ("Drop failed in WebKit"); -+ if (!GTK_WIDGET_CLASS (e_webkit_editor_parent_class)->drag_drop || -+ !GTK_WIDGET_CLASS (e_webkit_editor_parent_class)->drag_drop (widget, context, x, y, time)) { - goto process_ourselves; - } else { -- GTK_WIDGET_CLASS (e_webkit_editor_parent_class)->drag_leave(widget, context, time); -+ if (GTK_WIDGET_CLASS (e_webkit_editor_parent_class)->drag_leave) -+ GTK_WIDGET_CLASS (e_webkit_editor_parent_class)->drag_leave (widget, context, time); - g_signal_stop_emission_by_name (widget, "drag-data-received"); - if (!is_move) - webkit_editor_call_simple_extension_function (wk_editor, "DOMLastDropOperationDidCopy"); -@@ -6321,7 +6322,8 @@ webkit_editor_button_press_event (GtkWid - } - - /* Chain up to parent's button_press_event() method. */ -- return GTK_WIDGET_CLASS (e_webkit_editor_parent_class)->button_press_event (widget, event); -+ return GTK_WIDGET_CLASS (e_webkit_editor_parent_class)->button_press_event && -+ GTK_WIDGET_CLASS (e_webkit_editor_parent_class)->button_press_event (widget, event); - } - - static gboolean -@@ -6378,7 +6380,8 @@ webkit_editor_key_press_event (GtkWidget - } - - /* Chain up to parent's key_press_event() method. */ -- return GTK_WIDGET_CLASS (e_webkit_editor_parent_class)->key_press_event (widget, event); -+ return GTK_WIDGET_CLASS (e_webkit_editor_parent_class)->key_press_event && -+ GTK_WIDGET_CLASS (e_webkit_editor_parent_class)->key_press_event (widget, event); - } - - static void diff --git a/evolution-3.28.5.tar.xz b/evolution-3.28.5.tar.xz deleted file mode 100644 index 3e03d6f5adbe70801863baa037e9a10f8c393596..0000000000000000000000000000000000000000 Binary files a/evolution-3.28.5.tar.xz and /dev/null differ diff --git a/evolution-3.40.4-comp-editor-timezone-reset.patch b/evolution-3.40.4-comp-editor-timezone-reset.patch new file mode 100644 index 0000000000000000000000000000000000000000..9cf99f6065e3ce293dc7331c51a707614981e948 --- /dev/null +++ b/evolution-3.40.4-comp-editor-timezone-reset.patch @@ -0,0 +1,68 @@ +From 9bbb9289477c8a61a641b0b67cec367629f1e73a Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Thu, 10 Feb 2022 11:59:36 +0100 +Subject: [PATCH] ECompEditor: Timezone can be reset on component save + +The libical 3.0.14 contains a change, which unsets non-UTC timezones +in date/time values. That uncovered a bug in the Evolution code, which +expects the timezone will be preserved on re-read from the component, +but it's not always possible. This is corrected by re-setting the timezone +on the used ICalTime value. +--- + src/calendar/gui/e-comp-editor-property-part.c | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/src/calendar/gui/e-comp-editor-property-part.c b/src/calendar/gui/e-comp-editor-property-part.c +index 6bed833b12..6ce699a2e6 100644 +--- a/src/calendar/gui/e-comp-editor-property-part.c ++++ b/src/calendar/gui/e-comp-editor-property-part.c +@@ -913,8 +913,15 @@ ecepp_datetime_fill_component (ECompEditorPropertyPart *property_part, + g_object_unref (prop); + } + } else { ++ ICalTimezone *zone; ++ + value = e_comp_editor_property_part_datetime_get_value (part_datetime); + ++ zone = value && !i_cal_time_is_null_time (value) ? i_cal_time_get_timezone (value) : NULL; ++ ++ if (zone) ++ g_object_ref (zone); ++ + if (prop) { + /* Remove the VALUE parameter, to correspond to the actual value being set */ + i_cal_property_remove_parameter_by_kind (prop, I_CAL_VALUE_PARAMETER); +@@ -925,6 +932,11 @@ ecepp_datetime_fill_component (ECompEditorPropertyPart *property_part, + g_clear_object (&value); + value = klass->i_cal_get_func (prop); + ++ /* The timezone can be dropped since libical 3.0.14, thus restore it ++ before updating the TZID parameter */ ++ if (zone && value && !i_cal_time_is_null_time (value) && !i_cal_time_is_date (value)) ++ i_cal_time_set_timezone (value, zone); ++ + cal_comp_util_update_tzid_parameter (prop, value); + } else { + prop = klass->i_cal_new_func (value); +@@ -933,12 +945,18 @@ ecepp_datetime_fill_component (ECompEditorPropertyPart *property_part, + g_clear_object (&value); + value = klass->i_cal_get_func (prop); + ++ /* The timezone can be dropped since libical 3.0.14, thus restore it ++ before updating the TZID parameter */ ++ if (zone && value && !i_cal_time_is_null_time (value) && !i_cal_time_is_date (value)) ++ i_cal_time_set_timezone (value, zone); ++ + cal_comp_util_update_tzid_parameter (prop, value); + i_cal_component_add_property (component, prop); + } + + g_clear_object (&value); + g_clear_object (&prop); ++ g_clear_object (&zone); + } + } + +-- +2.33.1 + diff --git a/evolution-3.40.4-empty-emoji-picker.patch b/evolution-3.40.4-empty-emoji-picker.patch new file mode 100644 index 0000000000000000000000000000000000000000..7301d41020d7acb73c2837913535b147983b1ab6 --- /dev/null +++ b/evolution-3.40.4-empty-emoji-picker.patch @@ -0,0 +1,56 @@ +From e75c4faa36a9eb17b88128e45f9e5d91628149f9 Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Mon, 4 Oct 2021 17:18:35 +0200 +Subject: I#1646 - Emoji picker empty + +Embed emoji.data as expected by the copy of the gtk+' emoji chooser dialog. + +Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/1646 + +diff --git a/data/org.gnome.Evolution.gresource.xml b/data/org.gnome.Evolution.gresource.xml +new file mode 100644 +index 0000000000..783ed153b8 +--- /dev/null ++++ b/data/org.gnome.Evolution.gresource.xml +@@ -0,0 +1,6 @@ ++ ++ ++ ++ emoji.data ++ ++ +diff --git a/src/e-util/CMakeLists.txt b/src/e-util/CMakeLists.txt +index 03b60d8e4b..6f63f29858 100644 +--- a/src/e-util/CMakeLists.txt ++++ b/src/e-util/CMakeLists.txt +@@ -30,6 +30,8 @@ if(WIN32) + ) + endif(WIN32) + ++glib_compile_resources(${CMAKE_SOURCE_DIR}/data/ ${CMAKE_CURRENT_BINARY_DIR}/org.gnome.Evolution.gresource org_gnome_evolution ../../data/org.gnome.Evolution.gresource.xml ${CMAKE_SOURCE_DIR}/data/emoji.data) ++ + # Main libevolution-util + + set(DEPENDENCIES +@@ -309,6 +311,8 @@ set(SOURCES + ${PLATFORM_SOURCES} + ${CMAKE_CURRENT_BINARY_DIR}/e-marshal.c + ${CMAKE_CURRENT_BINARY_DIR}/e-util-enumtypes.c ++ ${CMAKE_CURRENT_BINARY_DIR}/org.gnome.Evolution.gresource.c ++ ${CMAKE_CURRENT_BINARY_DIR}/org.gnome.Evolution.gresource.h + ) + + set(HEADERS +diff --git a/src/e-util/e-gtkemojichooser.c b/src/e-util/e-gtkemojichooser.c +index ba4d15ecee..7d8aae3039 100644 +--- a/src/e-util/e-gtkemojichooser.c ++++ b/src/e-util/e-gtkemojichooser.c +@@ -444,7 +444,7 @@ populate_emoji_chooser (gpointer data) + + if (!chooser->data) + { +- bytes = g_resources_lookup_data ("/org/gtk/libgtk/emoji/emoji.data", 0, NULL); ++ bytes = g_resources_lookup_data ("/org.gnome.Evolution/emoji.data", 0, NULL); + chooser->data = g_variant_ref_sink (g_variant_new_from_bytes (G_VARIANT_TYPE ("a(auss)"), bytes, TRUE)); + } + diff --git a/evolution-3.40.4-google-contacts-to-carddav.patch b/evolution-3.40.4-google-contacts-to-carddav.patch new file mode 100644 index 0000000000000000000000000000000000000000..3bbe829725732dacb21c12a66a9c6eb94a4f9d11 --- /dev/null +++ b/evolution-3.40.4-google-contacts-to-carddav.patch @@ -0,0 +1,1124 @@ +diff -up evolution-3.40.4/.3 evolution-3.40.4/ +diff -up evolution-3.40.4/po/ca.po.3 evolution-3.40.4/po/ca.po +--- evolution-3.40.4/po/ca.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/ca.po 2022-04-05 10:00:37.396025268 +0200 +@@ -29878,3 +29878,11 @@ msgstr "Certificat importat" + + #~ msgid "Certificate details" + #~ msgstr "Detalls del certificat" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Llibreta d'adreces d'usuari per defecte" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Llibreta d'adreces:" +diff -up evolution-3.40.4/po/cs.po.3 evolution-3.40.4/po/cs.po +--- evolution-3.40.4/po/cs.po.3 2022-04-05 10:00:37.398025267 +0200 ++++ evolution-3.40.4/po/cs.po 2022-04-05 10:01:37.100998171 +0200 +@@ -28264,3 +28264,10 @@ msgstr "Nelze zapsat úložiště na dis + msgid "Imported Certificate" + msgstr "Importovaný certifikát" + ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Výchozí uživatelský adresář" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Adresář:" +diff -up evolution-3.40.4/po/da.po.3 evolution-3.40.4/po/da.po +--- evolution-3.40.4/po/da.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/da.po 2022-04-05 10:00:37.400025266 +0200 +@@ -28202,3 +28202,11 @@ msgstr "Kan ikke skrive lageret til disk + #: ../src/smime/lib/e-pkcs12.c:407 + msgid "Imported Certificate" + msgstr "Importeret certifikat" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Standard-brugeradressebog" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Adressebog:" +diff -up evolution-3.40.4/po/de.po.3 evolution-3.40.4/po/de.po +--- evolution-3.40.4/po/de.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/de.po 2022-04-05 10:00:37.402025265 +0200 +@@ -28546,3 +28546,11 @@ msgstr "Importiertes Zertifikat" + + #~ msgid "%d/%m/%Y" + #~ msgstr "%d.%m.%Y" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Standard-Benutzer-Adressbuch" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Adressbuch:" +diff -up evolution-3.40.4/po/el.po.3 evolution-3.40.4/po/el.po +--- evolution-3.40.4/po/el.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/el.po 2022-04-05 10:00:37.404025264 +0200 +@@ -36518,3 +36518,11 @@ msgstr "Εισηγμένο πιστοπ + #~ msgstr "" + #~ "Ειδοποιεί τον χρήστη με ένα εικονίδιο στην περιοχή ειδοποίησης και με ένα " + #~ "μήνυμα ειδοποίησης κάθε φορά που φθάνει ένα νέο μήνυμα." ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Προεπιλεγμένο βιβλίο διευθύνσεων χρήστη" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Βιβλίο διευθύνσεων:" +diff -up evolution-3.40.4/po/eo.po.3 evolution-3.40.4/po/eo.po +--- evolution-3.40.4/po/eo.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/eo.po 2022-04-05 10:00:37.406025263 +0200 +@@ -27968,3 +27968,7 @@ msgstr "Enportita atestilo" + + #~ msgid "Read and write emails" + #~ msgstr "Legi kaj skribi retpoŝtojn" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Adresaro:" +diff -up evolution-3.40.4/po/es.po.3 evolution-3.40.4/po/es.po +--- evolution-3.40.4/po/es.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/es.po 2022-04-05 10:00:37.408025262 +0200 +@@ -29113,3 +29113,11 @@ msgstr "Certificado importado" + #~ msgstr "" + #~ "El calendario «%s» contiene %d citas que entran en conflicto con esta " + #~ "reunión" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Eliminar la libreta de direcciones de usuario predeterminada" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Libreta de direcciones:" +diff -up evolution-3.40.4/po/eu.po.3 evolution-3.40.4/po/eu.po +--- evolution-3.40.4/po/eu.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/eu.po 2022-04-05 10:00:37.409025262 +0200 +@@ -27204,3 +27204,11 @@ msgstr "Inportatutako ziurtagiria" + + #~ msgid "_Destination" + #~ msgstr "_Helburua" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Erabiltzailearen helbide-liburu lehenetsia" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Helbide-liburua:" +diff -up evolution-3.40.4/po/fi.po.3 evolution-3.40.4/po/fi.po +--- evolution-3.40.4/po/fi.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/fi.po 2022-04-05 10:00:37.411025261 +0200 +@@ -29750,3 +29750,7 @@ msgstr "Tuotu varmenne" + + #~ msgid "Certificate details" + #~ msgstr "Varmenteen yksityiskohdat" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Osoitekirja:" +diff -up evolution-3.40.4/po/fr.po.3 evolution-3.40.4/po/fr.po +--- evolution-3.40.4/po/fr.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/fr.po 2022-04-05 10:00:37.413025260 +0200 +@@ -28750,3 +28750,11 @@ msgstr "Certificat importé" + + #~ msgid "Preserve exiting reminder by default" + #~ msgstr "Conserver les rappels existants par défaut" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Carnet d’adresses par défaut de l’utilisateur" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Carnet d’adresses :" +diff -up evolution-3.40.4/po/fur.po.3 evolution-3.40.4/po/fur.po +--- evolution-3.40.4/po/fur.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/fur.po 2022-04-05 10:00:37.414025260 +0200 +@@ -29053,3 +29053,11 @@ msgstr "Certificât impuartât" + #~ msgctxt "PGPKeyDescription" + #~ msgid "%s - %s" + #~ msgstr "%s - %s" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Rubriche utent predefinît" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Rubriche:" +diff -up evolution-3.40.4/po/gl.po.3 evolution-3.40.4/po/gl.po +--- evolution-3.40.4/po/gl.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/gl.po 2022-04-05 10:00:37.416025259 +0200 +@@ -28502,3 +28502,11 @@ msgstr "Certificado importado" + + #~ msgid "Delivery Notification for “%s”" + #~ msgstr "Notificación de recepción para «%s»" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Axenda de enderezos predeterminada do usuario" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Caderno de enderezos:" +diff -up evolution-3.40.4/po/hr.po.3 evolution-3.40.4/po/hr.po +--- evolution-3.40.4/po/hr.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/hr.po 2022-04-05 10:00:37.418025258 +0200 +@@ -28303,3 +28303,11 @@ msgstr "Uvezena vjerodajnica" + + #~ msgid "This certificate is not viewable" + #~ msgstr "Ovaj potvrda nije vidljiva" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Zadani adresar korisnika" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Adresar:" +diff -up evolution-3.40.4/po/hu.po.3 evolution-3.40.4/po/hu.po +--- evolution-3.40.4/po/hu.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/hu.po 2022-04-05 10:00:37.419025257 +0200 +@@ -27314,3 +27314,11 @@ msgstr "Importált tanúsítvány" + + #~ msgid "_Destination" + #~ msgstr "_Cél" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Alapértelmezett felhasználói címjegyzék" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Címjegyzék:" +diff -up evolution-3.40.4/po/id.po.3 evolution-3.40.4/po/id.po +--- evolution-3.40.4/po/id.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/id.po 2022-04-05 10:00:37.421025257 +0200 +@@ -28288,3 +28288,11 @@ msgstr "Sertifikat Yang Diimpor" + + #~ msgid "Delivery Notification for “%s”" + #~ msgstr "Notifikasi Pengiriman untuk \"%s\"" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Buku Alamat Pengguna Bawaan" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Buku Alamat:" +diff -up evolution-3.40.4/po/it.po.3 evolution-3.40.4/po/it.po +--- evolution-3.40.4/po/it.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/it.po 2022-04-05 10:00:37.423025256 +0200 +@@ -29030,3 +29030,11 @@ msgstr "Impossibile scrivere il salvatag + #: ../src/smime/lib/e-pkcs12.c:407 + msgid "Imported Certificate" + msgstr "Certificato importato" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Rubrica predefinita dell'utente" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Rubrica:" +diff -up evolution-3.40.4/po/kk.po.3 evolution-3.40.4/po/kk.po +--- evolution-3.40.4/po/kk.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/kk.po 2022-04-05 10:00:37.424025255 +0200 +@@ -27302,3 +27302,7 @@ msgstr "Импортталған сер + + #~ msgid "_PostScript" + #~ msgstr "_PostScript" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Адрестік кітапша:" +diff -up evolution-3.40.4/po/ko.po.3 evolution-3.40.4/po/ko.po +--- evolution-3.40.4/po/ko.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/ko.po 2022-04-05 10:00:37.426025254 +0200 +@@ -28272,3 +28272,11 @@ msgstr "디스크에 저장 내용을 + #: ../src/smime/lib/e-pkcs12.c:407 + msgid "Imported Certificate" + msgstr "가져온 인증서" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "기본 사용자 주소록" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "주소록:" +diff -up evolution-3.40.4/po/lt.po.3 evolution-3.40.4/po/lt.po +--- evolution-3.40.4/po/lt.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/lt.po 2022-04-05 10:00:37.428025253 +0200 +@@ -29356,3 +29356,11 @@ msgstr "Importuotas liudijimas" + + #~ msgid "Certificate details" + #~ msgstr "Liudijimo informacija" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Numatytoji naudotojo adresų knyga" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Adresų knyga:" +diff -up evolution-3.40.4/po/lv.po.3 evolution-3.40.4/po/lv.po +--- evolution-3.40.4/po/lv.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/lv.po 2022-04-05 10:00:37.429025253 +0200 +@@ -26918,3 +26918,11 @@ msgstr "Importēts sertifikāts" + + #~ msgid "Evolution Web Inspector" + #~ msgstr "Evolution tīmekļa inspektors" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Noklusējuma lietotāja adrešu grāmata" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Adrešu grāmata:" +diff -up evolution-3.40.4/po/nb.po.3 evolution-3.40.4/po/nb.po +--- evolution-3.40.4/po/nb.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/nb.po 2022-04-05 10:00:37.431025252 +0200 +@@ -27933,3 +27933,11 @@ msgstr "Kan ikke skrive lager til disk. + #: ../src/smime/lib/e-pkcs12.c:407 + msgid "Imported Certificate" + msgstr "Importert sertifikat" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Forvalgt adressebok for bruker" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Adressebok:" +diff -up evolution-3.40.4/po/nl.po.3 evolution-3.40.4/po/nl.po +--- evolution-3.40.4/po/nl.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/nl.po 2022-04-05 10:00:37.432025252 +0200 +@@ -29667,3 +29667,11 @@ msgstr "Geïmporteerd certificaat" + # Herinnering geven [15] [minuten] voor het begin van elke afspraak + #~ msgid "Sh_ow a reminder" + #~ msgstr "Herinnering geven" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Standaardadresboek van gebruiker" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Adresboek:" +diff -up evolution-3.40.4/po/pl.po.3 evolution-3.40.4/po/pl.po +--- evolution-3.40.4/po/pl.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/pl.po 2022-04-05 10:00:37.434025251 +0200 +@@ -28409,3 +28409,11 @@ msgstr "Nie można zapisać przechowalni + #: ../src/smime/lib/e-pkcs12.c:407 + msgid "Imported Certificate" + msgstr "Zaimportowany certyfikat" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Domyślna książka adresowa użytkownika" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Książka adresowa:" +diff -up evolution-3.40.4/po/POTFILES.in.3 evolution-3.40.4/po/POTFILES.in +--- evolution-3.40.4/po/POTFILES.in.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/POTFILES.in 2022-04-05 10:00:37.392025269 +0200 +@@ -406,6 +406,7 @@ src/modules/backup-restore/org-gnome-bac + src/modules/bogofilter/evolution-bogofilter.c + src/modules/bogofilter/org.gnome.Evolution-bogofilter.metainfo.xml.in + src/modules/book-config-carddav/evolution-book-config-carddav.c ++src/modules/book-config-google/e-google-book-chooser-button.c + src/modules/book-config-google/evolution-book-config-google.c + src/modules/book-config-ldap/evolution-book-config-ldap.c + src/modules/cal-config-caldav/evolution-cal-config-caldav.c +diff -up evolution-3.40.4/po/pt_BR.po.3 evolution-3.40.4/po/pt_BR.po +--- evolution-3.40.4/po/pt_BR.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/pt_BR.po 2022-04-05 10:00:37.438025249 +0200 +@@ -29031,3 +29031,11 @@ msgstr "Certificado importado" + + #~ msgid "Save name format for drag-and-drop operation" + #~ msgstr "Salvar formato de nome para operação de arrastar e soltar" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Catálogo de endereços do usuário padrão" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Catálogo de endereços:" +diff -up evolution-3.40.4/po/pt.po.3 evolution-3.40.4/po/pt.po +--- evolution-3.40.4/po/pt.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/pt.po 2022-04-05 10:00:37.436025250 +0200 +@@ -32805,3 +32805,11 @@ msgstr "Certificado importado" + + #~ msgid "Checks incoming mail messages to be Junk" + #~ msgstr "Verificar nas mensagens recebidas se são Não Solicitadas" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Livro de endereços predefinido do utilizador" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Livro de endereços:" +diff -up evolution-3.40.4/po/ro.po.3 evolution-3.40.4/po/ro.po +--- evolution-3.40.4/po/ro.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/ro.po 2022-04-05 10:00:37.439025249 +0200 +@@ -26328,3 +26328,11 @@ msgstr "Certificatul importat" + + #~ msgid "_Destination" + #~ msgstr "_Destinație" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Agenda utilizatorului implicit" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Agendă:" +diff -up evolution-3.40.4/po/ru.po.3 evolution-3.40.4/po/ru.po +--- evolution-3.40.4/po/ru.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/ru.po 2022-04-05 10:00:37.441025248 +0200 +@@ -28144,3 +28144,11 @@ msgstr "Импортированный + #~ msgstr "" + #~ "Этот параметр будет использовать токен доступа OAuth 2.0 для подключения " + #~ "к серверу" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Адресная книга пользователя по умолчанию" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Адресная книга:" +diff -up evolution-3.40.4/po/sk.po.3 evolution-3.40.4/po/sk.po +--- evolution-3.40.4/po/sk.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/sk.po 2022-04-05 10:00:37.443025247 +0200 +@@ -29840,3 +29840,7 @@ msgstr "Importovaný certifikát" + # MČ: podpis certifikátu. Až ďalej sa určuje, či sa tento certifikát môže použiť na podpisovanie + #~ msgid "Certificate Signature Value" + #~ msgstr "Hodnota podpisu certifikátu" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Adresár kontaktov:" +diff -up evolution-3.40.4/po/sl.po.3 evolution-3.40.4/po/sl.po +--- evolution-3.40.4/po/sl.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/sl.po 2022-04-05 10:00:37.444025246 +0200 +@@ -28539,3 +28539,11 @@ msgstr "Uvoženo potrdilo" + + #~ msgid "Certificate" + #~ msgstr "Potrdilo" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Privzeti uporabniški imenik" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Imenik:" +diff -up evolution-3.40.4/po/sr.po.3 evolution-3.40.4/po/sr.po +--- evolution-3.40.4/po/sr.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/sr.po 2022-04-05 10:00:37.447025245 +0200 +@@ -29869,3 +29869,11 @@ msgstr "Увежено уверење" + + #~ msgid "Certificate Signature Value" + #~ msgstr "Вредност потписа уверења" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Основни корисников именик" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Именик:" +diff -up evolution-3.40.4/po/sv.po.3 evolution-3.40.4/po/sv.po +--- evolution-3.40.4/po/sv.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/sv.po 2022-04-05 10:00:37.450025244 +0200 +@@ -29371,3 +29371,11 @@ msgstr "Importerat certifikat" + + #~ msgid "User declined to provide a password" + #~ msgstr "Användare avböjde att tillhandahålla ett lösenord" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Standardadressbok för användare" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Adressbok:" +diff -up evolution-3.40.4/po/tr.po.3 evolution-3.40.4/po/tr.po +--- evolution-3.40.4/po/tr.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/tr.po 2022-04-05 10:00:37.452025243 +0200 +@@ -28728,3 +28728,11 @@ msgstr "Aktarılmış Sertifika" + + #~ msgid "Evolution Web Inspector" + #~ msgstr "Evolution Web Denetçisi" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Öntanımlı Kullanıcı Adres Defteri" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Adres Defteri:" +diff -up evolution-3.40.4/po/uk.po.3 evolution-3.40.4/po/uk.po +--- evolution-3.40.4/po/uk.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/uk.po 2022-04-05 10:00:37.455025241 +0200 +@@ -28418,3 +28418,11 @@ msgstr "Імпортований сер + + #~ msgid "Background Image" + #~ msgstr "Зображення тла" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "Типова адресна книга користувача" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "Адресна книга:" +diff -up evolution-3.40.4/po/zh_CN.po.3 evolution-3.40.4/po/zh_CN.po +--- evolution-3.40.4/po/zh_CN.po.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/po/zh_CN.po 2022-04-05 10:00:37.457025241 +0200 +@@ -32853,3 +32853,11 @@ msgstr "导入的证书" + + #~ msgid "Local Calendars" + #~ msgstr "载入日历" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "默认用户通讯录" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "通讯录:" +diff -up evolution-3.40.4/po/ja.po.5 evolution-3.40.4/po/ja.po +--- evolution-3.40.4/po/ja.po.3 2022-04-08 13:42:12.782532717 +0200 ++++ evolution-3.40.4/po/ja.po 2022-04-08 13:42:38.886527919 +0200 +@@ -28035,3 +28035,11 @@ msgstr "インポートした証明書" + + #~ msgid "Certificate Signature Value" + #~ msgstr "証明書の署名の値" ++ ++#: ../src/modules/book-config-google/e-google-book-chooser-button.c:134 ++msgid "Default User Address Book" ++msgstr "デフォルトのユーザーアドレス帳" ++ ++#: ../src/modules/book-config-google/evolution-book-config-google.c:75 ++msgid "Address Book:" ++msgstr "アドレス帳:" +diff -up evolution-3.40.4/src/e-util/e-source-config.c.3 evolution-3.40.4/src/e-util/e-source-config.c +--- evolution-3.40.4/src/e-util/e-source-config.c.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/src/e-util/e-source-config.c 2022-04-05 10:00:37.457025241 +0200 +@@ -505,9 +505,10 @@ source_config_init_for_editing_source (E + backend_name = e_source_backend_get_backend_name (extension); + g_return_if_fail (backend_name != NULL); + +- /* Special-case Google calendars to use 'google' editor, instead +- of the 'caldav' editor, even they use 'caldav' calendar backend. */ +- if (g_ascii_strcasecmp (backend_name, "caldav") == 0 && ++ /* Special-case Google books and calendars to use 'google' editor, instead ++ of the 'carddav'/'caldav' editor, even they use 'carddav'/'caldav' backend. */ ++ if ((g_ascii_strcasecmp (backend_name, "caldav") == 0 || ++ g_ascii_strcasecmp (backend_name, "carddav") == 0) && + g_strcmp0 (e_source_get_parent (original_source), "google-stub") == 0) + backend_name = "google"; + +diff -up evolution-3.40.4/src/modules/book-config-google/CMakeLists.txt.3 evolution-3.40.4/src/modules/book-config-google/CMakeLists.txt +--- evolution-3.40.4/src/modules/book-config-google/CMakeLists.txt.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/src/modules/book-config-google/CMakeLists.txt 2022-04-05 10:00:37.457025241 +0200 +@@ -1,5 +1,7 @@ + set(extra_deps) + set(sources ++ e-google-book-chooser-button.c ++ e-google-book-chooser-button.h + evolution-book-config-google.c + ) + set(extra_defines) +diff -up evolution-3.40.4/src/modules/book-config-google/e-google-book-chooser-button.c.3 evolution-3.40.4/src/modules/book-config-google/e-google-book-chooser-button.c +--- evolution-3.40.4/src/modules/book-config-google/e-google-book-chooser-button.c.3 2022-04-05 10:00:37.457025241 +0200 ++++ evolution-3.40.4/src/modules/book-config-google/e-google-book-chooser-button.c 2022-04-05 10:00:37.457025241 +0200 +@@ -0,0 +1,402 @@ ++/* ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU Lesser General Public License as published by ++ * the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ++ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public License ++ * along with this program; if not, see . ++ * ++ */ ++ ++#include "evolution-config.h" ++ ++#include ++ ++#include ++ ++#include "e-google-book-chooser-button.h" ++ ++struct _EGoogleBookChooserButtonPrivate { ++ ESource *source; ++ ESourceConfig *config; ++ GtkWidget *label; ++}; ++ ++enum { ++ PROP_0, ++ PROP_SOURCE, ++ PROP_CONFIG ++}; ++ ++G_DEFINE_DYNAMIC_TYPE_EXTENDED (EGoogleBookChooserButton, e_google_book_chooser_button, GTK_TYPE_BUTTON, 0, ++ G_ADD_PRIVATE_DYNAMIC (EGoogleBookChooserButton)) ++ ++static void ++google_book_chooser_button_set_source (EGoogleBookChooserButton *button, ++ ESource *source) ++{ ++ g_return_if_fail (E_IS_SOURCE (source)); ++ g_return_if_fail (button->priv->source == NULL); ++ ++ button->priv->source = g_object_ref (source); ++} ++ ++static void ++google_book_chooser_button_set_config (EGoogleBookChooserButton *button, ++ ESourceConfig *config) ++{ ++ g_return_if_fail (E_IS_SOURCE_CONFIG (config)); ++ g_return_if_fail (button->priv->config == NULL); ++ ++ button->priv->config = g_object_ref (config); ++} ++ ++static void ++google_book_chooser_button_set_property (GObject *object, ++ guint property_id, ++ const GValue *value, ++ GParamSpec *pspec) ++{ ++ switch (property_id) { ++ case PROP_SOURCE: ++ google_book_chooser_button_set_source ( ++ E_GOOGLE_BOOK_CHOOSER_BUTTON (object), ++ g_value_get_object (value)); ++ return; ++ ++ case PROP_CONFIG: ++ google_book_chooser_button_set_config ( ++ E_GOOGLE_BOOK_CHOOSER_BUTTON (object), ++ g_value_get_object (value)); ++ return; ++ } ++ ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); ++} ++ ++static void ++google_book_chooser_button_get_property (GObject *object, ++ guint property_id, ++ GValue *value, ++ GParamSpec *pspec) ++{ ++ switch (property_id) { ++ case PROP_SOURCE: ++ g_value_set_object ( ++ value, ++ e_google_book_chooser_button_get_source ( ++ E_GOOGLE_BOOK_CHOOSER_BUTTON (object))); ++ return; ++ ++ case PROP_CONFIG: ++ g_value_set_object ( ++ value, ++ e_google_book_chooser_button_get_config ( ++ E_GOOGLE_BOOK_CHOOSER_BUTTON (object))); ++ return; ++ } ++ ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); ++} ++ ++static void ++google_book_chooser_button_dispose (GObject *object) ++{ ++ EGoogleBookChooserButton *button = E_GOOGLE_BOOK_CHOOSER_BUTTON (object); ++ ++ g_clear_object (&button->priv->source); ++ g_clear_object (&button->priv->config); ++ g_clear_object (&button->priv->label); ++ ++ /* Chain up to parent's dispose() method. */ ++ G_OBJECT_CLASS (e_google_book_chooser_button_parent_class)->dispose (object); ++} ++ ++static void ++google_book_chooser_button_constructed (GObject *object) ++{ ++ EGoogleBookChooserButton *button; ++ ESourceWebdav *webdav_extension; ++ GBindingFlags binding_flags; ++ GtkWidget *widget; ++ const gchar *display_name; ++ ++ button = E_GOOGLE_BOOK_CHOOSER_BUTTON (object); ++ ++ /* Chain up to parent's constructed() method. */ ++ G_OBJECT_CLASS (e_google_book_chooser_button_parent_class)->constructed (object); ++ ++ widget = gtk_label_new (_("Default User Address Book")); ++ gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); ++ gtk_container_add (GTK_CONTAINER (button), widget); ++ button->priv->label = g_object_ref (widget); ++ gtk_widget_show (widget); ++ ++ webdav_extension = e_source_get_extension ( ++ button->priv->source, E_SOURCE_EXTENSION_WEBDAV_BACKEND); ++ display_name = e_source_webdav_get_display_name (webdav_extension); ++ ++ binding_flags = G_BINDING_DEFAULT; ++ if (display_name != NULL && *display_name != '\0') ++ binding_flags |= G_BINDING_SYNC_CREATE; ++ ++ e_binding_bind_property ( ++ webdav_extension, "display-name", ++ button->priv->label, "label", ++ binding_flags); ++} ++ ++static GtkWindow * ++google_config_get_dialog_parent_cb (ECredentialsPrompter *prompter, ++ GtkWindow *dialog) ++{ ++ return dialog; ++} ++ ++static void ++google_book_chooser_button_clicked (GtkButton *btn) ++{ ++ EGoogleBookChooserButton *button; ++ gpointer parent; ++ ESourceRegistry *registry; ++ ECredentialsPrompter *prompter; ++ ESourceWebdav *webdav_extension; ++ ESourceAuthentication *authentication_extension; ++ SoupURI *uri; ++ gchar *base_url; ++ GtkDialog *dialog; ++ gulong handler_id; ++ guint supports_filter = 0; ++ const gchar *title = NULL; ++ ++ button = E_GOOGLE_BOOK_CHOOSER_BUTTON (btn); ++ ++ parent = gtk_widget_get_toplevel (GTK_WIDGET (button)); ++ parent = gtk_widget_is_toplevel (parent) ? parent : NULL; ++ ++ registry = e_source_config_get_registry (button->priv->config); ++ ++ authentication_extension = e_source_get_extension (button->priv->source, E_SOURCE_EXTENSION_AUTHENTICATION); ++ webdav_extension = e_source_get_extension (button->priv->source, E_SOURCE_EXTENSION_WEBDAV_BACKEND); ++ ++ uri = e_source_webdav_dup_soup_uri (webdav_extension); ++ ++ e_google_book_chooser_button_construct_default_uri (uri, e_source_authentication_get_user (authentication_extension)); ++ ++ /* Prefer 'Google', aka internal OAuth2, authentication method, if available */ ++ e_source_authentication_set_method (authentication_extension, "Google"); ++ ++ /* See https://developers.google.com/people/carddav */ ++ soup_uri_set_host (uri, "www.googleapis.com"); ++ soup_uri_set_path (uri, "/.well-known/carddav"); ++ ++ /* Google's CardDAV interface requires a secure connection. */ ++ soup_uri_set_scheme (uri, SOUP_URI_SCHEME_HTTPS); ++ ++ e_source_webdav_set_soup_uri (webdav_extension, uri); ++ ++ prompter = e_credentials_prompter_new (registry); ++ e_credentials_prompter_set_auto_prompt (prompter, FALSE); ++ ++ supports_filter = E_WEBDAV_DISCOVER_SUPPORTS_CONTACTS; ++ title = _("Choose an Address Book"); ++ base_url = soup_uri_to_string (uri, FALSE); ++ ++ dialog = e_webdav_discover_dialog_new (parent, title, prompter, button->priv->source, base_url, supports_filter); ++ ++ if (parent != NULL) ++ e_binding_bind_property ( ++ parent, "icon-name", ++ dialog, "icon-name", ++ G_BINDING_SYNC_CREATE); ++ ++ handler_id = g_signal_connect (prompter, "get-dialog-parent", ++ G_CALLBACK (google_config_get_dialog_parent_cb), dialog); ++ ++ e_webdav_discover_dialog_refresh (dialog); ++ ++ if (gtk_dialog_run (dialog) == GTK_RESPONSE_ACCEPT) { ++ gchar *href = NULL, *display_name = NULL, *color = NULL, *email; ++ guint supports = 0, order = 0; ++ GtkWidget *content; ++ ++ content = e_webdav_discover_dialog_get_content (dialog); ++ ++ if (e_webdav_discover_content_get_selected (content, 0, &href, &supports, &display_name, &color, &order)) { ++ soup_uri_free (uri); ++ uri = soup_uri_new (href); ++ ++ if (uri) { ++ ESourceAddressBook *addressbook_extension; ++ ++ addressbook_extension = e_source_get_extension (button->priv->source, E_SOURCE_EXTENSION_ADDRESS_BOOK); ++ ++ e_source_set_display_name (button->priv->source, display_name); ++ ++ e_source_webdav_set_display_name (webdav_extension, display_name); ++ e_source_webdav_set_soup_uri (webdav_extension, uri); ++ e_source_webdav_set_order (webdav_extension, order); ++ ++ e_source_address_book_set_order (addressbook_extension, order); ++ } ++ ++ g_clear_pointer (&href, g_free); ++ g_clear_pointer (&display_name, g_free); ++ g_clear_pointer (&color, g_free); ++ } ++ ++ email = e_webdav_discover_content_get_user_address (content); ++ if (email && *email) ++ e_source_webdav_set_email_address (webdav_extension, email); ++ g_free (email); ++ } ++ ++ g_signal_handler_disconnect (prompter, handler_id); ++ ++ gtk_widget_destroy (GTK_WIDGET (dialog)); ++ ++ g_object_unref (prompter); ++ if (uri) ++ soup_uri_free (uri); ++ g_free (base_url); ++} ++ ++static void ++e_google_book_chooser_button_class_init (EGoogleBookChooserButtonClass *class) ++{ ++ GObjectClass *object_class; ++ GtkButtonClass *button_class; ++ ++ object_class = G_OBJECT_CLASS (class); ++ object_class->set_property = google_book_chooser_button_set_property; ++ object_class->get_property = google_book_chooser_button_get_property; ++ object_class->dispose = google_book_chooser_button_dispose; ++ object_class->constructed = google_book_chooser_button_constructed; ++ ++ button_class = GTK_BUTTON_CLASS (class); ++ button_class->clicked = google_book_chooser_button_clicked; ++ ++ g_object_class_install_property ( ++ object_class, ++ PROP_SOURCE, ++ g_param_spec_object ( ++ "source", ++ NULL, ++ NULL, ++ E_TYPE_SOURCE, ++ G_PARAM_READWRITE | ++ G_PARAM_CONSTRUCT_ONLY)); ++ ++ g_object_class_install_property ( ++ object_class, ++ PROP_CONFIG, ++ g_param_spec_object ( ++ "config", ++ NULL, ++ NULL, ++ E_TYPE_SOURCE_CONFIG, ++ G_PARAM_READWRITE | ++ G_PARAM_CONSTRUCT_ONLY)); ++} ++ ++static void ++e_google_book_chooser_button_class_finalize (EGoogleBookChooserButtonClass *class) ++{ ++} ++ ++static void ++e_google_book_chooser_button_init (EGoogleBookChooserButton *button) ++{ ++ button->priv = e_google_book_chooser_button_get_instance_private (button); ++} ++ ++void ++e_google_book_chooser_button_type_register (GTypeModule *type_module) ++{ ++ /* XXX G_DEFINE_DYNAMIC_TYPE declares a static type registration ++ * function, so we have to wrap it with a public function in ++ * order to register types from a separate compilation unit. */ ++ e_google_book_chooser_button_register_type (type_module); ++} ++ ++GtkWidget * ++e_google_book_chooser_button_new (ESource *source, ++ ESourceConfig *config) ++{ ++ g_return_val_if_fail (E_IS_SOURCE (source), NULL); ++ ++ return g_object_new ( ++ E_TYPE_GOOGLE_BOOK_CHOOSER_BUTTON, ++ "source", source, ++ "config", config, NULL); ++} ++ ++ESource * ++e_google_book_chooser_button_get_source (EGoogleBookChooserButton *button) ++{ ++ g_return_val_if_fail (E_IS_GOOGLE_BOOK_CHOOSER_BUTTON (button), NULL); ++ ++ return button->priv->source; ++} ++ ++ESourceConfig * ++e_google_book_chooser_button_get_config (EGoogleBookChooserButton *button) ++{ ++ g_return_val_if_fail (E_IS_GOOGLE_BOOK_CHOOSER_BUTTON (button), NULL); ++ ++ return button->priv->config; ++} ++ ++static gchar * ++google_book_chooser_decode_user (const gchar *user) ++{ ++ gchar *decoded_user; ++ ++ if (user == NULL || *user == '\0') ++ return NULL; ++ ++ /* Decode any encoded 'at' symbols ('%40' -> '@'). */ ++ if (strstr (user, "%40") != NULL) { ++ gchar **segments; ++ ++ segments = g_strsplit (user, "%40", 0); ++ decoded_user = g_strjoinv ("@", segments); ++ g_strfreev (segments); ++ ++ /* If no domain is given, append "@gmail.com". */ ++ } else if (strstr (user, "@") == NULL) { ++ decoded_user = g_strconcat (user, "@gmail.com", NULL); ++ ++ /* Otherwise the user name should be fine as is. */ ++ } else { ++ decoded_user = g_strdup (user); ++ } ++ ++ return decoded_user; ++} ++ ++void ++e_google_book_chooser_button_construct_default_uri (SoupURI *soup_uri, ++ const gchar *username) ++{ ++ gchar *decoded_user, *path; ++ ++ decoded_user = google_book_chooser_decode_user (username); ++ if (!decoded_user) ++ return; ++ ++ path = g_strdup_printf ("/carddav/v1/principals/%s/lists/default/", decoded_user); ++ ++ soup_uri_set_scheme (soup_uri, SOUP_URI_SCHEME_HTTPS); ++ soup_uri_set_user (soup_uri, decoded_user); ++ soup_uri_set_host (soup_uri, "www.googleapis.com"); ++ soup_uri_set_path (soup_uri, path); ++ ++ g_free (decoded_user); ++ g_free (path); ++} +diff -up evolution-3.40.4/src/modules/book-config-google/e-google-book-chooser-button.h.3 evolution-3.40.4/src/modules/book-config-google/e-google-book-chooser-button.h +--- evolution-3.40.4/src/modules/book-config-google/e-google-book-chooser-button.h.3 2022-04-05 10:00:37.457025241 +0200 ++++ evolution-3.40.4/src/modules/book-config-google/e-google-book-chooser-button.h 2022-04-05 10:00:37.457025241 +0200 +@@ -0,0 +1,70 @@ ++/* ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU Lesser General Public License as published by ++ * the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, but ++ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ++ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public License ++ * along with this program; if not, see . ++ * ++ */ ++ ++#ifndef E_GOOGLE_BOOK_CHOOSER_BUTTON_H ++#define E_GOOGLE_BOOK_CHOOSER_BUTTON_H ++ ++#include ++ ++/* Standard GObject macros */ ++#define E_TYPE_GOOGLE_BOOK_CHOOSER_BUTTON \ ++ (e_google_book_chooser_button_get_type ()) ++#define E_GOOGLE_BOOK_CHOOSER_BUTTON(obj) \ ++ (G_TYPE_CHECK_INSTANCE_CAST \ ++ ((obj), E_TYPE_GOOGLE_BOOK_CHOOSER_BUTTON, EGoogleBookChooserButton)) ++#define E_GOOGLE_BOOK_CHOOSER_BUTTON_CLASS(cls) \ ++ (G_TYPE_CHECK_CLASS_CAST \ ++ ((cls), E_TYPE_GOOGLE_BOOK_CHOOSER_BUTTON, EGoogleBookChooserButtonClass)) ++#define E_IS_GOOGLE_BOOK_CHOOSER_BUTTON(obj) \ ++ (G_TYPE_CHECK_INSTANCE_TYPE \ ++ ((obj), E_TYPE_GOOGLE_BOOK_CHOOSER_BUTTON)) ++#define E_IS_GOOGLE_BOOK_CHOOSER_BUTTON_CLASS(cls) \ ++ (G_TYPE_CHECK_CLASS_TYPE \ ++ ((cls), E_TYPE_GOOGLE_BOOK_CHOOSER_BUTTON)) ++#define E_GOOGLE_BOOK_CHOOSER_BUTTON_GET_CLASS(obj) \ ++ (G_TYPE_INSTANCE_GET_CLASS \ ++ ((obj), E_TYPE_GOOGLE_BOOK_CHOOSER_BUTTON, EGoogleBookChooserButtonClass)) ++ ++G_BEGIN_DECLS ++ ++typedef struct _EGoogleBookChooserButton EGoogleBookChooserButton; ++typedef struct _EGoogleBookChooserButtonClass EGoogleBookChooserButtonClass; ++typedef struct _EGoogleBookChooserButtonPrivate EGoogleBookChooserButtonPrivate; ++ ++struct _EGoogleBookChooserButton { ++ GtkButton parent; ++ EGoogleBookChooserButtonPrivate *priv; ++}; ++ ++struct _EGoogleBookChooserButtonClass { ++ GtkButtonClass parent_class; ++}; ++ ++GType e_google_book_chooser_button_get_type (void); ++void e_google_book_chooser_button_type_register ++ (GTypeModule *type_module); ++GtkWidget * e_google_book_chooser_button_new(ESource *source, ++ ESourceConfig *config); ++ESource * e_google_book_chooser_button_get_source ++ (EGoogleBookChooserButton *button); ++ESourceConfig * e_google_book_chooser_button_get_config ++ (EGoogleBookChooserButton *button); ++void e_google_book_chooser_button_construct_default_uri ++ (SoupURI *soup_uri, ++ const gchar *username); ++ ++G_END_DECLS ++ ++#endif /* E_GOOGLE_BOOK_CHOOSER_BUTTON_H */ +diff -up evolution-3.40.4/src/modules/book-config-google/evolution-book-config-google.c.3 evolution-3.40.4/src/modules/book-config-google/evolution-book-config-google.c +--- evolution-3.40.4/src/modules/book-config-google/evolution-book-config-google.c.3 2021-08-13 11:50:35.000000000 +0200 ++++ evolution-3.40.4/src/modules/book-config-google/evolution-book-config-google.c 2022-04-05 10:00:37.458025240 +0200 +@@ -23,6 +23,8 @@ + + #include + ++#include "e-google-book-chooser-button.h" ++ + typedef ESourceConfigBackend EBookConfigGoogle; + typedef ESourceConfigBackendClass EBookConfigGoogleClass; + +@@ -55,6 +57,7 @@ book_config_google_insert_widgets (ESour + ESource *scratch_source) + { + ESourceConfig *config; ++ GtkWidget *widget; + Context *context; + const gchar *uid; + +@@ -68,6 +71,10 @@ book_config_google_insert_widgets (ESour + + context->user_entry = e_source_config_add_user_entry (config, scratch_source); + ++ widget = e_google_book_chooser_button_new (scratch_source, config); ++ e_source_config_insert_widget (config, scratch_source, _("Address Book:"), widget); ++ gtk_widget_show (widget); ++ + e_source_config_add_refresh_interval (config, scratch_source); + } + +@@ -101,23 +108,32 @@ book_config_google_commit_changes (ESour + { + ESource *collection_source; + ESourceConfig *config; ++ ESourceBackend *addressbook_extension; ++ ESourceWebdav *webdav_extension; + ESourceAuthentication *extension; ++ SoupURI *soup_uri; + const gchar *extension_name; + const gchar *user; + + config = e_source_config_backend_get_config (backend); + collection_source = e_source_config_get_collection_source (config); + ++ addressbook_extension = e_source_get_extension (scratch_source, E_SOURCE_EXTENSION_ADDRESS_BOOK); ++ webdav_extension = e_source_get_extension (scratch_source, E_SOURCE_EXTENSION_WEBDAV_BACKEND); ++ + extension_name = E_SOURCE_EXTENSION_AUTHENTICATION; + extension = e_source_get_extension (scratch_source, extension_name); + +- if (!collection_source || ( +- !e_source_has_extension (collection_source, E_SOURCE_EXTENSION_GOA) && +- !e_source_has_extension (collection_source, E_SOURCE_EXTENSION_UOA))) { +- e_source_authentication_set_host (extension, "www.google.com"); ++ if (!collection_source || ++ !e_source_authentication_get_is_external (extension)) { ++ e_source_authentication_set_host (extension, "www.googleapis.com"); + e_source_authentication_set_method (extension, "Google"); + } + ++ /* The backend name is "carddav" even though the ESource is ++ * a child of the built-in "Google" source. */ ++ e_source_backend_set_backend_name (addressbook_extension, "carddav"); ++ + user = e_source_authentication_get_user (extension); + g_return_if_fail (user != NULL); + +@@ -129,6 +145,19 @@ book_config_google_commit_changes (ESour + e_source_authentication_set_user (extension, full_user); + g_free (full_user); + } ++ ++ soup_uri = e_source_webdav_dup_soup_uri (webdav_extension); ++ ++ if (!soup_uri->path || !*soup_uri->path || g_strcmp0 (soup_uri->path, "/") == 0) { ++ e_google_book_chooser_button_construct_default_uri (soup_uri, e_source_authentication_get_user (extension)); ++ } ++ ++ /* Google's CalDAV interface requires a secure connection. */ ++ soup_uri_set_scheme (soup_uri, SOUP_URI_SCHEME_HTTPS); ++ ++ e_source_webdav_set_soup_uri (webdav_extension, soup_uri); ++ ++ soup_uri_free (soup_uri); + } + + static void +@@ -159,6 +188,7 @@ e_book_config_google_init (ESourceConfig + G_MODULE_EXPORT void + e_module_load (GTypeModule *type_module) + { ++ e_google_book_chooser_button_type_register (type_module); + e_book_config_google_register_type (type_module); + } + diff --git a/evolution.spec b/evolution.spec index 5eb3d1ccfb1ae274e31ed461943a72ff2165ec6f..461a2207178c65734e72104c0febacee41237799 100644 --- a/evolution.spec +++ b/evolution.spec @@ -1,18 +1,26 @@ %define anolis_release .0.1 +%undefine __cmake_in_source_build + %global _changelog_trimtime %(date +%s -d "1 year ago") +%global _python_bytecompile_extra 0 # correct Obsoletes for evolution-tests when this is changed -%global with_tests 0 +%global enable_installed_tests 0 + +%global tnef_support 0 +%if 0%{?fedora} +%global tnef_support 1 +%endif -%define glib2_version 2.46.0 -%define gtk3_version 3.10.0 +%define glib2_version 2.56 +%define gtk3_version 3.22 %define gnome_autoar_version 0.1.1 %define gnome_desktop_version 2.91.3 %define intltool_version 0.35.5 %define libgdata_version 0.10.0 -%define libgweather_version 3.5.0 +%define libgweather_version 3.10 %define libsoup_version 2.42 -%define webkit2gtk_version 2.13.90 +%define webkit2gtk_version 2.28.0 %define last_anjal_version 0.3.2-3 %define last_libgal2_version 2:2.5.3-2 @@ -26,18 +34,31 @@ # Coverity scan can override this to 0, to skip checking in gtk-doc generated code %{!?with_docs: %global with_docs 1} +%if 0%{?flatpak} +%global with_docs 0 +%endif + %define evo_plugin_dir %{_libdir}/evolution/plugins ### Abstract ### Name: evolution -Version: 3.28.5 -Release: 18%{anolis_release}%{?dist} +Version: 3.40.4 +Release: 6%{anolis_release}%{?dist} Group: Applications/Productivity Summary: Mail and calendar client for GNOME License: GPLv2+ and GFDL URL: https://wiki.gnome.org/Apps/Evolution -Source: http://download.gnome.org/sources/%{name}/3.28/%{name}-%{version}.tar.xz +Source: http://download.gnome.org/sources/%{name}/3.40/%{name}-%{version}.tar.xz +Source1: flatpak-evolution-fix-service-names.sh +Source2: flatpak-evolution-wrapper.sh.in +Source3: emoji.data + +Patch01: evolution-3.40.4-empty-emoji-picker.patch +Patch02: evolution-3.40.4-comp-editor-timezone-reset.patch +Patch03: evolution-3.40.4-google-contacts-to-carddav.patch +Patch04: webkitgtk-2.36.0-dark-theme.patch +Patch05: webkitgtk-2.36.0-disable-hw-accel.patch # Approximate version number Provides: bundled(libgnomecanvas) = 2.30.0 @@ -47,82 +68,45 @@ Obsoletes: libgal2 <= %{last_libgal2_version} Obsoletes: evolution-NetworkManager < %{last_evo_nm_version} Obsoletes: evolution-perl < %{last_evo_perl_version} -%if !%{with_tests} -Obsoletes: evolution-tests <= 3.28.5 +%if !%{enable_installed_tests} +Obsoletes: evolution-tests <= 3.31.1 %endif %global eds_version %{version} -### Patches ### - -# RH bug #1620582 -Patch01: evolution-3.28.5-config-lookup-crash.patch - -# RH bug #1624835 -Patch02: evolution-3.28.5-mangled-deeper-html-quotes.patch - -# RH bug #1624867 -Patch03: evolution-3.28.5-extra-new-line-before-url.patch - -# RH bug #1634665 -Patch04: evolution-3.28.5-deselect-task-memo-list.patch - -# RH bug #1724232 -Patch05: evolution-3.28.5-help-contents-link.patch - -# RH bug #1724659 -Patch06: evolution-3.28.5-intltool-cache.patch - -# RH bug #1724984 -Patch07: evolution-3.28.5-crash-empty-attendee.patch - -# RH bug #1764563 -Patch08: evolution-3.28.5-cve-2018-15587-reposition-signature-bar.patch - -# RH bug #1753220 -Patch09: evolution-3.28.5-gala11yetableitem-ref-child.patch - -# RH bug #1778799 -Patch10: evolution-3.28.5-mail-account-name-sync-in-wizard.patch - -# RH bug #1817143 -Patch11: evolution-3.28.5-webkitgtk-2.28.patch - -# RH bug #1883619 -Patch12: evolution-3.28.5-ecalendaritem-settings.patch - -# RH bug #1902630 -Patch13: evolution-3.28.5-webkitgtk-2.30.patch - -# RH bug #1972749 -Patch14: evolution-3.28.5-cmake-variable-name-comparison.patch - ## Dependencies ### +%if ! 0%{?flatpak} Requires: %{_bindir}/killall -Requires: evolution-data-server >= %{eds_version} Requires: gvfs -Requires: gtkspell3 +%endif +Requires: evolution-data-server >= %{eds_version} +Requires: gspell Requires: highlight Requires: %{name}-langpacks = %{version}-%{release} ### Build Dependencies ### +%if ! 0%{?flatpak} BuildRequires: %{_bindir}/killall +%endif BuildRequires: cmake BuildRequires: gcc BuildRequires: gettext +%if %{with_docs} BuildRequires: gtk-doc +%endif BuildRequires: highlight BuildRequires: intltool >= %{intltool_version} BuildRequires: itstool +BuildRequires: make BuildRequires: pkgconfig BuildRequires: yelp-tools BuildRequires: pkgconfig(atk) BuildRequires: pkgconfig(cairo-gobject) BuildRequires: pkgconfig(camel-1.2) >= %{eds_version} -BuildRequires: pkgconfig(enchant) +BuildRequires: pkgconfig(enchant-2) BuildRequires: pkgconfig(gail-3.0) >= %{gtk3_version} BuildRequires: pkgconfig(gcr-3) BuildRequires: pkgconfig(gdk-pixbuf-2.0) @@ -133,13 +117,13 @@ BuildRequires: pkgconfig(gnome-autoar-gtk-0) >= %{gnome_autoar_version} BuildRequires: pkgconfig(gnome-desktop-3.0) >= %{gnome_desktop_version} BuildRequires: pkgconfig(gsettings-desktop-schemas) BuildRequires: pkgconfig(gtk+-3.0) >= %{gtk3_version} -BuildRequires: pkgconfig(gtkspell3-3.0) +BuildRequires: pkgconfig(gspell-1) BuildRequires: pkgconfig(gweather-3.0) >= %{libgweather_version} BuildRequires: pkgconfig(iso-codes) BuildRequires: pkgconfig(libcanberra-gtk3) BuildRequires: pkgconfig(libebackend-1.2) >= %{eds_version} BuildRequires: pkgconfig(libebook-1.2) >= %{eds_version} -BuildRequires: pkgconfig(libecal-1.2) >= %{eds_version} +BuildRequires: pkgconfig(libecal-2.0) >= %{eds_version} BuildRequires: pkgconfig(libedataserver-1.2) >= %{eds_version} BuildRequires: pkgconfig(libedataserverui-1.2) >= %{eds_version} BuildRequires: pkgconfig(libgdata) >= %{libgdata_version} @@ -151,6 +135,10 @@ BuildRequires: pkgconfig(shared-mime-info) BuildRequires: pkgconfig(webkit2gtk-4.0) >= %{webkit2gtk_version} BuildRequires: pkgconfig(webkit2gtk-web-extension-4.0) >= %{webkit2gtk_version} +%if %{tnef_support} +BuildRequires: pkgconfig(libytnef) +%endif + %if %{ldap_support} BuildRequires: openldap-devel >= 2.0.11 %endif @@ -182,17 +170,16 @@ Requires: %{name} = %{version}-%{release} Doc pages for %{name}. %package devel -Group: Development/Libraries Summary: Development files for building against %{name} Requires: %{name} = %{version}-%{release} Requires: pkgconfig(camel-1.2) >= %{eds_version} Requires: pkgconfig(enchant) Requires: pkgconfig(gtk+-3.0) >= %{gtk3_version} -Requires: pkgconfig(gtkspell3-3.0) +Requires: pkgconfig(gspell-1) Requires: pkgconfig(gweather-3.0) >= %{libgweather_version} Requires: pkgconfig(libebackend-1.2) >= %{eds_version} Requires: pkgconfig(libebook-1.2) >= %{eds_version} -Requires: pkgconfig(libecal-1.2) >= %{eds_version} +Requires: pkgconfig(libecal-2.0) >= %{eds_version} Requires: pkgconfig(libedataserver-1.2) >= %{eds_version} Requires: pkgconfig(libgdata) >= %{libgdata_version} Requires: pkgconfig(libsoup-2.4) >= %{libsoup_version} @@ -202,9 +189,10 @@ Obsoletes: libgal2-devel <= %{last_libgal2_version} %description devel Development files needed for building things which link against %{name}. +%if %{with_docs} + %package devel-docs Summary: Developer documentation for Evolution -Group: Development/Libraries Requires: devhelp Requires: %{name}-devel = %{version}-%{release} BuildArch: noarch @@ -212,6 +200,8 @@ BuildArch: noarch %description devel-docs This package contains developer documentation for Evolution. +%endif + %package langpacks Summary: Translations for %{name} BuildArch: noarch @@ -222,7 +212,6 @@ This package contains translations for %{name}. %if %{with_docs} %package help -Group: Applications/Productivity Summary: Help files for %{name} Requires: %{name} = %{version}-%{release} Requires: yelp @@ -233,28 +222,23 @@ This package contains user documentation for %{name}. %endif %package bogofilter -Group: Applications/Productivity Summary: Bogofilter plugin for Evolution Requires: %{name}%{?_isa} = %{version}-%{release} Requires: bogofilter -BuildRequires: bogofilter %description bogofilter This package contains the plugin to filter junk mail using Bogofilter. %package spamassassin -Group: Applications/Productivity Summary: SpamAssassin plugin for Evolution Requires: %{name}%{?_isa} = %{version}-%{release} Requires: spamassassin -BuildRequires: spamassassin %description spamassassin This package contains the plugin to filter junk mail using SpamAssassin. %if %{libpst_support} %package pst -Group: Applications/Productivity Summary: PST importer plugin for Evolution Requires: %{name}%{?_isa} = %{version}-%{release} @@ -263,46 +247,34 @@ This package contains the plugin to import Microsoft Personal Storage Table (PST) files used by Microsoft Outlook and Microsoft Exchange. %endif -%if %{with_tests} - +%if %{enable_installed_tests} %package tests Summary: Tests for the %{name} package -Group: Development/Libraries Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: python2-behave +Requires: python2-dogtail %description tests The %{name}-tests package contains tests that can be used to verify the functionality of the installed %{name} package. - %endif %prep -%setup -q -n evolution-%{version} - -%patch01 -p1 -b .config-lookup-crash -%patch02 -p1 -b .mangled-deeper-html-quotes -%patch03 -p1 -b .extra-new-line-before-url -%patch04 -p1 -b .deselect-task-memo-list -%patch05 -p1 -b .help-contents-link -%patch06 -p1 -b .intltool-cache -%patch07 -p1 -b .crash-empty-attendee -%patch08 -p1 -b .cve-2018-15587-reposition-signature-bar -%patch09 -p1 -b .gala11yetableitem-ref-child -%patch10 -p1 -b .mail-account-name-sync-in-wizard -%patch11 -p1 -b .webkitgtk-2.28 -%patch12 -p1 -b .ecalendaritem-settings -%patch13 -p1 -b .webkitgtk-2.30 -%patch14 -p1 -b .cmake-variable-name-comparison +%autosetup -p1 -S gendiff + +cp %{S:3} data/ # Remove the welcome email from Novell for inbox in src/mail/default/*/Inbox; do echo -n "" > $inbox done -%build +%if 0%{?flatpak} +mv data/org.gnome.Evolution.desktop.in.in data/org.gnome.Evolution.desktop.in.i +cat data/org.gnome.Evolution.desktop.in.i | sed -e "s/Icon=evolution/Icon=org.gnome.Evolution/" >data/org.gnome.Evolution.desktop.in.in +%endif -mkdir -p _build -cd _build +%build # define all of our flags, this is kind of ugly :( %if %{ldap_support} @@ -324,27 +296,31 @@ fi %define gtkdoc_flags -DENABLE_GTK_DOC=OFF -DWITH_HELP=OFF %endif +%if %{enable_installed_tests} +%define tests_flags -DENABLE_INSTALLED_TESTS=ON +%else +%define tests_flags -DENABLE_INSTALLED_TESTS=OFF +%endif + +%if %{tnef_support} +%global tnef_flags -DENABLE_YTNEF=ON +%else +%global tnef_flags -DENABLE_YTNEF=OFF +%endif + CFLAGS="$RPM_OPT_FLAGS -fPIC -DLDAP_DEPRECATED -Wno-sign-compare -Wno-deprecated-declarations"; export CFLAGS %cmake -G "Unix Makefiles" \ -DENABLE_MAINTAINER_MODE=OFF \ -DVERSION_SUBSTRING=" (%{version}-%{release})" \ - %ldap_flags %ssl_flags %gtkdoc_flags \ + %ldap_flags %ssl_flags %gtkdoc_flags %tests_flags %tnef_flags \ -DENABLE_PLUGINS=all \ - -DENABLE_YTNEF=OFF \ -%if %{with_tests} - -DENABLE_INSTALLED_TESTS=ON \ -%else - -DENABLE_INSTALLED_TESTS=OFF \ -%endif - .. + %{nil} -make %{?_smp_mflags} +%cmake_build %if %{with_docs} -cd .. - # Replace identical images in the help by links. # This reduces the RPM size by several megabytes. helpdir=$RPM_BUILD_ROOT%{_datadir}/gnome/help/%{name} @@ -366,23 +342,27 @@ done %endif %install -rm -rf $RPM_BUILD_ROOT -cd _build -make DESTDIR=$RPM_BUILD_ROOT install +%cmake_install + +%if 0%{?flatpak} +%{S:1} <%{S:2} >flatpak-evolution-wrapper.sh +chmod a+x flatpak-evolution-wrapper.sh +mv $RPM_BUILD_ROOT%{_bindir}/evolution $RPM_BUILD_ROOT%{_bindir}/evolution.bin +cp flatpak-evolution-wrapper.sh $RPM_BUILD_ROOT%{_bindir}/evolution +%endif %find_lang evolution --all-name --with-gnome -grep "/usr/share/locale" evolution.lang > translations.lang +grep "%{_datadir}/locale" evolution.lang > translations.lang %if %{with_docs} -grep -v "/usr/share/locale" evolution.lang > help.lang +grep -v "%{_datadir}/locale" evolution.lang > help.lang %endif -%post -p /sbin/ldconfig - -%postun -p /sbin/ldconfig +%ldconfig_scriptlets %files %license COPYING +%{_mandir}/man1/* # GSettings schemas: %{_datadir}/GConf/gsettings/evolution.convert @@ -405,16 +385,20 @@ grep -v "/usr/share/locale" evolution.lang > help.lang %{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.mail-notification.gschema.xml %{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.prefer-plain.gschema.xml %{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.publish-calendar.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.sender-validator.gschema.xml %{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.templates.gschema.xml # The main executable %{_bindir}/evolution +%if 0%{?flatpak} +%{_bindir}/evolution.bin +%endif + %{_datadir}/metainfo/org.gnome.Evolution.appdata.xml # Desktop files: %{_datadir}/applications/org.gnome.Evolution.desktop -%{_sysconfdir}/xdg/autostart/org.gnome.Evolution-alarm-notify.desktop # Icons: %{_datadir}/icons/hicolor/16x16/apps/* @@ -422,13 +406,13 @@ grep -v "/usr/share/locale" evolution.lang > help.lang %{_datadir}/icons/hicolor/24x24/apps/* %{_datadir}/icons/hicolor/32x32/apps/* %{_datadir}/icons/hicolor/48x48/apps/* -%{_datadir}/icons/hicolor/256x256/apps/* %{_datadir}/icons/hicolor/symbolic/apps/* +%{_datadir}/icons/hicolor/scalable/apps/* # The main data directory # (have not attempted to split this up into an explicit list) %dir %{_datadir}/evolution -%{_datadir}/evolution +%{_datadir}/evolution/* # Modules: %dir %{_libdir}/evolution @@ -436,16 +420,17 @@ grep -v "/usr/share/locale" evolution.lang > help.lang %{_libdir}/evolution/modules/module-accounts-window.so %{_libdir}/evolution/modules/module-addressbook.so %{_libdir}/evolution/modules/module-backup-restore.so +%{_libdir}/evolution/modules/module-book-config-carddav.so %{_libdir}/evolution/modules/module-book-config-google.so %{_libdir}/evolution/modules/module-book-config-ldap.so %{_libdir}/evolution/modules/module-book-config-local.so -%{_libdir}/evolution/modules/module-book-config-webdav.so %{_libdir}/evolution/modules/module-cal-config-caldav.so %{_libdir}/evolution/modules/module-cal-config-contacts.so %{_libdir}/evolution/modules/module-cal-config-google.so %{_libdir}/evolution/modules/module-cal-config-local.so %{_libdir}/evolution/modules/module-cal-config-weather.so %{_libdir}/evolution/modules/module-cal-config-webcal.so +%{_libdir}/evolution/modules/module-cal-config-webdav-notes.so %{_libdir}/evolution/modules/module-calendar.so %{_libdir}/evolution/modules/module-composer-autosave.so %{_libdir}/evolution/modules/module-composer-to-meeting.so @@ -468,6 +453,12 @@ grep -v "/usr/share/locale" evolution.lang > help.lang %{_libdir}/evolution/modules/module-webkit-editor.so %{_libdir}/evolution/modules/module-webkit-inspector.so +%if %{tnef_support} +%{_libdir}/evolution/modules/module-tnef-attachment.so +%endif + +%{_libdir}/evolution-data-server/ui-modules/module-evolution-alarm-notify.so + # Shared libraries: %{_libdir}/evolution/libevolution-mail-composer.so %{_libdir}/evolution/libeabutil.so @@ -475,7 +466,6 @@ grep -v "/usr/share/locale" evolution.lang > help.lang %{_libdir}/evolution/libecontacteditor.so %{_libdir}/evolution/libecontactlisteditor.so %{_libdir}/evolution/libecontactprint.so -%{_libdir}/evolution/libedomutils.so %{_libdir}/evolution/libemail-engine.so %{_libdir}/evolution/libevolution-mail-formatter.so %{_libdir}/evolution/libevolution-shell.so @@ -491,12 +481,10 @@ grep -v "/usr/share/locale" evolution.lang > help.lang # WebKit2 Extensions %{_libdir}/evolution/web-extensions/libewebextension.so -%{_libdir}/evolution/web-extensions/module-itip-formatter-webextension.so %{_libdir}/evolution/web-extensions/webkit-editor/module-webkit-editor-webextension.so # Various libexec programs: %dir %{_libexecdir}/evolution -%{_libexecdir}/evolution/evolution-alarm-notify %{_libexecdir}/evolution/evolution-backup %{_libexecdir}/evolution/killev @@ -541,6 +529,9 @@ grep -v "/usr/share/locale" evolution.lang > help.lang %{evo_plugin_dir}/org-gnome-save-calendar.eplug %{evo_plugin_dir}/liborg-gnome-save-calendar.so +%{evo_plugin_dir}/org-gnome-evolution-sender-validation.eplug +%{evo_plugin_dir}/liborg-gnome-evolution-sender-validation.so + %{evo_plugin_dir}/org-gnome-templates.eplug %{evo_plugin_dir}/liborg-gnome-templates.so @@ -548,7 +539,7 @@ grep -v "/usr/share/locale" evolution.lang > help.lang %{evo_plugin_dir}/liborg-gnome-dbx-import.so %files doc -%doc AUTHORS NEWS README +%doc AUTHORS NEWS README.md %files devel %{_includedir}/evolution @@ -557,6 +548,8 @@ grep -v "/usr/share/locale" evolution.lang > help.lang %{_libdir}/pkgconfig/evolution-shell-3.0.pc %{_libdir}/pkgconfig/libemail-engine.pc +%if %{with_docs} + %files devel-docs %doc %{_datadir}/gtk-doc/html/evolution-mail-composer %doc %{_datadir}/gtk-doc/html/evolution-mail-engine @@ -564,10 +557,12 @@ grep -v "/usr/share/locale" evolution.lang > help.lang %doc %{_datadir}/gtk-doc/html/evolution-shell %doc %{_datadir}/gtk-doc/html/evolution-util -%files langpacks -f _build/translations.lang +%endif + +%files langpacks -f translations.lang %if %{with_docs} -%files help -f _build/help.lang +%files help -f help.lang %endif %files bogofilter @@ -585,81 +580,240 @@ grep -v "/usr/share/locale" evolution.lang > help.lang %{evo_plugin_dir}/liborg-gnome-pst-import.so %endif -%if %{with_tests} +%if %{enable_installed_tests} %files tests %{_libexecdir}/%{name}/installed-tests %{_datadir}/installed-tests %endif %changelog -* Sat Jul 16 2022 mgb01105731 - 3.28.5-18.0.1 +* Mon May 15 2023 mgb01105731 - 3.40.4-6.0.1 - Add doc sub package -* Wed Jun 16 2021 Milan Crha - 3.28.5-18 -- Resolves: #1972749 (PrintableOptions.cmake: Correct variable name comparison) +* Mon Apr 25 2022 Milan Crha - 3.40.4-6 +- Resolves: #2078369 (Disable hardware acceleration for WebKitGTK) + +* Fri Apr 08 2022 Milan Crha - 3.40.4-5 +- Related: #2071056 (Update zh_CN and ja translations in the patch) + +* Tue Apr 05 2022 Milan Crha - 3.40.4-4 +- Resolves: #2071056 (Addressbook: Switch from GData Contacts API to CardDAV API for Google books) +- Resolves: #2071742 (Add patch to use correct colors in mail preview with webkit2gtk3 2.36.x) + +* Mon Feb 14 2022 Milan Crha - 3.40.4-3 +- Resolves: #2054084 (ECompEditor: Timezone can be reset on component save) + +* Mon Oct 11 2021 Milan Crha - 3.40.4-2 +- Resolves: #2012701 (Empty emoji picker with gtk3 3.24.30) + +* Fri Aug 13 2021 Milan Crha - 3.40.4-1 +- Related: #1992450 (Update to 3.40.4) + +* Mon Aug 09 2021 Mohan Boddu - 3.40.3-2 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Mon Jul 12 2021 Milan Crha - 3.40.3-1 +- Related: #1981215 (Update to 3.40.3) + +* Fri Jun 04 2021 Milan Crha - 3.40.2-1 +- Related: #1967855 (Update to 3.40.2) + +* Mon May 17 2021 Milan Crha - 3.40.1-2 +- Resolves: #1961194 (Add missing bundled() Provides for libgnomecanvas) + +* Fri Apr 30 2021 Milan Crha - 3.40.1-1 +- Related: #1952776 (Update to 3.40.1) + +* Thu Apr 15 2021 Mohan Boddu - 3.40.0-2 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Fri Mar 19 2021 Milan Crha - 3.40.0-1 +- Update to 3.40.0 + +* Fri Mar 12 2021 Milan Crha - 3.39.3-1 +- Update to 3.39.3 + +* Fri Feb 12 2021 Milan Crha - 3.39.2-1 +- Update to 3.39.2 + +* Tue Jan 26 2021 Fedora Release Engineering - 3.39.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Fri Jan 08 2021 Milan Crha - 3.39.1-1 +- Update to 3.39.1 + +* Fri Nov 20 2020 Milan Crha - 3.38.2-1 +- Update to 3.38.2 + +* Fri Oct 02 2020 Milan Crha - 3.38.1-1 +- Update to 3.38.1 + +* Sat Sep 26 2020 Adrian Reber - 3.38.0-2 +- Rebuilt for protobuf 3.13 + +* Fri Sep 11 2020 Milan Crha - 3.38.0-1 +- Update to 3.38.0 + +* Fri Sep 04 2020 Milan Crha - 3.37.92-1 +- Update to 3.37.92 + +* Fri Aug 07 2020 Milan Crha - 3.37.90-1 +- Update to 3.37.90 + +* Mon Jul 27 2020 Fedora Release Engineering - 3.37.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Fri Jul 03 2020 Milan Crha - 3.37.3-1 +- Update to 3.37.3 + +* Tue Jun 23 2020 Adam Williamson - 3.37.2-2 +- Backport several fixes for annoying bugs from mainline + +* Fri May 29 2020 Milan Crha - 3.37.2-1 +- Update to 3.37.2 + +* Fri Apr 24 2020 Milan Crha - 3.37.1-1 +- Update to 3.37.1 + +* Fri Mar 27 2020 Milan Crha - 3.36.1-1 +- Update to 3.36.1 + +* Fri Mar 06 2020 Milan Crha - 3.36.0-1 +- Update to 3.36.0 + +* Fri Feb 28 2020 Milan Crha - 3.35.92-1 +- Update to 3.35.92 + +* Fri Feb 14 2020 Milan Crha - 3.35.91-1 +- Update to 3.35.91 + +* Fri Jan 31 2020 Milan Crha - 3.35.90-1 +- Update to 3.35.90 + +* Tue Jan 28 2020 Fedora Release Engineering - 3.35.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Jan 16 2020 Kalev Lember - 3.35.3-3 +- Rebuilt for libgnome-desktop soname bump + +* Mon Jan 06 2020 Milan Crha - 3.35.3-2 +- Enable TNEF support for Fedora + +* Fri Jan 03 2020 Milan Crha - 3.35.3-1 +- Update to 3.35.3 + +* Fri Nov 22 2019 Milan Crha - 3.35.2-1 +- Update to 3.35.2 + +* Fri Oct 11 2019 Milan Crha - 3.35.1-1 +- Update to 3.35.1 + +* Mon Oct 07 2019 Milan Crha - 3.34.1-1 +- Update to 3.34.1 + +* Mon Sep 09 2019 Milan Crha - 3.34.0-1 +- Update to 3.34.0 + +* Mon Sep 02 2019 Milan Crha - 3.33.92-1 +- Update to 3.33.92 + +* Mon Aug 19 2019 Milan Crha - 3.33.91-1 +- Update to 3.33.91 + +* Mon Aug 05 2019 Milan Crha - 3.33.90-1 +- Update to 3.33.90 + +* Thu Jul 25 2019 Fedora Release Engineering - 3.33.4-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sun Jul 21 2019 Kalev Lember - 3.33.4-2 +- Rebuilt for libgnome-desktop soname bump + +* Mon Jul 15 2019 Milan Crha - 3.33.4-1 +- Update to 3.33.4 + +* Mon Jul 08 2019 Kalev Lember - 3.33.3-2 +- Rebuilt for libgweather soname bump + +* Mon Jun 17 2019 Milan Crha - 3.33.3-1 +- Update to 3.33.3 + +* Mon May 20 2019 Milan Crha - 3.33.2-1 +- Update to 3.33.2 + +* Mon Apr 22 2019 Milan Crha - 3.33.1-1 +- Update to 3.33.1 + +* Mon Apr 08 2019 Milan Crha - 3.32.1-1 +- Update to 3.32.1 -* Mon May 17 2021 Milan Crha - 3.28.5-17 -- Resolves: #1961192 (Add missing bundled() Provides for libgnomecanvas) +* Mon Mar 11 2019 Milan Crha - 3.32.0-1 +- Update to 3.32.0 -* Mon Nov 30 2020 Milan Crha - 3.28.5-16 -- Resolves: #1902630 (Crash on file drag into mail composer with WebKitGTK 2.30) +* Mon Mar 04 2019 Milan Crha - 3.31.92-1 +- Update to 3.31.92 -* Wed Sep 30 2020 Milan Crha - 3.28.5-15 -- Resolves: #1883619 (ECalendarItem: Settings loaded only when being shown) +* Mon Feb 18 2019 Milan Crha - 3.31.91-1 +- Update to 3.31.91 -* Thu Jun 11 2020 Milan Crha - 3.28.5-14 -- Related: #1817143 (Add a small patch to behave better with WebKitGTK 2.28) +* Mon Feb 04 2019 Milan Crha - 3.31.90-1 +- Update to 3.31.90 -* Fri May 15 2020 Milan Crha - 3.28.5-13 -- Resolves: #1836165 (Cannot type the date of a meeting) +* Thu Jan 31 2019 Fedora Release Engineering - 3.31.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild -* Tue Dec 03 2019 Milan Crha - 3.28.5-12 -- Add patch for RH bug #1778799 (New Mail account wizard ignores email address change) +* Mon Jan 07 2019 Milan Crha - 3.31.4-1 +- Update to 3.31.4 -* Thu Oct 24 2019 Milan Crha - 3.28.5-11 -- Update patch for RH bug #1764563 (CVE-2018-15587: Reposition signature bar) +* Mon Dec 10 2018 Milan Crha - 3.31.3-1 +- Update to 3.31.3 -* Wed Oct 23 2019 Milan Crha - 3.28.5-10 -- Add patch for RH bug #1764563 (CVE-2018-15587: Reposition signature bar) -- Add patch for RH bug #1753220 (GalA11yETableItem: Incorrect implementation of AtkObjectClass::ref_child()) +* Mon Nov 12 2018 Milan Crha - 3.31.2-1 +- Update to 3.31.2 -* Fri Jun 28 2019 Milan Crha - 3.28.5-9 -- Add patch for RH bug #1724984 ([ECompEditor] Ensure attendee changes stored before save) +* Fri Oct 26 2018 Milan Crha - 3.31.1-2 +- Obsolete evolution-tests subpackage +- Add BuildRequires/Requires for 'killall' binary -* Thu Jun 27 2019 Milan Crha - 3.28.5-8 -- Add patch for RH bug #1724659 (Make sure intltool-merge cache is created only once) +* Mon Oct 08 2018 Milan Crha - 3.31.1-1 +- Update to 3.31.1 -* Thu Jun 27 2019 Milan Crha - 3.28.5-7 -- Add patch for RH bug #1724232 (Help Contents (F1) has a bad link to GNOME site) +* Mon Sep 24 2018 Milan Crha - 3.30.1-1 +- Update to 3.30.1 +- Remove patch for GNOME Evolution issue #86 (fixed upstream) +- Disable tests subpackage - it uses python2 and it is unmaintained upstream +- Remove BuildRequires on bogofilter and spamassassin -* Fri Oct 26 2018 Milan Crha - 3.28.5-6 -- Add BuildRequires/Requires for 'killall' binary (RH bug #1643481) +* Mon Sep 03 2018 Milan Crha - 3.30.0-1 +- Update to 3.30.0 +- Add patch for GNOME Evolution issue #86 (Quoting of plain text mail into HTML mode mangles deeper levels) -* Mon Oct 15 2018 Milan Crha - 3.28.5-5 -- Obsolete evolution-tests subpackage (RH bug #1638480) +* Mon Aug 27 2018 Milan Crha - 3.29.92-1 +- Update to 3.29.92 -* Mon Oct 01 2018 Milan Crha - 3.28.5-4 -- Add patch for RH bug #1634665 (Deselects task/memo list when started in Calendar view) +* Mon Aug 13 2018 Milan Crha - 3.29.91-1 +- Update to 3.29.91 -* Mon Sep 03 2018 Milan Crha - 3.28.5-3 -- Add patch for RH bug #1624835 (Quoting of plain text mail into HTML mode mangles deeper levels) -- Add patch for RH bug #1624867 (Extra new line added in front of long URLs) +* Mon Jul 30 2018 Milan Crha - 3.29.90-1 +- Update to 3.29.90 -* Thu Aug 23 2018 Milan Crha - 3.28.5-2 -- Add patch for RH bug #1620582 (Crash under config_lookup_thread() at e-config-lookup.c:179) +* Mon Jul 16 2018 Milan Crha - 3.29.4-1 +- Update to 3.29.4 +- Change dependencies of the tests subpackage and do not precompile the scripts there -* Mon Jul 30 2018 Milan Crha - 3.28.5-1 -- Update to 3.28.5 +* Fri Jul 13 2018 Fedora Release Engineering - 3.29.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild -* Mon Jul 16 2018 Milan Crha - 3.28.4-1 -- Update to 3.28.4 +* Mon Jun 18 2018 Milan Crha - 3.29.3-1 +- Update to 3.29.3 -* Fri Jun 22 2018 Milan Crha - 3.28.3-2 -- Disable evolution-tests subpackage, not much maintained upstream and requires python2 +* Mon May 21 2018 Milan Crha - 3.29.2-1 +- Update to 3.29.2 -* Mon Jun 18 2018 Milan Crha - 3.28.3-1 -- Update to 3.28.3 -- Remove fix to strip closing > from URLs when linkifying (fixed upstream) +* Mon Apr 16 2018 Milan Crha - 3.29.1-1 +- Update to 3.29.1 +- Remove fix to strip closing > from URLs when linkifying (BGO#795108) (Fixed upstream) * Tue Apr 10 2018 Adam Williamson - 3.28.1-2 - Backport fix to strip closing > from URLs when linkifying (BGO#795108) diff --git a/flatpak-evolution-fix-service-names.sh b/flatpak-evolution-fix-service-names.sh new file mode 100755 index 0000000000000000000000000000000000000000..9454543e863a3f601c4bb32d37c43bca468879a2 --- /dev/null +++ b/flatpak-evolution-fix-service-names.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# see https://gitlab.gnome.org/GNOME/glib/issues/1737 +# previous versions used milliseconds instead of seconds as the timeout argument", +(`pkg-config --atleast-version 2.60.1 gio-2.0` || `pkg-config --atleast-version 2.61.0 gio-2.0`) && TIMEOUTMULT= || TIMEOUTMULT=000 + +sed -e "s|\@SOURCES_SERVICE\@|$(pkg-config --variable=sourcesdbusservicename evolution-data-server-1.2)|" \ + -e "s|\@ADDRESSBOOK_SERVICE\@|$(pkg-config --variable=addressbookdbusservicename evolution-data-server-1.2)|" \ + -e "s|\@CALENDAR_SERVICE\@|$(pkg-config --variable=calendardbusservicename evolution-data-server-1.2)|" \ + -e "s|\@TIMEOUTMULT\@|${TIMEOUTMULT}|" diff --git a/flatpak-evolution-wrapper.sh.in b/flatpak-evolution-wrapper.sh.in new file mode 100644 index 0000000000000000000000000000000000000000..1b42f20ca17037d251657c10fda0acc8ae3e1b35 --- /dev/null +++ b/flatpak-evolution-wrapper.sh.in @@ -0,0 +1,30 @@ +#!/bin/bash + +if [ "$1" = "--quit" -o "$1" = "--force-shutdown" ]; then + /app/bin/evolution.bin "$@" +else + export BOGOFILTER_DIR="${XDG_DATA_HOME}/bogofilter/" + export GIO_USE_NETWORK_MONITOR=base + export WEBKIT_FORCE_SANDBOX=0 + gsettings reset org.gnome.evolution-data-server network-monitor-gio-name + + LINES=$(gdbus call --session --dest org.freedesktop.DBus --object-path /org/freedesktop/DBus --method org.freedesktop.DBus.ListNames | grep @SOURCES_SERVICE@ | wc -l) + if [ "${LINES}" = "0" ]; then + /app/libexec/evolution-source-registry & + gdbus wait --session --timeout=1@TIMEOUTMULT@ @SOURCES_SERVICE@ + fi + + LINES=$(gdbus call --session --dest org.freedesktop.DBus --object-path /org/freedesktop/DBus --method org.freedesktop.DBus.ListNames | grep @ADDRESSBOOK_SERVICE@ | wc -l) + if [ "${LINES}" = "0" ]; then + /app/libexec/evolution-addressbook-factory -r & + gdbus wait --session --timeout=1@TIMEOUTMULT@ @ADDRESSBOOK_SERVICE@ + fi + + LINES=$(gdbus call --session --dest org.freedesktop.DBus --object-path /org/freedesktop/DBus --method org.freedesktop.DBus.ListNames | grep @CALENDAR_SERVICE@ | wc -l) + if [ "${LINES}" = "0" ]; then + /app/libexec/evolution-calendar-factory -r & + gdbus wait --session --timeout=1@TIMEOUTMULT@ @CALENDAR_SERVICE@ + fi + + /app/bin/evolution.bin "$@" +fi diff --git a/webkitgtk-2.36.0-dark-theme.patch b/webkitgtk-2.36.0-dark-theme.patch new file mode 100644 index 0000000000000000000000000000000000000000..025ea9ef07b1ff0ba8f6b33fbf0a2f4155276a3b --- /dev/null +++ b/webkitgtk-2.36.0-dark-theme.patch @@ -0,0 +1,51 @@ +From ac15857f14eecd83a3a1950588a2f1edb9cb70de Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Fri, 18 Mar 2022 09:45:20 +0100 +Subject: [PATCH] I#1835 - Mail: Preview uses wrong colors for HTML mail with + dark theme + +Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/1835 +--- + data/webkit/e-web-view.js | 12 ++++++++++-- + src/em-format/e-mail-formatter-text-html.c | 2 +- + 2 files changed, 11 insertions(+), 3 deletions(-) + +diff --git a/data/webkit/e-web-view.js b/data/webkit/e-web-view.js +index 7f47fe4b26..a8f99c4668 100644 +--- a/data/webkit/e-web-view.js ++++ b/data/webkit/e-web-view.js +@@ -695,8 +695,16 @@ Evo.initialize = function(elem) + + if (doc.documentElement.style.getPropertyValue("color") == "" || + doc.documentElement.style.getPropertyValue("color") == "text") { +- doc.documentElement.style.setProperty("color", "inherit"); +- doc.documentElement.style.setProperty("background-color", "inherit"); ++ if (doc.defaultView && doc.defaultView.frameElement && !doc.defaultView.frameElement.hasAttribute("x-e-unset-colors") && ++ doc.defaultView.frameElement.ownerDocument && ++ doc.defaultView.frameElement.ownerDocument.defaultView && ++ doc.defaultView.frameElement.ownerDocument.defaultView.window) { ++ var style = doc.defaultView.frameElement.ownerDocument.defaultView.window.getComputedStyle(doc.defaultView.frameElement); ++ if (style) { ++ doc.documentElement.style.setProperty("color", style.color); ++ doc.documentElement.style.setProperty("background-color", style.backgroundColor); ++ } ++ } + } + + elems = doc.querySelectorAll("input, textarea, select, button, label"); +diff --git a/src/em-format/e-mail-formatter-text-html.c b/src/em-format/e-mail-formatter-text-html.c +index 708c29a5e4..8a938212ff 100644 +--- a/src/em-format/e-mail-formatter-text-html.c ++++ b/src/em-format/e-mail-formatter-text-html.c +@@ -369,7 +369,7 @@ emfe_text_html_format (EMailFormatterExtension *extension, + e_mail_part_get_id (part), + e_mail_part_get_id (part), + e_mail_part_get_frame_security_style (part), +- g_settings_get_boolean (settings, "preview-unset-html-colors") ? "x-e-unset-colors=\"1\"" : "style=\"background-color: #ffffff;\""); ++ g_settings_get_boolean (settings, "preview-unset-html-colors") ? "x-e-unset-colors=\"1\"" : "style=\"background-color:white; color:black;\""); + + g_output_stream_write_all ( + stream, str, strlen (str), +-- +GitLab + diff --git a/webkitgtk-2.36.0-disable-hw-accel.patch b/webkitgtk-2.36.0-disable-hw-accel.patch new file mode 100644 index 0000000000000000000000000000000000000000..e669f43f3c8aceb7e5ab37031551287aee784aba --- /dev/null +++ b/webkitgtk-2.36.0-disable-hw-accel.patch @@ -0,0 +1,27 @@ +From eb62ccaa28bbbca7668913ce7d8056a6d75f9b05 Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Thu, 21 Apr 2022 16:59:34 +0200 +Subject: [PATCH] Disable hardware acceleration for WebKitGTK + +This should help with crashes related to hardware acceleration +on some machines, as being discussed at: +https://bugs.webkit.org/show_bug.cgi?id=239429 +--- + src/e-util/e-web-view.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/e-util/e-web-view.c b/src/e-util/e-web-view.c +index 9ab13b69cc..68f86e8c59 100644 +--- a/src/e-util/e-web-view.c ++++ b/src/e-util/e-web-view.c +@@ -3617,6 +3617,7 @@ e_web_view_get_default_webkit_settings (void) + "enable-plugins", FALSE, + "enable-smooth-scrolling", FALSE, + "media-playback-allows-inline", FALSE, ++ "hardware-acceleration-policy", WEBKIT_HARDWARE_ACCELERATION_POLICY_NEVER, + NULL); + + e_web_view_utils_apply_minimum_font_size (settings); +-- +GitLab +