diff --git a/.evolution.metadata b/.evolution.metadata new file mode 100644 index 0000000..fa4f215 --- /dev/null +++ b/.evolution.metadata @@ -0,0 +1 @@ +797aa0a263e5f92079e20d3f5e9aa52dc58baccf SOURCES/evolution-3.22.6.tar.xz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4a44df2 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/evolution-3.22.6.tar.xz diff --git a/README.md b/README.md deleted file mode 100644 index 0e7897f..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 - -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/evolution-3.22.6-calendar-print-action.patch b/SOURCES/evolution-3.22.6-calendar-print-action.patch new file mode 100644 index 0000000..867f87f --- /dev/null +++ b/SOURCES/evolution-3.22.6-calendar-print-action.patch @@ -0,0 +1,12 @@ +diff -up evolution-3.22.6/modules/calendar/e-cal-shell-view-actions.c.calendar-print-action evolution-3.22.6/modules/calendar/e-cal-shell-view-actions.c +--- evolution-3.22.6/modules/calendar/e-cal-shell-view-actions.c.calendar-print-action 2016-03-21 09:07:26.000000000 +0100 ++++ evolution-3.22.6/modules/calendar/e-cal-shell-view-actions.c 2017-04-19 09:33:29.144300407 +0200 +@@ -235,7 +235,7 @@ static void + action_calendar_print_cb (GtkAction *action, + ECalShellView *cal_shell_view) + { +- cal_shell_view_actions_print_or_preview (cal_shell_view, GTK_PRINT_OPERATION_ACTION_PRINT); ++ cal_shell_view_actions_print_or_preview (cal_shell_view, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG); + } + + static void diff --git a/SOURCES/evolution-3.22.6-comp-editor-changed.patch b/SOURCES/evolution-3.22.6-comp-editor-changed.patch new file mode 100644 index 0000000..498c7bb --- /dev/null +++ b/SOURCES/evolution-3.22.6-comp-editor-changed.patch @@ -0,0 +1,20 @@ +diff -up evolution-3.22.6/calendar/gui/e-comp-editor.c.comp-editor-changed evolution-3.22.6/calendar/gui/e-comp-editor.c +--- evolution-3.22.6/calendar/gui/e-comp-editor.c.comp-editor-changed 2016-09-19 10:22:58.000000000 +0200 ++++ evolution-3.22.6/calendar/gui/e-comp-editor.c 2017-04-27 17:09:51.444757546 +0200 +@@ -1021,12 +1021,16 @@ open_target_client_data_free (gpointer p + if (otc) { + if (otc->comp_editor) { + if (otc->client) { ++ gboolean previous_changed = e_comp_editor_get_changed (otc->comp_editor); ++ + e_comp_editor_set_alarm_email_address (otc->comp_editor, otc->alarm_email_address); + e_comp_editor_set_cal_email_address (otc->comp_editor, otc->cal_email_address); + e_comp_editor_set_target_client (otc->comp_editor, E_CAL_CLIENT (otc->client)); + + if (otc->is_target_client_change) + e_comp_editor_set_changed (otc->comp_editor, TRUE); ++ else ++ e_comp_editor_set_changed (otc->comp_editor, previous_changed); + } + + if (otc->comp_editor->priv->activity_bar && otc->activity) { diff --git a/SOURCES/evolution-3.22.6-composer-dnd.patch b/SOURCES/evolution-3.22.6-composer-dnd.patch new file mode 100644 index 0000000..2dcd001 --- /dev/null +++ b/SOURCES/evolution-3.22.6-composer-dnd.patch @@ -0,0 +1,160 @@ +diff -up evolution-3.22.6/composer/e-msg-composer.c.composer-dnd evolution-3.22.6/composer/e-msg-composer.c +--- evolution-3.22.6/composer/e-msg-composer.c.composer-dnd 2017-04-13 14:06:08.863067766 +0200 ++++ evolution-3.22.6/composer/e-msg-composer.c 2017-04-13 14:06:08.878067765 +0200 +@@ -1867,6 +1867,16 @@ msg_composer_drag_drop_cb (GtkWidget *wi + } + + static void ++msg_composer_drop_handled_cb (EContentEditor *cnt_editor, ++ EMsgComposer *composer) ++{ ++ if (composer->priv->drag_data_received_handler_id != 0) { ++ g_signal_handler_disconnect (cnt_editor, composer->priv->drag_data_received_handler_id); ++ composer->priv->drag_data_received_handler_id = 0; ++ } ++} ++ ++static void + msg_composer_drag_begin_cb (GtkWidget *widget, + GdkDragContext *context, + EMsgComposer *composer) +@@ -2272,6 +2282,10 @@ msg_composer_constructed (GObject *objec + G_CALLBACK (msg_composer_drag_begin_cb), composer); + + g_signal_connect ( ++ cnt_editor, "drop-handled", ++ G_CALLBACK (msg_composer_drop_handled_cb), composer); ++ ++ g_signal_connect ( + composer->priv->gallery_icon_view, "drag-data-get", + G_CALLBACK (msg_composer_gallery_drag_data_get), NULL); + +diff -up evolution-3.22.6/e-util/e-content-editor.c.composer-dnd evolution-3.22.6/e-util/e-content-editor.c +--- evolution-3.22.6/e-util/e-content-editor.c.composer-dnd 2016-11-30 20:06:07.000000000 +0100 ++++ evolution-3.22.6/e-util/e-content-editor.c 2017-04-13 14:06:08.878067765 +0200 +@@ -36,6 +36,7 @@ enum { + CONTEXT_MENU_REQUESTED, + FIND_DONE, + REPLACE_ALL_DONE, ++ DROP_HANDLED, + LAST_SIGNAL + }; + +@@ -509,6 +510,20 @@ e_content_editor_default_init (EContentE + NULL, + G_TYPE_NONE, 1, + G_TYPE_UINT); ++ ++ /** ++ * EContentEditor:drop-handled ++ * ++ * Emitted when the content editor successfully handled the drop operation. ++ */ ++ signals[DROP_HANDLED] = g_signal_new ( ++ "drop-handled", ++ E_TYPE_CONTENT_EDITOR, ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (EContentEditorInterface, drop_handled), ++ NULL, NULL, ++ NULL, ++ G_TYPE_NONE, 0); + } + + ESpellChecker * +@@ -3581,3 +3596,11 @@ e_content_editor_emit_replace_all_done ( + + g_signal_emit (editor, signals[REPLACE_ALL_DONE], 0, replaced_count); + } ++ ++void ++e_content_editor_emit_drop_handled (EContentEditor *editor) ++{ ++ g_return_if_fail (E_IS_CONTENT_EDITOR (editor)); ++ ++ g_signal_emit (editor, signals[DROP_HANDLED], 0); ++} +diff -up evolution-3.22.6/e-util/e-content-editor.h.composer-dnd evolution-3.22.6/e-util/e-content-editor.h +--- evolution-3.22.6/e-util/e-content-editor.h.composer-dnd 2016-09-19 10:22:58.000000000 +0200 ++++ evolution-3.22.6/e-util/e-content-editor.h 2017-04-13 14:06:08.878067765 +0200 +@@ -437,6 +437,7 @@ struct _EContentEditorInterface { + guint match_count); + void (*replace_all_done) (EContentEditor *editor, + guint replaced_count); ++ void (*drop_handled) (EContentEditor *editor); + }; + + /* Properties */ +@@ -1015,6 +1016,8 @@ void e_content_editor_emit_find_done (E + void e_content_editor_emit_replace_all_done + (EContentEditor *editor, + guint replaced_count); ++void e_content_editor_emit_drop_handled ++ (EContentEditor *editor); + + G_END_DECLS + +diff -up evolution-3.22.6/modules/webkit-editor/e-webkit-editor.c.composer-dnd evolution-3.22.6/modules/webkit-editor/e-webkit-editor.c +--- evolution-3.22.6/modules/webkit-editor/e-webkit-editor.c.composer-dnd 2017-04-13 14:06:08.875067765 +0200 ++++ evolution-3.22.6/modules/webkit-editor/e-webkit-editor.c 2017-04-13 14:06:28.256067497 +0200 +@@ -5913,10 +5913,16 @@ 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); +- GTK_WIDGET_CLASS (e_webkit_editor_parent_class)->drag_drop (widget, context, x, y, time); +- g_signal_stop_emission_by_name (widget, "drag-data-received"); +- if (!is_move) +- webkit_editor_call_simple_extension_function (wk_editor, "DOMLastDropOperationDidCopy"); ++ if (!GTK_WIDGET_CLASS (e_webkit_editor_parent_class)->drag_drop (widget, context, x, y, time)) { ++ g_warning ("Drop failed in WebKit"); ++ goto process_ourselves; ++ } else { ++ 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"); ++ e_content_editor_emit_drop_handled (E_CONTENT_EDITOR (widget)); ++ } + return; + } + +@@ -5926,6 +5932,7 @@ webkit_editor_drag_data_received_cb (Gtk + gint list_len, len; + gchar *text; + ++ process_ourselves: + data = gtk_selection_data_get_data (selection); + length = gtk_selection_data_get_length (selection); + +@@ -5949,10 +5956,21 @@ webkit_editor_drag_data_received_cb (Gtk + + gtk_drag_finish (context, TRUE, is_move, time); + g_signal_stop_emission_by_name (widget, "drag-data-received"); ++ e_content_editor_emit_drop_handled (E_CONTENT_EDITOR (widget)); + return; + } + } + ++static void ++webkit_editor_drag_leave_cb (EWebKitEditor *wk_editor, ++ GdkDragContext *context, ++ guint time) ++{ ++ /* Don't pass drag-leave to WebKit otherwise the drop won't be handled by it. ++ * We will emit it later when WebKit is expecting it. */ ++ g_signal_stop_emission_by_name (GTK_WIDGET (wk_editor), "drag-leave"); ++} ++ + static gboolean + webkit_editor_drag_drop_cb (EWebKitEditor *wk_editor, + GdkDragContext *context, +@@ -6255,6 +6273,10 @@ e_webkit_editor_init (EWebKitEditor *wk_ + G_CALLBACK (webkit_editor_drag_end_cb), NULL); + + g_signal_connect ( ++ wk_editor, "drag-leave", ++ G_CALLBACK (webkit_editor_drag_leave_cb), NULL); ++ ++ g_signal_connect ( + wk_editor, "drag-drop", + G_CALLBACK (webkit_editor_drag_drop_cb), NULL); + diff --git a/SOURCES/evolution-3.22.6-composer-font-color.patch b/SOURCES/evolution-3.22.6-composer-font-color.patch new file mode 100644 index 0000000..e04217a --- /dev/null +++ b/SOURCES/evolution-3.22.6-composer-font-color.patch @@ -0,0 +1,85 @@ +diff -up evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-dom-functions.c.composer-font-color evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-dom-functions.c +--- evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-dom-functions.c.composer-font-color 2017-03-24 13:43:34.992659166 +0100 ++++ evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-dom-functions.c 2017-03-24 13:43:34.997659165 +0100 +@@ -2834,6 +2834,8 @@ body_keypress_event_cb (WebKitDOMElement + + g_return_if_fail (E_IS_EDITOR_PAGE (editor_page)); + ++ e_editor_page_set_is_processing_keypress_event (editor_page, TRUE); ++ + document = webkit_dom_node_get_owner_document (WEBKIT_DOM_NODE (element)); + dom_window = webkit_dom_document_get_default_view (document); + dom_selection = webkit_dom_dom_window_get_selection (dom_window); +@@ -3583,7 +3585,13 @@ body_input_event_cb (WebKitDOMElement *e + { + g_return_if_fail (E_IS_EDITOR_PAGE (editor_page)); + +- e_editor_dom_body_input_event_process (editor_page, event); ++ /* Only process the input event if it was triggered by the key press ++ * and not i.e. by exexCommand. This behavior changed when the support ++ * for beforeinput event was introduced in WebKit. */ ++ if (e_editor_page_is_processing_keypress_event (editor_page)) ++ e_editor_dom_body_input_event_process (editor_page, event); ++ ++ e_editor_page_set_is_processing_keypress_event (editor_page, FALSE); + } + + void +diff -up evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-page.c.composer-font-color evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-page.c +--- evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-page.c.composer-font-color 2017-02-07 17:48:51.000000000 +0100 ++++ evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-page.c 2017-03-24 13:43:34.997659165 +0100 +@@ -64,6 +64,7 @@ struct _EEditorPagePrivate { + gboolean pasting_content_from_itself; + gboolean renew_history_after_coordinates; + gboolean allow_top_signature; ++ gboolean processing_keypress_event; + + GHashTable *inline_images; + +@@ -246,6 +247,7 @@ e_editor_page_init (EEditorPage *editor_ + editor_page->priv->block_format = E_CONTENT_EDITOR_BLOCK_FORMAT_PARAGRAPH; + editor_page->priv->force_image_load = FALSE; + editor_page->priv->html_mode = TRUE; ++ editor_page->priv->processing_keypress_event = FALSE; + editor_page->priv->return_key_pressed = FALSE; + editor_page->priv->space_key_pressed = FALSE; + editor_page->priv->smiley_written = FALSE; +@@ -559,6 +561,23 @@ e_editor_page_set_alignment (EEditorPage + } + + gboolean ++e_editor_page_is_processing_keypress_event (EEditorPage *editor_page) ++{ ++ g_return_val_if_fail (E_IS_EDITOR_PAGE (editor_page), FALSE); ++ ++ return editor_page->priv->processing_keypress_event; ++} ++ ++void ++e_editor_page_set_is_processing_keypress_event (EEditorPage *editor_page, ++ gboolean processing_keypress_event) ++{ ++ g_return_if_fail (E_IS_EDITOR_PAGE (editor_page)); ++ ++ editor_page->priv->processing_keypress_event = processing_keypress_event; ++} ++ ++gboolean + e_editor_page_get_return_key_pressed (EEditorPage *editor_page) + { + g_return_val_if_fail (E_IS_EDITOR_PAGE (editor_page), FALSE); +diff -up evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-page.h.composer-font-color evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-page.h +--- evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-page.h.composer-font-color 2017-02-07 17:48:51.000000000 +0100 ++++ evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-page.h 2017-03-24 13:43:34.997659165 +0100 +@@ -112,6 +112,11 @@ void e_editor_page_set_alignment (EEdit + EContentEditorAlignment value); + gint e_editor_page_get_word_wrap_length + (EEditorPage *editor_page); ++gboolean e_editor_page_is_processing_keypress_event ++ (EEditorPage *editor_page); ++void e_editor_page_set_is_processing_keypress_event ++ (EEditorPage *editor_page, ++ gboolean processing_keypress_event); + gboolean e_editor_page_get_return_key_pressed + (EEditorPage *editor_page); + void e_editor_page_set_return_key_pressed diff --git a/SOURCES/evolution-3.22.6-composer-image-insert-undo.patch b/SOURCES/evolution-3.22.6-composer-image-insert-undo.patch new file mode 100644 index 0000000..0a6a6db --- /dev/null +++ b/SOURCES/evolution-3.22.6-composer-image-insert-undo.patch @@ -0,0 +1,3086 @@ +diff -up evolution-3.22.6/composer/e-composer-private.c.composer-image-insert-undo evolution-3.22.6/composer/e-composer-private.c +--- evolution-3.22.6/composer/e-composer-private.c.composer-image-insert-undo 2016-09-19 10:22:58.000000000 +0200 ++++ evolution-3.22.6/composer/e-composer-private.c 2017-03-24 15:12:21.893422514 +0100 +@@ -134,8 +134,6 @@ e_composer_private_constructed (EMsgComp + priv->disable_signature = FALSE; + priv->busy = FALSE; + priv->saved_editable = FALSE; +- priv->drop_occured = FALSE; +- priv->dnd_is_uri = FALSE; + priv->dnd_history_saved = FALSE; + priv->check_if_signature_is_changed = FALSE; + priv->ignore_next_signature_change = FALSE; +diff -up evolution-3.22.6/composer/e-composer-private.h.composer-image-insert-undo evolution-3.22.6/composer/e-composer-private.h +--- evolution-3.22.6/composer/e-composer-private.h.composer-image-insert-undo 2016-09-19 10:22:58.000000000 +0200 ++++ evolution-3.22.6/composer/e-composer-private.h 2017-03-24 15:12:21.893422514 +0100 +@@ -100,8 +100,6 @@ struct _EMsgComposerPrivate { + * This is used to restore the previous editable state. */ + gboolean saved_editable; + gboolean set_signature_from_message; +- gboolean drop_occured; +- gboolean dnd_is_uri; + gboolean is_sending_message; + gboolean dnd_history_saved; + gboolean check_if_signature_is_changed; +@@ -119,6 +117,8 @@ struct _EMsgComposerPrivate { + gulong notify_signature_uid_handler; + gulong notify_subject_handler; + gulong notify_subject_changed_handler; ++ ++ gulong drag_data_received_handler_id; + }; + + void e_composer_private_constructed (EMsgComposer *composer); +diff -up evolution-3.22.6/composer/e-msg-composer.c.composer-image-insert-undo evolution-3.22.6/composer/e-msg-composer.c +--- evolution-3.22.6/composer/e-msg-composer.c.composer-image-insert-undo 2016-11-30 20:06:07.000000000 +0100 ++++ evolution-3.22.6/composer/e-msg-composer.c 2017-03-24 15:12:21.894422514 +0100 +@@ -105,24 +105,14 @@ enum { + LAST_SIGNAL + }; + +-enum DndTargetType { +- DND_TARGET_TYPE_TEXT_URI_LIST, +- DND_TARGET_TYPE_MOZILLA_URL, +- DND_TARGET_TYPE_TEXT_HTML, +- DND_TARGET_TYPE_UTF8_STRING, +- DND_TARGET_TYPE_TEXT_PLAIN, +- DND_TARGET_TYPE_STRING, +- DND_TARGET_TYPE_TEXT_PLAIN_UTF8 +-}; +- + static GtkTargetEntry drag_dest_targets[] = { +- { (gchar *) "text/uri-list", 0, DND_TARGET_TYPE_TEXT_URI_LIST }, +- { (gchar *) "_NETSCAPE_URL", 0, DND_TARGET_TYPE_MOZILLA_URL }, +- { (gchar *) "text/html", 0, DND_TARGET_TYPE_TEXT_HTML }, +- { (gchar *) "UTF8_STRING", 0, DND_TARGET_TYPE_UTF8_STRING }, +- { (gchar *) "text/plain", 0, DND_TARGET_TYPE_TEXT_PLAIN }, +- { (gchar *) "STRING", 0, DND_TARGET_TYPE_STRING }, +- { (gchar *) "text/plain;charset=utf-8", 0, DND_TARGET_TYPE_TEXT_PLAIN_UTF8 }, ++ { (gchar *) "text/uri-list", 0, E_DND_TARGET_TYPE_TEXT_URI_LIST }, ++ { (gchar *) "_NETSCAPE_URL", 0, E_DND_TARGET_TYPE_MOZILLA_URL }, ++ { (gchar *) "text/html", 0, E_DND_TARGET_TYPE_TEXT_HTML }, ++ { (gchar *) "UTF8_STRING", 0, E_DND_TARGET_TYPE_UTF8_STRING }, ++ { (gchar *) "text/plain", 0, E_DND_TARGET_TYPE_TEXT_PLAIN }, ++ { (gchar *) "STRING", 0, E_DND_TARGET_TYPE_STRING }, ++ { (gchar *) "text/plain;charset=utf-8", 0, E_DND_TARGET_TYPE_TEXT_PLAIN_UTF8 }, + }; + + static guint signals[LAST_SIGNAL]; +@@ -1784,160 +1774,6 @@ msg_composer_paste_clipboard_cb (EConten + + return TRUE; + } +-#if 0 /* FIXME WK2 */ +-static gboolean +-msg_composer_drag_motion_cb (GtkWidget *widget, +- GdkDragContext *context, +- gint x, +- gint y, +- guint time, +- EMsgComposer *composer) +-{ +- GtkWidget *source_widget; +- EHTMLEditor *editor = e_msg_composer_get_editor (composer); +- EHTMLEditorView *editor_view = e_html_editor_get_view (editor); +- +- source_widget = gtk_drag_get_source_widget (context); +- /* When we are doind DnD just inside the web view, the DnD is supposed +- * to move things around. */ +- if (E_IS_HTML_EDITOR_VIEW (source_widget)) { +- if ((gpointer) editor_view == (gpointer) source_widget) { +- gdk_drag_status (context, GDK_ACTION_MOVE, time); +- +- return FALSE; +- } +- } +- +- gdk_drag_status (context, GDK_ACTION_COPY, time); +- +- return FALSE; +-} +- +-static gboolean +-msg_composer_drag_drop_cb (GtkWidget *widget, +- GdkDragContext *context, +- gint x, +- gint y, +- guint time, +- EMsgComposer *composer) +-{ +- GdkAtom target; +- GtkWidget *source_widget; +- +- /* When we are doing DnD just inside the web view, the DnD is supposed +- * to move things around. */ +- source_widget = gtk_drag_get_source_widget (context); +- if (E_IS_HTML_EDITOR_VIEW (source_widget)) { +- EHTMLEditor *editor = e_msg_composer_get_editor (composer); +- EHTMLEditorView *editor_view = e_html_editor_get_view (editor); +- +- if ((gpointer) editor_view == (gpointer) source_widget) { +- GDBusProxy *web_extension; +- +- web_extension = e_html_editor_view_get_web_extension_proxy (editor_view); +- if (web_extension) { +- e_util_invoke_g_dbus_proxy_call_sync_wrapper_with_error_check ( +- web_extension, +- "DOMSaveDragAndDropHistory", +- g_variant_new ( +- "(t)", +- webkit_web_view_get_page_id (WEBKIT_WEB_VIEW (editor_view))), +- NULL); +- } +- return FALSE; +- } +- } +- +- target = gtk_drag_dest_find_target (widget, context, NULL); +- if (target == GDK_NONE) +- gdk_drag_status (context, 0, time); +- else { +- /* Prevent WebKit from pasting the URI of file into the view. Also +- * prevent it from inserting the text/plain or text/html content as we +- * want to insert it ourselves. */ +- if (composer->priv->dnd_is_uri || !E_IS_HTML_EDITOR_VIEW (source_widget)) +- g_signal_stop_emission_by_name (widget, "drag-drop"); +- +- composer->priv->dnd_is_uri = FALSE; +- +- if (E_IS_HTML_EDITOR_VIEW (source_widget)) +- gdk_drag_status (context, GDK_ACTION_MOVE, time); +- else +- gdk_drag_status (context, GDK_ACTION_COPY, time); +- +- composer->priv->drop_occured = TRUE; +- gtk_drag_get_data (widget, context, target, time); +- +- return TRUE; +- } +- +- return FALSE; +-} +- +-static void +-msg_composer_drag_data_received_after_cb (GtkWidget *widget, +- GdkDragContext *context, +- gint x, +- gint y, +- GtkSelectionData *selection, +- guint info, +- guint time, +- EMsgComposer *composer) +-{ +- EHTMLEditor *editor; +- EHTMLEditorView *view; +- GDBusProxy *web_extension; +- +- if (!composer->priv->drop_occured) +- goto out; +- +- /* Save just history for events handled by WebKit. */ +- if (composer->priv->dnd_history_saved) +- goto out; +- +- editor = e_msg_composer_get_editor (composer); +- view = e_html_editor_get_view (editor); +- web_extension = e_html_editor_view_get_web_extension_proxy (view); +- if (!web_extension) +- goto out; +- +- e_util_invoke_g_dbus_proxy_call_sync_wrapper_with_error_check ( +- web_extension, +- "DOMCleanAfterDragAndDrop", +- g_variant_new ( +- "(t)", +- webkit_web_view_get_page_id (WEBKIT_WEB_VIEW (view))), +- NULL); +- +- out: +- composer->priv->drop_occured = FALSE; +- composer->priv->dnd_history_saved = FALSE; +-} +- +-static gchar * +-next_uri (guchar **uri_list, +- gint *len, +- gint *list_len) +-{ +- guchar *uri, *begin; +- +- begin = *uri_list; +- *len = 0; +- while (**uri_list && **uri_list != '\n' && **uri_list != '\r' && *list_len) { +- (*uri_list) ++; +- (*len) ++; +- (*list_len) --; +- } +- +- uri = (guchar *) g_strndup ((gchar *) begin, *len); +- +- while ((!**uri_list || **uri_list == '\n' || **uri_list == '\r') && *list_len) { +- (*uri_list) ++; +- (*list_len) --; +- } +- +- return (gchar *) uri; +-} + + static void + msg_composer_drag_data_received_cb (GtkWidget *widget, +@@ -1951,90 +1787,16 @@ msg_composer_drag_data_received_cb (GtkW + { + EHTMLEditor *editor; + EContentEditor *cnt_editor; +- gboolean html_mode, same_widget = FALSE; +- GtkWidget *source_widget; ++ gboolean html_mode, is_move; + + editor = e_msg_composer_get_editor (composer); + cnt_editor = e_html_editor_get_content_editor (editor); + html_mode = e_content_editor_get_html_mode (cnt_editor); + +- composer->priv->dnd_history_saved = TRUE; +- +- /* When we are doing DnD just inside the web view, the DnD is supposed +- * to move things around. */ +- source_widget = gtk_drag_get_source_widget (context); +- if (E_IS_CONTENT_EDITOR (source_widget) && +- ((gpointer) cnt_editor == (gpointer) source_widget)) +- same_widget = TRUE; +- +- /* Leave DnD inside the view on WebKit. */ +- if (composer->priv->drop_occured && same_widget) { +- gdk_drag_status (context, 0, time); +- return; +- } +- +- if (!composer->priv->drop_occured) { +- if (!same_widget) { +- /* Check if we are DnD'ing some URI, if so WebKit will +- * insert the URI into the view and we have to prevent it +- * from doing that. */ +- if (info == DND_TARGET_TYPE_TEXT_URI_LIST) { +- gchar **uris; +- +- uris = gtk_selection_data_get_uris (selection); +- /* I don't know what regressed outside of Evo, but +- * this is called twice. Firstly with uris set +- * following by one with uris not set. */ +- if (!composer->priv->dnd_is_uri) +- composer->priv->dnd_is_uri = uris != NULL; +- g_strfreev (uris); +- } +- } +- return; +- } ++ g_signal_handler_disconnect (cnt_editor, composer->priv->drag_data_received_handler_id); ++ composer->priv->drag_data_received_handler_id = 0; + +- composer->priv->dnd_is_uri = FALSE; +- +- /* Leave the text on WebKit to handle it. */ +- if (info == DND_TARGET_TYPE_UTF8_STRING || +- info == DND_TARGET_TYPE_STRING || +- info == DND_TARGET_TYPE_TEXT_PLAIN || +- info == DND_TARGET_TYPE_TEXT_PLAIN_UTF8) { +- composer->priv->dnd_history_saved = FALSE; +- gdk_drag_status (context, 0, time); +- return; +- } +- +- if (info == DND_TARGET_TYPE_TEXT_HTML) { +- const guchar *data; +- gint length; +- gint list_len, len; +- gchar *text; +- +- data = gtk_selection_data_get_data (selection); +- length = gtk_selection_data_get_length (selection); +- +- if (!data || length < 0) { +- gtk_drag_finish (context, FALSE, FALSE, time); +- return; +- } +- +- e_content_editor_move_caret_on_coordinates (cnt_editor, x, y, FALSE); +- +- list_len = length; +- do { +- text = next_uri ((guchar **) &data, &len, &list_len); +- e_content_editor_insert_content ( +- cnt_editor, +- text, +- E_CONTENT_EDITOR_INSERT_TEXT_HTML); +- g_free (text); +- } while (list_len); +- +- gtk_drag_finish (context, TRUE, FALSE, time); +- +- return; +- } ++ is_move = gdk_drag_context_get_selected_action (context) == GDK_ACTION_MOVE; + + /* HTML mode has a few special cases for drops... */ + /* If we're receiving URIs and -all- the URIs point to +@@ -2060,12 +1822,12 @@ msg_composer_drag_data_received_cb (GtkW + + list_len = length; + do { +- uri = next_uri ((guchar **) &data, &len, &list_len); ++ uri = e_util_next_uri_from_uri_list ((guchar **) &data, &len, &list_len); + e_content_editor_insert_image (cnt_editor, uri); + g_free (uri); + } while (list_len); + +- gtk_drag_finish (context, TRUE, FALSE, time); ++ gtk_drag_finish (context, TRUE, is_move, time); + } else { + EAttachmentView *attachment_view = + e_msg_composer_get_attachment_view (composer); +@@ -2078,7 +1840,43 @@ msg_composer_drag_data_received_cb (GtkW + context, x, y, selection, info, time); + } + } +-#endif ++ ++static gboolean ++msg_composer_drag_drop_cb (GtkWidget *widget, ++ GdkDragContext *context, ++ gint x, ++ gint y, ++ guint time, ++ EMsgComposer *composer) ++{ ++ GdkAtom target = gtk_drag_dest_find_target (widget, context, NULL); ++ ++ if (target == GDK_NONE) { ++ gdk_drag_status (context, 0, time); ++ } else { ++ composer->priv->drag_data_received_handler_id = g_signal_connect ( ++ E_CONTENT_EDITOR (widget), "drag-data-received", ++ G_CALLBACK (msg_composer_drag_data_received_cb), composer); ++ ++ gtk_drag_get_data (widget, context, target, time); ++ ++ return TRUE; ++ } ++ ++ return FALSE; ++} ++ ++static void ++msg_composer_drag_begin_cb (GtkWidget *widget, ++ GdkDragContext *context, ++ EMsgComposer *composer) ++{ ++ if (composer->priv->drag_data_received_handler_id != 0) { ++ g_signal_handler_disconnect (E_CONTENT_EDITOR( widget), composer->priv->drag_data_received_handler_id); ++ composer->priv->drag_data_received_handler_id = 0; ++ } ++} ++ + static void + msg_composer_notify_header_cb (EMsgComposer *composer) + { +@@ -2465,28 +2263,14 @@ msg_composer_constructed (GObject *objec + G_CALLBACK (msg_composer_paste_primary_clipboard_cb), composer); + + /* Drag-and-Drop Support */ +-#if 0 /* FIXME WK2 */ +- EHTMLEditorView *view; +- +- view = e_html_editor_get_view (editor); +- + g_signal_connect ( +- view, "drag-motion", +- G_CALLBACK (msg_composer_drag_motion_cb), composer); +- +- g_signal_connect ( +- view, "drag-drop", ++ cnt_editor, "drag-drop", + G_CALLBACK (msg_composer_drag_drop_cb), composer); + + g_signal_connect ( +- view, "drag-data-received", +- G_CALLBACK (msg_composer_drag_data_received_cb), composer); ++ cnt_editor, "drag-begin", ++ G_CALLBACK (msg_composer_drag_begin_cb), composer); + +- /* Used for fixing various stuff after WebKit processed the DnD data. */ +- g_signal_connect_after ( +- view, "drag-data-received", +- G_CALLBACK (msg_composer_drag_data_received_after_cb), composer); +-#endif + g_signal_connect ( + composer->priv->gallery_icon_view, "drag-data-get", + G_CALLBACK (msg_composer_gallery_drag_data_get), NULL); +@@ -5531,8 +5315,6 @@ e_msg_composer_restore_focus_on_composer + + if (E_IS_CONTENT_EDITOR (widget)) { + EContentEditor *cnt_editor = E_CONTENT_EDITOR (widget); +- /* FIXME WK2 +- e_html_editor_view_force_spell_check (view);*/ + e_content_editor_selection_restore (cnt_editor); + } + +diff -up evolution-3.22.6/e-util/e-attachment-view.c.composer-image-insert-undo evolution-3.22.6/e-util/e-attachment-view.c +--- evolution-3.22.6/e-util/e-attachment-view.c.composer-image-insert-undo 2016-09-19 10:22:58.000000000 +0200 ++++ evolution-3.22.6/e-util/e-attachment-view.c 2017-03-24 15:12:21.894422514 +0100 +@@ -39,6 +39,7 @@ enum { + + /* Note: Do not use the info field. */ + static GtkTargetEntry target_table[] = { ++ { (gchar *) "text/uri-list", 0, 0 }, + { (gchar *) "_NETSCAPE_URL", 0, 0 } + }; + +@@ -428,6 +429,125 @@ attachment_view_netscape_url (EAttachmen + } + + static void ++attachment_view_uri_list (EAttachmentView *view, ++ GdkDragContext *drag_context, ++ gint x, ++ gint y, ++ GtkSelectionData *selection_data, ++ guint info, ++ guint time) ++{ ++ static GdkAtom atom = GDK_NONE; ++ EAttachmentStore *store; ++ EAttachment *attachment; ++ const gchar *data; ++ gpointer parent; ++ gint length = 0, list_length = 0, uri_length = 0; ++ gchar *uri; ++ ++ ++ if (G_UNLIKELY (atom == GDK_NONE)) ++ atom = gdk_atom_intern_static_string ("text/uri-list"); ++ ++ if (gtk_selection_data_get_target (selection_data) != atom) ++ return; ++ ++ g_signal_stop_emission_by_name (view, "drag-data-received"); ++ ++ data = (const gchar *) gtk_selection_data_get_data (selection_data); ++ length = gtk_selection_data_get_length (selection_data); ++ ++ if (!data || length < 0) { ++ gtk_drag_finish (drag_context, FALSE, FALSE, time); ++ return; ++ } ++ ++ store = e_attachment_view_get_store (view); ++ ++ parent = gtk_widget_get_toplevel (GTK_WIDGET (view)); ++ parent = gtk_widget_is_toplevel (parent) ? parent : NULL; ++ ++ list_length = length; ++ do { ++ uri = e_util_next_uri_from_uri_list ((guchar **) &data, &uri_length, &list_length); ++ ++ if (strstr (uri, ";base64,")) { ++ /* base64 encoded data */ ++ CamelMimePart *mime_part; ++ gchar *mime_type = NULL, *filename = NULL; ++ guchar *base64_data; ++ gsize base64_data_length; ++ ++ if (g_str_has_prefix (uri, "data:")) { ++ const gchar *base64 = strstr (uri, ";") + 1; ++ /* strlen ("data:") == 5 */ ++ mime_type = g_strndup (uri + 5, base64 - uri - 5 - 1); ++ ++ base64 = strstr (base64, ",") + 1; ++ base64_data = g_base64_decode (base64, &base64_data_length); ++ } else if (strstr (uri, ";data")) { ++ /* CID attachment from mail preview that has ++ * the filename prefixed before the base64 data - ++ * see EMailDisplay. */ ++ const gchar *base64 = strstr (uri, ";") + 1; ++ glong filename_length, mime_type_length, base64_length; ++ ++ base64_length = g_utf8_strlen (base64, -1); ++ ++ filename_length = uri_length - base64_length - 1; ++ filename = g_strndup (uri, filename_length); ++ ++ /* strlen ("data:") == 5 */ ++ mime_type_length = base64_length - g_utf8_strlen (strstr (base64, ";"), -1) - 5; ++ mime_type = g_strndup (uri + filename_length + 5 + 1, mime_type_length); ++ ++ base64 = strstr (base64, ",") + 1; ++ base64_data = g_base64_decode (base64, &base64_data_length); ++ } else { ++ g_free (uri); ++ gtk_drag_finish (drag_context, FALSE, FALSE, time); ++ return; ++ } ++ ++ mime_part = camel_mime_part_new (); ++ ++ camel_mime_part_set_content (mime_part, (const gchar *) base64_data, base64_data_length, mime_type); ++ camel_mime_part_set_disposition (mime_part, "inline"); ++ if (filename && *filename) ++ camel_mime_part_set_filename (mime_part, filename); ++ camel_mime_part_set_encoding (mime_part, CAMEL_TRANSFER_ENCODING_BASE64); ++ ++ attachment = e_attachment_new (); ++ e_attachment_set_mime_part (attachment, mime_part); ++ e_attachment_store_add_attachment (store, attachment); ++ e_attachment_load_async ( ++ attachment, (GAsyncReadyCallback) ++ call_attachment_load_handle_error, parent ? g_object_ref (parent) : NULL); ++ ++ g_object_unref (attachment); ++ g_object_unref (mime_part); ++ if (mime_type) ++ g_free (mime_type); ++ if (filename) ++ g_free (filename); ++ g_free (base64_data); ++ } else { ++ /* regular URIs */ ++ attachment = e_attachment_new_for_uri (uri); ++ e_attachment_store_add_attachment (store, attachment); ++ e_attachment_load_async ( ++ attachment, (GAsyncReadyCallback) ++ call_attachment_load_handle_error, parent ? g_object_ref (parent) : NULL); ++ g_object_unref (attachment); ++ } ++ ++ g_free (uri); ++ } while (list_length); ++ ++ gtk_drag_finish (drag_context, TRUE, FALSE, time); ++} ++ ++static void + attachment_view_text_calendar (EAttachmentView *view, + GdkDragContext *drag_context, + gint x, +@@ -809,6 +929,10 @@ e_attachment_view_init (EAttachmentView + + g_signal_connect ( + view, "drag-data-received", ++ G_CALLBACK (attachment_view_uri_list), NULL); ++ ++ g_signal_connect ( ++ view, "drag-data-received", + G_CALLBACK (attachment_view_text_x_vcard), NULL); + + g_signal_connect ( +diff -up evolution-3.22.6/e-util/e-html-editor-dialog.h.composer-image-insert-undo evolution-3.22.6/e-util/e-html-editor-dialog.h +--- evolution-3.22.6/e-util/e-html-editor-dialog.h.composer-image-insert-undo 2016-09-19 10:22:58.000000000 +0200 ++++ evolution-3.22.6/e-util/e-html-editor-dialog.h 2017-03-24 15:12:21.894422514 +0100 +@@ -62,16 +62,6 @@ struct _EHTMLEditorDialogClass { + GtkWindowClass parent_class; + }; + +-#if 0 /* FIXME WK2 */ +-struct _EContentEditorDialogInterface { +- GTypeInterface parent_interface; +- +- void (*dialog_opened) (EContentEditorDialog *dialog); +- +- void (*dialog_closed) (EContentEditorDialog *dialog); +-}; +-#endif +- + GType e_html_editor_dialog_get_type (void) G_GNUC_CONST; + EHTMLEditor * e_html_editor_dialog_get_editor (EHTMLEditorDialog *dialog); + GtkBox * e_html_editor_dialog_get_button_box +diff -up evolution-3.22.6/e-util/e-misc-utils.c.composer-image-insert-undo evolution-3.22.6/e-util/e-misc-utils.c +--- evolution-3.22.6/e-util/e-misc-utils.c.composer-image-insert-undo 2017-01-18 11:36:05.000000000 +0100 ++++ evolution-3.22.6/e-util/e-misc-utils.c 2017-03-24 15:12:21.894422514 +0100 +@@ -3908,3 +3908,38 @@ e_util_get_webkit_developer_mode_enabled + + return enabled != 0; + } ++ ++/** ++ * e_util_next_uri_from_uri_list: ++ * @uri_list: array of URIs separated by new lines ++ * @len: (out): a length of the found URI ++ * @list_len: (out): a length of the array ++ * ++ * Returns: A newly allocated string with found URI. ++ * ++ * Since: 3.26 ++ **/ ++gchar * ++e_util_next_uri_from_uri_list (guchar **uri_list, ++ gint *len, ++ gint *list_len) ++{ ++ guchar *uri, *begin; ++ ++ begin = *uri_list; ++ *len = 0; ++ while (**uri_list && **uri_list != '\n' && **uri_list != '\r' && *list_len) { ++ (*uri_list) ++; ++ (*len) ++; ++ (*list_len) --; ++ } ++ ++ uri = (guchar *) g_strndup ((gchar *) begin, *len); ++ ++ while ((!**uri_list || **uri_list == '\n' || **uri_list == '\r') && *list_len) { ++ (*uri_list) ++; ++ (*list_len) --; ++ } ++ ++ return (gchar *) uri; ++} +diff -up evolution-3.22.6/e-util/e-misc-utils.h.composer-image-insert-undo evolution-3.22.6/e-util/e-misc-utils.h +--- evolution-3.22.6/e-util/e-misc-utils.h.composer-image-insert-undo 2017-01-18 11:36:05.000000000 +0100 ++++ evolution-3.22.6/e-util/e-misc-utils.h 2017-03-24 15:12:21.894422514 +0100 +@@ -332,6 +332,9 @@ void e_util_save_file_chooser_folder (G + void e_util_load_file_chooser_folder (GtkFileChooser *file_chooser); + gboolean e_util_get_webkit_developer_mode_enabled + (void); ++gchar * e_util_next_uri_from_uri_list (guchar **uri_list, ++ gint *len, ++ gint *list_len); + + G_END_DECLS + +diff -up evolution-3.22.6/e-util/e-util-enums.h.composer-image-insert-undo evolution-3.22.6/e-util/e-util-enums.h +--- evolution-3.22.6/e-util/e-util-enums.h.composer-image-insert-undo 2016-11-28 16:56:59.000000000 +0100 ++++ evolution-3.22.6/e-util/e-util-enums.h 2017-03-24 15:12:21.894422514 +0100 +@@ -548,6 +548,30 @@ typedef enum { + E_CLIPBOARD_CAN_PASTE = 1 << 2 */ + } EClipboardFlags; + ++/** ++ * EDnDTargetType: ++ * DND_TARGET_TYPE_TEXT_URI_LIST: text/uri-list ++ * DND_TARGET_TYPE_MOZILLA_URL: _NETSCAPE_URL ++ * DND_TARGET_TYPE_TEXT_HTML: text/html ++ * DND_TARGET_TYPE_UTF8_STRING: UTF8_STRING ++ * DND_TARGET_TYPE_TEXT_PLAIN: text/plain ++ * DND_TARGET_TYPE_STRING: STRING ++ * DND_TARGET_TYPE_TEXT_PLAIN_UTF8: text/plain;charser=utf-8 ++ * ++ * Drag and drop targets supported by EContentEditor. ++ * ++ * Since: 3.26 ++ **/ ++typedef enum { ++ E_DND_TARGET_TYPE_TEXT_URI_LIST = 0, ++ E_DND_TARGET_TYPE_MOZILLA_URL, ++ E_DND_TARGET_TYPE_TEXT_HTML, ++ E_DND_TARGET_TYPE_UTF8_STRING, ++ E_DND_TARGET_TYPE_TEXT_PLAIN, ++ E_DND_TARGET_TYPE_STRING, ++ E_DND_TARGET_TYPE_TEXT_PLAIN_UTF8 ++} EDnDTargetType; ++ + G_END_DECLS + + #endif /* E_UTIL_ENUMS_H */ +diff -up evolution-3.22.6/e-util/e-web-view.c.composer-image-insert-undo evolution-3.22.6/e-util/e-web-view.c +--- evolution-3.22.6/e-util/e-web-view.c.composer-image-insert-undo 2017-01-27 12:06:11.000000000 +0100 ++++ evolution-3.22.6/e-util/e-web-view.c 2017-03-24 15:12:21.895422514 +0100 +@@ -2386,11 +2386,7 @@ e_web_view_init (EWebView *web_view) + g_signal_connect ( + web_view, "load-changed", + G_CALLBACK (web_view_load_changed_cb), NULL); +-/* FIXME WK2 +- g_signal_connect ( +- web_view, "document-load-finished", +- G_CALLBACK (style_updated_cb), NULL); +-*/ ++ + g_signal_connect ( + web_view, "style-updated", + G_CALLBACK (style_updated_cb), NULL); +diff -up evolution-3.22.6/e-util/test-html-editor-units.c.composer-image-insert-undo evolution-3.22.6/e-util/test-html-editor-units.c +--- evolution-3.22.6/e-util/test-html-editor-units.c.composer-image-insert-undo 2017-03-24 15:12:21.888422514 +0100 ++++ evolution-3.22.6/e-util/test-html-editor-units.c 2017-03-24 15:12:21.895422514 +0100 +@@ -978,6 +978,8 @@ test_image_insert (TestFixture *fixture) + /* Mimic what the action:insert-image does, without invoking the image chooser dialog */ + cnt_editor = e_html_editor_get_content_editor (fixture->editor); + e_content_editor_insert_image (cnt_editor, uri); ++ /* Wait some time until the operation is finished */ ++ test_utils_wait_milliseconds (500); + + g_free (uri); + +@@ -991,6 +993,10 @@ test_image_insert (TestFixture *fixture) + g_free (image_data); + + if (!test_utils_run_simple_test (fixture, ++ "undo:save\n" /* 1 */ ++ "undo:undo\n" ++ "undo:redo\n" ++ "undo:test:1\n" + "type:+after\n", + expected_html, + "before*+after")) +@@ -2663,6 +2669,48 @@ test_delete_after_quoted (TestFixture *f + g_test_fail (); + } + ++static void ++test_replace_dialog (TestFixture *fixture) ++{ ++ if (!test_utils_run_simple_test (fixture, ++ "mode:plain\n" ++ "type:text to replace\n" ++ "undo:save\n" /* 1 */ ++ "seq:h\n" ++ "action:show-replace\n" ++ "type:to\t2\n" ++ "type:\t\t\t\t\t\t\n" /* Jump to 'Replace' */ ++ "seq:n\n" /* Press it */ ++ "seq:^\n" /* Close the dialog */ ++ "undo:undo\n" ++ "undo:test:1\n" ++ "undo:redo\n", ++ HTML_PREFIX "
text 2 replace
" HTML_SUFFIX, ++ "text 2 replace")) ++ g_test_fail (); ++} ++ ++static void ++test_replace_dialog_all (TestFixture *fixture) ++{ ++ if (!test_utils_run_simple_test (fixture, ++ "mode:plain\n" ++ "type:text to replace\n" ++ "undo:save\n" /* 1 */ ++ "seq:h\n" ++ "action:show-replace\n" ++ "type:e\t3\n" ++ "type:\t\t\t\t\t\t\t\n" /* Jump to 'Replace All' */ ++ "seq:n\n" /* Press it */ ++ "seq:^\n" /* Close the dialog */ ++ "undo:undo\n" ++ "undo:test:1\n" ++ "undo:redo\n", ++ HTML_PREFIX "
t3xt to r3plac3
" HTML_SUFFIX, ++ "t3xt to r3plac3")) ++ g_test_fail (); ++} ++ + gint + main (gint argc, + gchar *argv[]) +@@ -2824,6 +2872,8 @@ main (gint argc, + test_utils_add_test ("/undo/link-paste/plain", test_undo_link_paste_plain); + test_utils_add_test ("/delete/quoted", test_delete_quoted); + test_utils_add_test ("/delete/after-quoted", test_delete_after_quoted); ++ test_utils_add_test ("/replace/dialog", test_replace_dialog); ++ test_utils_add_test ("/replace-all/dialog", test_replace_dialog_all); + + test_add_html_editor_bug_tests (); + +diff -up evolution-3.22.6/mail/e-mail-display.c.composer-image-insert-undo evolution-3.22.6/mail/e-mail-display.c +--- evolution-3.22.6/mail/e-mail-display.c.composer-image-insert-undo 2017-03-24 15:12:21.888422514 +0100 ++++ evolution-3.22.6/mail/e-mail-display.c 2017-03-24 15:12:21.895422514 +0100 +@@ -1768,7 +1768,6 @@ mail_display_uri_requested_cb (EWebView + } + } + +-#if 0 /* FIXME WK2 */ + static CamelMimePart * + camel_mime_part_from_cid (EMailDisplay *display, + const gchar *uri) +@@ -1876,7 +1875,6 @@ mail_display_drag_data_get (GtkWidget *w + out: + g_free (uri); + } +-#endif + + static void + e_mail_display_test_change_and_update_fonts_cb (EMailDisplay *mail_display, +@@ -1922,9 +1920,7 @@ e_mail_display_class_init (EMailDisplayC + widget_class->button_press_event = mail_display_button_press_event; + + web_view_class = E_WEB_VIEW_CLASS (class); +-#if 0 /* FIXME WK2 */ + web_view_class->suggest_filename = mail_display_suggest_filename; +-#endif + web_view_class->set_fonts = mail_display_set_fonts; + + g_object_class_install_property ( +@@ -2054,11 +2050,11 @@ e_mail_display_init (EMailDisplay *displ + g_signal_connect ( + display, "process-mailto", + G_CALLBACK (mail_display_process_mailto), NULL); +-#if 0 /* FIXME WK2 */ ++ + g_signal_connect_after ( + display, "drag-data-get", + G_CALLBACK (mail_display_drag_data_get), display); +-#endif ++ + display->priv->settings = e_util_ref_settings ("org.gnome.evolution.mail"); + g_signal_connect_swapped ( + display->priv->settings , "changed::monospace-font", +diff -up evolution-3.22.6/modules/webkit-editor/e-webkit-editor.c.composer-image-insert-undo evolution-3.22.6/modules/webkit-editor/e-webkit-editor.c +--- evolution-3.22.6/modules/webkit-editor/e-webkit-editor.c.composer-image-insert-undo 2017-03-24 15:12:21.889422514 +0100 ++++ evolution-3.22.6/modules/webkit-editor/e-webkit-editor.c 2017-03-24 15:13:40.145419038 +0100 +@@ -131,6 +131,10 @@ struct _EWebKitEditorPrivate { + gchar *replace_with; + gulong found_text_handler_id; + gulong failed_to_find_text_handler_id; ++ gboolean current_text_not_found; ++ ++ gboolean performing_drag; ++ gulong drag_data_received_handler_id; + + gchar *last_hover_uri; + }; +@@ -386,6 +390,9 @@ web_extension_selection_changed_cb (GDBu + } + g_free (font_color); + ++ g_object_notify (G_OBJECT (wk_editor), "can-undo"); ++ g_object_notify (G_OBJECT (wk_editor), "can-redo"); ++ + g_object_notify (G_OBJECT (wk_editor), "alignment"); + g_object_notify (G_OBJECT (wk_editor), "block-format"); + g_object_notify (G_OBJECT (wk_editor), "indented"); +@@ -2468,7 +2475,7 @@ webkit_editor_replace_caret_word (EConte + return; + } + +- e_util_invoke_g_dbus_proxy_call_with_error_check ( ++ e_util_invoke_g_dbus_proxy_call_sync_wrapper_with_error_check ( + wk_editor->priv->web_extension, + "DOMReplaceCaretWord", + g_variant_new ("(ts)", current_page_id (wk_editor), replacement), +@@ -2521,10 +2528,39 @@ find_flags_to_webkit_find_options (guint + } + + static void ++webkit_editor_replace (EContentEditor *editor, ++ const gchar *replacement) ++{ ++ EWebKitEditor *wk_editor; ++ ++ wk_editor = E_WEBKIT_EDITOR (editor); ++ if (!wk_editor->priv->web_extension) { ++ g_warning ("EHTMLEditorWebExtension not ready at %s!", G_STRFUNC); ++ return; ++ } ++ ++ e_util_invoke_g_dbus_proxy_call_sync_wrapper_with_error_check ( ++ wk_editor->priv->web_extension, ++ "DOMSelectionReplace", ++ g_variant_new ("(ts)", current_page_id (wk_editor), replacement), ++ wk_editor->priv->cancellable); ++} ++ ++static gboolean ++search_next_on_idle (EWebKitEditor *wk_editor) ++{ ++ webkit_find_controller_search_next (wk_editor->priv->find_controller); ++ ++ return G_SOURCE_REMOVE; ++} ++ ++static void + webkit_find_controller_found_text_cb (WebKitFindController *find_controller, + guint match_count, + EWebKitEditor *wk_editor) + { ++ wk_editor->priv->current_text_not_found = FALSE; ++ + if (wk_editor->priv->performing_replace_all) { + if (!wk_editor->priv->replaced_count) + wk_editor->priv->replaced_count = match_count; +@@ -2532,12 +2568,13 @@ webkit_find_controller_found_text_cb (We + /* Repeatedly search for 'word', then replace selection by + * 'replacement'. Repeat until there's at least one occurrence of + * 'word' in the document */ +- e_content_editor_insert_content ( +- E_CONTENT_EDITOR (wk_editor), +- wk_editor->priv->replace_with, +- E_CONTENT_EDITOR_INSERT_TEXT_PLAIN); ++ e_util_invoke_g_dbus_proxy_call_with_error_check ( ++ wk_editor->priv->web_extension, ++ "DOMSelectionReplace", ++ g_variant_new ("(ts)", current_page_id (wk_editor), wk_editor->priv->replace_with), ++ wk_editor->priv->cancellable); + +- webkit_find_controller_search_next (find_controller); ++ g_idle_add ((GSourceFunc) search_next_on_idle, wk_editor); + } else { + e_content_editor_emit_find_done (E_CONTENT_EDITOR (wk_editor), match_count); + } +@@ -2547,9 +2584,26 @@ static void + webkit_find_controller_failed_to_find_text_cb (WebKitFindController *find_controller, + EWebKitEditor *wk_editor) + { ++ wk_editor->priv->current_text_not_found = TRUE; ++ + if (wk_editor->priv->performing_replace_all) { + guint replaced_count = wk_editor->priv->replaced_count; + ++ if (replaced_count > 0) { ++ if (!wk_editor->priv->web_extension) { ++ g_warning ("EHTMLEditorWebExtension not ready at %s!", G_STRFUNC); ++ } else { ++ e_util_invoke_g_dbus_proxy_call_sync_wrapper_with_error_check ( ++ wk_editor->priv->web_extension, ++ "DOMInsertReplaceAllHistoryEvent", ++ g_variant_new ("(tss)", ++ current_page_id (wk_editor), ++ webkit_find_controller_get_search_text (find_controller), ++ wk_editor->priv->replace_with), ++ NULL); ++ } ++ } ++ + webkit_editor_finish_search (wk_editor); + e_content_editor_emit_replace_all_done (E_CONTENT_EDITOR (wk_editor), replaced_count); + } else { +@@ -2575,6 +2629,7 @@ webkit_editor_prepare_find_controller (E + + wk_editor->priv->performing_replace_all = FALSE; + wk_editor->priv->replaced_count = 0; ++ wk_editor->priv->current_text_not_found = FALSE; + g_free (wk_editor->priv->replace_with); + wk_editor->priv->replace_with = NULL; + } +@@ -2613,25 +2668,6 @@ webkit_editor_find (EContentEditor *edit + } + + static void +-webkit_editor_replace (EContentEditor *editor, +- const gchar *replacement) +-{ +- EWebKitEditor *wk_editor; +- +- wk_editor = E_WEBKIT_EDITOR (editor); +- if (!wk_editor->priv->web_extension) { +- g_warning ("EHTMLEditorWebExtension not ready at %s!", G_STRFUNC); +- return; +- } +- +- e_util_invoke_g_dbus_proxy_call_with_error_check ( +- wk_editor->priv->web_extension, +- "DOMSelectionReplace", +- g_variant_new ("(ts)", current_page_id (wk_editor), replacement), +- wk_editor->priv->cancellable); +-} +- +-static void + webkit_editor_replace_all (EContentEditor *editor, + guint32 flags, + const gchar *find_text, +@@ -2647,6 +2683,11 @@ webkit_editor_replace_all (EContentEdito + wk_editor = E_WEBKIT_EDITOR (editor); + wk_options = find_flags_to_webkit_find_options (flags); + ++ wk_options |= WEBKIT_FIND_OPTIONS_WRAP_AROUND; ++ ++ if (wk_editor->priv->current_text_not_found) ++ return; ++ + if (!wk_editor->priv->find_controller) + webkit_editor_prepare_find_controller (wk_editor); + +@@ -5770,17 +5811,111 @@ webkit_editor_context_menu_cb (EWebKitEd + } + + static void ++webkit_editor_drag_begin_cb (EWebKitEditor *wk_editor, ++ GdkDragContext *context) ++{ ++ wk_editor->priv->performing_drag = TRUE; ++} ++ ++static void ++webkit_editor_drag_failed_cb (EWebKitEditor *wk_editor, ++ GdkDragContext *context, ++ GtkDragResult result) ++{ ++ wk_editor->priv->performing_drag = FALSE; ++} ++ ++static void + webkit_editor_drag_end_cb (EWebKitEditor *wk_editor, + GdkDragContext *context) + { +- webkit_editor_call_simple_extension_function (wk_editor, "DOMDragAndDropEnd"); ++ wk_editor->priv->performing_drag = FALSE; ++} ++ ++static void ++webkit_editor_drag_data_received_cb (GtkWidget *widget, ++ GdkDragContext *context, ++ gint x, ++ gint y, ++ GtkSelectionData *selection, ++ guint info, ++ guint time) ++{ ++ EWebKitEditor *wk_editor = E_WEBKIT_EDITOR (widget); ++ gboolean is_move = FALSE; ++ ++ g_signal_handler_disconnect (wk_editor, wk_editor->priv->drag_data_received_handler_id); ++ wk_editor->priv->drag_data_received_handler_id = 0; ++ ++ is_move = gdk_drag_context_get_selected_action(context) == GDK_ACTION_MOVE; ++ ++ /* Leave DnD inside the view on WebKit */ ++ /* Leave the text on WebKit to handle it. */ ++ if (wk_editor->priv->performing_drag || ++ 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); ++ GTK_WIDGET_CLASS (e_webkit_editor_parent_class)->drag_drop (widget, context, x, y, time); ++ g_signal_stop_emission_by_name (widget, "drag-data-received"); ++ if (!is_move) ++ webkit_editor_call_simple_extension_function (wk_editor, "DOMLastDropOperationDidCopy"); ++ return; ++ } ++ ++ if (info == E_DND_TARGET_TYPE_TEXT_HTML) { ++ const guchar *data; ++ gint length; ++ gint list_len, len; ++ gchar *text; ++ ++ data = gtk_selection_data_get_data (selection); ++ length = gtk_selection_data_get_length (selection); ++ ++ if (!data || length < 0) { ++ gtk_drag_finish (context, FALSE, is_move, time); ++ g_signal_stop_emission_by_name (widget, "drag-data-received"); ++ return; ++ } ++ ++ webkit_editor_move_caret_on_coordinates (E_CONTENT_EDITOR (widget), x, y, FALSE); ++ ++ list_len = length; ++ do { ++ text = e_util_next_uri_from_uri_list ((guchar **) &data, &len, &list_len); ++ webkit_editor_insert_content ( ++ E_CONTENT_EDITOR (wk_editor), ++ text, ++ E_CONTENT_EDITOR_INSERT_TEXT_HTML); ++ g_free (text); ++ } while (list_len); ++ ++ gtk_drag_finish (context, TRUE, is_move, time); ++ g_signal_stop_emission_by_name (widget, "drag-data-received"); ++ return; ++ } ++} ++ ++static gboolean ++webkit_editor_drag_drop_cb (EWebKitEditor *wk_editor, ++ GdkDragContext *context, ++ gint x, ++ gint y, ++ guint time) ++{ ++ wk_editor->priv->drag_data_received_handler_id = g_signal_connect ( ++ wk_editor, "drag-data-received", ++ G_CALLBACK (webkit_editor_drag_data_received_cb), NULL); ++ ++ webkit_editor_set_changed (wk_editor, TRUE); ++ ++ return FALSE; + } + + static void + webkit_editor_web_process_crashed_cb (EWebKitEditor *wk_editor) + { + g_warning ( +- "WebKitWebProcess (page id %ld) for EWebKitEditor crashed", ++ "WebKitWebProcess (page id %" G_GUINT64_FORMAT ") for EWebKitEditor crashed", + webkit_web_view_get_page_id (WEBKIT_WEB_VIEW (wk_editor))); + } + +@@ -6050,10 +6185,22 @@ e_webkit_editor_init (EWebKitEditor *wk_ + G_CALLBACK (webkit_editor_mouse_target_changed_cb), NULL); + + g_signal_connect ( ++ wk_editor, "drag-begin", ++ G_CALLBACK (webkit_editor_drag_begin_cb), NULL); ++ ++ g_signal_connect ( ++ wk_editor, "drag-failed", ++ G_CALLBACK (webkit_editor_drag_failed_cb), NULL); ++ ++ g_signal_connect ( + wk_editor, "drag-end", + G_CALLBACK (webkit_editor_drag_end_cb), NULL); + + g_signal_connect ( ++ wk_editor, "drag-drop", ++ G_CALLBACK (webkit_editor_drag_drop_cb), NULL); ++ ++ g_signal_connect ( + wk_editor, "web-process-crashed", + G_CALLBACK (webkit_editor_web_process_crashed_cb), NULL); + +diff -up evolution-3.22.6/modules/webkit-editor/web-extension/e-composer-dom-functions.c.composer-image-insert-undo evolution-3.22.6/modules/webkit-editor/web-extension/e-composer-dom-functions.c +--- evolution-3.22.6/modules/webkit-editor/web-extension/e-composer-dom-functions.c.composer-image-insert-undo 2017-02-07 17:48:51.000000000 +0100 ++++ evolution-3.22.6/modules/webkit-editor/web-extension/e-composer-dom-functions.c 2017-03-24 15:12:21.896422514 +0100 +@@ -591,247 +591,3 @@ e_composer_dom_get_raw_body_content (EEd + + return webkit_dom_html_element_get_inner_text (body); + } +- +-static void +-insert_nbsp_history_event (WebKitDOMDocument *document, +- EEditorUndoRedoManager *manager, +- gboolean delete, +- guint x, +- guint y) +-{ +- EEditorHistoryEvent *event; +- WebKitDOMDocumentFragment *fragment; +- +- event = g_new0 (EEditorHistoryEvent, 1); +- event->type = HISTORY_AND; +- e_editor_undo_redo_manager_insert_history_event (manager, event); +- +- fragment = webkit_dom_document_create_document_fragment (document); +- webkit_dom_node_append_child ( +- WEBKIT_DOM_NODE (fragment), +- WEBKIT_DOM_NODE ( +- webkit_dom_document_create_text_node (document, UNICODE_NBSP)), +- NULL); +- +- event = g_new0 (EEditorHistoryEvent, 1); +- event->type = HISTORY_DELETE; +- +- if (delete) +- g_object_set_data (G_OBJECT (fragment), "history-delete-key", GINT_TO_POINTER (1)); +- +- event->data.fragment = fragment; +- +- event->before.start.x = x; +- event->before.start.y = y; +- event->before.end.x = x; +- event->before.end.y = y; +- +- event->after.start.x = x; +- event->after.start.y = y; +- event->after.end.x = x; +- event->after.end.y = y; +- +- e_editor_undo_redo_manager_insert_history_event (manager, event); +-} +- +-void +-e_composer_dom_save_drag_and_drop_history (EEditorPage *editor_page) +-{ +- WebKitDOMDocument *document; +- WebKitDOMDocumentFragment *fragment; +- WebKitDOMDOMSelection *dom_selection = NULL; +- WebKitDOMDOMWindow *dom_window = NULL; +- WebKitDOMRange *beginning_of_line = NULL; +- WebKitDOMRange *range = NULL, *range_clone = NULL; +- EEditorHistoryEvent *event; +- EEditorUndoRedoManager *manager; +- gboolean start_to_start, end_to_end; +- gchar *range_text; +- guint x, y; +- +- g_return_if_fail (E_IS_EDITOR_PAGE (editor_page)); +- +- document = e_editor_page_get_document (editor_page); +- manager = e_editor_page_get_undo_redo_manager (editor_page); +- +- if (!(dom_window = webkit_dom_document_get_default_view (document))) +- return; +- +- if (!(dom_selection = webkit_dom_dom_window_get_selection (dom_window))) { +- g_clear_object (&dom_window); +- return; +- } +- +- g_clear_object (&dom_window); +- +- if (webkit_dom_dom_selection_get_range_count (dom_selection) < 1) { +- g_clear_object (&dom_selection); +- return; +- } +- +- /* Obtain the dragged content. */ +- range = webkit_dom_dom_selection_get_range_at (dom_selection, 0, NULL); +- range_clone = webkit_dom_range_clone_range (range, NULL); +- +- /* Create the history event for the content that will +- * be removed by DnD. */ +- event = g_new0 (EEditorHistoryEvent, 1); +- event->type = HISTORY_DELETE; +- +- e_editor_dom_selection_get_coordinates (editor_page, +- &event->before.start.x, +- &event->before.start.y, +- &event->before.end.x, +- &event->before.end.y); +- +- x = event->before.start.x; +- y = event->before.start.y; +- +- event->after.start.x = x; +- event->after.start.y = y; +- event->after.end.x = x; +- event->after.end.y = y; +- +- /* Save the content that will be removed. */ +- fragment = webkit_dom_range_clone_contents (range_clone, NULL); +- +- /* Extend the cloned range to point one character after +- * the selection ends to later check if there is a whitespace +- * after it. */ +- webkit_dom_range_set_end ( +- range_clone, +- webkit_dom_range_get_end_container (range_clone, NULL), +- webkit_dom_range_get_end_offset (range_clone, NULL) + 1, +- NULL); +- range_text = webkit_dom_range_get_text (range_clone); +- +- /* Check if the current selection starts on the beginning +- * of line. */ +- webkit_dom_dom_selection_modify ( +- dom_selection, "extend", "left", "lineboundary"); +- beginning_of_line = webkit_dom_dom_selection_get_range_at (dom_selection, 0, NULL); +- start_to_start = webkit_dom_range_compare_boundary_points ( +- beginning_of_line, 0 /* START_TO_START */, range, NULL) == 0; +- +- /* Restore the selection to state before the check. */ +- webkit_dom_dom_selection_remove_all_ranges (dom_selection); +- webkit_dom_dom_selection_add_range (dom_selection, range); +- g_clear_object (&beginning_of_line); +- +- /* Check if the current selection end on the end of the line. */ +- webkit_dom_dom_selection_modify ( +- dom_selection, "extend", "right", "lineboundary"); +- beginning_of_line = webkit_dom_dom_selection_get_range_at (dom_selection, 0, NULL); +- end_to_end = webkit_dom_range_compare_boundary_points ( +- beginning_of_line, 2 /* END_TO_END */, range, NULL) == 0; +- +- /* Dragging the whole line. */ +- if (start_to_start && end_to_end) { +- WebKitDOMNode *container, *actual_block, *tmp_block; +- +- /* Select the whole line (to the beginning of the next +- * one so we can reuse the undo code while undoing this. +- * Because of this we need to special mark the event +- * with history-drag-and-drop to correct the selection +- * after undoing it (otherwise the beginning of the next +- * line will be selected as well. */ +- webkit_dom_dom_selection_modify ( +- dom_selection, "extend", "right", "character"); +- g_clear_object (&beginning_of_line); +- beginning_of_line = webkit_dom_dom_selection_get_range_at (dom_selection, 0, NULL); +- +- container = webkit_dom_range_get_end_container (range, NULL); +- actual_block = e_editor_dom_get_parent_block_node_from_child (container); +- +- tmp_block = webkit_dom_range_get_end_container (beginning_of_line, NULL); +- if ((tmp_block = e_editor_dom_get_parent_block_node_from_child (tmp_block))) { +- e_editor_dom_selection_get_coordinates (editor_page, +- &event->before.start.x, +- &event->before.start.y, +- &event->before.end.x, +- &event->before.end.y); +- +- /* Create the right content for the history event. */ +- fragment = webkit_dom_document_create_document_fragment (document); +- /* The removed line. */ +- webkit_dom_node_append_child ( +- WEBKIT_DOM_NODE (fragment), +- webkit_dom_node_clone_node_with_error (actual_block, TRUE, NULL), +- NULL); +- /* The following block, but empty. */ +- webkit_dom_node_append_child ( +- WEBKIT_DOM_NODE (fragment), +- webkit_dom_node_clone_node_with_error (tmp_block, FALSE, NULL), +- NULL); +- g_object_set_data ( +- G_OBJECT (fragment), +- "history-drag-and-drop", +- GINT_TO_POINTER (1)); +- /* It should act as a Delete key press. */ +- g_object_set_data ( +- G_OBJECT (fragment), +- "history-delete-key", +- GINT_TO_POINTER (1)); +- } +- } +- +- event->data.fragment = fragment; +- e_editor_undo_redo_manager_insert_history_event (manager, event); +- +- /* Selection is ending on the end of the line, check if +- * there is a space before the selection start. If so, it +- * will be removed and we need create the history event +- * for it. */ +- if (end_to_end) { +- gchar *range_text_start; +- glong start_offset; +- +- start_offset = webkit_dom_range_get_start_offset (range_clone, NULL); +- webkit_dom_range_set_start ( +- range_clone, +- webkit_dom_range_get_start_container (range_clone, NULL), +- start_offset > 0 ? start_offset - 1 : 0, +- NULL); +- +- range_text_start = webkit_dom_range_get_text (range_clone); +- if (g_str_has_prefix (range_text_start, " ") || +- g_str_has_prefix (range_text_start, UNICODE_NBSP)) +- insert_nbsp_history_event (document, manager, FALSE, x, y); +- +- g_free (range_text_start); +- } +- +- /* WebKit removes the space (if presented) after selection and +- * we need to create a new history event for it. */ +- if (g_str_has_suffix (range_text, " ") || +- g_str_has_suffix (range_text, UNICODE_NBSP)) +- insert_nbsp_history_event (document, manager, TRUE, x, y); +- +- g_free (range_text); +- +- /* Restore the selection to original state. */ +- webkit_dom_dom_selection_remove_all_ranges (dom_selection); +- webkit_dom_dom_selection_add_range (dom_selection, range); +- g_clear_object (&beginning_of_line); +- +- /* All the things above were about removing the content, +- * create an AND event to continue later with inserting +- * the dropped content. */ +- event = g_new0 (EEditorHistoryEvent, 1); +- event->type = HISTORY_AND; +- e_editor_undo_redo_manager_insert_history_event (manager, event); +- +- g_clear_object (&dom_selection); +- +- g_clear_object (&range); +- g_clear_object (&range_clone); +-} +- +-void +-e_composer_dom_clean_after_drag_and_drop (EEditorPage *editor_page) +-{ +- g_return_if_fail (E_IS_EDITOR_PAGE (editor_page)); +- +- e_editor_dom_save_history_for_drop (editor_page); +- e_editor_dom_check_magic_links (editor_page, FALSE); +-} +diff -up evolution-3.22.6/modules/webkit-editor/web-extension/e-composer-dom-functions.h.composer-image-insert-undo evolution-3.22.6/modules/webkit-editor/web-extension/e-composer-dom-functions.h +--- evolution-3.22.6/modules/webkit-editor/web-extension/e-composer-dom-functions.h.composer-image-insert-undo 2016-09-19 10:22:58.000000000 +0200 ++++ evolution-3.22.6/modules/webkit-editor/web-extension/e-composer-dom-functions.h 2017-03-24 15:12:21.896422514 +0100 +@@ -38,10 +38,6 @@ gchar * e_composer_dom_get_raw_body_con + (EEditorPage *editor_page); + gchar * e_composer_dom_get_raw_body_content + (EEditorPage *editor_page); +-void e_composer_dom_save_drag_and_drop_history +- (EEditorPage *editor_page); +-void e_composer_dom_clean_after_drag_and_drop +- (EEditorPage *editor_page); + + G_END_DECLS + +diff -up evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-dom-functions.c.composer-image-insert-undo evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-dom-functions.c +--- evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-dom-functions.c.composer-image-insert-undo 2017-03-24 15:12:21.891422514 +0100 ++++ evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-dom-functions.c 2017-03-24 15:13:16.839420073 +0100 +@@ -3408,6 +3408,7 @@ e_editor_dom_body_input_event_process (E + } + + if (WEBKIT_DOM_IS_TEXT (node)) { ++ WebKitDOMElement *parent; + gchar *text; + + text = webkit_dom_node_get_text_content (node); +@@ -3429,6 +3430,43 @@ e_editor_dom_body_input_event_process (E + e_editor_dom_check_magic_links (editor_page, FALSE); + } + } ++ ++ parent = webkit_dom_node_get_parent_element (node); ++ if (element_has_class (parent, "-x-evo-resizable-wrapper") || ++ element_has_class (parent, "-x-evo-smiley-wrapper")) { ++ WebKitDOMDOMWindow *dom_window = NULL; ++ WebKitDOMDOMSelection *dom_selection = NULL; ++ WebKitDOMNode *prev_sibling; ++ gboolean writing_before = TRUE; ++ ++ dom_window = webkit_dom_document_get_default_view (document); ++ dom_selection = webkit_dom_dom_window_get_selection (dom_window); ++ ++ prev_sibling = webkit_dom_node_get_previous_sibling (node); ++ if (prev_sibling && WEBKIT_DOM_IS_HTML_IMAGE_ELEMENT (prev_sibling)) ++ writing_before = FALSE; ++ ++ webkit_dom_node_insert_before ( ++ webkit_dom_node_get_parent_node (WEBKIT_DOM_NODE (parent)), ++ node, ++ writing_before ? ++ WEBKIT_DOM_NODE (parent) : ++ webkit_dom_node_get_next_sibling (WEBKIT_DOM_NODE (parent)), ++ NULL); ++ ++ g_clear_object (&range); ++ ++ range = webkit_dom_document_create_range (document); ++ webkit_dom_range_select_node_contents (range, node, NULL); ++ webkit_dom_range_collapse (range, FALSE, NULL); ++ ++ webkit_dom_dom_selection_remove_all_ranges (dom_selection); ++ webkit_dom_dom_selection_add_range (dom_selection, range); ++ ++ g_clear_object (&dom_window); ++ g_clear_object (&dom_selection); ++ } ++ + g_free (text); + } + } +@@ -5751,6 +5789,94 @@ body_compositionend_event_cb (WebKitDOME + } + + static void ++body_drop_event_cb (WebKitDOMElement *element, ++ WebKitDOMUIEvent *event, ++ EEditorPage *editor_page) ++{ ++ g_return_if_fail (E_IS_EDITOR_PAGE (editor_page)); ++ ++ if (e_editor_page_is_pasting_content_from_itself (editor_page)) { ++ EEditorUndoRedoManager *manager; ++ EEditorHistoryEvent *and_event, *event = NULL; ++ ++ /* There is a weird thing going on and I still don't know if it's ++ * caused by WebKit or Evolution. If dragging content around the ++ * editor sometimes the current selection is changed. The problem ++ * is that if moving the content, then WebKit is removing the ++ * currently selected content and at that point it could be a ++ * different one from the dragged one. So before the drop is ++ * performed we restore the selection to the state when the ++ * drag was initiated. */ ++ manager = e_editor_page_get_undo_redo_manager (editor_page); ++ and_event = e_editor_undo_redo_manager_get_current_history_event (manager); ++ while (and_event && and_event->type == HISTORY_AND) { ++ event = e_editor_undo_redo_manager_get_next_history_event_for (manager, and_event); ++ and_event = e_editor_undo_redo_manager_get_next_history_event_for (manager, event); ++ } ++ ++ if (event) ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->before); ++ ++ e_editor_dom_save_history_for_drop (editor_page); ++ } ++} ++ ++static void ++body_dragstart_event_cb (WebKitDOMElement *element, ++ WebKitDOMUIEvent *event, ++ EEditorPage *editor_page) ++{ ++ g_return_if_fail (E_IS_EDITOR_PAGE (editor_page)); ++ ++ e_editor_dom_remove_input_event_listener_from_body (editor_page); ++ e_editor_page_set_pasting_content_from_itself (editor_page, TRUE); ++ e_editor_dom_save_history_for_drag (editor_page); ++} ++ ++static void ++body_dragend_event_cb (WebKitDOMElement *element, ++ WebKitDOMUIEvent *event, ++ EEditorPage *editor_page) ++{ ++ EEditorHistoryEvent *ev; ++ EEditorUndoRedoManager *manager; ++ ++ g_return_if_fail (E_IS_EDITOR_PAGE (editor_page)); ++ ++ manager = e_editor_page_get_undo_redo_manager (editor_page); ++ if (e_editor_page_is_pasting_content_from_itself (editor_page) && ++ (ev = e_editor_undo_redo_manager_get_current_history_event (manager))) { ++ if (ev->type == HISTORY_INSERT_HTML && ++ ev->after.start.x == 0 && ev->after.start.y == 0 && ++ ev->after.end.x == 0 && ev->after.end.y == 0) { ++ e_editor_dom_selection_get_coordinates (editor_page, ++ &ev->after.start.x, ++ &ev->after.start.y, ++ &ev->after.end.x, ++ &ev->after.end.y); ++ ev->before.start.x = ev->after.start.x; ++ ev->before.start.y = ev->after.start.y; ++ ev->before.end.x = ev->after.start.x; ++ ev->before.end.y = ev->after.start.y; ++ e_editor_dom_force_spell_check_in_viewport (editor_page); ++ } else { ++ /* Drag and Drop was cancelled */ ++ while (ev && ev->type == HISTORY_AND) { ++ e_editor_undo_redo_manager_remove_current_history_event (manager); ++ ev = e_editor_undo_redo_manager_get_current_history_event (manager); ++ /* Basically the same as in body_drop_event_cb(). See the comment there. */ ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, ev->before); ++ e_editor_undo_redo_manager_remove_current_history_event (manager); ++ ev = e_editor_undo_redo_manager_get_current_history_event (manager); ++ } ++ } ++ } ++ ++ e_editor_page_set_pasting_content_from_itself (editor_page, FALSE); ++ e_editor_dom_register_input_event_listener_on_body (editor_page); ++} ++ ++static void + register_html_events_handlers (EEditorPage *editor_page, + WebKitDOMHTMLElement *body) + { +@@ -5790,6 +5916,27 @@ register_html_events_handlers (EEditorPa + G_CALLBACK (body_compositionend_event_cb), + FALSE, + editor_page); ++ ++ webkit_dom_event_target_add_event_listener ( ++ WEBKIT_DOM_EVENT_TARGET (body), ++ "drop", ++ G_CALLBACK (body_drop_event_cb), ++ FALSE, ++ editor_page); ++ ++ webkit_dom_event_target_add_event_listener ( ++ WEBKIT_DOM_EVENT_TARGET (body), ++ "dragstart", ++ G_CALLBACK (body_dragstart_event_cb), ++ FALSE, ++ editor_page); ++ ++ webkit_dom_event_target_add_event_listener ( ++ WEBKIT_DOM_EVENT_TARGET (body), ++ "dragend", ++ G_CALLBACK (body_dragend_event_cb), ++ FALSE, ++ editor_page); + } + + void +@@ -8523,11 +8670,25 @@ e_editor_dom_process_content_after_load + + if (e_editor_page_get_convert_in_situ (editor_page)) { + e_editor_dom_convert_content (editor_page, NULL); ++ /* The BODY could be replaced during the conversion */ ++ body = webkit_dom_document_get_body (document); + /* Make the quote marks non-selectable. */ + e_editor_dom_disable_quote_marks_select (editor_page); + dom_set_links_active (document, FALSE); + e_editor_page_set_convert_in_situ (editor_page, FALSE); + ++ /* The composer body could be empty in some case (loading an empty string ++ * or empty HTML). In that case create the initial paragraph. */ ++ if (!webkit_dom_node_get_first_child (WEBKIT_DOM_NODE (body))) { ++ WebKitDOMElement *paragraph; ++ ++ paragraph = e_editor_dom_prepare_paragraph (editor_page, TRUE); ++ webkit_dom_element_set_id (paragraph, "-x-evo-input-start"); ++ webkit_dom_node_append_child ( ++ WEBKIT_DOM_NODE (body), WEBKIT_DOM_NODE (paragraph), NULL); ++ e_editor_dom_selection_restore (editor_page); ++ } ++ + goto out; + } + +@@ -8933,35 +9094,6 @@ e_editor_dom_insert_html (EEditorPage *e + if (strstr (html_text, "id=\"-x-evo-selection-start-marker\"")) + e_editor_dom_selection_restore (editor_page); + +- if (!html_mode) { +- WebKitDOMNodeList *list = NULL; +- gint ii, length; +- +- list = webkit_dom_document_query_selector_all ( +- document, "span[style^=font-family]", NULL); +- length = webkit_dom_node_list_get_length (list); +- if (length > 0) +- e_editor_dom_selection_save (editor_page); +- +- for (ii = length; ii--;) { +- WebKitDOMNode *span, *child; +- +- span = webkit_dom_node_list_item (list, ii); +- while ((child = webkit_dom_node_get_first_child (span))) +- webkit_dom_node_insert_before ( +- webkit_dom_node_get_parent_node (span), +- child, +- span, +- NULL); +- +- remove_node (span); +- } +- g_clear_object (&list); +- +- if (length > 0) +- e_editor_dom_selection_restore (editor_page); +- } +- + e_editor_dom_check_magic_links (editor_page, FALSE); + e_editor_dom_scroll_to_caret (editor_page); + e_editor_dom_force_spell_check_in_viewport (editor_page); +@@ -10833,6 +10965,240 @@ e_editor_dom_get_caret_position (EEditor + return ret_val; + } + ++static void ++insert_nbsp_history_event (WebKitDOMDocument *document, ++ EEditorUndoRedoManager *manager, ++ gboolean delete, ++ guint x, ++ guint y) ++{ ++ EEditorHistoryEvent *event; ++ WebKitDOMDocumentFragment *fragment; ++ ++ event = g_new0 (EEditorHistoryEvent, 1); ++ event->type = HISTORY_AND; ++ e_editor_undo_redo_manager_insert_history_event (manager, event); ++ ++ fragment = webkit_dom_document_create_document_fragment (document); ++ webkit_dom_node_append_child ( ++ WEBKIT_DOM_NODE (fragment), ++ WEBKIT_DOM_NODE ( ++ webkit_dom_document_create_text_node (document, UNICODE_NBSP)), ++ NULL); ++ ++ event = g_new0 (EEditorHistoryEvent, 1); ++ event->type = HISTORY_DELETE; ++ ++ if (delete) ++ g_object_set_data (G_OBJECT (fragment), "history-delete-key", GINT_TO_POINTER (1)); ++ ++ event->data.fragment = fragment; ++ ++ event->before.start.x = x; ++ event->before.start.y = y; ++ event->before.end.x = x; ++ event->before.end.y = y; ++ ++ event->after.start.x = x; ++ event->after.start.y = y; ++ event->after.end.x = x; ++ event->after.end.y = y; ++ ++ e_editor_undo_redo_manager_insert_history_event (manager, event); ++} ++void ++e_editor_dom_save_history_for_drag (EEditorPage *editor_page) ++{ ++ WebKitDOMDocument *document; ++ WebKitDOMDocumentFragment *fragment; ++ WebKitDOMDOMSelection *dom_selection = NULL; ++ WebKitDOMDOMWindow *dom_window = NULL; ++ WebKitDOMRange *beginning_of_line = NULL; ++ WebKitDOMRange *range = NULL, *range_clone = NULL; ++ EEditorHistoryEvent *event; ++ EEditorUndoRedoManager *manager; ++ gboolean start_to_start = FALSE, end_to_end = FALSE; ++ gchar *range_text; ++ guint x, y; ++ ++ g_return_if_fail (E_IS_EDITOR_PAGE (editor_page)); ++ ++ document = e_editor_page_get_document (editor_page); ++ manager = e_editor_page_get_undo_redo_manager (editor_page); ++ ++ if (!(dom_window = webkit_dom_document_get_default_view (document))) ++ return; ++ ++ if (!(dom_selection = webkit_dom_dom_window_get_selection (dom_window))) { ++ g_clear_object (&dom_window); ++ return; ++ } ++ ++ g_clear_object (&dom_window); ++ ++ if (webkit_dom_dom_selection_get_range_count (dom_selection) < 1) { ++ g_clear_object (&dom_selection); ++ return; ++ } ++ ++ /* Obtain the dragged content. */ ++ range = webkit_dom_dom_selection_get_range_at (dom_selection, 0, NULL); ++ range_clone = webkit_dom_range_clone_range (range, NULL); ++ ++ /* Create the history event for the content that will ++ * be removed by DnD. */ ++ event = g_new0 (EEditorHistoryEvent, 1); ++ event->type = HISTORY_DELETE; ++ ++ e_editor_dom_selection_get_coordinates (editor_page, ++ &event->before.start.x, ++ &event->before.start.y, ++ &event->before.end.x, ++ &event->before.end.y); ++ ++ x = event->before.start.x; ++ y = event->before.start.y; ++ ++ event->after.start.x = x; ++ event->after.start.y = y; ++ event->after.end.x = x; ++ event->after.end.y = y; ++ ++ /* Save the content that will be removed. */ ++ fragment = webkit_dom_range_clone_contents (range_clone, NULL); ++ ++ /* Extend the cloned range to point one character after ++ * the selection ends to later check if there is a whitespace ++ * after it. */ ++ webkit_dom_range_set_end ( ++ range_clone, ++ webkit_dom_range_get_end_container (range_clone, NULL), ++ webkit_dom_range_get_end_offset (range_clone, NULL) + 1, ++ NULL); ++ range_text = webkit_dom_range_get_text (range_clone); ++ ++ /* Check if the current selection starts on the beginning of line. */ ++ webkit_dom_dom_selection_modify ( ++ dom_selection, "extend", "left", "lineboundary"); ++ beginning_of_line = webkit_dom_dom_selection_get_range_at (dom_selection, 0, NULL); ++ start_to_start = webkit_dom_range_compare_boundary_points ( ++ beginning_of_line, WEBKIT_DOM_RANGE_START_TO_START, range, NULL) == 0; ++ ++ /* Restore the selection to state before the check. */ ++ webkit_dom_dom_selection_remove_all_ranges (dom_selection); ++ webkit_dom_dom_selection_add_range (dom_selection, range); ++ g_clear_object (&beginning_of_line); ++ ++ /* Check if the current selection end on the end of the line. */ ++ webkit_dom_dom_selection_modify ( ++ dom_selection, "extend", "right", "lineboundary"); ++ beginning_of_line = webkit_dom_dom_selection_get_range_at (dom_selection, 0, NULL); ++ end_to_end = webkit_dom_range_compare_boundary_points ( ++ beginning_of_line, WEBKIT_DOM_RANGE_END_TO_END, range, NULL) == 0; ++ ++ /* Dragging the whole line. */ ++ if (start_to_start && end_to_end) { ++ WebKitDOMNode *container, *actual_block, *tmp_block; ++ ++ /* Select the whole line (to the beginning of the next ++ * one so we can reuse the undo code while undoing this. ++ * Because of this we need to special mark the event ++ * with history-drag-and-drop to correct the selection ++ * after undoing it (otherwise the beginning of the next ++ * line will be selected as well. */ ++ webkit_dom_dom_selection_modify ( ++ dom_selection, "extend", "right", "character"); ++ g_clear_object (&beginning_of_line); ++ beginning_of_line = webkit_dom_dom_selection_get_range_at (dom_selection, 0, NULL); ++ ++ container = webkit_dom_range_get_end_container (range, NULL); ++ actual_block = e_editor_dom_get_parent_block_node_from_child (container); ++ ++ tmp_block = webkit_dom_range_get_end_container (beginning_of_line, NULL); ++ if ((tmp_block = e_editor_dom_get_parent_block_node_from_child (tmp_block))) { ++ e_editor_dom_selection_get_coordinates (editor_page, ++ &event->before.start.x, ++ &event->before.start.y, ++ &event->before.end.x, ++ &event->before.end.y); ++ ++ /* Create the right content for the history event. */ ++ fragment = webkit_dom_document_create_document_fragment (document); ++ /* The removed line. */ ++ webkit_dom_node_append_child ( ++ WEBKIT_DOM_NODE (fragment), ++ webkit_dom_node_clone_node_with_error (actual_block, TRUE, NULL), ++ NULL); ++ /* The following block, but empty. */ ++ webkit_dom_node_append_child ( ++ WEBKIT_DOM_NODE (fragment), ++ webkit_dom_node_clone_node_with_error (tmp_block, FALSE, NULL), ++ NULL); ++ g_object_set_data ( ++ G_OBJECT (fragment), ++ "history-drag-and-drop", ++ GINT_TO_POINTER (1)); ++ } ++ } ++ /* It should act as a Delete key press. */ ++ g_object_set_data (G_OBJECT (fragment), "history-delete-key", GINT_TO_POINTER (1)); ++ ++ event->data.fragment = fragment; ++ e_editor_undo_redo_manager_insert_history_event (manager, event); ++ ++ /* WebKit removes the space (if presented) after selection and ++ * we need to create a new history event for it. */ ++ if (g_str_has_suffix (range_text, " ") || ++ g_str_has_suffix (range_text, UNICODE_NBSP)) ++ insert_nbsp_history_event (document, manager, TRUE, x, y); ++ else { ++ /* If there is a space before the selection WebKit will remove ++ * it as well unless there is a space after the selection. */ ++ gchar *range_text_start; ++ glong start_offset; ++ ++ start_offset = webkit_dom_range_get_start_offset (range_clone, NULL); ++ webkit_dom_range_set_start ( ++ range_clone, ++ webkit_dom_range_get_start_container (range_clone, NULL), ++ start_offset > 0 ? start_offset - 1 : 0, ++ NULL); ++ ++ range_text_start = webkit_dom_range_get_text (range_clone); ++ if (g_str_has_prefix (range_text_start, " ") || ++ g_str_has_prefix (range_text_start, UNICODE_NBSP)) { ++ if (!end_to_end) { ++ webkit_dom_dom_selection_collapse_to_start (dom_selection, NULL); ++ webkit_dom_dom_selection_modify ( ++ dom_selection, "move", "backward", "character"); ++ e_editor_dom_selection_get_coordinates (editor_page, &x, &y, &x, &y); ++ } ++ insert_nbsp_history_event (document, manager, TRUE, x, y); ++ } ++ ++ g_free (range_text_start); ++ } ++ ++ g_free (range_text); ++ ++ /* Restore the selection to original state. */ ++ webkit_dom_dom_selection_remove_all_ranges (dom_selection); ++ webkit_dom_dom_selection_add_range (dom_selection, range); ++ g_clear_object (&beginning_of_line); ++ ++ /* All the things above were about removing the content, ++ * create an AND event to continue later with inserting ++ * the dropped content. */ ++ event = g_new0 (EEditorHistoryEvent, 1); ++ event->type = HISTORY_AND; ++ e_editor_undo_redo_manager_insert_history_event (manager, event); ++ ++ g_clear_object (&dom_selection); ++ ++ g_clear_object (&range); ++ g_clear_object (&range_clone); ++} ++ + void + e_editor_dom_save_history_for_drop (EEditorPage *editor_page) + { +@@ -10880,14 +11246,6 @@ e_editor_dom_save_history_for_drop (EEdi + + range = webkit_dom_dom_selection_get_range_at (dom_selection, 0, NULL); + +- /* Remove the last inserted history event as this one was inserted in +- * body_input_event_cb and is wrong as its type is HISTORY_INPUT. */ +- /* FIXME we could probably disable the HTML input event callback while +- * doing DnD within the view */ +- event = e_editor_undo_redo_manager_get_current_history_event (manager); +- if (event && event->type == HISTORY_INPUT) +- e_editor_undo_redo_manager_remove_current_history_event (manager); +- + event = g_new0 (EEditorHistoryEvent, 1); + event->type = HISTORY_INSERT_HTML; + +@@ -10897,68 +11255,12 @@ e_editor_dom_save_history_for_drop (EEdi + /* Get the HTML content of the dropped content. */ + event->data.string.to = dom_get_node_inner_html (WEBKIT_DOM_NODE (fragment)); + +- e_editor_dom_selection_get_coordinates (editor_page, +- &event->before.start.x, +- &event->before.start.y, +- &event->before.end.x, +- &event->before.end.y); +- +- event->before.end.x = event->before.start.x; +- event->before.end.y = event->before.start.y; +- +- if (length > 0) +- webkit_dom_dom_selection_collapse_to_start (dom_selection, NULL); +- else +- webkit_dom_dom_selection_collapse_to_end (dom_selection, NULL); +- +- e_editor_dom_selection_get_coordinates (editor_page, +- &event->after.start.x, +- &event->after.start.y, +- &event->after.end.x, +- &event->after.end.y); +- + e_editor_undo_redo_manager_insert_history_event (manager, event); + +- if (!e_editor_page_get_html_mode (editor_page)) { +- list = webkit_dom_document_query_selector_all ( +- document, "span[style^=font-family]", NULL); +- length = webkit_dom_node_list_get_length (list); +- if (length > 0) +- e_editor_dom_selection_save (editor_page); +- +- for (ii = length; ii--;) { +- WebKitDOMNode *span, *child; +- +- span = webkit_dom_node_list_item (list, ii); +- while ((child = webkit_dom_node_get_first_child (span))) +- webkit_dom_node_insert_before ( +- webkit_dom_node_get_parent_node (span), +- child, +- span, +- NULL); +- +- remove_node (span); +- } +- g_clear_object (&list); +- +- if (length > 0) +- e_editor_dom_selection_restore (editor_page); +- } +- +- e_editor_dom_force_spell_check_in_viewport (editor_page); +- + g_clear_object (&range); + g_clear_object (&dom_selection); + } + +-void +-e_editor_dom_drag_and_drop_end (EEditorPage *editor_page) +-{ +- g_return_if_fail (E_IS_EDITOR_PAGE (editor_page)); +- +- e_editor_dom_save_history_for_drop (editor_page); +-} +- + static void + dom_set_link_color_in_document (EEditorPage *editor_page, + const gchar *color, +@@ -17086,6 +17388,28 @@ e_editor_dom_selection_set_alignment (EE + e_editor_page_emit_content_changed (editor_page); + } + ++void ++e_editor_dom_insert_replace_all_history_event (EEditorPage *editor_page, ++ const gchar *search_text, ++ const gchar *replacement) ++{ ++ EEditorUndoRedoManager *manager; ++ ++ g_return_if_fail (E_IS_EDITOR_PAGE (editor_page)); ++ ++ manager = e_editor_page_get_undo_redo_manager (editor_page); ++ ++ if (!e_editor_undo_redo_manager_is_operation_in_progress (manager)) { ++ EEditorHistoryEvent *ev = g_new0 (EEditorHistoryEvent, 1); ++ ev->type = HISTORY_REPLACE_ALL; ++ ++ ev->data.string.from = g_strdup (search_text); ++ ev->data.string.to = g_strdup (replacement); ++ ++ e_editor_undo_redo_manager_insert_history_event (manager, ev); ++ } ++} ++ + /* + * e_html_editor_selection_replace: + * @selection: an #EEditorSelection +@@ -17099,14 +17423,17 @@ e_editor_dom_selection_replace (EEditorP + { + EEditorHistoryEvent *ev = NULL; + EEditorUndoRedoManager *manager; ++ WebKitDOMRange *range = NULL; + + g_return_if_fail (E_IS_EDITOR_PAGE (editor_page)); + + manager = e_editor_page_get_undo_redo_manager (editor_page); + +- if (!e_editor_undo_redo_manager_is_operation_in_progress (manager)) { +- WebKitDOMRange *range = NULL; ++ if (!(range = e_editor_dom_get_current_range (editor_page)) || ++ e_editor_dom_selection_is_collapsed (editor_page)) ++ return; + ++ if (!e_editor_undo_redo_manager_is_operation_in_progress (manager)) { + ev = g_new0 (EEditorHistoryEvent, 1); + ev->type = HISTORY_REPLACE; + +@@ -17116,14 +17443,12 @@ e_editor_dom_selection_replace (EEditorP + &ev->before.end.x, + &ev->before.end.y); + +- range = e_editor_dom_get_current_range (editor_page); +- + ev->data.string.from = webkit_dom_range_get_text (range); + ev->data.string.to = g_strdup (replacement); +- +- g_clear_object (&range); + } + ++ g_clear_object (&range); ++ + e_editor_dom_exec_command (editor_page, E_CONTENT_EDITOR_COMMAND_INSERT_TEXT, replacement); + + if (ev) { +@@ -17382,3 +17707,98 @@ e_editor_dom_selection_get_coordinates ( + *start_y += 1; + *end_y += 1; + } ++ ++WebKitDOMRange * ++e_editor_dom_get_range_for_point (WebKitDOMDocument *document, ++ EEditorSelectionPoint point) ++{ ++ glong scroll_left, scroll_top; ++ WebKitDOMHTMLElement *body; ++ WebKitDOMRange *range = NULL; ++ ++ body = webkit_dom_document_get_body (document); ++ scroll_left = webkit_dom_element_get_scroll_left (WEBKIT_DOM_ELEMENT (body)); ++ scroll_top = webkit_dom_element_get_scroll_top (WEBKIT_DOM_ELEMENT (body)); ++ ++ range = webkit_dom_document_caret_range_from_point ( ++ document, point.x - scroll_left, point.y - scroll_top); ++ ++ /* The point is outside the viewport, scroll to it. */ ++ if (!range) { ++ WebKitDOMDOMWindow *dom_window = NULL; ++ ++ dom_window = webkit_dom_document_get_default_view (document); ++ webkit_dom_dom_window_scroll_to (dom_window, point.x, point.y); ++ ++ scroll_left = webkit_dom_element_get_scroll_left (WEBKIT_DOM_ELEMENT (body)); ++ scroll_top = webkit_dom_element_get_scroll_top (WEBKIT_DOM_ELEMENT (body)); ++ range = webkit_dom_document_caret_range_from_point ( ++ document, point.x - scroll_left, point.y - scroll_top); ++ g_clear_object (&dom_window); ++ } ++ ++ return range; ++} ++ ++void ++e_editor_dom_selection_restore_to_history_event_state (EEditorPage *editor_page, ++ EEditorSelection selection_state) ++{ ++ WebKitDOMDocument *document; ++ WebKitDOMDOMWindow *dom_window = NULL; ++ WebKitDOMDOMSelection *dom_selection = NULL; ++ WebKitDOMElement *element, *tmp; ++ WebKitDOMRange *range = NULL; ++ gboolean was_collapsed = FALSE; ++ ++ g_return_if_fail (E_IS_EDITOR_PAGE (editor_page)); ++ ++ document = e_editor_page_get_document (editor_page); ++ dom_window = webkit_dom_document_get_default_view (document); ++ dom_selection = webkit_dom_dom_window_get_selection (dom_window); ++ g_clear_object (&dom_window); ++ ++ /* Restore the selection how it was before the event occured. */ ++ range = e_editor_dom_get_range_for_point (document, selection_state.start); ++ webkit_dom_dom_selection_remove_all_ranges (dom_selection); ++ webkit_dom_dom_selection_add_range (dom_selection, range); ++ g_clear_object (&range); ++ ++ was_collapsed = selection_state.start.x == selection_state.end.x; ++ was_collapsed = was_collapsed && selection_state.start.y == selection_state.end.y; ++ if (was_collapsed) { ++ g_clear_object (&dom_selection); ++ return; ++ } ++ ++ e_editor_dom_selection_save (editor_page); ++ ++ element = webkit_dom_document_get_element_by_id ( ++ document, "-x-evo-selection-end-marker"); ++ ++ remove_node (WEBKIT_DOM_NODE (element)); ++ ++ element = webkit_dom_document_get_element_by_id ( ++ document, "-x-evo-selection-start-marker"); ++ ++ webkit_dom_element_remove_attribute (element, "id"); ++ ++ range = e_editor_dom_get_range_for_point (document, selection_state.end); ++ webkit_dom_dom_selection_remove_all_ranges (dom_selection); ++ webkit_dom_dom_selection_add_range (dom_selection, range); ++ g_clear_object (&range); ++ ++ e_editor_dom_selection_save (editor_page); ++ ++ tmp = webkit_dom_document_get_element_by_id ( ++ document, "-x-evo-selection-start-marker"); ++ ++ remove_node (WEBKIT_DOM_NODE (tmp)); ++ ++ webkit_dom_element_set_id ( ++ element, "-x-evo-selection-start-marker"); ++ ++ e_editor_dom_selection_restore (editor_page); ++ ++ g_clear_object (&dom_selection); ++} +diff -up evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-dom-functions.h.composer-image-insert-undo evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-dom-functions.h +--- evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-dom-functions.h.composer-image-insert-undo 2016-09-19 10:22:58.000000000 +0200 ++++ evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-dom-functions.h 2017-03-24 15:12:21.898422514 +0100 +@@ -24,6 +24,7 @@ + #undef E_UTIL_INCLUDE_WITHOUT_WEBKIT + + #include "e-editor-page.h" ++#include "e-editor-undo-redo-manager.h" + + /* stephenhay from https://mathiasbynens.be/demo/url-regex */ + #define URL_PROTOCOLS "news|telnet|nntp|file|https?|s?ftp|webcal|localhost|ssh" +@@ -158,7 +159,6 @@ void e_editor_dom_process_content_after + (EEditorPage *editor_page); + guint e_editor_dom_get_caret_offset (EEditorPage *editor_page); + guint e_editor_dom_get_caret_position (EEditorPage *editor_page); +-void e_editor_dom_drag_and_drop_end (EEditorPage *editor_page); + void e_editor_dom_set_link_color (EEditorPage *editor_page, + const gchar *color); + void e_editor_dom_set_visited_link_color +@@ -208,6 +208,8 @@ WebKitDOMElement * + WebKitDOMElement *element); + gint e_editor_dom_get_citation_level (WebKitDOMNode *node, + gboolean set_plaintext_quoted); ++void e_editor_dom_save_history_for_drag ++ (EEditorPage *editor_page); + void e_editor_dom_save_history_for_drop + (EEditorPage *editor_page); + void e_editor_dom_fix_file_uri_images +@@ -347,6 +349,10 @@ EContentEditorAlignment + void e_editor_dom_selection_set_alignment + (EEditorPage *editor_page, + EContentEditorAlignment alignment); ++void e_editor_dom_insert_replace_all_history_event ++ (EEditorPage *editor_page, ++ const gchar *search_text, ++ const gchar *replacement); + void e_editor_dom_selection_replace (EEditorPage *editor_page, + const gchar *replacement); + void e_editor_dom_replace_caret_word (EEditorPage *editor_page, +@@ -370,7 +376,13 @@ void e_editor_dom_selection_get_coordin + guint *end_y); + gboolean e_editor_dom_is_selection_position_node + (WebKitDOMNode *node); +- ++WebKitDOMRange * ++ e_editor_dom_get_range_for_point ++ (WebKitDOMDocument *document, ++ EEditorSelectionPoint point); ++void e_editor_dom_selection_restore_to_history_event_state ++ (EEditorPage *editor_page, ++ EEditorSelection selection_state); + G_END_DECLS + + #endif /* E_EDITOR_DOM_FUNCTIONS_H */ +diff -up evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-undo-redo-manager.c.composer-image-insert-undo evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-undo-redo-manager.c +--- evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-undo-redo-manager.c.composer-image-insert-undo 2017-03-24 15:12:21.891422514 +0100 ++++ evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-undo-redo-manager.c 2017-03-24 15:12:21.899422514 +0100 +@@ -113,114 +113,19 @@ editor_undo_redo_manager_ref_editor_page + return g_weak_ref_get (&manager->priv->editor_page); + } + +-static WebKitDOMRange * +-get_range_for_point (WebKitDOMDocument *document, +- EEditorSelectionPoint point) +-{ +- glong scroll_left, scroll_top; +- WebKitDOMHTMLElement *body; +- WebKitDOMRange *range = NULL; +- +- body = webkit_dom_document_get_body (document); +- scroll_left = webkit_dom_element_get_scroll_left (WEBKIT_DOM_ELEMENT (body)); +- scroll_top = webkit_dom_element_get_scroll_top (WEBKIT_DOM_ELEMENT (body)); +- +- range = webkit_dom_document_caret_range_from_point ( +- document, point.x - scroll_left, point.y - scroll_top); +- +- /* The point is outside the viewport, scroll to it. */ +- if (!range) { +- WebKitDOMDOMWindow *dom_window = NULL; +- +- dom_window = webkit_dom_document_get_default_view (document); +- webkit_dom_dom_window_scroll_to (dom_window, point.x, point.y); +- +- scroll_left = webkit_dom_element_get_scroll_left (WEBKIT_DOM_ELEMENT (body)); +- scroll_top = webkit_dom_element_get_scroll_top (WEBKIT_DOM_ELEMENT (body)); +- range = webkit_dom_document_caret_range_from_point ( +- document, point.x - scroll_left, point.y - scroll_top); +- g_clear_object (&dom_window); +- } +- +- return range; +-} +- +-static void +-restore_selection_to_history_event_state (EEditorPage *editor_page, +- EEditorSelection selection_state) +-{ +- WebKitDOMDocument *document; +- WebKitDOMDOMWindow *dom_window = NULL; +- WebKitDOMDOMSelection *dom_selection = NULL; +- WebKitDOMElement *element, *tmp; +- WebKitDOMRange *range = NULL; +- gboolean was_collapsed = FALSE; +- +- g_return_if_fail (E_IS_EDITOR_PAGE (editor_page)); +- +- document = e_editor_page_get_document (editor_page); +- dom_window = webkit_dom_document_get_default_view (document); +- dom_selection = webkit_dom_dom_window_get_selection (dom_window); +- g_clear_object (&dom_window); +- +- /* Restore the selection how it was before the event occured. */ +- range = get_range_for_point (document, selection_state.start); +- webkit_dom_dom_selection_remove_all_ranges (dom_selection); +- webkit_dom_dom_selection_add_range (dom_selection, range); +- g_clear_object (&range); +- +- was_collapsed = selection_state.start.x == selection_state.end.x; +- was_collapsed = was_collapsed && selection_state.start.y == selection_state.end.y; +- if (was_collapsed) { +- g_clear_object (&dom_selection); +- return; +- } +- +- e_editor_dom_selection_save (editor_page); +- +- element = webkit_dom_document_get_element_by_id ( +- document, "-x-evo-selection-end-marker"); +- +- remove_node (WEBKIT_DOM_NODE (element)); +- +- element = webkit_dom_document_get_element_by_id ( +- document, "-x-evo-selection-start-marker"); +- +- webkit_dom_element_remove_attribute (element, "id"); +- +- range = get_range_for_point (document, selection_state.end); +- webkit_dom_dom_selection_remove_all_ranges (dom_selection); +- webkit_dom_dom_selection_add_range (dom_selection, range); +- g_clear_object (&range); +- +- e_editor_dom_selection_save (editor_page); +- +- tmp = webkit_dom_document_get_element_by_id ( +- document, "-x-evo-selection-start-marker"); +- +- remove_node (WEBKIT_DOM_NODE (tmp)); +- +- webkit_dom_element_set_id ( +- element, "-x-evo-selection-start-marker"); +- +- e_editor_dom_selection_restore (editor_page); +- +- g_clear_object (&dom_selection); +-} +- + static void + print_node_inner_html (WebKitDOMNode *node) + { + gchar *inner_html; + + if (!node) { +- printf (" none\n"); ++ printf (" content: none\n"); + return; + } + + inner_html = dom_get_node_inner_html (node); + +- printf (" '%s'\n", inner_html); ++ printf (" content: '%s'\n", inner_html); + + g_free (inner_html); + } +@@ -230,14 +135,22 @@ print_history_event (EEditorHistoryEvent + { + if (event->type != HISTORY_START && event->type != HISTORY_AND) { + printf (" %s\n", event_type_string[event->type]); +- printf (" before: start_x: %u ; start_y: %u ; end_x: %u ; end_y: %u ;\n", ++ printf (" before: start_x: %u ; start_y: %u ; end_x: %u ; end_y: %u\n", + event->before.start.x, event->before.start.y, event->before.end.x, event->before.end.y); +- printf (" after: start_x: %u ; start_y: %u ; end_x: %u ; end_y: %u ;\n", ++ printf (" after: start_x: %u ; start_y: %u ; end_x: %u ; end_y: %u\n", + event->after.start.x, event->after.start.y, event->after.end.x, event->after.end.y); + } + switch (event->type) { + case HISTORY_DELETE: ++ if (g_object_get_data (G_OBJECT (event->data.fragment), "history-delete-key")) { ++ printf (" type: delete\n"); ++ } else ++ printf (" type: backspace\n"); ++ if (g_object_get_data (G_OBJECT (event->data.fragment), "history-control-key")) ++ printf (" control\n"); + case HISTORY_INPUT: ++ if (g_object_get_data (G_OBJECT (event->data.fragment), "history-return-key")) ++ printf (" type: return\n"); + case HISTORY_REMOVE_LINK: + case HISTORY_SMILEY: + case HISTORY_IMAGE: +@@ -254,13 +167,13 @@ print_history_event (EEditorHistoryEvent + case HISTORY_UNDERLINE: + case HISTORY_STRIKETHROUGH: + case HISTORY_WRAP: +- printf (" from %d to %d ;\n", event->data.style.from, event->data.style.to); ++ printf (" from %d to %d\n", event->data.style.from, event->data.style.to); + break; + case HISTORY_PASTE: + case HISTORY_PASTE_AS_TEXT: + case HISTORY_PASTE_QUOTED: + case HISTORY_INSERT_HTML: +- printf (" pasting: '%s' ; \n", event->data.string.to); ++ printf (" pasting: '%s' \n", event->data.string.to); + break; + case HISTORY_HRULE_DIALOG: + case HISTORY_IMAGE_DIALOG: +@@ -275,7 +188,7 @@ print_history_event (EEditorHistoryEvent + case HISTORY_FONT_COLOR: + case HISTORY_REPLACE: + case HISTORY_REPLACE_ALL: +- printf (" from '%s' to '%s';\n", event->data.string.from, event->data.string.to); ++ printf (" from '%s' to '%s'\n", event->data.string.from, event->data.string.to); + break; + case HISTORY_START: + printf (" HISTORY START\n"); +@@ -454,7 +367,7 @@ undo_delete (EEditorPage *editor_page, + g_object_get_data (G_OBJECT (event->data.fragment), "history-concatenating-blocks")) { + WebKitDOMNode *node, *block; + +- range = get_range_for_point (document, event->after.start); ++ range = e_editor_dom_get_range_for_point (document, event->after.start); + webkit_dom_dom_selection_remove_all_ranges (dom_selection); + webkit_dom_dom_selection_add_range (dom_selection, range); + +@@ -528,7 +441,7 @@ undo_delete (EEditorPage *editor_page, + g_clear_object (&range); + g_clear_object (&dom_selection); + +- restore_selection_to_history_event_state (editor_page, event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->before); + + e_editor_dom_force_spell_check_in_viewport (editor_page); + +@@ -544,7 +457,7 @@ undo_delete (EEditorPage *editor_page, + WebKitDOMElement *element; + WebKitDOMNode *next_sibling; + +- range = get_range_for_point (document, event->before.start); ++ range = e_editor_dom_get_range_for_point (document, event->before.start); + webkit_dom_dom_selection_remove_all_ranges (dom_selection); + webkit_dom_dom_selection_add_range (dom_selection, range); + g_clear_object (&range); +@@ -598,7 +511,7 @@ undo_delete (EEditorPage *editor_page, + WebKitDOMNode *node, *current_block, *last_child; + WebKitDOMNode *next_block, *insert_before; + +- range = get_range_for_point (document, event->after.start); ++ range = e_editor_dom_get_range_for_point (document, event->after.start); + webkit_dom_dom_selection_remove_all_ranges (dom_selection); + webkit_dom_dom_selection_add_range (dom_selection, range); + g_clear_object (&range); +@@ -698,7 +611,7 @@ undo_delete (EEditorPage *editor_page, + + dom_remove_selection_markers (document); + +- restore_selection_to_history_event_state (editor_page, event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->before); + + e_editor_dom_force_spell_check_in_viewport (editor_page); + +@@ -794,9 +707,9 @@ undo_delete (EEditorPage *editor_page, + + /* Create temporary node on the selection where the delete occured. */ + if (webkit_dom_document_fragment_query_selector (event->data.fragment, ".Apple-tab-span", NULL)) +- range = get_range_for_point (document, event->before.start); ++ range = e_editor_dom_get_range_for_point (document, event->before.start); + else +- range = get_range_for_point (document, event->after.start); ++ range = e_editor_dom_get_range_for_point (document, event->after.start); + + /* If redoing an INPUT event that was done in the middle of the + * text we need to move one character backward as the range is +@@ -940,7 +853,7 @@ undo_delete (EEditorPage *editor_page, + if (webkit_dom_document_fragment_query_selector (event->data.fragment, "span#-x-evo-selection-start-marker", NULL)) + e_editor_dom_selection_restore (editor_page); + else +- restore_selection_to_history_event_state (editor_page, event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->before); + + if (event->type != HISTORY_INPUT) { + if (e_editor_page_get_magic_smileys_enabled (editor_page)) +@@ -966,7 +879,7 @@ redo_delete (EEditorPage *editor_page, + gint ii; + + manager = e_editor_page_get_undo_redo_manager (editor_page); +- restore_selection_to_history_event_state (editor_page, event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->before); + + delete_key = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (event->data.fragment), "history-delete-key")); + control_key = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (event->data.fragment), "history-control-key")); +@@ -1048,7 +961,7 @@ redo_delete (EEditorPage *editor_page, + e_editor_dom_body_key_up_event_process_backspace_or_delete (editor_page, delete_key); + e_editor_page_set_renew_history_after_coordinates (editor_page, TRUE); + +- restore_selection_to_history_event_state (editor_page, event->after); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->after); + + e_editor_dom_force_spell_check_for_current_paragraph (editor_page); + } +@@ -1091,11 +1004,11 @@ undo_redo_style_change (EEditorPage *edi + return; + } + +- restore_selection_to_history_event_state (editor_page, undo ? event->after : event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->after : event->before); + + func (editor_page, undo ? event->data.style.from : event->data.style.to); + +- restore_selection_to_history_event_state (editor_page, undo ? event->before : event->after); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->before : event->after); + } + + static void +@@ -1105,7 +1018,7 @@ undo_redo_indent (EEditorPage *editor_pa + { + gboolean was_indent = FALSE; + +- restore_selection_to_history_event_state (editor_page, undo ? event->after : event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->after : event->before); + + was_indent = event->data.style.from && event->data.style.to; + +@@ -1114,7 +1027,7 @@ undo_redo_indent (EEditorPage *editor_pa + else + e_editor_dom_selection_indent (editor_page); + +- restore_selection_to_history_event_state (editor_page, undo ? event->before : event->after); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->before : event->after); + } + + static void +@@ -1122,13 +1035,13 @@ undo_redo_font_color (EEditorPage *edito + EEditorHistoryEvent *event, + gboolean undo) + { +- restore_selection_to_history_event_state (editor_page, undo ? event->after : event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->after : event->before); + + e_editor_dom_exec_command (editor_page, + E_CONTENT_EDITOR_COMMAND_FORE_COLOR, + undo ? event->data.string.from : event->data.string.to); + +- restore_selection_to_history_event_state (editor_page, undo ? event->before : event->after); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->before : event->after); + } + + static void +@@ -1136,7 +1049,7 @@ undo_redo_wrap (EEditorPage *editor_page + EEditorHistoryEvent *event, + gboolean undo) + { +- restore_selection_to_history_event_state (editor_page, undo ? event->after : event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->after : event->before); + + if (undo) { + WebKitDOMNode *node; +@@ -1154,7 +1067,7 @@ undo_redo_wrap (EEditorPage *editor_page + } else + e_editor_dom_selection_wrap (editor_page); + +- restore_selection_to_history_event_state (editor_page, undo ? event->before : event->after); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->before : event->after); + } + + static void +@@ -1170,7 +1083,7 @@ undo_redo_page_dialog (EEditorPage *edit + document = e_editor_page_get_document (editor_page); + body = webkit_dom_document_get_body (document); + +- restore_selection_to_history_event_state (editor_page, undo ? event->after : event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->after : event->before); + + if (undo) { + attributes = webkit_dom_element_get_attributes (WEBKIT_DOM_ELEMENT (body)); +@@ -1249,7 +1162,7 @@ undo_redo_page_dialog (EEditorPage *edit + g_clear_object (&attributes); + g_clear_object (&attributes_history); + +- restore_selection_to_history_event_state (editor_page, undo ? event->before : event->after); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->before : event->after); + } + + static void +@@ -1262,7 +1175,7 @@ undo_redo_hrule_dialog (EEditorPage *edi + + document = e_editor_page_get_document (editor_page); + +- restore_selection_to_history_event_state (editor_page, undo ? event->after : event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->after : event->before); + + e_editor_dom_selection_save (editor_page); + element = webkit_dom_document_get_element_by_id ( +@@ -1314,7 +1227,7 @@ undo_redo_hrule_dialog (EEditorPage *edi + + if (undo) { + dom_remove_selection_markers (document); +- restore_selection_to_history_event_state (editor_page, event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->before); + } else + e_editor_dom_selection_restore (editor_page); + } +@@ -1330,7 +1243,7 @@ undo_redo_image_dialog (EEditorPage *edi + + document = e_editor_page_get_document (editor_page); + +- restore_selection_to_history_event_state (editor_page, undo ? event->after : event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->after : event->before); + + e_editor_dom_selection_save (editor_page); + element = webkit_dom_document_get_element_by_id ( +@@ -1364,7 +1277,7 @@ undo_redo_image_dialog (EEditorPage *edi + NULL); + + if (undo) +- restore_selection_to_history_event_state (editor_page, event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->before); + else + e_editor_dom_selection_restore (editor_page); + } +@@ -1379,7 +1292,7 @@ undo_redo_link_dialog (EEditorPage *edit + + document = e_editor_page_get_document (editor_page); + +- restore_selection_to_history_event_state (editor_page, undo ? event->after : event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->after : event->before); + + e_editor_dom_selection_save (editor_page); + +@@ -1425,7 +1338,7 @@ undo_redo_link_dialog (EEditorPage *edit + } + + if (undo) +- restore_selection_to_history_event_state (editor_page, event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->before); + else + e_editor_dom_selection_restore (editor_page); + } +@@ -1440,7 +1353,7 @@ undo_redo_table_dialog (EEditorPage *edi + + document = e_editor_page_get_document (editor_page); + +- restore_selection_to_history_event_state (editor_page, undo ? event->after : event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->after : event->before); + + e_editor_dom_selection_save (editor_page); + element = webkit_dom_document_get_element_by_id (document, "-x-evo-selection-start-marker"); +@@ -1459,7 +1372,7 @@ undo_redo_table_dialog (EEditorPage *edi + webkit_dom_node_clone_node_with_error (undo ? event->data.dom.from : event->data.dom.to, TRUE, NULL), + WEBKIT_DOM_NODE (parent), + NULL); +- restore_selection_to_history_event_state (editor_page, event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->before); + return; + } else + return; +@@ -1486,7 +1399,7 @@ undo_redo_table_dialog (EEditorPage *edi + } + + if (undo) +- restore_selection_to_history_event_state (editor_page, event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->before); + else + e_editor_dom_selection_restore (editor_page); + } +@@ -1505,7 +1418,7 @@ undo_redo_table_input (EEditorPage *edit + + document = e_editor_page_get_document (editor_page); + +- restore_selection_to_history_event_state (editor_page, undo ? event->after : event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->after : event->before); + + dom_window = webkit_dom_document_get_default_view (document); + dom_selection = webkit_dom_dom_window_get_selection (dom_window); +@@ -1554,7 +1467,7 @@ undo_redo_paste (EEditorPage *editor_pag + WebKitDOMElement *tmp; + WebKitDOMNode *parent; + +- restore_selection_to_history_event_state (editor_page, event->after); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->after); + + e_editor_dom_selection_save (editor_page); + tmp = webkit_dom_document_get_element_by_id ( +@@ -1573,7 +1486,9 @@ undo_redo_paste (EEditorPage *editor_pag + NULL); + + e_editor_dom_selection_restore (editor_page); +- } else { ++ } else if (event->after.start.x == event->after.end.x && ++ event->after.start.y == event->after.end.y) { ++ /* Selection was collapsed after the event */ + WebKitDOMDOMWindow *dom_window = NULL; + WebKitDOMDOMSelection *dom_selection = NULL; + WebKitDOMElement *element, *tmp; +@@ -1583,8 +1498,8 @@ undo_redo_paste (EEditorPage *editor_pag + dom_selection = webkit_dom_dom_window_get_selection (dom_window); + g_clear_object (&dom_window); + +- /* Restore the selection how it was before the event occured. */ +- range = get_range_for_point (document, event->before.start); ++ /* Restore the selection how it was before the event occurred. */ ++ range = e_editor_dom_get_range_for_point (document, event->before.start); + webkit_dom_dom_selection_remove_all_ranges (dom_selection); + webkit_dom_dom_selection_add_range (dom_selection, range); + g_clear_object (&range); +@@ -1601,7 +1516,7 @@ undo_redo_paste (EEditorPage *editor_pag + + webkit_dom_element_remove_attribute (element, "id"); + +- range = get_range_for_point (document, event->after.start); ++ range = e_editor_dom_get_range_for_point (document, event->after.start); + webkit_dom_dom_selection_remove_all_ranges (dom_selection); + webkit_dom_dom_selection_add_range (dom_selection, range); + g_clear_object (&range); +@@ -1622,9 +1537,15 @@ undo_redo_paste (EEditorPage *editor_pag + e_editor_dom_exec_command (editor_page, E_CONTENT_EDITOR_COMMAND_DELETE, NULL); + + e_editor_dom_force_spell_check_for_current_paragraph (editor_page); ++ } else { ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->after); ++ ++ e_editor_dom_exec_command (editor_page, E_CONTENT_EDITOR_COMMAND_DELETE, NULL); ++ ++ e_editor_dom_force_spell_check_for_current_paragraph (editor_page); + } + } else { +- restore_selection_to_history_event_state (editor_page, event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->before); + + if (event->type == HISTORY_PASTE) + e_editor_dom_convert_and_insert_html_into_selection (editor_page, event->data.string.to, FALSE); +@@ -1635,6 +1556,8 @@ undo_redo_paste (EEditorPage *editor_pag + else + e_editor_dom_convert_and_insert_html_into_selection (editor_page, event->data.string.to, FALSE); + /* e_editor_selection_insert_as_text (selection, event->data.string.to); */ ++ ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->after); + } + } + +@@ -1657,7 +1580,7 @@ undo_redo_image (EEditorPage *editor_pag + WebKitDOMElement *element; + WebKitDOMNode *node; + +- range = get_range_for_point (document, event->before.start); ++ range = e_editor_dom_get_range_for_point (document, event->before.start); + webkit_dom_dom_selection_remove_all_ranges (dom_selection); + webkit_dom_dom_selection_add_range (dom_selection, range); + g_clear_object (&range); +@@ -1668,15 +1591,24 @@ undo_redo_image (EEditorPage *editor_pag + + node = webkit_dom_node_get_next_sibling (WEBKIT_DOM_NODE (element)); + +- if (WEBKIT_DOM_IS_ELEMENT (node)) ++ if (WEBKIT_DOM_IS_ELEMENT (node)) { + if (element_has_class (WEBKIT_DOM_ELEMENT (node), "-x-evo-resizable-wrapper") || + element_has_class (WEBKIT_DOM_ELEMENT (node), "-x-evo-smiley-wrapper")) + remove_node (node); ++ else if (WEBKIT_DOM_IS_HTML_IMAGE_ELEMENT (node)) { ++ WebKitDOMNode *parent; ++ ++ parent = webkit_dom_node_get_parent_node (node); ++ if (element_has_class (WEBKIT_DOM_ELEMENT (parent), "-x-evo-resizable-wrapper") || ++ element_has_class (WEBKIT_DOM_ELEMENT (parent), "-x-evo-smiley-wrapper")) ++ remove_node (parent); ++ } ++ } + e_editor_dom_selection_restore (editor_page); + } else { + WebKitDOMElement *element; + +- range = get_range_for_point (document, event->before.start); ++ range = e_editor_dom_get_range_for_point (document, event->before.start); + /* Create temporary node on the selection where the delete occured. */ + webkit_dom_dom_selection_remove_all_ranges (dom_selection); + webkit_dom_dom_selection_add_range (dom_selection, range); +@@ -1709,9 +1641,10 @@ undo_redo_replace (EEditorPage *editor_p + + document = e_editor_page_get_document (editor_page); + +- restore_selection_to_history_event_state (editor_page, undo ? event->after : event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->after : event->before); + + if (undo) { ++ gint ii = 0; + WebKitDOMDOMWindow *dom_window = NULL; + WebKitDOMDOMSelection *dom_selection = NULL; + +@@ -1719,7 +1652,9 @@ undo_redo_replace (EEditorPage *editor_p + dom_selection = webkit_dom_dom_window_get_selection (dom_window); + g_clear_object (&dom_window); + +- webkit_dom_dom_selection_modify (dom_selection, "extend", "left", "word"); ++ for (ii = g_utf8_strlen (event->data.string.to, -1); ii--;) ++ webkit_dom_dom_selection_modify (dom_selection, "extend", "left", "character"); ++ + g_clear_object (&dom_selection); + } + +@@ -1729,7 +1664,7 @@ undo_redo_replace (EEditorPage *editor_p + + e_editor_dom_force_spell_check_for_current_paragraph (editor_page); + +- restore_selection_to_history_event_state (editor_page, undo ? event->before : event->after); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->before : event->after); + } + + static void +@@ -1828,7 +1763,7 @@ undo_redo_remove_link (EEditorPage *edit + + document = e_editor_page_get_document (editor_page); + +- restore_selection_to_history_event_state (editor_page, undo ? event->after : event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->after : event->before); + + if (undo) { + WebKitDOMDOMWindow *dom_window = NULL; +@@ -1857,7 +1792,7 @@ undo_redo_remove_link (EEditorPage *edit + } else + e_editor_dom_selection_unlink (editor_page); + +- restore_selection_to_history_event_state (editor_page, undo ? event->before : event->after); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->before : event->after); + } + + static void +@@ -1916,7 +1851,7 @@ undo_return_press_after_h_rule (EEditorP + WEBKIT_DOM_IS_HTML_HR_ELEMENT (node)) { + + remove_node_if_empty (WEBKIT_DOM_NODE (block)); +- restore_selection_to_history_event_state (editor_page, event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->before); + + return TRUE; + } +@@ -1939,7 +1874,7 @@ undo_input (EEditorUndoRedoManager *mana + dom_window = webkit_dom_document_get_default_view (document); + dom_selection = webkit_dom_dom_window_get_selection (dom_window); + +- restore_selection_to_history_event_state (editor_page, event->after); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->after); + + /* Undoing Return press after the HR element */ + if (e_editor_page_get_html_mode (editor_page) && +@@ -2053,7 +1988,7 @@ undo_redo_citation_split (EEditorPage *e + WebKitDOMElement *selection_start, *parent; + WebKitDOMNode *citation_before, *citation_after, *child, *last_child, *tmp; + +- restore_selection_to_history_event_state (editor_page, event->after); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->after); + + e_editor_dom_selection_save (editor_page); + selection_start = webkit_dom_document_get_element_by_id ( +@@ -2137,11 +2072,11 @@ undo_redo_citation_split (EEditorPage *e + out: + e_editor_dom_merge_siblings_if_necessary (editor_page, NULL); + +- restore_selection_to_history_event_state (editor_page, event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->before); + + e_editor_dom_force_spell_check_in_viewport (editor_page); + } else { +- restore_selection_to_history_event_state (editor_page, event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->before); + + if (in_situ) { + WebKitDOMElement *selection_start_marker; +@@ -2176,7 +2111,7 @@ undo_redo_unquote (EEditorPage *editor_p + + document = e_editor_page_get_document (editor_page); + +- restore_selection_to_history_event_state (editor_page, undo ? event->after : event->before); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, undo ? event->after : event->before); + + e_editor_dom_selection_save (editor_page); + element = webkit_dom_document_get_element_by_id ( +@@ -2221,7 +2156,7 @@ undo_redo_unquote (EEditorPage *editor_p + if (undo) + e_editor_dom_selection_restore (editor_page); + else +- restore_selection_to_history_event_state (editor_page, event->after); ++ e_editor_dom_selection_restore_to_history_event_state (editor_page, event->after); + + e_editor_dom_force_spell_check_for_current_paragraph (editor_page); + } +@@ -2366,6 +2301,21 @@ e_editor_undo_redo_manager_get_current_h + return NULL; + } + ++EEditorHistoryEvent * ++e_editor_undo_redo_manager_get_next_history_event_for (EEditorUndoRedoManager *manager, ++ EEditorHistoryEvent *event) ++{ ++ g_return_val_if_fail (E_IS_EDITOR_UNDO_REDO_MANAGER (manager), NULL); ++ ++ if (manager->priv->history) { ++ GList *item = g_list_find (manager->priv->history, event); ++ if (item && item->next) ++ return item->next->data; ++ } ++ ++ return NULL; ++} ++ + void + e_editor_undo_redo_manager_remove_current_history_event (EEditorUndoRedoManager *manager) + { +@@ -2458,6 +2408,85 @@ e_editor_undo_redo_manager_insert_dash_h + } + + g_object_unref (editor_page); ++} ++ ++static void ++copy_event_coordinates_to_event (EEditorHistoryEvent *source, ++ EEditorHistoryEvent *target) ++{ ++ target->before.start.x = source->before.start.x; ++ target->before.start.y = source->before.start.y; ++ target->before.end.x = source->before.end.x; ++ target->before.end.y = source->before.end.y; ++ target->after.start.x = source->after.start.x; ++ target->after.start.y = source->after.start.y; ++ target->after.end.x = source->after.end.x; ++ target->after.end.y = source->after.end.y; ++} ++ ++void ++e_editor_undo_redo_manager_last_drop_operation_did_copy (EEditorUndoRedoManager *manager) ++{ ++ EEditorPage *editor_page; ++ GList *history; ++ ++ g_return_if_fail (E_IS_EDITOR_UNDO_REDO_MANAGER (manager)); ++ ++ editor_page = editor_undo_redo_manager_ref_editor_page (manager); ++ g_return_if_fail (editor_page != NULL); ++ ++ history = manager->priv->history; ++ if (history) { ++ GList *history_and, *history_delete; ++ EEditorHistoryEvent *original_insert, *item; ++ WebKitDOMDocumentFragment *fragment; ++ ++ /* When a drag operation within an editor is performed, we save ++ * the history for it. We always assume that the drop will move ++ * the content (the default action) and not copy it, thus the ++ * history contains one delete item and one 'and' item. If the ++ * action is changed to copy (by holding the Control key during ++ * drop) there is not content deleted, but we saved it to the ++ * history. What this function does is that it changes the ++ * history to not delete any content, but to only insert the ++ * dropped one. */ ++ original_insert = history->data; ++ if (original_insert->type != HISTORY_INSERT_HTML || !history->next) { ++ g_object_unref (editor_page); ++ return; ++ } ++ ++ history_and = history->next; ++ item = history_and->data; ++ if (item->type != HISTORY_AND || !history_and->next) { ++ g_object_unref (editor_page); ++ return; ++ } ++ ++ history_delete = history_and->next; ++ item = history_delete->data; ++ if (item->type != HISTORY_DELETE) { ++ g_object_unref (editor_page); ++ return; ++ } ++ ++ /* Change the history type from 'Delete' to 'Insert' */ ++ item->type = HISTORY_INSERT_HTML; ++ copy_event_coordinates_to_event (original_insert, item); ++ ++ /* Copy the content */ ++ fragment = item->data.fragment; ++ item->data.fragment = NULL; ++ item->data.string.to = dom_get_node_inner_html (WEBKIT_DOM_NODE (fragment)); ++ g_clear_object (&fragment); ++ ++ /* Remove the old insert event */ ++ remove_history_event (manager, manager->priv->history); ++ /* And the 'AND' event */ ++ remove_history_event (manager, manager->priv->history); ++ } ++ ++ g_object_unref (editor_page); + } + + gboolean +diff -up evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-undo-redo-manager.h.composer-image-insert-undo evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-undo-redo-manager.h +--- evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-undo-redo-manager.h.composer-image-insert-undo 2016-09-19 10:22:58.000000000 +0200 ++++ evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-undo-redo-manager.h 2017-03-24 15:12:21.899422514 +0100 +@@ -151,12 +151,21 @@ void e_editor_undo_redo_manager_insert_ + EEditorHistoryEvent * + e_editor_undo_redo_manager_get_current_history_event + (EEditorUndoRedoManager *manager); ++ ++EEditorHistoryEvent * ++ e_editor_undo_redo_manager_get_next_history_event_for ++ (EEditorUndoRedoManager *manager, ++ EEditorHistoryEvent *event); ++ + void e_editor_undo_redo_manager_remove_current_history_event + (EEditorUndoRedoManager *manager); + + void e_editor_undo_redo_manager_insert_dash_history_event + (EEditorUndoRedoManager *manager); + ++void e_editor_undo_redo_manager_last_drop_operation_did_copy ++ (EEditorUndoRedoManager *manager); ++ + gboolean e_editor_undo_redo_manager_can_undo + (EEditorUndoRedoManager *manager); + +diff -up evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-web-extension.c.composer-image-insert-undo evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-web-extension.c +--- evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-web-extension.c.composer-image-insert-undo 2017-03-13 11:24:55.000000000 +0100 ++++ evolution-3.22.6/modules/webkit-editor/web-extension/e-editor-web-extension.c 2017-03-24 15:13:16.839420073 +0100 +@@ -480,9 +480,6 @@ static const gchar *introspection_xml = + " " + " " + " " +-" " +-" " +-" " + " " + " " + " " +@@ -493,6 +490,9 @@ static const gchar *introspection_xml = + " " + " " + " " ++" " ++" " ++" " + "" + "" + "" +@@ -503,6 +503,11 @@ static const gchar *introspection_xml = + " " + " " + " " ++" " ++" " ++" " ++" " ++" " + " " + " " + " " +@@ -581,12 +586,6 @@ static const gchar *introspection_xml = + " " + " " + " " +-" " +-" " +-" " +-" " +-" " +-" " + " " + " " + " " +@@ -1859,15 +1858,6 @@ handle_method_call (GDBusConnection *con + e_editor_dom_replace_image_src (editor_page, selector, uri); + + g_dbus_method_invocation_return_value (invocation, NULL); +- } else if (g_strcmp0 (method_name, "DOMDragAndDropEnd") == 0) { +- g_variant_get (parameters, "(t)", &page_id); +- +- editor_page = get_editor_page_or_return_dbus_error (invocation, extension, page_id); +- if (!editor_page) +- goto error; +- +- e_editor_dom_drag_and_drop_end (editor_page); +- g_dbus_method_invocation_return_value (invocation, NULL); + } else if (g_strcmp0 (method_name, "DOMInsertSmiley") == 0) { + const gchar *smiley_name; + +@@ -1935,6 +1925,17 @@ handle_method_call (GDBusConnection *con + e_editor_dom_insert_image (editor_page, uri); + + g_dbus_method_invocation_return_value (invocation, NULL); ++ } else if (g_strcmp0 (method_name, "DOMInsertReplaceAllHistoryEvent") == 0) { ++ const gchar *replacement, *search_text; ++ ++ g_variant_get (parameters, "(t&s&s)", &page_id, &search_text, &replacement); ++ ++ editor_page = get_editor_page_or_return_dbus_error (invocation, extension, page_id); ++ if (!editor_page) ++ goto error; ++ ++ e_editor_dom_insert_replace_all_history_event (editor_page, search_text, replacement); ++ g_dbus_method_invocation_return_value (invocation, NULL); + } else if (g_strcmp0 (method_name, "DOMSelectionReplace") == 0) { + const gchar *replacement; + +@@ -2155,28 +2156,6 @@ handle_method_call (GDBusConnection *con + ignore_next_signature_change)); + + g_free (new_signature_id); +- } else if (g_strcmp0 (method_name, "DOMSaveDragAndDropHistory") == 0) { +- g_variant_get ( +- parameters, "(t)", &page_id); +- +- editor_page = get_editor_page_or_return_dbus_error (invocation, extension, page_id); +- if (!editor_page) +- goto error; +- +- e_composer_dom_save_drag_and_drop_history (editor_page); +- +- g_dbus_method_invocation_return_value (invocation, NULL); +- } else if (g_strcmp0 (method_name, "DOMCleanAfterDragAndDrop") == 0) { +- g_variant_get ( +- parameters, "(t)", &page_id); +- +- editor_page = get_editor_page_or_return_dbus_error (invocation, extension, page_id); +- if (!editor_page) +- goto error; +- +- e_composer_dom_clean_after_drag_and_drop (editor_page); +- +- g_dbus_method_invocation_return_value (invocation, NULL); + } else if (g_strcmp0 (method_name, "DOMGetActiveSignatureUid") == 0) { + gchar *value; + +@@ -2194,6 +2173,20 @@ handle_method_call (GDBusConnection *con + "(@s)", + g_variant_new_take_string ( + value ? value : g_strdup ("")))); ++ } else if (g_strcmp0 (method_name, "DOMLastDropOperationDidCopy") == 0) { ++ EEditorUndoRedoManager *manager; ++ ++ g_variant_get (parameters, "(t)", &page_id); ++ ++ editor_page = get_editor_page_or_return_dbus_error (invocation, extension, page_id); ++ if (!editor_page) ++ goto error; ++ ++ manager = e_editor_page_get_undo_redo_manager (editor_page); ++ if (manager) ++ e_editor_undo_redo_manager_last_drop_operation_did_copy (manager); ++ ++ g_dbus_method_invocation_return_value (invocation, NULL); + } else if (g_strcmp0 (method_name, "DOMGetCaretPosition") == 0) { + guint32 value; + +@@ -2243,7 +2236,7 @@ handle_method_call (GDBusConnection *con + return; + + error: +- g_warning ("Cannot obtain WebKitWebPage for '%ld'", page_id); ++ g_warning ("Cannot obtain WebKitWebPage for '%" G_GUINT64_FORMAT "'", page_id); + } + + static void diff --git a/SOURCES/evolution-3.22.6-coverity-scan-issues.patch b/SOURCES/evolution-3.22.6-coverity-scan-issues.patch new file mode 100644 index 0000000..328aa15 --- /dev/null +++ b/SOURCES/evolution-3.22.6-coverity-scan-issues.patch @@ -0,0 +1,356 @@ +diff --git a/calendar/gui/itip-utils.c b/calendar/gui/itip-utils.c +index 1d9091a..fefde1f 100644 +--- a/calendar/gui/itip-utils.c ++++ b/calendar/gui/itip-utils.c +@@ -2316,8 +2316,6 @@ reply_to_calendar_comp (ESourceRegistry *registry, + + cleanup: + +- if (comp != NULL) +- g_object_unref (comp); + if (top_level != NULL) + icalcomponent_free (top_level); + +diff --git a/e-util/e-color-chooser-widget.c b/e-util/e-color-chooser-widget.c +index 530f199..2ebd044 100644 +--- a/e-util/e-color-chooser-widget.c ++++ b/e-util/e-color-chooser-widget.c +@@ -203,6 +203,9 @@ find_swatch (GtkContainer *container) + GtkWidget *widget = child->data; + GtkWidget *swatch; + ++ if (!widget) ++ continue; ++ + if (GTK_IS_CONTAINER (widget)) { + swatch = find_swatch (GTK_CONTAINER (widget)); + +diff --git a/e-util/test-html-editor-units.c b/e-util/test-html-editor-units.c +index 4de3c7e..cfaff58 100644 +--- a/e-util/test-html-editor-units.c ++++ b/e-util/test-html-editor-units.c +@@ -955,6 +955,7 @@ test_image_insert (TestFixture *fixture) + gchar *image_data; + gchar *image_data_base64; + gsize image_data_length; ++ gboolean success; + GError *error = NULL; + + if (!test_utils_process_commands (fixture, +@@ -968,8 +969,9 @@ test_image_insert (TestFixture *fixture) + uri = g_filename_to_uri (filename, NULL, &error); + g_assert_no_error (error); + +- g_file_get_contents (filename, &image_data, &image_data_length, &error); ++ success = g_file_get_contents (filename, &image_data, &image_data_length, &error); + g_assert_no_error (error); ++ g_assert (success); + + g_free (filename); + +diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c +index 957b3dd..e536898 100644 +--- a/mail/e-mail-display.c ++++ b/mail/e-mail-display.c +@@ -525,15 +525,15 @@ headers_collapsed_signal_cb (GDBusConnection *connection, + GVariant *parameters, + EMailDisplay *display) + { +- gboolean expanded; ++ gboolean collapsed = FALSE; + + if (g_strcmp0 (signal_name, "HeadersCollapsed") != 0) + return; + + if (parameters) +- g_variant_get (parameters, "(b)", &expanded); ++ g_variant_get (parameters, "(b)", &collapsed); + +- e_mail_display_set_headers_collapsed (display, expanded); ++ e_mail_display_set_headers_collapsed (display, collapsed); + } + + static void +diff --git a/mail/e-mail-free-form-exp.c b/mail/e-mail-free-form-exp.c +index 39af793..da4bb6a 100644 +--- a/mail/e-mail-free-form-exp.c ++++ b/mail/e-mail-free-form-exp.c +@@ -76,12 +76,9 @@ mail_ffe_build_header_sexp (const gchar *word, + camel_sexp_encode_string (encoded_word, word); + + if (!header_names[1]) { +- if (!sexp) +- sexp = g_string_new (""); +- } else if (!sexp) { +- sexp = g_string_new ("(or "); ++ sexp = g_string_new (""); + } else { +- g_string_append (sexp, "(or "); ++ sexp = g_string_new ("(or "); + } + + for (ii = 0; header_names[ii]; ii++) { +diff --git a/modules/calendar/e-cal-attachment-handler.c b/modules/calendar/e-cal-attachment-handler.c +index ef28ddd..02aff51 100644 +--- a/modules/calendar/e-cal-attachment-handler.c ++++ b/modules/calendar/e-cal-attachment-handler.c +@@ -347,7 +347,7 @@ attachment_handler_run_dialog (GtkWindow *parent, + break; + default: + g_warn_if_reached (); +- return; ++ goto exit; + } + + shell_view = e_shell_window_get_shell_view (shell_window, +diff --git a/modules/calendar/e-cal-shell-content.c b/modules/calendar/e-cal-shell-content.c +index 1feb1b8..594890a 100644 +--- a/modules/calendar/e-cal-shell-content.c ++++ b/modules/calendar/e-cal-shell-content.c +@@ -2225,7 +2225,7 @@ e_cal_shell_content_update_filters (ECalShellContent *cal_shell_content, + hide_completed_tasks_sexp = calendar_config_get_hide_completed_tasks_sexp (FALSE); + + if (hide_completed_tasks_sexp != NULL) { +- if (cal_filter != NULL) { ++ if (*cal_filter) { + gchar *filter; + + filter = g_strdup_printf ("(and %s %s)", hide_completed_tasks_sexp, cal_filter); +@@ -2235,7 +2235,7 @@ e_cal_shell_content_update_filters (ECalShellContent *cal_shell_content, + cal_shell_content_update_model_filter (data_model, model, hide_completed_tasks_sexp, 0, 0); + } + } else { +- cal_shell_content_update_model_filter (data_model, model, cal_filter ? cal_filter : "#t", 0, 0); ++ cal_shell_content_update_model_filter (data_model, model, *cal_filter ? cal_filter : "#t", 0, 0); + } + + g_free (hide_completed_tasks_sexp); +@@ -2275,7 +2275,7 @@ e_cal_shell_content_update_filters (ECalShellContent *cal_shell_content, + "(and (or (not (has-start?)) " + "(occur-in-time-range? (make-time \"%s\") " + "(make-time \"%s\") \"%s\")) %s)", +- iso_start, iso_end, default_tzloc, cal_filter ? cal_filter : ""); ++ iso_start, iso_end, default_tzloc, cal_filter); + + cal_shell_content_update_model_filter (data_model, model, filter, 0, 0); + +@@ -2283,7 +2283,7 @@ e_cal_shell_content_update_filters (ECalShellContent *cal_shell_content, + g_free (iso_start); + g_free (iso_end); + } else { +- cal_shell_content_update_model_filter (data_model, model, cal_filter ? cal_filter : "#t", 0, 0); ++ cal_shell_content_update_model_filter (data_model, model, *cal_filter ? cal_filter : "#t", 0, 0); + } + } + } +diff --git a/modules/webkit-editor/e-webkit-editor.c b/modules/webkit-editor/e-webkit-editor.c +index 9fb3060..4b56adf 100644 +--- a/modules/webkit-editor/e-webkit-editor.c ++++ b/modules/webkit-editor/e-webkit-editor.c +@@ -1781,8 +1781,7 @@ webkit_editor_insert_content (EContentEditor *editor, + } + + if (strstr (content, "data-evo-draft") && !(wk_editor->priv->html_mode)) { +- if (content && *content) +- set_convert_in_situ (wk_editor, TRUE); ++ set_convert_in_situ (wk_editor, TRUE); + wk_editor->priv->reload_in_progress = TRUE; + webkit_web_view_load_html (WEBKIT_WEB_VIEW (wk_editor), content, "file://"); + return; +@@ -1799,8 +1798,7 @@ webkit_editor_insert_content (EContentEditor *editor, + return; + } + } +- if (content && *content) +- set_convert_in_situ (wk_editor, TRUE); ++ set_convert_in_situ (wk_editor, TRUE); + } + + wk_editor->priv->reload_in_progress = TRUE; +diff --git a/modules/webkit-editor/web-extension/e-editor-dom-functions.c b/modules/webkit-editor/web-extension/e-editor-dom-functions.c +index b79ea50..0eb29bd 100644 +--- a/modules/webkit-editor/web-extension/e-editor-dom-functions.c ++++ b/modules/webkit-editor/web-extension/e-editor-dom-functions.c +@@ -2722,12 +2722,9 @@ save_history_before_event_in_table (EEditorPage *editor_page, + ev = g_new0 (EEditorHistoryEvent, 1); + ev->type = HISTORY_TABLE_INPUT; + +- if (block) { +- e_editor_dom_selection_save (editor_page); +- ev->data.dom.from = g_object_ref (webkit_dom_node_clone_node_with_error (WEBKIT_DOM_NODE (block), TRUE, NULL)); +- e_editor_dom_selection_restore (editor_page); +- } else +- ev->data.dom.from = NULL; ++ e_editor_dom_selection_save (editor_page); ++ ev->data.dom.from = g_object_ref (webkit_dom_node_clone_node_with_error (WEBKIT_DOM_NODE (block), TRUE, NULL)); ++ e_editor_dom_selection_restore (editor_page); + + e_editor_dom_selection_get_coordinates (editor_page, + &ev->before.start.x, +@@ -5252,7 +5249,7 @@ parse_html_into_blocks (EEditorPage *editor_page, + if (camel_debug ("webkit") || camel_debug ("webkit:editor")) + printf ("\tto_process: '%s'\n", to_process); + +- if (!*to_process && processing_last) { ++ if (to_process && !*to_process && processing_last) { + g_free (to_process); + to_process = g_strdup (next_token); + next_token = NULL; +@@ -15303,7 +15300,6 @@ e_editor_dom_selection_set_monospace (EEditorPage *editor_page, + } else { + gboolean is_bold = FALSE, is_italic = FALSE; + gboolean is_underline = FALSE, is_strikethrough = FALSE; +- guint font_size = 0; + WebKitDOMElement *tt_element; + WebKitDOMNode *node; + +@@ -16142,7 +16138,7 @@ process_block_to_block (EEditorPage *editor_page, + + word_wrap_length = + e_editor_page_get_word_wrap_length (editor_page); +- quote = citation_level ? citation_level * 2 : 0; ++ quote = citation_level * 2; + + element = e_editor_dom_wrap_paragraph_length ( + editor_page, element, word_wrap_length - quote); +@@ -16487,8 +16483,7 @@ format_change_list_from_list (EEditorPage *editor_page, + WEBKIT_DOM_ELEMENT (item), new_list, to); + + webkit_dom_node_append_child ( +- after_selection_end ? +- source_list_clone : WEBKIT_DOM_NODE (new_list), ++ WEBKIT_DOM_NODE (new_list), + WEBKIT_DOM_NODE (processed_list), + NULL); + } else if (node_is_list (item) && !after_selection_end) { +@@ -16510,10 +16505,7 @@ format_change_list_from_list (EEditorPage *editor_page, + WEBKIT_DOM_NODE (new_list), FALSE, NULL); + + webkit_dom_node_append_child ( +- after_selection_end ? +- source_list_clone : WEBKIT_DOM_NODE (new_list), +- clone, +- NULL); ++ WEBKIT_DOM_NODE (new_list), clone, NULL); + + while ((child = webkit_dom_node_get_first_child (item))) { + webkit_dom_node_append_child (clone, child, NULL); +@@ -16523,10 +16515,7 @@ format_change_list_from_list (EEditorPage *editor_page, + + if (webkit_dom_node_get_first_child (item)) + webkit_dom_node_append_child ( +- after_selection_end ? +- source_list_clone : WEBKIT_DOM_NODE (new_list), +- item, +- NULL); ++ WEBKIT_DOM_NODE (new_list), item, NULL); + else + remove_node (item); + } else { +@@ -17351,10 +17340,8 @@ e_editor_dom_selection_get_coordinates (EEditorPage *editor_page, + parent = webkit_dom_element_get_offset_parent (parent); + } + +- if (start_x) +- *start_x = local_x; +- if (start_y) +- *start_y = local_y; ++ *start_x = local_x; ++ *start_y = local_y; + + if (e_editor_dom_selection_is_collapsed (editor_page)) { + *end_x = local_x; +@@ -17379,10 +17366,8 @@ e_editor_dom_selection_get_coordinates (EEditorPage *editor_page, + parent = webkit_dom_element_get_offset_parent (parent); + } + +- if (end_x) +- *end_x = local_x; +- if (end_y) +- *end_y = local_y; ++ *end_x = local_x; ++ *end_y = local_y; + + if (created_selection_markers) + e_editor_dom_selection_restore (editor_page); +diff --git a/modules/webkit-editor/web-extension/e-editor-undo-redo-manager.c b/modules/webkit-editor/web-extension/e-editor-undo-redo-manager.c +index 5853f0b..1bd5fe9 100644 +--- a/modules/webkit-editor/web-extension/e-editor-undo-redo-manager.c ++++ b/modules/webkit-editor/web-extension/e-editor-undo-redo-manager.c +@@ -1810,11 +1810,12 @@ undo_redo_replace_all (EEditorUndoRedoManager *manager, + if (prev_event->type == HISTORY_REPLACE) { + undo_redo_replace (editor_page, prev_event, undo); + prev_item = prev_item->prev; +- } else ++ } else { ++ manager->priv->history = prev_item->next; + break; ++ } + } + +- manager->priv->history = prev_item->next; + } + } + +@@ -2724,7 +2725,7 @@ e_editor_undo_redo_manager_redo (EEditorUndoRedoManager *manager) + return; + } + +- if (history->prev && history->prev->prev) { ++ if (history->prev->prev) { + event = history->prev->prev->data; + if (event->type == HISTORY_AND) { + manager->priv->history = manager->priv->history->prev->prev; +diff --git a/plugins/mail-notification/mail-notification.c b/plugins/mail-notification/mail-notification.c +index 5edbdb3..89c6a71 100644 +--- a/plugins/mail-notification/mail-notification.c ++++ b/plugins/mail-notification/mail-notification.c +@@ -327,7 +327,10 @@ notify_default_action_cb (NotifyNotification *notification, + if (!list) + list = fallback; + +- g_return_if_fail (list != NULL); ++ if (!list) { ++ g_warn_if_reached (); ++ return; ++ } + + /* Present the shell window. */ + shell_window = E_SHELL_WINDOW (list->data); +diff --git a/smime/lib/e-cert-db.c b/smime/lib/e-cert-db.c +index 237c912..2775cf8 100644 +--- a/smime/lib/e-cert-db.c ++++ b/smime/lib/e-cert-db.c +@@ -413,6 +413,9 @@ p12u_ucs2_ascii_conversion_function(PRBool toUnicode, + it.data = inBuf; + it.len = inBufLen; + dup = SECITEM_DupItem(&it); ++ if (!dup) ++ return PR_FALSE; ++ + /* If converting Unicode to ASCII, swap bytes before conversion + * as neccessary. + */ +@@ -425,8 +428,7 @@ p12u_ucs2_ascii_conversion_function(PRBool toUnicode, + /* Perform the conversion. */ + ret = PORT_UCS2_UTF8Conversion (toUnicode, dup->data, dup->len, + outBuf, maxOutBufLen, outBufLen); +- if (dup) +- SECITEM_ZfreeItem(dup, PR_TRUE); ++ SECITEM_ZfreeItem(dup, PR_TRUE); + + #ifdef DEBUG_CONVERSION + if (pk12_debugging) { +diff --git a/web-extensions/e-dom-utils.c b/web-extensions/e-dom-utils.c +index 28ac97e..c4f7d61 100644 +--- a/web-extensions/e-dom-utils.c ++++ b/web-extensions/e-dom-utils.c +@@ -522,7 +522,7 @@ add_css_rule_into_style_sheet (WebKitDOMDocument *document, + rule_text = webkit_dom_css_rule_get_css_text (rule); + + /* Find the start of the style => end of the selector */ +- if (rule_text && selector && g_str_has_prefix (rule_text, selector) && ++ if (rule_text && g_str_has_prefix (rule_text, selector) && + rule_text[selector_length] == ' ' && rule_text[selector_length + 1] == '{') { + /* If exists remove it */ + webkit_dom_css_style_sheet_remove_rule ( diff --git a/SOURCES/evolution-3.22.6-folder-changed-blocked.patch b/SOURCES/evolution-3.22.6-folder-changed-blocked.patch new file mode 100644 index 0000000..37ca009 --- /dev/null +++ b/SOURCES/evolution-3.22.6-folder-changed-blocked.patch @@ -0,0 +1,122 @@ +diff -up evolution-3.22.6/libemail-engine/mail-folder-cache.c.folder-changed-blocked evolution-3.22.6/libemail-engine/mail-folder-cache.c +--- evolution-3.22.6/libemail-engine/mail-folder-cache.c.folder-changed-blocked 2016-09-19 10:22:58.000000000 +0200 ++++ evolution-3.22.6/libemail-engine/mail-folder-cache.c 2017-05-29 23:35:00.143560314 +0200 +@@ -93,6 +93,12 @@ enum { + + static guint signals[LAST_SIGNAL]; + ++typedef enum { ++ E_FIRST_UPDATE_RUNNING, ++ E_FIRST_UPDATE_FAILED, ++ E_FIRST_UPDATE_DONE ++} EFirstUpdateState; ++ + struct _StoreInfo { + volatile gint ref_count; + +@@ -107,7 +113,7 @@ struct _StoreInfo { + gulong folder_unsubscribed_handler_id; + + GHashTable *folder_info_ht; /* by full_name */ +- gboolean first_update; /* TRUE, then FALSE forever */ ++ EFirstUpdateState first_update; + GSList *pending_folder_notes; /* Gather note_folder calls during first_update period */ + + /* Hold a reference to keep them alive. */ +@@ -261,7 +267,7 @@ store_info_new (CamelStore *store) + store_info = g_slice_new0 (StoreInfo); + store_info->ref_count = 1; + store_info->store = g_object_ref (store); +- store_info->first_update = TRUE; ++ store_info->first_update = E_FIRST_UPDATE_RUNNING; + + store_info->folder_info_ht = g_hash_table_new_full ( + (GHashFunc) g_str_hash, +@@ -1964,7 +1970,7 @@ mail_folder_cache_first_update (MailFold + g_object_unref (session); + + g_mutex_lock (&store_info->lock); +- store_info->first_update = FALSE; ++ store_info->first_update = E_FIRST_UPDATE_DONE; + folders = store_info->pending_folder_notes; + store_info->pending_folder_notes = NULL; + g_mutex_unlock (&store_info->lock); +@@ -1988,6 +1994,7 @@ mail_folder_cache_note_store_thread (GSi + StoreInfo *store_info; + GQueue result_queue = G_QUEUE_INIT; + AsyncContext *async_context; ++ gboolean success = FALSE; + GError *local_error = NULL; + + cache = MAIL_FOLDER_CACHE (source_object); +@@ -2060,17 +2067,22 @@ mail_folder_cache_note_store_thread (GSi + + /* Do some extra work for the first update. */ + g_mutex_lock (&store_info->lock); +- if (store_info->first_update) { ++ if (store_info->first_update != E_FIRST_UPDATE_DONE) { + g_mutex_unlock (&store_info->lock); + mail_folder_cache_first_update (cache, store_info); + } else { + g_mutex_unlock (&store_info->lock); + } + ++ success = TRUE; + exit: + /* We don't want finish() functions being invoked while holding a + * locked mutex, so flush the StoreInfo's queue to a local queue. */ + g_mutex_lock (&store_info->lock); ++ ++ if (store_info->first_update != E_FIRST_UPDATE_DONE) ++ store_info->first_update = success ? E_FIRST_UPDATE_DONE : E_FIRST_UPDATE_FAILED; ++ + e_queue_transfer (&store_info->folderinfo_updates, &result_queue); + g_mutex_unlock (&store_info->lock); + +@@ -2130,6 +2142,9 @@ mail_folder_cache_note_store (MailFolder + + g_mutex_lock (&store_info->lock); + ++ if (store_info->first_update != E_FIRST_UPDATE_DONE) ++ store_info->first_update = E_FIRST_UPDATE_RUNNING; ++ + g_queue_push_tail ( + &store_info->folderinfo_updates, + g_object_ref (simple)); +@@ -2211,18 +2226,23 @@ mail_folder_cache_note_folder (MailFolde + * warnings on startup which might be worth tracking down. */ + if (folder_info == NULL) { + StoreInfo *store_info; +- gboolean retry = FALSE; ++ gboolean retry = FALSE, renote_store = FALSE; + + store_info = mail_folder_cache_ref_store_info (cache, parent_store); + if (!store_info) + return; + + g_mutex_lock (&store_info->lock); +- if (store_info->first_update) { ++ if (store_info->first_update != E_FIRST_UPDATE_DONE) { + /* The first update did not finish yet, thus add this as a pending + folder to be noted once the first update finishes */ + store_info->pending_folder_notes = g_slist_prepend ( + store_info->pending_folder_notes, g_object_ref (folder)); ++ ++ if (store_info->first_update == E_FIRST_UPDATE_FAILED) { ++ store_info->first_update = E_FIRST_UPDATE_RUNNING; ++ renote_store = TRUE; ++ } + } else { + /* It can be that certain threading interleaving made + the first store update finished before we reached +@@ -2233,7 +2253,9 @@ mail_folder_cache_note_folder (MailFolde + + store_info_unref (store_info); + +- if (retry) ++ if (renote_store) ++ mail_folder_cache_note_store (cache, parent_store, NULL, NULL, NULL); ++ else if (retry) + folder_info = mail_folder_cache_ref_folder_info ( + cache, parent_store, full_name); + diff --git a/SOURCES/evolution-3.22.6-gtype-init-workaround.patch b/SOURCES/evolution-3.22.6-gtype-init-workaround.patch new file mode 100644 index 0000000..a51e644 --- /dev/null +++ b/SOURCES/evolution-3.22.6-gtype-init-workaround.patch @@ -0,0 +1,30 @@ +diff -up evolution-3.22.6/calendar/alarm-notify/notify-main.c.gtype-init-workaround evolution-3.22.6/calendar/alarm-notify/notify-main.c +--- evolution-3.22.6/calendar/alarm-notify/notify-main.c.gtype-init-workaround 2017-11-14 11:55:40.525214399 +0100 ++++ evolution-3.22.6/calendar/alarm-notify/notify-main.c 2017-11-14 11:56:58.471213321 +0100 +@@ -68,6 +68,11 @@ main (gint argc, + bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); + textdomain (GETTEXT_PACKAGE); + ++ /* Workaround https://bugzilla.gnome.org/show_bug.cgi?id=674885 */ ++ g_type_ensure (G_TYPE_DBUS_CONNECTION); ++ g_type_ensure (G_TYPE_DBUS_PROXY); ++ g_type_ensure (G_BUS_TYPE_SESSION); ++ + gtk_init (&argc, &argv); + + alarm_notify_service = alarm_notify_new (NULL, &error); +diff -up evolution-3.22.6/shell/main.c.gtype-init-workaround evolution-3.22.6/shell/main.c +--- evolution-3.22.6/shell/main.c.gtype-init-workaround 2017-11-14 11:55:40.525214399 +0100 ++++ evolution-3.22.6/shell/main.c 2017-11-14 11:57:34.104212829 +0100 +@@ -459,6 +459,11 @@ main (gint argc, + /* Initialize timezone specific global variables */ + tzset (); + ++ /* Workaround https://bugzilla.gnome.org/show_bug.cgi?id=674885 */ ++ g_type_ensure (G_TYPE_DBUS_CONNECTION); ++ g_type_ensure (G_TYPE_DBUS_PROXY); ++ g_type_ensure (G_BUS_TYPE_SESSION); ++ + /* The contact maps feature uses clutter-gtk. */ + #ifdef WITH_CONTACT_MAPS + success = gtk_clutter_init_with_args ( diff --git a/SOURCES/evolution-3.22.6-hide-menu-option.patch b/SOURCES/evolution-3.22.6-hide-menu-option.patch new file mode 100644 index 0000000..891848c --- /dev/null +++ b/SOURCES/evolution-3.22.6-hide-menu-option.patch @@ -0,0 +1,425 @@ +From 439bf03a5120db0ab3bff9958721297b4c32aa71 Mon Sep 17 00:00:00 2001 +From: Milan Crha +Date: Fri, 7 Oct 2016 13:24:43 +0200 +Subject: Bug 772175 - Allow hiding menu bar (and show it via alt) + +--- + data/org.gnome.evolution.shell.gschema.xml.in | 10 +++ + shell/e-shell-window-actions.c | 25 +++++++ + shell/e-shell-window-actions.h | 2 + + shell/e-shell-window-private.c | 90 ++++++++++++++++++++++++++ + shell/e-shell-window-private.h | 3 + + shell/e-shell-window.c | 93 ++++++++++++++++++++++++++- + shell/e-shell-window.h | 5 ++ + ui/evolution-shell.ui | 1 + + 8 files changed, 228 insertions(+), 1 deletion(-) + +diff --git a/data/org.gnome.evolution.shell.gschema.xml.in b/data/org.gnome.evolution.shell.gschema.xml.in +index 02a5a18..13b3b36 100644 +--- a/data/org.gnome.evolution.shell.gschema.xml.in ++++ b/data/org.gnome.evolution.shell.gschema.xml.in +@@ -60,6 +60,16 @@ + <_summary>Window button style + <_description>The style of the window buttons. Can be "text", "icons", "both", "toolbar". If "toolbar" is set, the style of the buttons is determined by the GNOME toolbar setting. + ++ ++ true ++ <_summary>Menubar is visible ++ <_description>Whether the menubar should be visible. ++ ++ ++ true ++ <_summary>Menubar is visible ++ <_description>Whether the menubar should be visible. ++ + + true + <_summary>Toolbar is visible +diff --git a/shell/e-shell-window-actions.c b/shell/e-shell-window-actions.c +index 5665821..c1db9c6 100644 +--- a/shell/e-shell-window-actions.c ++++ b/shell/e-shell-window-actions.c +@@ -522,6 +522,17 @@ action_search_save_cb (GtkAction *action, + } + + /** ++ * E_SHELL_WINDOW_ACTION_SHOW_MENUBAR: ++ * @window: an #EShellWindow ++ * ++ * This toggle action controls whether the menu bar is visible. ++ * ++ * Main menu item: View -> Layout -> Show Menu Bar ++ * ++ * Since: 3.24 ++ **/ ++ ++/** + * E_SHELL_WINDOW_ACTION_SHOW_SIDEBAR: + * @window: an #EShellWindow + * +@@ -1022,6 +1033,14 @@ static EPopupActionEntry shell_popup_entries[] = { + + static GtkToggleActionEntry shell_toggle_entries[] = { + ++ { "show-menubar", ++ NULL, ++ N_("Show _Menu Bar"), ++ NULL, ++ N_("Show the menu bar"), ++ NULL, ++ TRUE }, ++ + { "show-sidebar", + NULL, + N_("Show Side _Bar"), +@@ -1272,6 +1291,12 @@ e_shell_window_actions_init (EShellWindow *shell_window) + e_shell_utils_is_quick_reference_available (e_shell_window_get_shell (shell_window))); + + e_binding_bind_property ( ++ shell_window, "menubar-visible", ++ ACTION (SHOW_MENUBAR), "active", ++ G_BINDING_BIDIRECTIONAL | ++ G_BINDING_SYNC_CREATE); ++ ++ e_binding_bind_property ( + shell_window, "sidebar-visible", + ACTION (SHOW_SIDEBAR), "active", + G_BINDING_BIDIRECTIONAL | +diff --git a/shell/e-shell-window-actions.h b/shell/e-shell-window-actions.h +index 09682c4..b3e37fb 100644 +--- a/shell/e-shell-window-actions.h ++++ b/shell/e-shell-window-actions.h +@@ -74,6 +74,8 @@ + E_SHELL_WINDOW_ACTION ((window), "search-save") + #define E_SHELL_WINDOW_ACTION_SELECT_ALL(window) \ + E_SHELL_WINDOW_ACTION ((window), "select-all") ++#define E_SHELL_WINDOW_ACTION_SHOW_MENUBAR(window) \ ++ E_SHELL_WINDOW_ACTION ((window), "show-menubar") + #define E_SHELL_WINDOW_ACTION_SHOW_SIDEBAR(window) \ + E_SHELL_WINDOW_ACTION ((window), "show-sidebar") + #define E_SHELL_WINDOW_ACTION_SHOW_SWITCHER(window) \ +diff --git a/shell/e-shell-window-private.c b/shell/e-shell-window-private.c +index f9e21b1..2de82b6 100644 +--- a/shell/e-shell-window-private.c ++++ b/shell/e-shell-window-private.c +@@ -247,6 +247,77 @@ e_shell_window_private_init (EShellWindow *shell_window) + } + + static gboolean ++delayed_menubar_show_cb (gpointer user_data) ++{ ++ EShellWindow *shell_window = user_data; ++ ++ g_return_val_if_fail (E_IS_SHELL_WINDOW (shell_window), FALSE); ++ ++ shell_window->priv->delayed_menubar_show_id = 0; ++ ++ if (!e_shell_window_get_menubar_visible (shell_window)) { ++ GtkWidget *main_menu; ++ ++ main_menu = e_shell_window_get_managed_widget (shell_window, "/main-menu"); ++ ++ gtk_widget_show (main_menu); ++ gtk_widget_grab_focus (main_menu); ++ } ++ ++ return FALSE; ++} ++ ++static void ++e_shell_window_event_after_cb (EShellWindow *shell_window, ++ GdkEvent *event) ++{ ++ GtkWidget *main_menu; ++ ++ g_return_if_fail (event != NULL); ++ ++ if (event->type != GDK_KEY_PRESS && ++ event->type != GDK_KEY_RELEASE && ++ event->type != GDK_BUTTON_RELEASE && ++ event->type != GDK_FOCUS_CHANGE) ++ return; ++ ++ g_return_if_fail (E_IS_SHELL_WINDOW (shell_window)); ++ ++ if (e_shell_window_get_menubar_visible (shell_window)) ++ return; ++ ++ main_menu = e_shell_window_get_managed_widget (shell_window, "/main-menu"); ++ ++ if (event->type == GDK_KEY_PRESS) { ++ GdkEventKey *key_event; ++ ++ key_event = (GdkEventKey *) event; ++ ++ if ((key_event->keyval == GDK_KEY_Alt_L || key_event->keyval == GDK_KEY_Alt_R) && ++ !(key_event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_SUPER_MASK | GDK_HYPER_MASK | GDK_META_MASK))) { ++ if (shell_window->priv->delayed_menubar_show_id) { ++ g_source_remove (shell_window->priv->delayed_menubar_show_id); ++ shell_window->priv->delayed_menubar_show_id = 0; ++ ++ delayed_menubar_show_cb (shell_window); ++ } else { ++ /* To not flash when using Alt+Tab or similar system-wide shortcuts */ ++ shell_window->priv->delayed_menubar_show_id = ++ e_named_timeout_add (250, delayed_menubar_show_cb, shell_window); ++ } ++ } ++ } else if (event->type != GDK_BUTTON_RELEASE || !(event->button.state & GDK_MOD1_MASK)) { ++ if (shell_window->priv->delayed_menubar_show_id) { ++ g_source_remove (shell_window->priv->delayed_menubar_show_id); ++ shell_window->priv->delayed_menubar_show_id = 0; ++ } ++ ++ if (gtk_widget_get_visible (main_menu)) ++ gtk_widget_hide (main_menu); ++ } ++} ++ ++static gboolean + shell_window_check_is_main_instance (GtkApplication *application, + GtkWindow *window) + { +@@ -444,6 +515,11 @@ e_shell_window_private_constructed (EShellWindow *shell_window) + G_SETTINGS_BIND_DEFAULT); + + g_settings_bind ( ++ settings, "menubar-visible", ++ shell_window, "menubar-visible", ++ G_SETTINGS_BIND_DEFAULT); ++ ++ g_settings_bind ( + settings, "sidebar-visible", + shell_window, "sidebar-visible", + G_SETTINGS_BIND_DEFAULT); +@@ -464,6 +540,12 @@ e_shell_window_private_constructed (EShellWindow *shell_window) + G_SETTINGS_BIND_DEFAULT); + } else { + g_settings_bind ( ++ settings, "menubar-visible-sub", ++ shell_window, "menubar-visible", ++ G_SETTINGS_BIND_DEFAULT | ++ G_SETTINGS_BIND_GET_NO_CHANGES); ++ ++ g_settings_bind ( + settings, "folder-bar-width-sub", + priv->content_pane, "position", + G_SETTINGS_BIND_DEFAULT | +@@ -521,6 +603,9 @@ e_shell_window_private_constructed (EShellWindow *shell_window) + gtk_application_add_window (GTK_APPLICATION (shell), window); + + g_object_unref (settings); ++ ++ g_signal_connect (shell_window, "event-after", ++ G_CALLBACK (e_shell_window_event_after_cb), NULL); + } + + void +@@ -528,6 +613,11 @@ e_shell_window_private_dispose (EShellWindow *shell_window) + { + EShellWindowPrivate *priv = shell_window->priv; + ++ if (priv->delayed_menubar_show_id) { ++ g_source_remove (priv->delayed_menubar_show_id); ++ priv->delayed_menubar_show_id = 0; ++ } ++ + /* Need to disconnect handlers before we unref the shell. */ + if (priv->signal_handler_ids != NULL) { + GArray *array = priv->signal_handler_ids; +diff --git a/shell/e-shell-window-private.h b/shell/e-shell-window-private.h +index 0ef85d5..f761fb8 100644 +--- a/shell/e-shell-window-private.h ++++ b/shell/e-shell-window-private.h +@@ -90,11 +90,14 @@ struct _EShellWindowPrivate { + + guint destroyed : 1; /* XXX Do we still need this? */ + guint safe_mode : 1; ++ guint menubar_visible : 1; + guint sidebar_visible : 1; + guint switcher_visible : 1; + guint taskbar_visible : 1; + guint toolbar_visible : 1; + guint is_main_instance : 1; ++ ++ gulong delayed_menubar_show_id; + }; + + void e_shell_window_private_init (EShellWindow *shell_window); +diff --git a/shell/e-shell-window.c b/shell/e-shell-window.c +index 6d3b3c5..0fe229f 100644 +--- a/shell/e-shell-window.c ++++ b/shell/e-shell-window.c +@@ -38,6 +38,7 @@ enum { + PROP_GEOMETRY, + PROP_SAFE_MODE, + PROP_SHELL, ++ PROP_MENUBAR_VISIBLE, + PROP_SIDEBAR_VISIBLE, + PROP_SWITCHER_VISIBLE, + PROP_TASKBAR_VISIBLE, +@@ -322,6 +323,12 @@ shell_window_set_property (GObject *object, + g_value_get_object (value)); + return; + ++ case PROP_MENUBAR_VISIBLE: ++ e_shell_window_set_menubar_visible ( ++ E_SHELL_WINDOW (object), ++ g_value_get_boolean (value)); ++ return; ++ + case PROP_SIDEBAR_VISIBLE: + e_shell_window_set_sidebar_visible ( + E_SHELL_WINDOW (object), +@@ -387,6 +394,12 @@ shell_window_get_property (GObject *object, + E_SHELL_WINDOW (object))); + return; + ++ case PROP_MENUBAR_VISIBLE: ++ g_value_set_boolean ( ++ value, e_shell_window_get_menubar_visible ( ++ E_SHELL_WINDOW (object))); ++ return; ++ + case PROP_SIDEBAR_VISIBLE: + g_value_set_boolean ( + value, e_shell_window_get_sidebar_visible ( +@@ -507,6 +520,18 @@ shell_window_close_alert (EShellWindow *shell_window) + } + } + ++static void ++shell_window_menubar_deactivate_cb (GtkWidget *main_menu, ++ gpointer user_data) ++{ ++ EShellWindow *shell_window = user_data; ++ ++ g_return_if_fail (E_IS_SHELL_WINDOW (shell_window)); ++ ++ if (!e_shell_window_get_menubar_visible (shell_window)) ++ gtk_widget_hide (main_menu); ++} ++ + static GtkWidget * + shell_window_construct_menubar (EShellWindow *shell_window) + { +@@ -514,7 +539,14 @@ shell_window_construct_menubar (EShellWindow *shell_window) + + main_menu = e_shell_window_get_managed_widget ( + shell_window, "/main-menu"); +- gtk_widget_show (main_menu); ++ ++ g_signal_connect (main_menu, "deactivate", ++ G_CALLBACK (shell_window_menubar_deactivate_cb), shell_window); ++ ++ e_binding_bind_property ( ++ shell_window, "menubar-visible", ++ main_menu, "visible", ++ G_BINDING_SYNC_CREATE); + + e_signal_connect_notify ( + shell_window, "notify::active-view", +@@ -994,6 +1026,24 @@ e_shell_window_class_init (EShellWindowClass *class) + G_PARAM_STATIC_STRINGS)); + + /** ++ * EShellWindow:menubar-visible ++ * ++ * Whether the shell window's menu bar is visible. ++ * ++ * Since: 3.24 ++ **/ ++ g_object_class_install_property ( ++ object_class, ++ PROP_MENUBAR_VISIBLE, ++ g_param_spec_boolean ( ++ "menubar-visible", ++ "Menubar Visible", ++ "Whether the shell window's menu bar is visible", ++ TRUE, ++ G_PARAM_READWRITE | ++ G_PARAM_STATIC_STRINGS)); ++ ++ /** + * EShellWindow:sidebar-visible + * + * Whether the shell window's side bar is visible. +@@ -1565,6 +1615,47 @@ e_shell_window_add_action_group (EShellWindow *shell_window, + } + + /** ++ * e_shell_window_get_menubar_visible: ++ * @shell_window: an #EShellWindow ++ * ++ * Returns %TRUE if @shell_window's menu bar is visible. ++ * ++ * Returns: %TRUE is the menu bar is visible ++ * ++ * Since: 3.24 ++ **/ ++gboolean ++e_shell_window_get_menubar_visible (EShellWindow *shell_window) ++{ ++ g_return_val_if_fail (E_IS_SHELL_WINDOW (shell_window), FALSE); ++ ++ return shell_window->priv->menubar_visible; ++} ++ ++/** ++ * e_shell_window_set_menubar_visible: ++ * @shell_window: an #EShellWindow ++ * @menubar_visible: whether the menu bar should be visible ++ * ++ * Makes @shell_window's menu bar visible or invisible. ++ * ++ * Since: 3.24 ++ **/ ++void ++e_shell_window_set_menubar_visible (EShellWindow *shell_window, ++ gboolean menubar_visible) ++{ ++ g_return_if_fail (E_IS_SHELL_WINDOW (shell_window)); ++ ++ if (shell_window->priv->menubar_visible == menubar_visible) ++ return; ++ ++ shell_window->priv->menubar_visible = menubar_visible; ++ ++ g_object_notify (G_OBJECT (shell_window), "menubar-visible"); ++} ++ ++/** + * e_shell_window_get_sidebar_visible: + * @shell_window: an #EShellWindow + * +diff --git a/shell/e-shell-window.h b/shell/e-shell-window.h +index c67c1ea..1c6c9a5 100644 +--- a/shell/e-shell-window.h ++++ b/shell/e-shell-window.h +@@ -115,6 +115,11 @@ void e_shell_window_set_safe_mode (EShellWindow *shell_window, + gboolean safe_mode); + void e_shell_window_add_action_group (EShellWindow *shell_window, + const gchar *group_name); ++gboolean e_shell_window_get_menubar_visible ++ (EShellWindow *shell_window); ++void e_shell_window_set_menubar_visible ++ (EShellWindow *shell_window, ++ gboolean menubar_visible); + gboolean e_shell_window_get_sidebar_visible + (EShellWindow *shell_window); + void e_shell_window_set_sidebar_visible +diff --git a/ui/evolution-shell.ui b/ui/evolution-shell.ui +index bc7e349..9035fb2 100644 +--- a/ui/evolution-shell.ui ++++ b/ui/evolution-shell.ui +@@ -43,6 +43,7 @@ + + + ++ + + + +-- +cgit v0.12 + diff --git a/SOURCES/evolution-3.22.6-indefinite-message-download.patch b/SOURCES/evolution-3.22.6-indefinite-message-download.patch new file mode 100644 index 0000000..7fafab1 --- /dev/null +++ b/SOURCES/evolution-3.22.6-indefinite-message-download.patch @@ -0,0 +1,25 @@ +diff -up evolution-3.22.6/e-util/e-table-selection-model.c.indefinite-message-download evolution-3.22.6/e-util/e-table-selection-model.c +--- evolution-3.22.6/e-util/e-table-selection-model.c.indefinite-message-download 2014-03-24 10:25:23.000000000 +0100 ++++ evolution-3.22.6/e-util/e-table-selection-model.c 2017-10-19 17:51:10.488332515 +0200 +@@ -127,8 +127,8 @@ model_changed_idle (ETableSelectionModel + g_free (save_id); + } + free_hash (etsm); +- e_selection_model_cursor_changed (E_SELECTION_MODEL (etsm), cursor_row, cursor_col); + e_selection_model_selection_changed (E_SELECTION_MODEL (etsm)); ++ e_selection_model_cursor_changed (E_SELECTION_MODEL (etsm), cursor_row, cursor_col); + } + etsm->model_changed_idle_id = 0; + return FALSE; +diff -up evolution-3.22.6/mail/message-list.c.indefinite-message-download evolution-3.22.6/mail/message-list.c +--- evolution-3.22.6/mail/message-list.c.indefinite-message-download 2017-01-13 16:06:56.000000000 +0100 ++++ evolution-3.22.6/mail/message-list.c 2017-10-19 17:51:14.995332453 +0200 +@@ -5056,7 +5056,7 @@ on_selection_changed_cmd (ETree *tree, + * is also used for other updating. If it is empty, it might just be a setup event + * from etree which we do need to ignore */ + if ((newuid == NULL && message_list->cursor_uid == NULL && selected_count == 0) || +- (message_list->last_sel_single && selected_count == 1 && newuid != NULL && message_list->cursor_uid != NULL && !strcmp (message_list->cursor_uid, newuid))) { ++ (message_list->last_sel_single && selected_count == 1 && message_list->cursor_uid != NULL && (newuid == NULL || !strcmp (message_list->cursor_uid, newuid)))) { + /* noop */ + } else { + g_free (message_list->cursor_uid); diff --git a/SOURCES/evolution-3.22.6-magic-spacebar-with-caret-mode.patch b/SOURCES/evolution-3.22.6-magic-spacebar-with-caret-mode.patch new file mode 100644 index 0000000..e9108de --- /dev/null +++ b/SOURCES/evolution-3.22.6-magic-spacebar-with-caret-mode.patch @@ -0,0 +1,147 @@ +diff -up evolution-3.22.6/modules/mail/e-mail-shell-view-actions.c.magic-spacebar-with-caret-mode evolution-3.22.6/modules/mail/e-mail-shell-view-actions.c +--- evolution-3.22.6/modules/mail/e-mail-shell-view-actions.c.magic-spacebar-with-caret-mode 2016-10-25 22:13:15.000000000 +0200 ++++ evolution-3.22.6/modules/mail/e-mail-shell-view-actions.c 2017-03-24 13:38:49.059671868 +0100 +@@ -1361,27 +1361,21 @@ action_mail_send_receive_send_all_cb (Gt + } + + static void +-action_mail_smart_backward_cb (GtkAction *action, +- EMailShellView *mail_shell_view) ++mail_shell_view_magic_spacebar (EMailShellView *mail_shell_view, ++ gboolean move_forward) + { +- EShellView *shell_view; +- EShellWindow *shell_window; + EMailShellContent *mail_shell_content; + EMailShellSidebar *mail_shell_sidebar; + EMFolderTree *folder_tree; + EMailReader *reader; + EMailView *mail_view; + GtkWidget *message_list; +- GtkToggleAction *toggle_action; + EMailDisplay *display; + GSettings *settings; +- gboolean caret_mode; + gboolean magic_spacebar; + + /* This implements the so-called "Magic Backspace". */ +- +- shell_view = E_SHELL_VIEW (mail_shell_view); +- shell_window = e_shell_view_get_shell_window (shell_view); ++ g_return_if_fail (E_IS_MAIL_SHELL_VIEW (mail_shell_view)); + + mail_shell_content = mail_shell_view->priv->mail_shell_content; + mail_view = e_mail_shell_content_get_mail_view (mail_shell_content); +@@ -1397,27 +1391,14 @@ action_mail_smart_backward_cb (GtkAction + magic_spacebar = g_settings_get_boolean (settings, "magic-spacebar"); + g_object_unref (settings); + +- toggle_action = GTK_TOGGLE_ACTION (ACTION (MAIL_CARET_MODE)); +- caret_mode = gtk_toggle_action_get_active (toggle_action); +- +- if (!e_mail_display_process_magic_spacebar (display, FALSE)) { ++ if (!e_mail_display_process_magic_spacebar (display, move_forward)) { ++ guint32 direction = move_forward ? MESSAGE_LIST_SELECT_NEXT : MESSAGE_LIST_SELECT_PREVIOUS; + +- if (caret_mode || !magic_spacebar) ++ if (!magic_spacebar) + return; + +- /* XXX Are two separate calls really necessary? */ +- +- if (message_list_select ( +- MESSAGE_LIST (message_list), +- MESSAGE_LIST_SELECT_PREVIOUS | +- MESSAGE_LIST_SELECT_INCLUDE_COLLAPSED, +- 0, CAMEL_MESSAGE_SEEN)) +- return; +- +- if (message_list_select ( +- MESSAGE_LIST (message_list), +- MESSAGE_LIST_SELECT_PREVIOUS | +- MESSAGE_LIST_SELECT_WRAP | ++ if (message_list_select (MESSAGE_LIST (message_list), ++ direction | MESSAGE_LIST_SELECT_WRAP | + MESSAGE_LIST_SELECT_INCLUDE_COLLAPSED, + 0, CAMEL_MESSAGE_SEEN)) + return; +@@ -1429,71 +1410,17 @@ action_mail_smart_backward_cb (GtkAction + } + + static void ++action_mail_smart_backward_cb (GtkAction *action, ++ EMailShellView *mail_shell_view) ++{ ++ mail_shell_view_magic_spacebar (mail_shell_view, FALSE); ++} ++ ++static void + action_mail_smart_forward_cb (GtkAction *action, + EMailShellView *mail_shell_view) + { +- EShellView *shell_view; +- EShellWindow *shell_window; +- EMailShellContent *mail_shell_content; +- EMailShellSidebar *mail_shell_sidebar; +- EMFolderTree *folder_tree; +- EMailReader *reader; +- EMailView *mail_view; +- GtkWidget *message_list; +- GtkToggleAction *toggle_action; +- EMailDisplay *display; +- GSettings *settings; +- gboolean caret_mode; +- gboolean magic_spacebar; +- +- /* This implements the so-called "Magic Spacebar". */ +- +- shell_view = E_SHELL_VIEW (mail_shell_view); +- shell_window = e_shell_view_get_shell_window (shell_view); +- +- mail_shell_content = mail_shell_view->priv->mail_shell_content; +- mail_view = e_mail_shell_content_get_mail_view (mail_shell_content); +- +- mail_shell_sidebar = mail_shell_view->priv->mail_shell_sidebar; +- folder_tree = e_mail_shell_sidebar_get_folder_tree (mail_shell_sidebar); +- +- reader = E_MAIL_READER (mail_view); +- display = e_mail_reader_get_mail_display (reader); +- message_list = e_mail_reader_get_message_list (reader); +- +- settings = e_util_ref_settings ("org.gnome.evolution.mail"); +- magic_spacebar = g_settings_get_boolean (settings, "magic-spacebar"); +- g_object_unref (settings); +- +- toggle_action = GTK_TOGGLE_ACTION (ACTION (MAIL_CARET_MODE)); +- caret_mode = gtk_toggle_action_get_active (toggle_action); +- +- if (!e_mail_display_process_magic_spacebar (display, TRUE)) { +- +- if (caret_mode || !magic_spacebar) +- return; +- +- /* XXX Are two separate calls really necessary? */ +- +- if (message_list_select ( +- MESSAGE_LIST (message_list), +- MESSAGE_LIST_SELECT_NEXT | +- MESSAGE_LIST_SELECT_INCLUDE_COLLAPSED, +- 0, CAMEL_MESSAGE_SEEN)) +- return; +- +- if (message_list_select ( +- MESSAGE_LIST (message_list), +- MESSAGE_LIST_SELECT_NEXT | +- MESSAGE_LIST_SELECT_WRAP | +- MESSAGE_LIST_SELECT_INCLUDE_COLLAPSED, +- 0, CAMEL_MESSAGE_SEEN)) +- return; +- +- em_folder_tree_select_next_path (folder_tree, TRUE); +- +- gtk_widget_grab_focus (message_list); +- } ++ mail_shell_view_magic_spacebar (mail_shell_view, TRUE); + } + + static void diff --git a/SOURCES/evolution-3.22.6-meeting-time-selector-crash.patch b/SOURCES/evolution-3.22.6-meeting-time-selector-crash.patch new file mode 100644 index 0000000..451c824 --- /dev/null +++ b/SOURCES/evolution-3.22.6-meeting-time-selector-crash.patch @@ -0,0 +1,16 @@ +diff -up evolution-3.22.6/calendar/gui/e-meeting-time-sel.c.meeting-time-selector-crash evolution-3.22.6/calendar/gui/e-meeting-time-sel.c +--- evolution-3.22.6/calendar/gui/e-meeting-time-sel.c.meeting-time-selector-crash 2016-07-11 14:31:29.000000000 +0200 ++++ evolution-3.22.6/calendar/gui/e-meeting-time-sel.c 2017-04-12 14:53:43.521196869 +0200 +@@ -1427,6 +1427,12 @@ e_meeting_time_selector_refresh_cb (gpoi + { + EMeetingTimeSelector *mts = data; + ++ if (!mts->model) { ++ /* Destroyed, do not do anything */ ++ g_object_unref (mts); ++ return FALSE; ++ } ++ + if (e_meeting_store_get_num_queries (mts->model) == 0) { + GdkCursor *cursor; + GdkWindow *window; diff --git a/SOURCES/evolution-3.22.6-name-selector-entry-fake-changed-signal.patch b/SOURCES/evolution-3.22.6-name-selector-entry-fake-changed-signal.patch new file mode 100644 index 0000000..d5fbaed --- /dev/null +++ b/SOURCES/evolution-3.22.6-name-selector-entry-fake-changed-signal.patch @@ -0,0 +1,62 @@ +diff -up evolution-3.22.6/e-util/e-name-selector-entry.c.name-selector-entry-fake-changed-signal evolution-3.22.6/e-util/e-name-selector-entry.c +--- evolution-3.22.6/e-util/e-name-selector-entry.c.name-selector-entry-fake-changed-signal 2017-01-27 12:06:11.000000000 +0100 ++++ evolution-3.22.6/e-util/e-name-selector-entry.c 2017-04-18 10:51:23.716045722 +0200 +@@ -65,6 +65,8 @@ struct _ENameSelectorEntryPrivate { + GQueue cancellables; + + GHashTable *known_contacts; /* gchar * ~> 1 */ ++ ++ gboolean block_entry_changed_signal; + }; + + enum { +@@ -2028,6 +2030,16 @@ sanitize_entry (ENameSelectorEntry *name + generate_attribute_list (name_selector_entry); + } + ++static void ++maybe_block_entry_changed_cb (ENameSelectorEntry *name_selector_entry, ++ gpointer user_data) ++{ ++ g_return_if_fail (E_IS_NAME_SELECTOR_ENTRY (name_selector_entry)); ++ ++ if (name_selector_entry->priv->block_entry_changed_signal) ++ g_signal_stop_emission_by_name (name_selector_entry, "changed"); ++} ++ + static gboolean + user_focus_in (ENameSelectorEntry *name_selector_entry, + GdkEventFocus *event_focus) +@@ -2037,6 +2049,8 @@ user_focus_in (ENameSelectorEntry *name_ + GString *str = g_string_new (""); + EDestination *dest_dummy = e_destination_new (); + ++ /* To not send fake 'changed' signals, which can influence message composer */ ++ name_selector_entry->priv->block_entry_changed_signal = TRUE; + g_signal_handlers_block_matched (name_selector_entry, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, name_selector_entry); + g_signal_handlers_block_matched (name_selector_entry->priv->destination_store, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, name_selector_entry); + +@@ -2072,6 +2086,7 @@ user_focus_in (ENameSelectorEntry *name_ + + g_signal_handlers_unblock_matched (name_selector_entry->priv->destination_store, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, name_selector_entry); + g_signal_handlers_unblock_matched (name_selector_entry, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, name_selector_entry); ++ name_selector_entry->priv->block_entry_changed_signal = FALSE; + + generate_attribute_list (name_selector_entry); + +@@ -3381,11 +3396,15 @@ e_name_selector_entry_init (ENameSelecto + + name_selector_entry->priv->minimum_query_length = 3; + name_selector_entry->priv->show_address = FALSE; ++ name_selector_entry->priv->block_entry_changed_signal = FALSE; + name_selector_entry->priv->known_contacts = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + + /* Edit signals */ + + g_signal_connect ( ++ name_selector_entry, "changed", ++ G_CALLBACK (maybe_block_entry_changed_cb), NULL); ++ g_signal_connect ( + name_selector_entry, "insert-text", + G_CALLBACK (user_insert_text), name_selector_entry); + g_signal_connect ( diff --git a/SOURCES/evolution-3.22.6-remote-content-cache.patch b/SOURCES/evolution-3.22.6-remote-content-cache.patch new file mode 100644 index 0000000..c134308 --- /dev/null +++ b/SOURCES/evolution-3.22.6-remote-content-cache.patch @@ -0,0 +1,147 @@ +diff -up evolution-3.22.6/mail/e-http-request.c.remote-content-cache evolution-3.22.6/mail/e-http-request.c +--- evolution-3.22.6/mail/e-http-request.c.remote-content-cache 2016-09-19 10:22:58.000000000 +0200 ++++ evolution-3.22.6/mail/e-http-request.c 2017-03-24 13:47:48.814647889 +0100 +@@ -186,7 +186,7 @@ e_http_request_process_sync (EContentReq + GError **error) + { + SoupURI *soup_uri; +- gchar *evo_uri, *use_uri; ++ gchar *evo_uri = NULL, *use_uri; + gchar *mail_uri = NULL; + GInputStream *stream; + gboolean force_load_images = FALSE; +@@ -221,6 +221,14 @@ e_http_request_process_sync (EContentReq + + g_hash_table_remove (query, "__evo-mail"); + ++ /* Required, because soup_uri_set_query_from_form() can change ++ order of arguments, then the URL checksum doesn't match. */ ++ evo_uri = g_hash_table_lookup (query, "__evo-original-uri"); ++ if (evo_uri) ++ evo_uri = g_strdup (evo_uri); ++ ++ g_hash_table_remove (query, "__evo-original-uri"); ++ + /* Remove __evo-load-images if present (and in such case set + * force_load_images to TRUE) */ + force_load_images = g_hash_table_remove (query, "__evo-load-images"); +@@ -229,7 +237,8 @@ e_http_request_process_sync (EContentReq + g_hash_table_unref (query); + } + +- evo_uri = soup_uri_to_string (soup_uri, FALSE); ++ if (!evo_uri) ++ evo_uri = soup_uri_to_string (soup_uri, FALSE); + + if (camel_debug_start ("emformat:requests")) { + printf ( +diff -up evolution-3.22.6/mail/e-mail-display.c.remote-content-cache evolution-3.22.6/mail/e-mail-display.c +--- evolution-3.22.6/mail/e-mail-display.c.remote-content-cache 2017-03-24 13:47:48.803647890 +0100 ++++ evolution-3.22.6/mail/e-mail-display.c 2017-03-24 13:47:48.814647889 +0100 +@@ -1745,6 +1745,10 @@ mail_display_uri_requested_cb (EWebView + enc = soup_uri_encode (mail_uri, NULL); + g_hash_table_insert (query, g_strdup ("__evo-mail"), enc); + ++ /* Required, because soup_uri_set_query_from_form() can change ++ order of arguments, then the URL checksum doesn't match. */ ++ g_hash_table_insert (query, g_strdup ("__evo-original-uri"), g_strdup (uri)); ++ + if (display->priv->force_image_load || can_download_uri) { + g_hash_table_insert ( + query, +diff -up evolution-3.22.6/modules/webkit-editor/e-webkit-editor.c.remote-content-cache evolution-3.22.6/modules/webkit-editor/e-webkit-editor.c +--- evolution-3.22.6/modules/webkit-editor/e-webkit-editor.c.remote-content-cache 2017-03-24 13:47:48.804647890 +0100 ++++ evolution-3.22.6/modules/webkit-editor/e-webkit-editor.c 2017-03-24 13:50:26.450640886 +0100 +@@ -23,6 +23,8 @@ + #include "web-extension/e-editor-web-extension-names.h" + + #include ++#include "mail/e-http-request.h" ++ + #include + + #define E_WEBKIT_EDITOR_GET_PRIVATE(obj) \ +@@ -4989,9 +4991,58 @@ webkit_editor_get_web_extension (EWebKit + } + + static void ++webkit_editor_uri_request_done_cb (GObject *source_object, ++ GAsyncResult *result, ++ gpointer user_data) ++{ ++ WebKitURISchemeRequest *request = user_data; ++ GInputStream *stream = NULL; ++ gint64 stream_length = -1; ++ gchar *mime_type = NULL; ++ GError *error = NULL; ++ ++ g_return_if_fail (E_IS_CONTENT_REQUEST (source_object)); ++ g_return_if_fail (WEBKIT_IS_URI_SCHEME_REQUEST (request)); ++ ++ if (!e_content_request_process_finish (E_CONTENT_REQUEST (source_object), ++ result, &stream, &stream_length, &mime_type, &error)) { ++ webkit_uri_scheme_request_finish_error (request, error); ++ g_clear_error (&error); ++ } else { ++ webkit_uri_scheme_request_finish (request, stream, stream_length, mime_type); ++ ++ g_clear_object (&stream); ++ g_free (mime_type); ++ } ++ ++ g_object_unref (request); ++} ++ ++static void ++webkit_editor_process_uri_request_cb (WebKitURISchemeRequest *request, ++ gpointer user_data) ++{ ++ EContentRequest *content_request = user_data; ++ const gchar *uri; ++ GObject *requester; ++ ++ g_return_if_fail (WEBKIT_IS_URI_SCHEME_REQUEST (request)); ++ g_return_if_fail (E_IS_CONTENT_REQUEST (content_request)); ++ ++ uri = webkit_uri_scheme_request_get_uri (request); ++ requester = G_OBJECT (webkit_uri_scheme_request_get_web_view (request)); ++ ++ g_return_if_fail (e_content_request_can_process_uri (content_request, uri)); ++ ++ e_content_request_process (content_request, uri, requester, NULL, ++ webkit_editor_uri_request_done_cb, g_object_ref (request)); ++} ++ ++static void + webkit_editor_constructed (GObject *object) + { + EWebKitEditor *wk_editor; ++ EContentRequest *content_request; + gchar **languages; + WebKitWebContext *web_context; + WebKitSettings *web_settings; +@@ -5012,6 +5063,13 @@ webkit_editor_constructed (GObject *obje + webkit_web_context_set_spell_checking_languages (web_context, (const gchar * const *) languages); + g_strfreev (languages); + ++ content_request = e_http_request_new (); ++ webkit_web_context_register_uri_scheme (web_context, "evo-http", webkit_editor_process_uri_request_cb, ++ g_object_ref (content_request), g_object_unref); ++ webkit_web_context_register_uri_scheme (web_context, "evo-https", webkit_editor_process_uri_request_cb, ++ g_object_ref (content_request), g_object_unref); ++ g_object_unref (content_request); ++ + webkit_web_view_set_editable (web_view, TRUE); + + web_settings = webkit_web_view_get_settings (web_view); +diff -up evolution-3.22.6/modules/webkit-editor/Makefile.am.remote-content-cache evolution-3.22.6/modules/webkit-editor/Makefile.am +--- evolution-3.22.6/modules/webkit-editor/Makefile.am.remote-content-cache 2017-03-24 13:51:12.164638855 +0100 ++++ evolution-3.22.6/modules/webkit-editor/Makefile.am 2017-03-24 13:51:23.553638350 +0100 +@@ -21,6 +21,7 @@ module_webkit_editor_la_SOURCES = \ + + module_webkit_editor_la_LIBADD = \ + $(top_builddir)/e-util/libevolution-util.la \ ++ $(top_builddir)/mail/libevolution-mail.la \ + $(EVOLUTION_DATA_SERVER_LIBS) \ + $(GNOME_PLATFORM_LIBS) \ + $(NULL) diff --git a/SOURCES/evolution-3.22.6-wayland-hidden-menu-interact.patch b/SOURCES/evolution-3.22.6-wayland-hidden-menu-interact.patch new file mode 100644 index 0000000..4c06ab7 --- /dev/null +++ b/SOURCES/evolution-3.22.6-wayland-hidden-menu-interact.patch @@ -0,0 +1,83 @@ +diff -up evolution-3.22.6/shell/e-shell-window-private.c.wayland-hidden-menu-interact evolution-3.22.6/shell/e-shell-window-private.c +--- evolution-3.22.6/shell/e-shell-window-private.c.wayland-hidden-menu-interact 2017-11-16 13:59:52.598583231 +0100 ++++ evolution-3.22.6/shell/e-shell-window-private.c 2017-11-16 13:59:52.630583230 +0100 +@@ -261,7 +261,29 @@ delayed_menubar_show_cb (gpointer user_d + main_menu = e_shell_window_get_managed_widget (shell_window, "/main-menu"); + + gtk_widget_show (main_menu); +- gtk_widget_grab_focus (main_menu); ++ } ++ ++ return FALSE; ++} ++ ++static gboolean ++delayed_menubar_hide_cb (gpointer user_data) ++{ ++ EShellWindow *shell_window = user_data; ++ ++ g_return_val_if_fail (E_IS_SHELL_WINDOW (shell_window), FALSE); ++ ++ shell_window->priv->delayed_menubar_hide_id = 0; ++ ++ if (!e_shell_window_get_menubar_visible (shell_window) && ++ !shell_window->priv->delayed_menubar_show_id) { ++ GtkWidget *main_menu; ++ ++ main_menu = e_shell_window_get_managed_widget (shell_window, "/main-menu"); ++ ++ if (gtk_widget_get_visible (main_menu) && ++ !gtk_menu_shell_get_selected_item (GTK_MENU_SHELL (main_menu))) ++ gtk_widget_hide (main_menu); + } + + return FALSE; +@@ -295,6 +317,11 @@ e_shell_window_event_after_cb (EShellWin + + if ((key_event->keyval == GDK_KEY_Alt_L || key_event->keyval == GDK_KEY_Alt_R) && + !(key_event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_SUPER_MASK | GDK_HYPER_MASK | GDK_META_MASK))) { ++ if (shell_window->priv->delayed_menubar_hide_id) { ++ g_source_remove (shell_window->priv->delayed_menubar_hide_id); ++ shell_window->priv->delayed_menubar_hide_id = 0; ++ } ++ + if (shell_window->priv->delayed_menubar_show_id) { + g_source_remove (shell_window->priv->delayed_menubar_show_id); + shell_window->priv->delayed_menubar_show_id = 0; +@@ -312,8 +339,11 @@ e_shell_window_event_after_cb (EShellWin + shell_window->priv->delayed_menubar_show_id = 0; + } + +- if (gtk_widget_get_visible (main_menu)) +- gtk_widget_hide (main_menu); ++ if (gtk_widget_get_visible (main_menu) && ++ !shell_window->priv->delayed_menubar_hide_id) { ++ shell_window->priv->delayed_menubar_hide_id = ++ e_named_timeout_add (500, delayed_menubar_hide_cb, shell_window); ++ } + } + } + +@@ -618,6 +648,11 @@ e_shell_window_private_dispose (EShellWi + priv->delayed_menubar_show_id = 0; + } + ++ if (priv->delayed_menubar_hide_id) { ++ g_source_remove (priv->delayed_menubar_hide_id); ++ priv->delayed_menubar_hide_id = 0; ++ } ++ + /* Need to disconnect handlers before we unref the shell. */ + if (priv->signal_handler_ids != NULL) { + GArray *array = priv->signal_handler_ids; +diff -up evolution-3.22.6/shell/e-shell-window-private.h.wayland-hidden-menu-interact evolution-3.22.6/shell/e-shell-window-private.h +--- evolution-3.22.6/shell/e-shell-window-private.h.wayland-hidden-menu-interact 2017-11-16 13:59:52.630583230 +0100 ++++ evolution-3.22.6/shell/e-shell-window-private.h 2017-11-16 14:01:12.261582129 +0100 +@@ -98,6 +98,7 @@ struct _EShellWindowPrivate { + guint is_main_instance : 1; + + gulong delayed_menubar_show_id; ++ gulong delayed_menubar_hide_id; + }; + + void e_shell_window_private_init (EShellWindow *shell_window); diff --git a/SPECS/evolution.spec b/SPECS/evolution.spec new file mode 100644 index 0000000..a5c4396 --- /dev/null +++ b/SPECS/evolution.spec @@ -0,0 +1,3170 @@ +%global _changelog_trimtime %(date +%s -d "1 year ago") + +%define glib2_version 2.50.3 +%define gtk3_version 3.22.9 +%define gnome_autoar_version 0.1.1 +%define gnome_desktop_version 2.91.3 +%define gnome_doc_utils_version 0.8.0 +%define intltool_version 0.50.2-7 +%define libgdata_version 0.17.7 +%define libgweather_version 3.20.4 +%define libsoup_version 2.42 +%define webkit2gtk_version 2.14.5 + +%define evo_base_version 3.22 + +%define last_anjal_version 0.3.2-3 +%define last_libgal2_version 2:2.5.3-2 +%define last_evo_nm_version 3.5.0 +%define last_evo_perl_version 3.21.90 + +%define ldap_support 1 +%define libnotify_support 1 +%define libpst_support 1 + +# Coverity scan can override this to 0, to skip checking in gtk-doc generated code +%{!?with_docs: %global with_docs 1} + +%define evo_plugin_dir %{_libdir}/evolution/plugins + +### Abstract ### + +Name: evolution +Version: 3.22.6 +Release: 14%{?dist} +Group: Applications/Productivity +Summary: Mail and calendar client for GNOME +License: GPLv2+ and GFDL +URL: https://wiki.gnome.org/Apps/Evolution +BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) +Source: http://download.gnome.org/sources/%{name}/3.22/%{name}-%{version}.tar.xz + +Obsoletes: anjal <= %{last_anjal_version} +Obsoletes: libgal2 <= %{last_libgal2_version} +Obsoletes: evolution-NetworkManager < %{last_evo_nm_version} +Obsoletes: evolution-perl < %{last_evo_perl_version} + +### Patches ### + +Patch01: evolution-3.22.6-hide-menu-option.patch +Patch02: evolution-3.22.6-coverity-scan-issues.patch + +# RH bug #1435137 +Patch03: evolution-3.22.6-composer-image-insert-undo.patch + +# RH bug #1435586 +Patch04: evolution-3.22.6-magic-spacebar-with-caret-mode.patch + +# RH bug #1435589 +Patch05: evolution-3.22.6-composer-font-color.patch + +# RH bug #1435598 +Patch06: evolution-3.22.6-remote-content-cache.patch + +# RH bug #1441145 +Patch07: evolution-3.22.6-meeting-time-selector-crash.patch + +# RH bug #1441283 +Patch08: evolution-3.22.6-composer-dnd.patch + +# RH bug #1440835 +Patch09: evolution-3.22.6-name-selector-entry-fake-changed-signal.patch + +# RH bug #1443023 +Patch10: evolution-3.22.6-calendar-print-action.patch + +# RH bug #1445467 +Patch11: evolution-3.22.6-comp-editor-changed.patch + +# RH bug #1444073 +Patch12: evolution-3.22.6-folder-changed-blocked.patch + +# RH bug #1449283 +Patch13: evolution-3.22.6-indefinite-message-download.patch + +# RH bug #1512859 +Patch14: evolution-3.22.6-gtype-init-workaround.patch + +# RH bug #1513962 +Patch15: evolution-3.22.6-wayland-hidden-menu-interact.patch + +## Dependencies ### + +Requires: gvfs +Requires: gtkspell3 +Requires: highlight + +### Build Dependencies ### + +BuildRequires: autoconf >= 2.59 +BuildRequires: automake >= 1.9 +BuildRequires: desktop-file-utils +BuildRequires: gettext +BuildRequires: gnome-common +BuildRequires: gnome-doc-utils >= %{gnome_doc_utils_version} +BuildRequires: gtk-doc +BuildRequires: highlight +BuildRequires: intltool >= %{intltool_version} +BuildRequires: itstool +BuildRequires: libtool >= 1.5 +BuildRequires: pkgconfig +BuildRequires: yelp-tools + +BuildRequires: pkgconfig(atk) +BuildRequires: pkgconfig(cairo-gobject) +BuildRequires: pkgconfig(camel-1.2) >= %{version} +BuildRequires: pkgconfig(cryptui-0.0) +BuildRequires: pkgconfig(enchant) +BuildRequires: pkgconfig(gail-3.0) >= %{gtk3_version} +BuildRequires: pkgconfig(gcr-3) +BuildRequires: pkgconfig(gdk-pixbuf-2.0) +BuildRequires: pkgconfig(gio-2.0) >= %{glib2_version} +BuildRequires: pkgconfig(gmodule-2.0) >= %{glib2_version} +#BuildRequires: pkgconfig(gnome-autoar-0) >= %{gnome_autoar_version} +#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(gweather-3.0) >= %{libgweather_version} +BuildRequires: pkgconfig(iso-codes) +BuildRequires: pkgconfig(libcanberra-gtk3) +BuildRequires: pkgconfig(libebackend-1.2) >= %{version} +BuildRequires: pkgconfig(libebook-1.2) >= %{version} +BuildRequires: pkgconfig(libecal-1.2) >= %{version} +BuildRequires: pkgconfig(libedataserver-1.2) >= %{version} +BuildRequires: pkgconfig(libgdata) >= %{libgdata_version} +BuildRequires: pkgconfig(libsoup-2.4) >= %{libsoup_version} +BuildRequires: pkgconfig(libxml-2.0) +BuildRequires: pkgconfig(nspr) +BuildRequires: pkgconfig(nss) +BuildRequires: pkgconfig(shared-mime-info) +BuildRequires: pkgconfig(webkit2gtk-4.0) >= %{webkit2gtk_version} + +%if %{ldap_support} +BuildRequires: openldap-devel >= 2.0.11 +%endif + +%if %{libnotify_support} +BuildRequires: pkgconfig(libnotify) +%endif + +%if %{libpst_support} +BuildRequires: pkgconfig(libpst) +%endif + +%description +Evolution is the GNOME mailer, calendar, contact manager and +communications tool. The components which make up Evolution +are tightly integrated with one another and act as a seamless +personal information-management tool. + +%package devel +Group: Development/Libraries +Summary: Development files for building against %{name} +Requires: %{name} = %{version}-%{release} +Requires: pkgconfig(camel-1.2) >= %{version} +Requires: pkgconfig(cryptui-0.0) +Requires: pkgconfig(enchant) +Requires: pkgconfig(gtk+-3.0) >= %{gtk3_version} +Requires: pkgconfig(gtkspell3-3.0) +Requires: pkgconfig(gweather-3.0) >= %{libgweather_version} +Requires: pkgconfig(libebackend-1.2) >= %{version} +Requires: pkgconfig(libebook-1.2) >= %{version} +Requires: pkgconfig(libecal-1.2) >= %{version} +Requires: pkgconfig(libedataserver-1.2) >= %{version} +Requires: pkgconfig(libgdata) >= %{libgdata_version} +Requires: pkgconfig(libsoup-2.4) >= %{libsoup_version} +Requires: pkgconfig(libxml-2.0) +Obsoletes: libgal2-devel <= %{last_libgal2_version} + +%description devel +Development files needed for building things which link against %{name}. + +%package devel-docs +Summary: Developer documentation for Evolution +Group: Development/Libraries +Requires: devhelp +Requires: %{name}-devel = %{version}-%{release} +BuildArch: noarch + +%description devel-docs +This package contains developer documentation for Evolution. + +%if %{with_docs} +%package help +Group: Applications/Productivity +Summary: Help files for %{name} +Requires: %{name} = %{version}-%{release} +Requires: yelp +BuildArch: noarch + +%description help +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} + +%description pst +This package contains the plugin to import Microsoft Personal Storage Table +(PST) files used by Microsoft Outlook and Microsoft Exchange. +%endif + +#%package tests +#Summary: Tests for the %{name} package +#Group: Development/Libraries +#Requires: %{name}%{?_isa} = %{version}-%{release} +# +#%description tests +#The %{name}-tests package contains tests that can be used to verify +#the functionality of the installed %{name} package. + +%prep +%setup -q -n evolution-%{version} +%patch01 -p1 -b .hide-menu-option +%patch02 -p1 -b .coverity-scan-issues +%patch03 -p1 -b .composer-image-insert-undo +%patch04 -p1 -b .magic-spacebar-with-caret-mode +%patch05 -p1 -b .composer-font-color +%patch06 -p1 -b .remote-content-cache +%patch07 -p1 -b .meeting-time-selector-crash +%patch08 -p1 -b .composer-dnd +%patch09 -p1 -b .name-selector-entry-fake-changed-signal +%patch10 -p1 -b .calendar-print-action +%patch11 -p1 -b .comp-editor-changed +%patch12 -p1 -b .folder-changed-blocked +%patch13 -p1 -b .indefinite-message-download +%patch14 -p1 -b .gtype-init-workaround +%patch15 -p1 -b .wayland-hidden-menu-interact + +# Remove the welcome email from Novell +for inbox in mail/default/*/Inbox; do + echo -n "" > $inbox +done + +%build +# define all of our flags, this is kind of ugly :( +%if %{ldap_support} +%define ldap_flags --with-openldap=yes +%else +%define ldap_flags --without-openldap +%endif + +%define ssl_flags --enable-nss=yes --enable-smime=yes + +if ! pkg-config --exists nss; then + echo "Unable to find suitable version of mozilla nss to use!" + exit 1 +fi + +%if %{with_docs} +%define gtkdoc_flags --enable-gtk-doc --with-help +%else +%define gtkdoc_flags --disable-gtk-doc --without-help +%endif + +CFLAGS="$RPM_OPT_FLAGS -fPIC -DLDAP_DEPRECATED -Wno-sign-compare -Wno-deprecated-declarations"; export CFLAGS + +# Regenerate configure to pick up configure.ac changes +aclocal -I m4 +autoheader +automake --add-missing +libtoolize +intltoolize --force +autoconf + +%configure \ + --disable-maintainer-mode \ + --with-sub-version=" (%{version}-%{release})" \ + %ldap_flags %ssl_flags %gtkdoc_flags \ + --disable-autoar \ + --enable-plugins=all \ + --disable-installed-tests +export tagname=CC +make %{?_smp_mflags} LIBTOOL=/usr/bin/libtool CFLAGS="$CFLAGS -fno-strict-aliasing" + +%if %{with_docs} + +# Strip unneeded translations from .mo files. +# This reduces the RPM size by several megabytes. +# +# Disabled in RHEL, because it's causing multilib issue in .mo files, +# due to different time in POT-Creation-Date key of those .mo files. +# +#cd po +#grep -v ".*[.]desktop[.]in[.]in$" POTFILES.in > POTFILES.keep +#mv POTFILES.keep POTFILES.in +#intltool-update --gettext-package=%{name}-%{evo_base_version} --pot +#for p in *.po; do +# msgmerge $p %{name}-%{evo_base_version}.pot > $p.out +# msgfmt -o `basename $p .po`.gmo $p.out +#done +#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} +for f in $helpdir/C/figures/*.png; do + b="$(basename $f)" + for d in $helpdir/*; do + if [ -d "$d" -a "$d" != "$helpdir/C" ]; then + g="$d/figures/$b" + if [ -f "$g" ]; then + if cmp -s $f $g; then + rm "$g"; ln -s "../../C/figures/$b" "$g" + fi + fi + fi + done +done + +# %%{with_docs} +%endif + +%install +rm -rf $RPM_BUILD_ROOT +export GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 +export tagname=CC +make LIBTOOL=/usr/bin/libtool DESTDIR=$RPM_BUILD_ROOT install +unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL + +# remove libtool archives for importers and the like +find $RPM_BUILD_ROOT/%{_libdir}/evolution -name '*.la' -exec rm {} \; + +# remove statically built libraries: +find $RPM_BUILD_ROOT/%{_libdir}/evolution -name '*.a' -exec rm {} \; + +# remove test GIO modules directory +rm -r $RPM_BUILD_ROOT/%{_libdir}/evolution/test-gio-modules + +%find_lang evolution-%{evo_base_version} --all-name --with-gnome + +grep "/usr/share/locale" evolution-%{evo_base_version}.lang > translations.lang +%if %{with_docs} +grep -v "/usr/share/locale" evolution-%{evo_base_version}.lang > help.lang +%endif + +%post +/sbin/ldconfig +/usr/bin/update-desktop-database &> /dev/null || : +touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : + +%postun +/sbin/ldconfig +/usr/bin/update-desktop-database &> /dev/null || : +if [ $1 -eq 0 ] ; then + touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : + gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : + glib-compile-schemas %{_datadir}/glib-2.0/schemas &>/dev/null || : +fi + +%posttrans +gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : +glib-compile-schemas %{_datadir}/glib-2.0/schemas &>/dev/null || : + +%clean +rm -rf $RPM_BUILD_ROOT + +%files -f translations.lang +%doc AUTHORS COPYING NEWS README + +# GSettings schemas: +%{_datadir}/GConf/gsettings/evolution.convert + +%{_datadir}/glib-2.0/schemas/org.gnome.evolution.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.evolution.shell.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.evolution.addressbook.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.evolution.calendar.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.evolution.mail.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.evolution.importer.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.evolution.bogofilter.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.evolution.spamassassin.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.attachment-reminder.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.autocontacts.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.email-custom-header.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.external-editor.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.face-picture.gschema.xml +%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.itip.gschema.xml +%{_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.templates.gschema.xml + +# The main executable +%{_bindir}/evolution + +%{_datadir}/appdata/evolution.appdata.xml + +# Desktop files: +%{_datadir}/applications/evolution.desktop +%{_sysconfdir}/xdg/autostart/evolution-alarm-notify.desktop + +# Icons: +%{_datadir}/icons/hicolor/16x16/apps/* +%{_datadir}/icons/hicolor/22x22/apps/* +%{_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/* + +# The main data directory +# (have not attempted to split this up into an explicit list) +%dir %{_datadir}/evolution +%{_datadir}/evolution + +# Modules: +%dir %{_libdir}/evolution +%dir %{_libdir}/evolution/modules +%{_libdir}/evolution/modules/module-addressbook.so +%{_libdir}/evolution/modules/module-backup-restore.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-calendar.so +%{_libdir}/evolution/modules/module-composer-autosave.so +%{_libdir}/evolution/modules/module-contact-photos.so +%{_libdir}/evolution/modules/module-gravatar.so +%{_libdir}/evolution/modules/module-itip-formatter.so +%{_libdir}/evolution/modules/module-mail-config.so +%{_libdir}/evolution/modules/module-mail.so +%{_libdir}/evolution/modules/module-mailto-handler.so +%{_libdir}/evolution/modules/module-mdn.so +%{_libdir}/evolution/modules/module-offline-alert.so +%{_libdir}/evolution/modules/module-prefer-plain.so +%{_libdir}/evolution/modules/module-plugin-lib.so +%{_libdir}/evolution/modules/module-plugin-manager.so +%{_libdir}/evolution/modules/module-settings.so +%{_libdir}/evolution/modules/module-startup-wizard.so +%{_libdir}/evolution/modules/module-text-highlight.so +%{_libdir}/evolution/modules/module-vcard-inline.so +%{_libdir}/evolution/modules/module-webkit-editor.so +%{_libdir}/evolution/modules/module-webkit-inspector.so + +# Shared libraries: +%{_libdir}/evolution/libevolution-mail-composer.so +%{_libdir}/evolution/libeabutil.so +%{_libdir}/evolution/libecontacteditor.so +%{_libdir}/evolution/libecontactlisteditor.so +%{_libdir}/evolution/libemail-engine.so +%{_libdir}/evolution/libevolution-mail-formatter.so +%{_libdir}/evolution/libevolution-shell.so +%{_libdir}/evolution/libessmime.so +%{_libdir}/evolution/libevolution-util.so +%{_libdir}/evolution/libevolution-addressbook-importers.so +%{_libdir}/evolution/libevolution-calendar.so +%{_libdir}/evolution/libevolution-calendar-importers.so +%{_libdir}/evolution/libevolution-mail-importers.so +%{_libdir}/evolution/libevolution-mail.so +%{_libdir}/evolution/libevolution-smime.so +%{_libdir}/evolution/libgnomecanvas.so + +# WebKit2 Extensions +%{_libdir}/evolution/web-extensions/libedomutils.so +%{_libdir}/evolution/web-extensions/libewebextension.so +%{_libdir}/evolution/web-extensions/libmoduleitipformatterwebextension.so +%{_libdir}/evolution/web-extensions/webkit-editor/libewebkiteditorwebextension.so + +# Various libexec programs: +%dir %{_libexecdir}/evolution +%{_libexecdir}/evolution/evolution-alarm-notify +%{_libexecdir}/evolution/evolution-backup +%{_libexecdir}/evolution/killev + +# The plugin directory: +%dir %{evo_plugin_dir} + +# The various plugins follow; they are all part of the main package: +# (note that there are various resources such as ui and pixmap files that +# are built as part of specific plugins but which are currently packaged using +# globs above; the purpose of the separation below is to be more explicit about +# which plugins we ship) +%{evo_plugin_dir}/org-gnome-evolution-attachment-reminder.eplug +%{evo_plugin_dir}/liborg-gnome-evolution-attachment-reminder.so + +%{evo_plugin_dir}/org-gnome-email-custom-header.eplug +%{evo_plugin_dir}/liborg-gnome-email-custom-header.so + +%{evo_plugin_dir}/org-gnome-evolution-bbdb.eplug +%{evo_plugin_dir}/liborg-gnome-evolution-bbdb.so + +%{evo_plugin_dir}/org-gnome-external-editor.eplug +%{evo_plugin_dir}/liborg-gnome-external-editor.so + +%{evo_plugin_dir}/org-gnome-face.eplug +%{evo_plugin_dir}/liborg-gnome-face.so + +%{evo_plugin_dir}/org-gnome-mailing-list-actions.eplug +%{evo_plugin_dir}/liborg-gnome-mailing-list-actions.so + +%{evo_plugin_dir}/org-gnome-mail-notification.eplug +%{evo_plugin_dir}/liborg-gnome-mail-notification.so + +%{evo_plugin_dir}/org-gnome-mail-to-task.eplug +%{evo_plugin_dir}/liborg-gnome-mail-to-task.so + +%{evo_plugin_dir}/org-gnome-prefer-plain.eplug +%{evo_plugin_dir}/liborg-gnome-prefer-plain.so + +%{evo_plugin_dir}/org-gnome-publish-calendar.eplug +%{evo_plugin_dir}/liborg-gnome-publish-calendar.so + +%{evo_plugin_dir}/org-gnome-save-calendar.eplug +%{evo_plugin_dir}/liborg-gnome-save-calendar.so + +%{evo_plugin_dir}/org-gnome-templates.eplug +%{evo_plugin_dir}/liborg-gnome-templates.so + +%{evo_plugin_dir}/org-gnome-dbx-import.eplug +%{evo_plugin_dir}/liborg-gnome-dbx-import.so + + +%files devel +%{_includedir}/evolution +%{_libdir}/pkgconfig/evolution-calendar-3.0.pc +%{_libdir}/pkgconfig/evolution-mail-3.0.pc +%{_libdir}/pkgconfig/evolution-shell-3.0.pc +%{_libdir}/pkgconfig/libemail-engine.pc + +%files devel-docs +%doc %{_datadir}/gtk-doc/html/evolution-mail-composer +%doc %{_datadir}/gtk-doc/html/evolution-mail-engine +%doc %{_datadir}/gtk-doc/html/evolution-mail-formatter +%doc %{_datadir}/gtk-doc/html/evolution-shell +%doc %{_datadir}/gtk-doc/html/evolution-util + +%if %{with_docs} +%files help -f help.lang +%dir %{_datadir}/help/*/evolution +%endif + +%files bogofilter +%{_libdir}/evolution/modules/module-bogofilter.so +%{_datadir}/appdata/evolution-bogofilter.metainfo.xml + +%files spamassassin +%{_libdir}/evolution/modules/module-spamassassin.so +%{_datadir}/appdata/evolution-spamassassin.metainfo.xml + +%if %{libpst_support} +%files pst +%{_datadir}/appdata/evolution-pst.metainfo.xml +%{evo_plugin_dir}/org-gnome-pst-import.eplug +%{evo_plugin_dir}/liborg-gnome-pst-import.so +%endif + +#%files tests +#%{_libexecdir}/%{name}/installed-tests +#%{_datadir}/installed-tests + +%changelog +* Mon Jan 22 2018 Milan Crha - 3.22.6-14 +- Obsolete evolution-perl subpackage (RH bug #1516655) + +* Thu Nov 16 2017 Milan Crha - 3.22.6-13 +- Add patch for RH bug #1513962 ([Wayland] Alt-shown hidden menubar cannot be interacted with) + +* Thu Nov 16 2017 Milan Crha - 3.22.6-12 +- Add patch for RH bug #1512859 (Add workaround for glib type init deadlock) + +* Thu Oct 19 2017 Milan Crha - 3.22.6-11 +- Add patch for RH bug #1449283 (Repeated IMAP message download during folder update) + +* Mon May 29 2017 Milan Crha - 3.22.6-10 +- Add patch for RH bug #1444073 (Folders do not show correct unread message count) + +* Thu Apr 27 2017 Milan Crha - 3.22.6-9 +- Add patch for RH bug #1445467 (Component editor marked changed after open) + +* Wed Apr 19 2017 Milan Crha - 3.22.6-8 +- Add patch for RH bug #1443023 (Calendar Print skips print dialog) + +* Tue Apr 18 2017 Milan Crha - 3.22.6-7 +- Add patch for RH bug #1440835 (Upon draft saving evolution opens redundant warning message) + +* Thu Apr 13 2017 Milan Crha - 3.22.6-6 +- Add patch for RH bug #1441283 (Evolution drag and drop to composer ends in a freeze) + +* Wed Apr 12 2017 Milan Crha - 3.22.6-5 +- Add patch for RH bug #1441145 (Crash under e_meeting_time_selector_refresh_cb()) + +* Fri Mar 24 2017 Milan Crha - 3.22.6-4 +- Add patch for RH bug #1435137 (Cannot undo image insert in HTML composer body) +- Add patch for RH bug #1435586 (magic spacebar doesn't work with caret mode) +- Add patch for RH bug #1435589 (Can't change font color in HTML composer) +- Add patch for RH bug #1435598 (Cached remote content not always found in cache) + +* Thu Mar 16 2017 Milan Crha - 3.22.6-3 +- Add patch to address some of the Coverity scan issues + +* Tue Mar 14 2017 Milan Crha - 3.22.6-2 +- Correct multilib issue with .mo files and disable 'tests' subpackage + +* Mon Mar 13 2017 Milan Crha - 3.22.6-1 +- Update to 3.22.6 upstream release +- Add patch to add an option to hide menu bar + +* Thu Feb 16 2017 Kalev Lember - 3.22.5-3 +- Drop the workaround for RH bug #1422632 now that intltool is fixed + +* Thu Feb 16 2017 Milan Crha - 3.22.5-2 +- Require enchant development package in devel subpackage + +* Wed Feb 15 2017 Milan Crha - 3.22.5-1 +- Rebase to 3.22.5 + +* Tue Aug 23 2016 Milan Crha - 3.12.11-22 +- Update patch for RH bug #1261737 (Avoid vertical scrolling in the filtering rules editor dialog) + +* Thu Jun 23 2016 Milan Crha - 3.12.11-21 +- Update patch for RH bug #1221523 (Update translations) + +* Wed Jun 22 2016 Milan Crha - 3.12.11-20 +- Correct version check typo in Requires: + +* Mon Jun 20 2016 Milan Crha - 3.12.11-19 +- Add patch for RH bug #1347672 (GalA11yETableItem can have stored incorrect row count sometimes) + +* Wed Mar 23 2016 Milan Crha - 3.12.11-18 +- Add patch for RH bug #1320466 (Send/Receive dialog can be left opened with empty content) + +* Mon Mar 21 2016 Milan Crha - 3.12.11-17 +- Update patch for RH bug #1284563 (Searches for user avatars on gravatar cannot be disabled) +- Add patch for RH bug #1070749 ([IMAPx] Try to autodetect server folder variants for local folders and use them) + +* Thu Mar 17 2016 Milan Crha - 3.12.11-16 +- Add patch for RH bug #1221523 (Update translations) +- Add patch for RH bug #1261737 (Avoid vertical scrolling in the filtering rules editor dialog) +- Add patch for RH bug #1265613 (Use configured Date/Time format in Tasks/Memos Preview) +- Add patch for RH bug #1284563 (Searches for user avatars on gravatar cannot be disabled) +- Add patch for RH bug #1300358 (Do not let itip-formatter plugin disable) + +* Wed Aug 19 2015 Milan Crha - 3.12.11-15 +- Update patch for RH bug #1224758 (Parse attachments on demand, not on message open) + +* Fri Aug 14 2015 Milan Crha - 3.12.11-14 +- Add patch for RH bug #1252792 (Crash in ect_dispose() on quit) + +* Tue Aug 11 2015 Milan Crha - 3.12.11-13 +- Add patch for RH bug #1251846 ([ESpellEntry] Do not touch entry when its IM is in the preedit mode) + +* Mon Jul 27 2015 Milan Crha - 3.12.11-12 +- Add patch for RH bug #1246511 (Reminder dialog sometimes doesn't identify URLs correctly) + +* Wed Jul 15 2015 Milan Crha - 3.12.11-11 +- Update patch for RH bug #1226925 (e_client_cache_get_client_sync() gets stuck) + +* Wed Jul 08 2015 Milan Crha - 3.12.11-10 +- Rebuild against updated libical and evolution-data-server + +* Wed Jul 08 2015 Milan Crha - 3.12.11-9 +- Rebuild against updated libical and evolution-data-server + +* Tue Jun 16 2015 Milan Crha - 3.12.11-8 +- Add patch for RH bug #1231196 (Use configured Date/Time format in Tasks/Memos tooltips) +- Add patch for RH bug #1231201 (Distinguish events visually based on their accept status) + +* Mon Jun 08 2015 Milan Crha - 3.12.11-7 +- Fix RH bug #1227223 (Disable help build when gtk-doc is disabled) +- Add patch for RH bug #1177344 (Calendar event times not drawn with correct font) +- Add patch for RH bug #1228699 (Fails to drag&drop contacts between address books) + +* Mon Jun 01 2015 Milan Crha - 3.12.11-6 +- Add patch for RH bug #1226925 (e_client_cache_get_client_sync() gets stuck) + +* Fri May 29 2015 Milan Crha - 3.12.11-5 +- Update patch for RH bug #1224758 (Parse attachments on demand, not on message open) + +* Tue May 26 2015 Milan Crha - 3.12.11-4 +- Add patch for RH bug #1224758 (Parse attachments on demand, not on message open) + +* Fri May 22 2015 Milan Crha - 3.12.11-3 +- Add patch to address some of the Coverity Scan issues +- Add patch for RH bug #1214659 (Composer crash on close with shown Picture Gallery) + +* Thu May 14 2015 Milan Crha - 3.12.11-2 +- Add patch for RH bug #1221523 (Update translations) + +* Mon May 04 2015 Milan Crha - 3.12.11-1 +- Update to 3.12.11 +- Add patch for RH bug #1211583 (Skip Lookup button shown on subsequent new account stages) +- Add patch for RH bug #1204357 (Suggest the best authentication method when creating new account) +- Add patch for RH bug #1070842 (SVG images in HTML email are not displayed) + +* Mon Dec 08 2014 Milan Crha - 3.8.5-31 +- Add patch for RH bug #1002188 (Restart background processes after restore) +- Add patch for RH bug #1170671 (Remove calendar events on its delete) + +* Mon Dec 01 2014 Milan Crha - 3.8.5-30 +- Update patch for RH bug #1070850 (Correct EMailReader to use EWebView functions) + +* Thu Nov 27 2014 Milan Crha - 3.8.5-29 +- Add patch for RH bug #1166665 (Correct path in evolution.convert) +- Update patch for RH bug #1070850 (Increase lower zoom limit) + +* Thu Nov 06 2014 Milan Crha - 3.8.5-28 +- Update patch for RH bug #1091882 (Fix regression of a message composer autosave) + +* Wed Oct 08 2014 Milan Crha - 3.8.5-27 +- Add patch for RH bug #1122645 (Weather calendar doesn't work) + +* Mon Aug 25 2014 Milan Crha - 3.8.5-26 +- Add patch for RH bug #1123136 (Crash when selecting mail header to show) +- Add patch for RH bug #1118996 (Crash when customize mail view) +- Add patch for RH bug #1116938 (Correct SMTP mail account editor UI update) +- Add patch for RH bug #1110370 (Calendar view tooltip doesn't go away) +- Add patch for RH bug #1075109 (Correct caret mode navigation to message body) +- Add patch for RH bug #1070850 (Limit zoom value for previews) +- Add patch for RH bug #1103823 (Crash after migration to maildir) +- Add patch for RH bug #1033263 (Contact duplicate dialog auto expands indefinitely) +- Add patch for RH bug #1070833 (Correct message list selection with collapsed threads) + +* Wed Jul 23 2014 Milan Crha - 3.8.5-25 +- Add patch for RH bug #1098358 (Run mail formatter in the main thread) +- Add patch for RH bug #1113177 (Reply with selection can lose white-spaces) + +* Thu Jun 05 2014 Milan Crha - 3.8.5-24 +- Update patch for RH bug #1091882 (Labels GSettings busy loop) + +* Wed May 28 2014 Lubos Kocman - 3.8.5-23 +- Resolves: #1100332 (bump release against 0day) + +* Tue May 13 2014 Milan Crha - 3.8.5-22 +- Add patch for RH bug #1070764 (Auto-mark as seen sometimes doesn't work) +- Add patch for RH bug #1084414 (Fix various memory leaks) +- Add patch for RH bug #1090629 (Filtered message not opened in a separate window) +- Add patch for RH bug #1091882 (Labels GSettings busy loop) + +* Mon Apr 07 2014 Milan Crha - 3.8.5-21 +- Add patch for RH bug #1083584 (Disconnect stores on network outage) + +* Thu Feb 27 2014 Milan Crha - 3.8.5-20 +- Add patch for RH bug #1064288 (Missing icon for 'Save and Close') + +* Thu Feb 20 2014 Milan Crha - 3.8.5-19 +- Add patch for RH bug #1066113 (Show user name in smartcard pin prompt) + +* Tue Feb 18 2014 Milan Crha - 3.8.5-18 +- Add patch for RH bug #1066051 (Use-after-free on a reminder snooze) + +* Thu Jan 30 2014 Milan Crha - 3.8.5-17 +- Add patch for RH bug #1059559 (Avoid duplicate folder change save on quit) + +* Fri Jan 24 2014 Daniel Mach - 3.8.5-16 +- Mass rebuild 2014-01-24 + +* Thu Jan 23 2014 Milan Crha - 3.8.5-15 +- Add patch for RH bug #972595 (Crash after pine import) +- Add patch for RH bug #976483 (Crash on attachment add or remove) + +* Thu Jan 16 2014 Milan Crha - 3.8.5-14 +- Add patch for RH bug #1030326 (Updated translations) + +* Tue Jan 14 2014 Milan Crha - 3.8.5-13 +- Add patch for RH bug #1038509 (Correct time format in appointment editor) + +* Mon Jan 13 2014 Milan Crha - 3.8.5-12 +- Add patch for RH bug #1028428 (Preview "Other address" in Contacts view) + +* Fri Dec 27 2013 Daniel Mach - 3.8.5-11 +- Mass rebuild 2013-12-27 + +* Wed Nov 13 2013 Milan Crha - 3.8.5-10 +- Update patch to hide help related widgets when evolution-help is not installed + +* Tue Nov 05 2013 Milan Crha - 3.8.5-9 +- Update patch for RH bug #1026776 (Fix issues found by Coverity Scan introduced by this patch) + +* Tue Nov 05 2013 Milan Crha - 3.8.5-8 +- Add patch for RH bug #1026776 (Recurring event move/copy to other calendar breaks recurrence) + +* Thu Oct 17 2013 Milan Crha - 3.8.5-7 +- Disabled modification of .po files before build (it causes multilib issues, + though a disadvantage is a larger evolution package) +- Add patch for RH bug #965696 (Signature/encryption bar may not inherit text color from theme) + +* Thu Oct 10 2013 Milan Crha - 3.8.5-6 +- Remove the dependency on libytnef, which apparently isn't needed for the + PST importer and we don't build the experimental TNEF attachments plugin +- Update patch for RH bug #962756 (F1 launches help when evolution-help is not installed) +- Add patch for RH bug #864904 (Auto-wrap long anchors in message preview) + +* Wed Oct 09 2013 Milan Crha - 3.8.5-5 +- Add patch for RH bug #948321 (Custom message for alert is not displayed) + +* Thu Oct 03 2013 Milan Crha - 3.8.5-4 +- Rebuild for multilib regression in translation files + +* Tue Sep 24 2013 Milan Crha - 3.8.5-3 +- Remove explicit Requires on libpst in pst subpackage + +* Fri Aug 23 2013 Milan Crha - 3.8.5-2 +- Split developer documentation into evolution-devel-docs subpackage + +* Mon Aug 12 2013 Milan Crha - 3.8.5-1 +- Update to 3.8.5 +- Add patch for RH bug #995516 (Crash in certificate viewer) + +* Wed Jul 24 2013 Milan Crha - 3.8.4-1 +- Update to 3.8.4 + +* Sat Jun 22 2013 Matthias Clasen - 3.8.3-2 +- Don't install ChangeLog +- Trim %%changelog + +* Mon Jun 10 2013 Milan Crha - 3.8.3-1 +- Update to 3.8.3 + +* Sun May 12 2013 Matthew Barnes - 3.8.2-1 +- Update to 3.8.2 + +* Sun Apr 14 2013 Matthew Barnes - 3.8.1-1 +- Update to 3.8.1 + +* Mon Mar 25 2013 Milan Crha - 3.8.0-1 +- Update to 3.8.0 + +* Mon Mar 18 2013 Milan Crha - 3.7.92-1 +- Update to 3.7.92 + +* Mon Mar 04 2013 Milan Crha - 3.7.91-1 +- Update to 3.7.91 + +* Wed Feb 20 2013 Kalev Lember - 3.7.90-2 +- Rebuilt for libgnome-desktop soname bump + +* Mon Feb 18 2013 Milan Crha - 3.7.90-1 +- Update to 3.7.90 + +* Mon Feb 04 2013 Milan Crha - 3.7.5-1 +- Update to 3.7.5 + +* Fri Jan 18 2013 Milan Crha - 3.7.4-1 +- Correct help-context patch test path (Red Had bug #901341) + +* Mon Jan 14 2013 Milan Crha - 3.7.4-1 +- Update to 3.7.4 +- Add --add-missing to automake call + +* Tue Jan 01 2013 Matthew Barnes - 3.7.3.2-3 +- Re-enable translation size reduction (RH bug #628073 is long fixed). + +* Thu Dec 20 2012 Kalev Lember - 3.7.3.2-2 +- Rebuilt for libgnome-desktop3 3.7.3 soname bump + +* Wed Dec 19 2012 Matthew Barnes - 3.7.3.2-1 +- Update to 3.7.3.2 +- Remove obsolete BuildRequires: + bison + dbus-glib-devel + libSM-devel + rarian-compat + +* Mon Nov 19 2012 Milan Crha - 3.7.2-1 +- Update to 3.7.2 + +* Fri Nov 09 2012 Matthew Barnes - 3.7.1-2 +- Drop unique3-devel BR, it's an ancient artifact. + +* Mon Oct 22 2012 Milan Crha - 3.7.1-1 +- Update to 3.7.1 + +* Mon Sep 24 2012 Matthew Barnes - 3.6.0-1 +- Update to 3.6.0 +- Remove patch for GNOME #678408 (fixed upstream). + +* Mon Sep 24 2012 Bastien Nocera 3.5.92-4 +- Use GStreamer 1.0 instead of 0.10 + +* Sat Sep 22 2012 Adam Williamson - 3.5.92-3 +- backport fix for BGO #678408 (broken message display) + +* Wed Sep 19 2012 Kalev Lember - 3.5.92-2 +- Fix evolution-NetworkManager obsoletes + +* Mon Sep 17 2012 Milan Crha - 3.5.92-1 +- Update to 3.5.92 + +* Mon Sep 03 2012 Milan Crha - 3.5.91-1 +- Update to 3.5.91 + +* Mon Aug 20 2012 Milan Crha - 3.5.90-1 +- Update to 3.5.90 +- Remove patches for BGO #678408 and #681321 (fixed upstream) +- Add itstool and yelp-tools into BuildRequires + +* Wed Aug 15 2012 Adam Williamson - 3.5.5-2 +- backport the fix for BGO #678408 and #681321 (libxml2 build) + +* Mon Aug 06 2012 Milan Crha - 3.5.5-1 +- Update to 3.5.5 + +* Thu Jul 19 2012 Fedora Release Engineering - 3.5.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Mon Jul 16 2012 Milan Crha - 3.5.4-1 +- Update to 3.5.4 +- Enable weather plugin (fixed upstream) + +* Wed Jun 27 2012 Matthias Clasen - 2.5.3.1-4 +- Temporarily disable weather plugin (not ported to new libgweather yet) + +* Tue Jun 26 2012 Matthew Barnes - 2.5.3.1-3 +- Temporarily change e-d-s req in devel subpackage. + +* Tue Jun 26 2012 Matthew Barnes - 3.5.3.1-2 +- Remove unnecessary Requires: evolution-data-server. + +* Mon Jun 25 2012 Matthew Barnes - 3.5.3.1-1 +- Update to 3.5.3.1 (3.5.3, no build for you!) + +* Mon Jun 25 2012 Matthew Barnes - 3.5.3-1 +- Update to 3.5.3 +- Drop BR: GConf2-devel \o/ + +* Fri Jun 8 2012 Matthias Clasen - 3.5.2-2 +- Rebuild against new gnome-desktop + +* Mon Jun 04 2012 Milan Crha - 3.5.2-1 +- Update to 3.5.2 + +* Sun Apr 29 2012 Matthew Barnes - 3.5.1-1 +- Update to 3.5.1 +- Add BR: webkitgtk3-devel + +* Tue Apr 24 2012 Kalev Lember - 3.4.1-2 +- Silence rpm scriptlet output + +* Mon Apr 16 2012 Milan Crha - 3.4.1-1 +- Update to 3.4.1 + +* Tue Mar 27 2012 Milan Crha - 3.4.0.1-1 +- Update to 3.4.0.1 + +* Mon Mar 19 2012 Milan Crha - 3.3.92-1 +- Update to 3.3.92 + +* Tue Mar 06 2012 Milan Crha - 3.3.91-1 +- Update to 3.3.91 + +* Mon Feb 20 2012 Milan Crha - 3.3.90-1 +- Update to 3.3.90 + +* Mon Feb 06 2012 Milan Crha - 3.3.5-1 +- Update to 3.3.5 + +* Thu Jan 19 2012 Matthew Barnes - 3.3.4-2 +- Keep all GSettings schema files in the main evolution package, even the + ones for the Bogofilter and Spamassassin subpackages, since we just have + one .convert file and missing schemas makes gsettings-data-convert crash. + +* Mon Jan 16 2012 Milan Crha - 3.3.4-1 +- Update to 3.3.4 + +* Fri Jan 13 2012 Fedora Release Engineering - 3.3.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Mon Dec 19 2011 Milan Crha - 3.3.3-1 +- Update to 3.3.3 + +* Mon Nov 21 2011 Milan Crha - 3.3.2-1 +- Update to 3.3.2 +- Remove patch to not call g_thread_init() (fixed upstream) + +* Fri Oct 28 2011 Matthew Barnes - 3.3.1-2 +- Fix detection of evolution-help (not using OMF files anymore). + +* Mon Oct 24 2011 Milan Crha - 3.3.1-1 +- Update to 3.3.1 +- Add patch to not call g_thread_init() + +* Mon Sep 26 2011 Milan Crha - 3.2.0-1 +- Update to 3.2.0 +- Manage properly schemas files for evolution-bogofilter/spamassassin + +* Mon Sep 19 2011 Milan Crha - 3.1.92-1 +- Update to 3.1.92 + +* Mon Sep 05 2011 Milan Crha - 3.1.91-1 +- Update to 3.1.91 + +* Mon Aug 29 2011 Milan Crha - 3.1.90-1 +- Update to 3.1.90 + +* Mon Aug 15 2011 Milan Crha - 3.1.5-1 +- Update to 3.1.5 + +* Sat Jul 23 2011 Matthew Barnes - 3.1.4-1 +- Update to 3.1.4 + +* Mon Jul 04 2011 Matthew Barnes - 3.1.3-1 +- Update to 3.1.3 +- Remove patch for building against libgdata-0.9.0 (fixed upstream). + +* Wed Jun 15 2011 Milan Crha - 3.1.2-2 +- Rebuild against newer gnome-desktop3 + +* Tue Jun 14 2011 Milan Crha - 3.1.2-1 +- Update to 3.1.2 +- Add patch by Philip Withnall to build against libgdata-0.9.0 +- Add patch to enable GLib deprecated stuff (due to G_CONST_RETURN deprecation) + +* Tue May 17 2011 Milan Crha - 3.1.1-3 +- Keep libevolution-mail-settings.so* from the previous change, + it is still used by other parts of evolution. + +* Mon May 09 2011 Matthew Barnes - 3.1.1-2 +- Drop the "Email Settings" capplet. + +* Mon May 09 2011 Milan Crha - 3.1.1-1 +- Update to 3.1.1 +- Drop groupwise plugin, as it was split out upstream + +* Mon Apr 04 2011 Milan Crha - 3.0.0-1 +- Update to 3.0.0 + +* Mon Mar 21 2011 Milan Crha - 2.91.92-1 +- Update to 2.91.92 + +* Mon Mar 14 2011 Matthew Barnes - 2.91.91-3 +- Remove some unnecessary BuildRequires: + gtkimageview-devel: No release available for gtk3. + libgnomecanvas-devel: Evolution bundles its own libgnomecanvas now. + +* Fri Mar 11 2011 Matthew Barnes - 2.91.91-2 +- Split off an evolution-NetworkManager subpackage containing the NM + integration module. Users that choose to bypass NetworkManager can + uninstall this subpackage so Evolution doesn't insist it's offline. + +* Mon Mar 07 2011 Milan Crha - 2.91.91-1 +- Update to 2.91.91 + +* Mon Feb 21 2011 Milan Crha - 2.91.90-1 +- Update to 2.91.90 + +* Fri Feb 11 2011 Matthew Barnes - 2.91.6.2-1 +- Update to 2.91.6.2 +- Fixes build breakage when using GTK+ 3.0. + +* Tue Feb 08 2011 Fedora Release Engineering - 2.91.6.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Tue Feb 08 2011 Matthew Barnes - 2.91.6.1-2 +- Evolution uses gtk3 now; re-enable libnotify. + +* Wed Feb 2 2011 Matthias Clasen - 2.91.6.1-1 +- Update to 2.91.6.1 + +* Mon Jan 31 2011 Milan Crha - 2.91.6-1 +- Update to 2.91.6 +- Require gtk3 +- Remove patch for Red Hat bug #657254 (fixed upstream) + +* Fri Jan 21 2011 Dan Williams - 2.91.5-4 +- Fix crash at shutdown by finishing tasks before cleaning up (rh #657254) + +* Tue Jan 18 2011 Matthias Clasen - 2.91.5-3 +- Rebuild against newer libgdata + +* Thu Jan 13 2011 Matthias Clasen - 2.91.5-2 +- Drop gnome-themes dependency + +* Mon Jan 10 2011 Milan Crha - 2.91.5-1 +- Update to 2.91.5 + +* Mon Dec 20 2010 Milan Crha - 2.91.4-1 +- Update to 2.91.4 + +* Mon Nov 29 2010 Milan Crha - 2.91.3-1 +- Update to 2.91.3 +- Remove patch for Red Hat bug #176400 (fixed upstream) + +* Mon Nov 08 2010 Milan Crha - 2.91.2-1 +- Update to 2.91.2 + +* Fri Nov 05 2010 Milan Crha - 2.91.1-3 +- Rebuild against newer libxml2 +- Disable libnotify, it's gtk3 only, but evolution is not + +* Wed Nov 3 2010 Matthias Clasen - 2.91.1-2 +- Rebuild against new libnotify + +* Mon Oct 18 2010 Milan Crha - 2.91.1-1 +- Update to 2.91.1 + +* Mon Oct 11 2010 Milan Crha - 2.91.0-1 +- Update to 2.91.0 +- Remove patch for Gnome bug #626066 (fixed upstream) + +* Wed Sep 29 2010 jkeating - 2.31.92-3 +- Rebuilt for gcc bug 634757 + +* Tue Sep 14 2010 Milan Crha - 2.31.92-2.fc15 +- Add patch for Gnome bug #626066 (login to NSS on demand) + +* Mon Sep 13 2010 Milan Crha - 2.31.92-1.fc15 +- Update to 2.31.92 + +* Mon Aug 30 2010 Milan Crha - 2.31.91-1.fc14 +- Update to 2.31.91 +- Remove msgmerge calls due to a floating point exception there + +* Mon Aug 16 2010 Matthew Barnes - 2.31.90-1.fc14 +- Update to 2.31.90 + +* Fri Aug 06 2010 Matthew Barnes - 2.31.6-2.fc14 +- Fix handling of migrated signature files. + +* Tue Aug 03 2010 Matthew Barnes - 2.31.6-1.fc14 +- Update to 2.31.6 +- Drop dbus-glib requirement. +- Bump glib2 requirement to 2.25.12. +- Roll back evo_base_version to 2.32. +- Add clutter-gtk requirement (for express mode). +- Remove gtk-compat macro patch (fixed upstream). + +* Thu Jul 22 2010 Matthew Barnes - 2.31.5-2.fc14 +- Add patch to fix startup crash in gtk-compat macros. + +* Tue Jul 13 2010 Milan Crha - 2.31.5-1.fc14 +- Update to 2.31.5 +- Remove 'conduit' (removed upstream) + +* Mon Jun 07 2010 Milan Crha - 2.31.3-1.fc14 +- Update to 2.31.3 + +* Fri May 28 2010 Matthew Barnes - 2.31.2-2.fc14 +- Evolution Express supercedes Anjal. +- No need to undefine GNOME_DISABLE_DEPRECATED. +- Remove nntp_support flag; that got moved to E-D-S ages ago. +- Remove exchange_support flag; it's all in evolution-exchange now. + +* Mon May 24 2010 Milan Crha - 2.31.2-1.fc14 +- Update to 2.31.2 +- Bump gtkhtml3 requirement to 3.31.2 + +* Fri May 07 2010 Matthew Barnes - 2.31.1-2.fc14 +- Require yelp in evolution-help (RH bug #589555). +- Add patch for RH bug #589555 (hide Help->Contents if evolution-help + is not installed). + +* Mon May 03 2010 Milan Crha - 2.31.1-1.fc14 +- Update to 2.31.1 + +* Tue Feb 09 2010 Milan Crha - 2.29.90-2.fc13 +- Rebuild against evolution-data-server-2.29.90-3 + +* Mon Feb 08 2010 Milan Crha - 2.29.90-1.fc13 +- Update to 2.29.90 +- Removed unneeded BuildRequires. + +* Fri Jan 29 2010 Matthew Barnes - 2.29.6-2.fc13 +- Bump gtkhtml3 requirement to 3.29.6. + +* Mon Jan 25 2010 Milan Crha - 2.29.6-1.fc13 +- Update to 2.29.6 +- Remove patch for Gnome bug #606874 (fixed upstream). +- Add rarian-compat to BuildRequires for Scrollkeeper. + +* Mon Jan 18 2010 Matthias Clasen - 2.29.5-2.fc13 +- Rebuild against new gnome-desktop + +* Tue Jan 12 2010 Milan Crha - 2.29.5-1.fc13 +- Update to 2.29.5 +- Add patch for Gnome bug #606874 (mktemp removed in glibc-2.11.90-8) + +* Tue Dec 22 2009 Matthew Barnes - 2.29.4-2.fc13 +- Update Scrollkeeper and Icon Cache scriptlets to conform to guidelines. + (see: http://fedoraproject.org/wiki/Packaging:ScriptletSnippets) + +* Mon Dec 21 2009 Milan Crha - 2.29.4-1.fc13 +- Update to 2.29.4 +- Remove patch for missing m4 files from tarball (fixed upstream). + +* Mon Nov 30 2009 Milan Crha - 2.29.3-1.fc13 +- Update to 2.29.3 +- Add patch for missing m4 files from tarball. +- Disable autoreconf call. + +* Tue Nov 17 2009 Matthew Barnes - 2.29.2-1.fc13 +- Update to 2.29.2 +- Synchronize spec file with my kill-bonobo test package. + +* Tue Oct 27 2009 Matthew Barnes - 2.29.1-1.fc13 +- Update to 2.29.1 +- Bump evo_major to 2.30. +- Drop Bonobo + ORBit dependency (yay!). +- Remove option to use OpenSSL instead of NSS. +- Uninstall GConf schemas during %%pre and %%preun. + +* Mon Sep 21 2009 Milan Crha - 2.28.0-1.fc12 +- Update to 2.28.0 + +* Mon Sep 07 2009 Milan Crha - 2.27.92-1.fc12 +- Update to 2.27.92 + +* Mon Aug 24 2009 Milan Crha - 2.27.91-1.fc12 +- Update to 2.27.91 +- Remove patch for GNOME bug #591414 (fixed upstream). + +* Fri Aug 14 2009 Matthew Barnes - 2.27.90-3.fc12 +- Add patch for GNOME bug #591414 (calendar library linked as module). + +* Tue Aug 11 2009 Milan Crha - 2.27.90-2.fc12 +- Build requires gnome-desktop-devel >= 2.26 +- New library libevolution-cal-shared.so + +* Mon Aug 10 2009 Milan Crha - 2.27.90-1.fc12 +- Update to 2.27.90 + +* Tue Jul 28 2009 Milan Crha - 2.27.5-3.fc12 +- Enable pst-import plugin (RH bug #493049) + +* Tue Jul 28 2009 Matthew Barnes - 2.27.5-2.fc12 +- Move libeconduit.so into the conduits subpackage to see if that + untangles us from gnome-pilot. + +* Mon Jul 27 2009 Milan Crha - 2.27.5-1.fc12 +- Update to 2.27.5 +- Remove pst import plugin patch (fixed upstream). +- Remove work around deprecation of g_mount_unmount (fixed upstream). + +* Fri Jul 24 2009 Fedora Release Engineering - 2.27.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Mon Jul 13 2009 Matthew Barnes - 2.27.4-1.fc12 +- Update to 2.27.4 +- Work around deprecation of g_mount_unmount(). + +* Fri Jul 10 2009 Matthew Barnes - 2.27.3-5.fc11 +- Add an evolution-pst subpackage for the PST importer plugin. +- Disabled until libpst settles on an API. + +* Thu Jul 02 2009 Matthew Barnes - 2.27.3-4.fc12 +- Add BR for libpst-devel and libytnef-devel (RH bug #493049). +- Add patch to build pst-import plugin against current libpst. +- libpst's API broke again so disable the BR's for now. +- Specify the gettext package when calling intltool-update. + +* Wed Jul 01 2009 Milan Crha - 2.27.3-3.fc12 +- Rebuild against newer gcc + +* Tue Jun 23 2009 Matthew Barnes - 2.27.3-2.fc12 +- Add patch to allow Anjal to build. + +* Mon Jun 15 2009 Matthew Barnes - 2.27.3-1.fc12 +- Update to 2.27.3 + +* Sun Jun 14 2009 Matthias Clasen - 2.27.2-2.fc12 +- Don't make -perl own directories that are already owned by the base package + +* Mon May 29 2009 Matthew Barnes - 2.27.2-1.fc12 +- Update to 2.27.2 +- Patch broken libevolution-mail-shared library. +- Remove strict_build_settings since the settings are used upstream now. + +* Mon May 04 2009 Matthew Barnes - 2.27.1-1.fc12 +- Update to 2.27.1 +- Bump evo_major to 2.28. +- Temporarily disable EDS_DISABLE_DEPRECATED due to GNOME bug #569652. + +* Mon Apr 27 2009 Matthias Clasen - 2.26.1-2.fc11 +- Don't drop schemas translations from po files + +* Wed Apr 15 2009 Matthew Barnes - 2.26.1.1-1.fc11 +- Update to 2.26.1.1 +- Remove patch for GNOME bug #578685 (fixed upstream). + +* Tue Apr 14 2009 Matthew Barnes - 2.26.1-2.fc11 +- Add patch for GNOME bug #578685 (attachment bar crasher). + +* Mon Apr 13 2009 Matthew Barnes - 2.26.1-1.fc11 +- Update to 2.26.1 + +* Fri Apr 10 2009 Matthias Clasen - 2.26.0-3.fc11 +- Fix directory ownership + +* Thu Apr 02 2009 Matthew Barnes - 2.26.0-2.fc11 +- Require libpst. + +* Mon Mar 16 2009 Matthew Barnes - 2.26.0-1.fc11 +- Update to 2.26.0 + +* Mon Mar 02 2009 Matthew Barnes - 2.25.92-1.fc11 +- Update to 2.25.92 + +* Tue Feb 24 2009 Fedora Release Engineering - 2.25.91-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Sun Feb 22 2009 Matthias Clasen - 2.25.91-2.fc11 +- Actually make the help subpackage noarch + +* Mon Feb 16 2009 Matthew Barnes - 2.25.91-1.fc11 +- Update to 2.25.91 + +* Sat Feb 14 2009 Matthias Clasen - 2.25.90-3.fc11 +- Make the help subpackage noarch + +* Fri Feb 06 2009 Matthew Barnes - 2.25.90-2.fc11 +- Update BuildRoot, License, Source and URL tags. +- Require gnome-common so we don't have to patch it out. + +* Mon Feb 02 2009 Matthew Barnes - 2.25.90-1.fc11 +- Update to 2.25.90 + +* Mon Jan 19 2009 Matthew Barnes - 2.25.5-1.fc11 +- Update to 2.25.5 +- Ditch eds_version and use our own version. This will keep evolution + and evolution-data-server versions in lockstep from now on. + +* Mon Jan 05 2009 Matthew Barnes - 2.25.4-1.fc11 +- Update to 2.25.4 +- Bump eds_version to 2.25.4. +- Bump libgweather_version to 2.25.4. + +* Mon Dec 15 2008 Matthew Barnes - 2.25.3.1-1.fc11 +- Update to 2.25.3.1 +- New BR: libgweather-devel +- Remove patch for GNOME bug #552583 (fixed upstream). +- Bump the gtkhtml and gtk2 minimum versions. + +* Tue Dec 09 2008 Matthew Barnes - 2.25.2-2.fc11 +- Add patch for GNOME bug #552583 (fix account URI comparisons). + +* Mon Dec 01 2008 Matthew Barnes - 2.25.2-1.fc11 +- Update to 2.25.2 +- Bump eds_version to 2.25.2. + +* Thu Nov 20 2008 Matthew Barnes - 2.25.1-2.fc11 +- Fix a typo (RH bug #472358). + +* Mon Nov 03 2008 Matthew Barnes - 2.25.1-1.fc11 +- Update to 2.25.1 +- Bump evo_major to 2.26. +- Bump eds_version to 2.25.1. + +* Tue Oct 21 2008 Matthew Barnes - 2.24.1-2.fc10 +- Bump eds_version to 2.24.1 (unfortunately). + +* Tue Oct 21 2008 Matthew Barnes - 2.24.1-1.fc10 +- Update to 2.24.1 + +* Wed Oct 8 2008 Matthias Clasen - 2.24.0-3 +- Save space in the -help package by not shipping multiple copies + of each screenshot + +* Thu Sep 25 2008 Matthew Barnes - 2.24.0-2.fc10 +- Strip unneeded translations from .mo files (RH bug #463887). +- Split Perl-based utilities into a "perl" subpackage (RH bug #462345). + +* Mon Sep 22 2008 Matthew Barnes - 2.24.0-1.fc10 +- Update to 2.24.0 + +* Mon Sep 08 2008 Matthew Barnes - 2.23.92-1.fc10 +- Update to 2.23.92 + +* Mon Sep 01 2008 Matthew Barnes - 2.23.91-1.fc10 +- Update to 2.23.91 +- Bump eds_version to 2.23.91 + +* Mon Aug 25 2008 Matthew Barnes - 2.23.90-2.fc10 +- Bump gtkhtml_version to 3.23.5 (RH bug #460076). + +* Wed Aug 20 2008 Matthew Barnes - 2.23.90-1.fc10 +- Update to 2.23.90 +- Bump eds_version to 2.23.90.1 + +* Mon Aug 04 2008 Matthew Barnes - 2.23.6-1.fc10 +- Update to 2.23.6 + +* Tue Jul 22 2008 Matthew Barnes - 2.23.5-1.fc10 +- Update to 2.23.5 +- Bump eds_version to 2.23.5. + +* Fri Jul 18 2008 Tom "spot" Callaway - 2.23.4-3.fc10 +- fix license tag +- fix patches to apply with fuzz=0 + +* Thu Jun 19 2008 Matthew Barnes - 2.23.4-2.fc10 +- Don't ship the unfinished "Custom Header" plugin. + +* Mon Jun 16 2008 Matthew Barnes - 2.23.4-1.fc10 +- Update to 2.23.4 +- Remove patches for RH bug #449925 (fixed upstream). + +* Fri Jun 06 2008 Matthew Barnes - 2.23.3.1-4.fc10 +- Use a less pretentious summary. + +* Fri Jun 06 2008 Matthew Barnes - 2.23.3.1-3.fc10 +- Remove the gnome-spell requirement. + +* Wed Jun 04 2008 Matthew Barnes - 2.23.3.1-2.fc10 +- Add patches for RH bug #449925 (buffer overflow vulnerabilities). + +* Mon Jun 02 2008 Matthew Barnes - 2.23.3.1-1.fc10 +- Update to 2.23.3.1 +- Bump eds_version to 2.23.3. + +* Mon May 12 2008 Matthew Barnes - 2.23.2-1.fc10 +- Update to 2.23.2 +- Remove enchant-devel requirement. +- Remove patch for RH bug #437208 (fixed upstream). + +* Mon Apr 28 2008 Matthew Barnes - 2.23.1-2.fc10 +- Explicitly require enchant-devel, even though I shouldn't need to. + +* Mon Apr 21 2008 Matthew Barnes - 2.23.1-1.fc10 +- Update to 2.23.1 +- Bump evo_major to 2.22. +- Bump eds_version to 2.23.1. +- Bump glib2_version to 2.16.0. +- Bump gtkhtml_version to 3.19.1. +- Add gvfs requirement. +- Drop gnomevfs2 requirement. +- Remove patch for RH bug #164957 (obsolete). + +* Mon Apr 07 2008 Matthew Barnes - 2.22.1-1.fc9 +- Update to 2.22.1 +- Remove patch for GNOME bug #524310 (fixed upstream). + +* Tue Mar 25 2008 Dan Williams - 2.22.0-4.fc9 +- Add patch for GNOME bug #524310 + +* Fri Mar 14 2008 Matthew Barnes - 2.22.0-3.fc9 +- Explicit require evolution-data-server since its shared object names + still can't be trusted (RH bug #426511). + +* Fri Mar 14 2008 Matthew Barnes - 2.22.0-2.fc9 +- Add patch for RH bug #437208 (tracking network status). + +* Mon Mar 10 2008 Matthew Barnes - 2.22.0-1.fc9 +- Update to 2.22.0 +- Remove patch for CVE-2008-0072 (fixed upstream). + +* Tue Mar 04 2008 Matthew Barnes - 2.21.92-2.fc9 +- Add patch for CVE-2008-0072 (format string vulnerability). + +* Mon Feb 25 2008 Matthew Barnes - 2.21.92-1.fc9 +- Update to 2.21.92 +- Bump eds_version to 2.21.92. + +* Wed Feb 13 2008 Matthew Barnes - 2.21.91-2.fc9 +- Rebuild against libsoup 2.3.2. + +* Mon Feb 11 2008 Matthew Barnes - 2.21.91-1.fc9 +- Update to 2.21.91 +- Bump eds_version to 2.21.91. +- Remove patch for GNOME bug #240073 (fixed upstream). + +* Sat Feb 02 2008 Matthew Barnes - 2.21.90-4.fc9 +- Remove some obsolete configure options: + --enable-file-chooser, --enable-file-locking, --enable-dot-locking +- Remove gnome-doc-utils work-around for GNOME bug #427939 (fixed upstream). +- Remove patch for RH bug #215478 (fixed upstream). + +* Tue Jan 29 2008 Matthew Barnes - 2.21.90-3.fc9 +- Add patch to address the recent deprecation of G_GNUC_FUNCTION. + +* Tue Jan 29 2008 Matthew Barnes - 2.21.90-2.fc9 +- Add patch for GNOME bug #240073 (don't strikeout Click to Add in tasks). + +* Mon Jan 28 2008 Matthew Barnes - 2.21.90-1.fc9 +- Update to 2.21.90 +- Update build requirements. +- Remove patch for GNOME #363695 (obsolete/problematic). +- Remove patch for GNOME #509741 (fixed upstream). + +* Tue Jan 15 2008 Matthew Barnes - 2.21.5-2.fc9 +- Add patch for GNOME bug #509741 (crash on startup). + +* Mon Jan 14 2008 Matthew Barnes - 2.21.5-1.fc9 +- Update to 2.21.5 +- The backup-restore plugin is stable again. +- Remove patch for RH bug #154360 (fixed upstream). +- Remove patch for RH bug #166231 (obsolete, possibly fixed upstream). +- Remove patch for RH bug #178295 (fixed upstream). +- Remove patch for GNOME bug #362638 (fixed upstream). +- Remove patch for GNOME bug #504030 (fixed upstream). +- Remove patch for GNOME bug #507311 (fixed upstream). + +* Sat Jan 05 2008 Matthew Barnes - 2.21.4-2.fc9 +- Add patch for GNOME bug #507311 (send Bug Buddy reports to the new + BugBuddyBugs Bugzilla component). + +* Mon Dec 17 2007 Matthew Barnes - 2.21.4-1.fc9 +- Update to 2.21.4 +- Expunge unused patches. +- Bump eds_version to 2.21.4 for new Camel functions. + +* Mon Dec 10 2007 Matthew Barnes - 2.21.3-4.fc9 +- Split junk filtering plugins into evolution-bogofilter and + evolution-spamassassin subpackages, each of which requires the + necessary backend packages. (RH bug #377381) + +* Mon Dec 05 2007 Matthew Barnes - 2.21.3-3.fc9 +- Bump eds_version to 2.21.3 and gtkhtml_version to 3.17.3. + +* Tue Dec 4 2007 Matthias Clasen - 2.21.3-2 +- Rebuild against new openssl + +* Mon Dec 03 2007 Matthew Barnes - 2.21.3-1.fc9 +- Update to 2.21.3 +- Remove patch for RH bug #215467 (fixed upstream). +- Remove patch for GNOME bug #499920 (fixed upstream). + +* Sat Dec 01 2007 Matthew Barnes - 2.21.2-4.fc9 +- Fix a corrupted patch that caused GNOME bug #499291. + +* Thu Nov 29 2007 Matthew Barnes - 2.21.2-3.fc9 +- Add patch for GNOME bug #499920 (invalid #include). + +* Fri Nov 23 2007 Matthew Barnes - 2.21.2-2.fc9 +- Rebuild against newer libpisync.so. + +* Mon Nov 12 2007 Matthew Barnes - 2.21.2-1.fc9 +- Update to 2.21.2 + +* Tue Oct 30 2007 Matthew Barnes - 2.21.1-2.fc9 +- Attempt to split the gnome-pilot stuff into a separate + evolution-conduits subpackage (RH bug #178155). + +* Mon Oct 29 2007 Matthew Barnes - 2.21.1-1.fc9 +- Update to 2.21.1 +- Remove redundant requirements. +- Bump EDS requirement to 2.21.1. +- Bump gtkhtml requirement to 3.17.1. +- Backup/restore plugin got moved from standard to experimental. +- Revert the per-component menu items (RH bug #222105, #241462, #293771). +- Show the switcher buttons by default (RH bug #186403). +- Alter the desktop file Name and Comment. +- Disable patch for GNOME bug #376991 for now. It may be contributing + to password prompting problems as described in RH bug #296671. +- Remove patch for GNOME bug #417999 (fixed upstream). +- Remove patch for GNOME bug #476040 (fixed upstream). +- Remove patch for GNOME bug #477045 (fixed upstream). + +* Mon Oct 15 2007 Matthew Barnes - 2.12.1-2.fc8 +- Fix a broken zoom icon. + +* Mon Oct 15 2007 Milan Crha - 2.12.1-1.fc8 +- Update to 2.12.1 +- Add files for the new backup-restore plugin. + +* Tue Oct 09 2007 Matthew Barnes - 2.12.0-7.fc8 +- Revise patch for GNOME bug #477045 (more icon tweaks). + +* Fri Oct 05 2007 Matthew Barnes - 2.12.0-6.fc8 +- Require libbonobo >= 2.16.0 (RH bug #213823). + +* Thu Oct 04 2007 Matthew Barnes - 2.12.0-5.fc8 +- Require gnome-themes (RH bug #235617). + +* Wed Oct 03 2007 Matthew Barnes - 2.12.0-4.fc8 +- Revise patch for GNOME bug #477045 (run-time warnings when composing mail). + +* Wed Sep 19 2007 Matthew Barnes - 2.12.0-3.fc8 +- Re-enable the inline audio plugin since it now uses GStreamer 0.10. + +* Wed Sep 19 2007 Matthew Barnes - 2.12.0-2.fc8 +- Revise patch for GNOME bug #477045 (less-zealous icon renaming). + +* Mon Sep 17 2007 Matthew Barnes - 2.12.0-1.fc8 +- Update to 2.12.0 +- Remove patch for RH bug #182247 (fixed upstream). + +* Sat Sep 15 2007 Matthew Barnes - 2.11.92-4.fc8 +- Add patch for GNOME bug #477045 (use standard icon names). + +* Tue Sep 11 2007 Matthew Barnes - 2.11.92-3.fc8 +- Add patch for GNOME bug #476040 (fix attachment icon). + +* Sat Sep 8 2007 Matthias Clasen - 2.11.92-2.fc8 +- Split off an evolution-help package + +* Mon Sep 03 2007 Matthew Barnes - 2.11.92-1.fc8 +- Update to 2.11.92 + +* Wed Aug 29 2007 Matthew Barnes - 2.11.91-3.fc8 +- Revise patch for GNOME bug #362638 to fix GNOME bug #357175 + (Evolution fails to close after IMAP alert has been displayed). + +* Tue Aug 28 2007 Matthew Barnes - 2.11.91-2.fc8 +- Fix compilation breakage caused by our strict build settings. + +* Tue Aug 28 2007 Milan Crha - 2.11.91-1.fc8 +- Update to 2.11.91 +- Removed patch for RH bug #157400 / GNOME bug #303877 (fixed upstream). +- Removed patch for RH bug #157505 / GNOME bug #303878 (fixed upstream). +- Removed patch for RH bug #161885 / GNOME bug #309166 (fixed upstream). +- Removed patch for RH bug #202751 / GNOME bug #355766 (fixed upstream). +- Removed patch for RH bug #218898 / GNOME bug #385414 (fixed upstream). +- Removed patch for RH bug #253348 / GNOME bug #467883 (fixed upstream). + +* Thu Aug 23 2007 Matthew Barnes - 2.11.90-4.fc8 +- Obsolete the evolution-bogofilter package. + +* Mon Aug 20 2007 Matthew Barnes - 2.11.90-3.fc8 +- Revise patch for GNOME bug #417999 to fix GNOME bug #447591 + (Automatic Contacts combo boxes don't work). + +* Sat Aug 18 2007 Matthew Barnes - 2.11.90-2.fc8 +- Add patch for RH bug #253348 (crash on startup). + +* Wed Aug 15 2007 Matthew Barnes - 2.11.90-1.fc8 +- Update to 2.11.90 + +* Wed Aug 8 2007 Matthias Clasen - 2.11.6.1-2 +- Update the license field +- Use %%find_lang for help files + +* Wed Aug 01 2007 Matthew Barnes - 2.11.6.1-1.fc8 +- Update to 2.11.6.1 + +* Tue Jul 31 2007 Matthew Barnes - 2.11.6-1.fc8 +- Update to 2.11.6 +- Remove patch for GNOME bug #380534 (fixed upstream). + +* Fri Jul 27 2007 Matthew Barnes - 2.11.5-3.fc8 +- Add patch for GNOME bug #380534 (clarify version requirements). + +* Mon Jul 16 2007 Matthew Barnes - 2.11.5-2.fc8 +- Remove spamassassin requirement since it's optional. + +* Fri Jul 13 2007 Matthew Barnes - 2.11.5-1.fc8 +- Update to 2.11.5 +- Revise patch for GNOME bug #362638 to fix RH bug #245695. + +* Wed Jun 27 2007 Matthew Barnes - 2.11.4-2.fc8 +- Revise patch for GNOME bug #363638 to fix RH bug #245289 (frequent hangs). + +* Mon Jun 18 2007 Matthew Barnes - 2.11.4-1.fc8 +- Update to 2.11.4 +- Remove patch for GNOME bug #447727 (fixed upstream). + +* Thu Jun 14 2007 Matthew Barnes - 2.11.3-5.fc8 +- Add patch for GNOME bug #447727 (remove EClippedLabel). + +* Wed Jun 06 2007 Matthew Barnes - 2.11.3-4.fc8 +- Revise patch for GNOME bug #362638 to fix RH bug #240507 (hang on exit). + +* Wed Jun 06 2007 Matthew Barnes - 2.11.3-3.fc8 +- Remove some debug messages that accidentally slipped in. + +* Tue Jun 05 2007 Matthew Barnes - 2.11.3-2.fc8 +- Fix an invalid g_free() that was causing lock-ups. + +* Mon Jun 04 2007 Matthew Barnes - 2.11.3-1.fc8 +- Update to 2.11.3 +- Evolution no longer has versioned file names. +- Remove patch for RH bug #202289 (fixed upstream). +- Remove patch for RH bug #235878 (fixed upstream). +- Remove patch for RH bug #238155 (fixed upstream). +- Remove patch for RH bug #240147 (fixed upstream). + +* Thu May 31 2007 Matthew Barnes - 2.11.2-2.fc8 +- Evolution no longer requires libgnomeprint[ui]. + +* Fri May 18 2007 Matthew Barnes - 2.11.2-1.fc8 +- Update to 2.11.2 +- Bump evo_major to 2.12. +- Bump eds_version to 1.11.0. +- Update files with new plugins and icons. +- Remove patch for RH bug #190359 (fixed upstream). +- Remove patch for RH bug #218801 (fixed upstream). +- Remove patch for RH bug #234315 (fixed upstream). +- Remove patch for RH bug #236399 (fixed upstream). +- Remove patch for RH bug #236860 (fixed upstream). +- Remove patch for RH bug #238551 (fixed upstream). +- Remove patch for GNOME bug #373837 (fixed upstream). +- Remove patch for GNOME bug #373116 (fixed upstream). +- Remove patch for GNOME bug #418971 (fixed upstream). +- Remove patch for GNOME bug #419469 (fixed upstream). +- Remove patch for GNOME bug #419524 (fixed upstream). +- Remove evolution-2.6.0-prototypes.patch (obsolete). + +* Wed May 16 2007 Matthew Barnes - 2.10.1-17.fc7 +- Revise patch for GNOME bug #362638 to fix RH bug #237206 + (certificate prompt causes crash, again). + +* Tue May 15 2007 Matthew Barnes - 2.10.1-16.fc7 +- Add patch for RH bug #240147 (Send/Receive dialog layout). + +* Mon May 14 2007 Matthew Barnes - 2.10.1-15.fc7 +- Revise patch for RH bug #236860 to match upstream's solution. + +* Mon May 14 2007 Matthew Barnes - 2.10.1-14.fc7 +- Revise patch for RH bug #238155 (crash on startup). + +* Mon May 07 2007 Matthew Barnes - 2.10.1-13.fc7 +- Add patch for RH bug #238155 (crash on startup). + +* Tue May 01 2007 Matthew Barnes - 2.10.1-12.fc7 +- Add patch for RH bug #238551 (incorrect attachment count). + +* Tue May 01 2007 Matthew Barnes - 2.10.1-10.fc7 +- Revise patch for GNOME bug #363695 to fix RH bug #238497 + (crash sorting "To" column). + +* Mon Apr 30 2007 Matthew Barnes - 2.10.1-9.fc7 +- Revise some patches so that we don't have to run autoreconf. +- Remove patch for GNOME bug #427939 (use a different work-around). + +* Fri Apr 27 2007 Matthew Barnes - 2.10.1-8.fc7 +- Add patch for RH bug #236399 (en_CA attribution format). + +* Mon Apr 23 2007 Matthew Barnes - 2.10.1-7.fc7 +- Remove the welcome email from evolution@novell.com (bug #179427). + +* Sun Apr 22 2007 Matthew Barnes - 2.10.1-6.fc7 +- Add patch for RH bug #236860 (launching from clock applet). + +* Sat Apr 21 2007 Matthias Clasen - 2.10.1-5 +- Don't install INSTALL + +* Sat Apr 14 2007 Matthew Barnes - 2.10.1-4.fc7 +- Add patch for RH bug #234315 (fix saving attachments). + +* Fri Apr 13 2007 Matthew Barnes - 2.10.1-3.fc7 +- Add patch for RH bug #235878 (make Help->Contents work again). + +* Tue Apr 10 2007 Matthew Barnes - 2.10.1-2.fc7 +- Revise patch for GNOME bug #362638 to fix RH bug #235096 + (crash when displaying a mail server message to user). + +* Mon Apr 09 2007 Matthew Barnes - 2.10.1-1.fc7 +- Update to 2.10.1 +- Fix buggy gnome-doc-utils.make (GNOME bug #427939). +- Remove patch for CVE-2007-1002 (fixed upstream). +- Remove patch for RH bug #231767 (fixed upstream). +- Remove patch for RH bug #235056 (fixed upstream). +- Remove patch for GNOME bug #352713 (fixed upstream). + +* Wed Apr 04 2007 Matthew Barnes - 2.10.0-10.fc7 +- Add patch for GNOME bug #352713 (improve folder tree updates). + +* Tue Apr 03 2007 Matthew Barnes - 2.10.0-9.fc7 +- Require libxml2-devel in evolution-devel package (RH bug #235056). +- Add libxml-2.0 requirement to evolution-plugin-2.10.pc. + +* Tue Apr 03 2007 Matthew Barnes - 2.10.0-8.fc7 +- Revise patch for GNOME bug #419524 to fix RH bug #235082 + (crash in initial account setup wizard). + +* Mon Apr 02 2007 Matthew Barnes - 2.10.0-7.fc7 +- Add patch for RH bug #231767 (allow mail-notification to build). + +* Fri Mar 30 2007 Matthew Barnes - 2.10.0-6.fc7 +- Revise patch for GNOME bug #362638 (deprecate EThread). + +* Thu Mar 29 2007 Matthew Barnes - 2.10.0-5.fc7 +- CVE-2007-1002 (Shared memo categories format string vulnerability) +- Add -Wdeclaration-after-statement to strict build settings. + +* Mon Mar 26 2007 Matthew Barnes - 2.10.0-4.fc7 +- Run gtk-update-icon-cache in %post and %postun (RH bug #234018). + +* Sat Mar 17 2007 Matthew Barnes - 2.10.0-3.fc7 +- Add flag to disable deprecated Camel symbols. +- Add patch for GNOME bug #419469 (refactor shell/main.c). +- Add patch for GNOME bug #419524 (use GLib's i18n macros). +- Add patch for GNOME bug #418971 (drop support for GLib < 2.8). + +* Wed Mar 14 2007 Matthew Barnes - 2.10.0-2.fc7 +- Add patch for GNOME bug #417999 (use ESourceComboBox). + +* Mon Mar 12 2007 Matthew Barnes - 2.10.0-1.fc7 +- Update to 2.10.0. +- Add patch for GNOME bug #376991 (refactor password handling). + +* Mon Feb 26 2007 Matthew Barnes - 2.9.92-1.fc7 +- Update to 2.9.92. +- Require gtkhtml3 >= 3.13.92. +- Add missing libgnomeprintui22 requirements. +- Remove patch for GNOME bug #350253 (fixed upstream). +- Remove patch for GNOME bug #356177 (fixed upstream). +- Remove patch for GNOME bug #360946 (fixed upstream). +- Remove evolution-2.5.4-move-autosave-file.patch (fixed upstream). +- Add minimum version to intltool requirement (currently >= 0.35.5). + +* Thu Feb 15 2007 Matthew Barnes - 2.9.91-3.fc7 +- Revise patch for GNOME bug #362638 to fix RH bug #220714 + (certificate prompt causes crash). + +* Tue Feb 13 2007 Matthew Barnes - 2.9.91-2.fc7 +- Require GConf2 in post. +- Require scrollkeeper in post and postun. + +* Mon Feb 12 2007 Matthew Barnes - 2.9.91-1.fc7 +- Update to 2.9.91 +- Require gtkhtml3 >= 3.13.6. +- Add files for new imap-features plugin. +- Add flag to disable deprecated Pango symbols. +- Remove patch for GNOME bug #357216 (fixed upstream). +- Remove patch for GNOME bug #359979 (fixed upstream). + +* Fri Jan 26 2007 Matthew Barnes - 2.9.5-4.fc7 +- Compile with the -fno-strict-aliasing flag, which will hopefully improve + reliability until the illegal type-punning is fixed (RH bug #224552). + +* Sun Jan 21 2007 Matthew Barnes - 2.9.5-3.fc7 +- Revise evolution-2.7.1-no-gnome-common.patch so that we no longer + have to run autoconf before building. +- Revise evolution-2.5.4-fix-conduit-dir.patch so that we no longer + have to run automake before building. + +* Wed Jan 10 2007 Matthew Barnes - 2.9.5-2.fc7 +- Add patch for GNOME bug #359979 (change EMsgPort semantics). + +* Mon Jan 08 2007 Matthew Barnes - 2.9.5-1.fc7 +- Update to 2.9.5 +- Remove pilot-link-0.12 patch (fixed upstream). +- Remove patch for RH bug #215466 and #218589 (fixed upstream). +- Remove patch for RH bug #215695 (fixed upstream). + +* Sat Dec 30 2006 Matthew Barnes - 2.9.4-4.fc7 +- Add Requires evolution-data-server-devel to devel subpackage + (RH bug #218889). + +* Thu Dec 21 2006 Matthew Barnes - 2.9.4-3.fc7 +- Add patch for RH bug #218898 (viewing message source). + +* Wed Dec 20 2006 Matthew Barnes - 2.9.4-2.fc7 +- Revise patch for RH bug #202751 (printing of indic languages). + +* Tue Dec 19 2006 Matthew Barnes - 2.9.4-1.fc7 +- Update to 2.9.4 +- Bump eds_version to 1.9.4 due to soname changes. +- Remove patch for GNOME bug #382431 (fixed upstream). + +* Fri Dec 15 2006 Matthew Barnes - 2.9.3-5.fc7 +- Add patch for GNOME bug #373116 (use GtkColorButton). + +* Fri Dec 15 2006 Matthew Barnes - 2.9.3-4.fc7 +- Disable patch for RH bug #216537, which caused RH bug #219228. + +* Tue Dec 12 2006 Matthew Barnes - 2.9.3-3.fc7 +- Revise patch for RH bug #215466 to also fix RH bug #218589. + +* Mon Dec 11 2006 Matthew Barnes - 2.9.3-2.fc7 +- Add patch for RH bug #215467 (missing meeting participants). + +* Thu Dec 09 2006 Matthew Barnes - 2.9.3-1.fc7 +- Update to 2.9.3 +- Configure with scrollkeeper disabled. +- Disable automake portability checking. +- Ship our own icons from gnome-icon-theme. +- BuildRequires: gnome-doc-utils >= 0.8.0 +- Add patch for RH bug #215478 (Maildir and MH accounts). +- Add patch for RH bug #215695 (crashes w/o mail accounts). +- Add patch for RH bug #216537 (viewing attachments). +- Add patch for RH bug #218801 (count unread messages first). +- Add patch for GNOME bug #350253 (ship our own icons). +- Add patch for GNOME bug #382431 (implicit function declaration). +- Revise patch for GNOME bug #360946 (improved "about" dialog). +- Remove patch for GNOME bug #357970 (fixed upstream). + +* Tue Nov 28 2006 Matthew Barnes - 2.9.2-3.fc7 +- Add patch to port evolution conduits to pilot-link 0.12. +- Add patch for RH bug #215466 (optional meeting participants). +- Add patch for GNOME bug #373837 (use GtkFontButton). +- Remove patch for GNOME bug #343331 (fixed upstream). + +* Tue Nov 07 2006 Matthew Barnes - 2.9.2-2.fc7 +- Revise patch for RH bug #202751 and re-enable it. + +* Mon Nov 06 2006 Matthew Barnes - 2.9.2-1.fc7 +- Update to 2.9.2 +- Remove patch for Gnome.org bug #360240 (fixed upstream). +- Remove patch for Gnome.org bug #360619 (fixed upstream). + +* Mon Nov 06 2006 Matthew Barnes - 2.9.1-3.fc7 +- Add patch for RH bug #176400 (reset calendar IM context). +- Add patch for RH bug #182247 (calendar input glitch). + +* Fri Oct 20 2006 Matthew Barnes - 2.9.1-2.fc7 +- Add patch for Gnome.org bug #356177 (deprecate EMutex). +- Add patch for Gnome.org bug #363695 (deprecate EStrv/EPoolv). +- Disable patch for RH bug #202751 (unwanted side-effects). + +* Mon Oct 16 2006 Matthew Barnes - 2.9.1-1.fc7 +- Update to 2.9.1 +- Bump eds_version to 1.9.1, evo_major to 2.10. +- Remove patch for Gnome.org bug #359236 (fixed upstream). + +* Mon Oct 16 2006 Matthew Barnes - 2.8.1-4.fc7 +- Another typo. + +* Mon Oct 16 2006 Matthew Barnes - 2.8.1-3.fc7 +- Fix a typo in setting up .desktop symlinks. + +* Mon Oct 16 2006 Matthew Barnes - 2.8.1-2.fc7 +- Forgot to check-in one of the patches. + +* Mon Oct 16 2006 Matthew Barnes - 2.8.1-1.fc7 +- Update to 2.8.1 +- Use stricter build settings. +- Make .desktop symlinks absolute (RH bug #209322). +- Add patch for RH bug #202751 (printing of indic languages). +- Add patch for Gnome.org bug #357970 (deprecated GLib / GDK symbols). +- Add patch for Gnome.org bug #359236 (search state crash). +- Add patch for Gnome.org bug #360240 ("unused variable" warnings). +- Add patch for Gnome.org bug #360619 ("incompatible pointer type" warnings). +- Add patch for Gnome.org bug #360946 (improved "about" dialog). +- Add patch for Gnome.org bug #362638 (deprecate EThread). +- Update patch for RH bug #211058 (partially fixed upstream). +- Remove patch for RH bug #201307 (fixed upstream). +- Remove patch for RH bug #205576 (fixed upstream). +- Remove patch for Gnome.org bug #351332 (fixed upstream). +- Remove patch for Gnome.org bug #352450 (fixed upstream). +- Remove patch for Gnome.org bug #353472 (fixed upstream). +- Remove patch for Gnome.org bug #356811 (fixed upstream). + +* Sun Oct 01 2006 Jesse Keating - 2.8.0-7.fc6 +- rebuilt for unwind info generation, broken in gcc-4.1.1-21 + +* Thu Sep 21 2006 Matthew Barnes - 2.8.0-6.fc6 +- Add patch for RH bug #205576 (message deletion in thread view). + +* Wed Sep 20 2006 Matthew Barnes - 2.8.0-5.fc6 +- Add patch for Gnome.org bug #356811 (lingering file on uninstall). + +* Tue Sep 19 2006 Matthew Barnes - 2.8.0-4.fc6 +- Bump eds_version to 1.8.0. + +* Wed Sep 13 2006 Matthew Barnes - 2.8.0-3.fc6 +- Add patch for RH bug #161885. + +* Wed Sep 13 2006 Matthew Barnes - 2.8.0-2.fc6 +- Add patch for RH bug #201307. + +* Mon Sep 4 2006 Matthew Barnes - 2.8.0-1.fc6 +- Update to 2.8.0 +- Remove patch for RH bug #197868 (fixed upstream). +- Remove patch for RH bug #201541 (fixed upstream). +- Remove patch for RH bug #201831 (fixed upstream). +- Remove patch for RH bug #202383 (fixed upstream). +- Remove patch for RH bug #203036 (fixed upstream). +- Remove patch for Gnome.org bug #352248 (fixed upstream). +- Remove patch for Gnome.org bug #352423 (fixed upstream). +- Update patch for Gnome.org bug #351332 (partially fixed upstream). + +* Thu Aug 31 2006 Matthew Barnes - 2.7.92-8.fc6 +- Add patch for RH bug #203036. +- Disable notification-cleanups patch. + +* Tue Aug 29 2006 Matthew Barnes - 2.7.92-7.fc6 +- Add patch for Gnome.org bug #353472. + +* Mon Aug 28 2006 Matthew Barnes - 2.7.92-6.fc6 +- Add another hunk to the patch for RH bug #201541. +- Add patch for RH bug #202289. + +* Mon Aug 28 2006 Matthew Barnes - 2.7.92-5.fc6 +- Add patch for RH bug #201541. + +* Wed Aug 23 2006 Matthew Barnes - 2.7.92-4.fc6 +- Add patches for Gnome.org bug #352450. + +* Tue Aug 22 2006 Matthew Barnes - 2.7.92-3.fc6 +- Replace my patch for RH bug #202383 with a better one from upstream. +- Add patch for Gnome.org bug #352423. + +* Mon Aug 21 2006 Matthew Barnes - 2.7.92-2.fc6 +- Add patch for Gnome.org bug #352248 (and remember to commit it). + +* Mon Aug 21 2006 Matthew Barnes - 2.7.92-1.fc6 +- Update to 2.7.92 +- Remove patch for RH bug #197834 (fixed upstream). +- Update patch for Gnome.org bug #351332 (partially fixed upstream). + +* Tue Aug 15 2006 Matthew Barnes - 2.7.91-5.fc6 +- Drop the bug-buddy dependency since it's not required for Evolution to run. + +* Mon Aug 14 2006 Matthew Barnes - 2.7.91-4 +- Add patch for RH bug #201831. + +* Mon Aug 14 2006 Matthew Barnes - 2.7.91-3 +- Consolidate "missing declarations" patches. +- Add patch for RH bug #202383. + +* Fri Aug 11 2006 Matthew Barnes - 2.7.91-2 +- Add patch for RH bug #197868. + +* Mon Aug 7 2006 Matthew Barnes - 2.7.91-1 +- Update to 2.7.91 +- Update patch for RH bug #197834 for use with bug-buddy 2.15.90. +- Require bug-buddy >= 2.15.90. + +* Fri Aug 4 2006 Matthew Barnes - 2.7.90-6 +- Update to 2.7.90 +- Require evolution-data-server-1.7.90.1. + +* Wed Aug 2 2006 Matthew Barnes - 2.7.4-5 +- Remove patch for RH bug #167157, as it fixed it the wrong way. +- The real fix for #167157 is in evolution-data-server-1.7.4-5. +- No longer packaging unused patches. + +* Mon Jul 31 2006 Matthew Barnes - 2.7.4-4 +- Add patch for RH bug #178295. +- Add patch for RH bug #167157. + +* Tue Jul 18 2006 Matthew Barnes - 2.7.4-3 +- Clean up spec file, renumber patches. +- Add BuildRequires for dbus-glib-devel. +- Rebuild to pick up new D-Bus. + +* Thu Jul 13 2006 Matthew Barnes - 2.7.4-2 +- Update patch for RH bug #157400. +- Update patch for RH bug #157505. + +* Wed Jul 12 2006 Matthew Barnes - 2.7.4-1 +- Update to 2.7.4 +- Remove evo-calendar-print-with-pango-7.patch (fixed upstream). +- Remove patch for Gnome.org bug #345677 (fixed upstream). +- Remove patch for RH bug #175596 (fixed upstream). + +* Wed Jul 12 2006 Jesse Keating - 2.7.3-10.1 +- rebuild + +* Tue Jul 11 2006 Matthew Barnes - 2.7.3-10 +- Update patch for RH bug #190359. + +* Fri Jul 7 2006 Matthew Barnes - 2.7.3-9 +- Make "Submit Bug Report" menu item work again (RH #197384). + +* Thu Jul 6 2006 Matthew Barnes - 2.7.3-8 +- Add patch for RH bug #166231 (also addresses #131227 and #157391). + +* Fri Jun 29 2006 Matthew Barnes - 2.7.3-7 +- Add patch for RH bug #157400, reorder some patch #'s. + +* Thu Jun 29 2006 Matthew Barnes - 2.7.3-6 +- Properly capitalize "Message->Mailing List" menu items (RH #175596). + +* Tue Jun 27 2006 Matthew Barnes - 2.7.3-5 +- Add patch for Gnome.org bug #211058 for Trever Adams to test. + +* Mon Jun 26 2006 Matthew Barnes - 2.7.3-4 +- Add patch for RH bug #157505 for QE testing. + +* Thu Jun 22 2006 Matthew Barnes - 2.7.3-3 +- Fix bad type in schema file (Gnome.org #345677). + +* Wed Jun 14 2006 Tomas Mraz - 2.7.3-2 +- rebuilt with new gnutls + +* Tue Jun 13 2006 Matthias Clasen - 2.7.3-1 +- Update to 2.7.3 + +* Mon May 29 2006 Dan Williams - 2.7.2.1-4 +- Don't crash on quit when trying to save window size (Gnome.org #343331) + +* Tue May 23 2006 Matthew Barnes 2.7.2.1-3 +- Port evolution-2.7.1-notification-cleanups.patch to new libnotify API. +- Require libnotify >= 0.4. + +* Fri May 19 2006 Matthew Barnes - 2.7.2.1-2 +- Require specific versions of GNU Autotools packages for building. +- Add evolution-2.7.2-preedit-gnome.bz-264485.patch (Mayank Jain). +- Various spec file cleanups. +- Pick up new libnotify. + +* Wed May 17 2006 Matthew Barnes - 2.7.2.1-1 +- Update to 2.7.2.1 +- Remove nss/nspr hunk from evolution-2.7.1-no-gnome-common.patch + (fixed upstream). + +* Fri May 12 2006 Matthew Barnes - 2.7.1-1 +- Update to 2.7.1 +- Bump evo_major from 2.6 to 2.8 +- Upstream evolution.desktop renamed evolution-%{evo_major}.desktop. +- Upstream evolution.keys renamed evolution-%{evo_major}.keys. +- Upstream evolution.mime renamed evolution-%{evo_major}.mime. +- Update line numbers in evolution-2.5.2-no-gnome-common.patch and + evolution-2.5.5.1-notification-cleanups.patch and rename them to + version 2.7.1. + +* Wed May 3 2006 Matthew Barnes - 2.6.1-3 +- rebuilt + +* Mon Apr 10 2006 Matthias Clasen - 2.6.1-2 +- Update to 2.6.1 + +* Thu Mar 30 2006 Caolan McNamara - 2.6.0-2 +- rebuild against reverted pilot-link +- disable evolution-2.5.4-fix-conduits.patch for reversion to pilot-link 0.11.8 + +* Mon Mar 13 2006 Ray Strode - 2.6.0-1 +- 2.6.0 +- turn on the "error on missing prototypes" check thing + +* Mon Feb 27 2006 Ray Strode - 2.5.92-1 +- 2.5.92 + +* Tue Feb 14 2006 David Malcolm - 2.5.91-1 +- 2.5.91 +- updated patch 101 to track upstream changes to calendar printing code +- remove uptreamed patch 807 (NM multiple initialization assertion) +- readded the mail-to-task plugin XML UI file +- bump e-d-s req to 1.5.91 + +* Fri Feb 10 2006 Jesse Keating - 2.5.90-2.1 +- bump again for double-long bug on ppc(64) + +* Thu Feb 9 2006 Christopher Aillon - 2.5.90-2 +- Disable the inline audio plugin for now since it uses gstreamer08 + +* Tue Feb 07 2006 Jesse Keating - 2.5.90-1.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Mon Jan 30 2006 David Malcolm - 2.5.90-1 +- 2.5.90 +- trimmed patches 805 and 808, as parts of these got merged upstream +- trimmed and regenerated patch 806 to track upstream +- removed the mail-to-task plugin XML UI file + +* Sat Jan 28 2006 David Malcolm - 2.5.5.1-2 +- added missing patch + +* Wed Jan 25 2006 David Malcolm - 2.5.5.1-1 +- 2.5.5.1 +- update patch 106 to track upstream, renaming from + evolution-2.2.2-commit-enter-on-calendar.patch to + evolution-2.5.5.1-commit-enter-on-calendar.patch +- update patch 805 to track upstream +- added patch to fix some newly missing declarations (patch 808) +- replace evolution-2.5.4-port-to-new-libnotify-api.patch with + evolution-2.5.5.1-notification-cleanups.patch, since much of this was + duplicated by another patch that landed upstream; removing the actions code + as it was crashing deep inside DBus (patch 806, #177666) +- explicitly list various files to reduce reliance on globbing; organized the + files into logical groups; comment them +- added -Wno-sign-compare to CFLAGS +- enabled parallel make +- introduced require_function_declarations macro to make + -Werror-implicit-function-declaration flag optional; turn it off for now +- include the new CalDAV and mail-attachments-import plugins in the file list; + add an XML UI file for the mail-to-task plugin. +- use "sed -i -e" rather than "sed -ie" to avoid getting severe bonobo files + +* Wed Jan 18 2006 Ray Strode - 2.5.4-10 +- fix fix for multilib issue with shlib bonobo components (bug 156982) + +* Wed Jan 18 2006 Ray Strode - 2.5.4-9 +- fix multilib issue with shlib bonobo components (bug 156982) + +* Thu Jan 12 2006 David Malcolm - 2.5.4-8 +- avoid multiple initialization of NetworkManager connections (patch 807, + gnome bug #326785) + +* Thu Jan 12 2006 David Malcolm - 2.5.4-7 +- updated alarm notification patch(patch 806, #177546, #177666, #177667, + #177670) + +* Thu Jan 12 2006 Christopher Aillon - 2.5.4-6 +- Remove unneeded Requires: notify-daemon + +* Thu Jan 12 2006 Christopher Aillon - 2.5.4-5 +- Update BR to libnotify-devel + +* Wed Jan 11 2006 David Malcolm - 2.5.4-4 +- ported alarm notification code to the new libnotify API (patch 806, #177546) +- added libnotify_support macro +- added explicit notify-daemon requirement as a workaround for bug #177535 + +* Tue Jan 10 2006 David Malcolm - 2.5.4-3 +- updated patch 800 to include patch for memo conduit (untested at this stage); + renaming from evolution-2.5.2-fix-conduits.patch to + evolution-2.5.4-fix-conduits.patch; extended patch 802 to handle the memo + conduit; renaming from evolution-2.2.2-fix-conduit-dir.patch to + evolution-2.5.4-fix-conduit-dir.patch; re-enable conduits in build (#175160) +- switch the build-time dep for the audio-inline plugin from gstreamer-devel to + gstreamer08-devel to better reflect the test in the tarball's configure.in + +* Wed Jan 4 2006 David Malcolm - 2.5.4-2 +- added optional build-time requirement on NetworkManager-glib-devel +- update patch 805 to cover a missing declaration in Network Manager support + +* Tue Jan 3 2006 David Malcolm - 2.5.4-1 +- 2.5.4 +- update patch 107 to track underlying code changes; rename from + evolution-2.2.2-move-autosave-file.patch to + evolution-2.5.4-move-autosave-file.patch +- added patch to fix more missing declarations (patch 805) +- added files for publish-calendar plugin + +* Mon Dec 19 2005 David Malcolm - 2.5.3-1 +- 2.5.3 +- Updated patch 106 (evolution-2.2.2-commit-enter-on-calendar.patch) so that it + still applies cleanly + +* Thu Dec 15 2005 Christopher Aillon 2.5.2-2 +- Require nspr and nss instead of mozilla-nspr and mozilla-nss +- Update no-gnome-common patch to work with standalone nss package + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Wed Dec 7 2005 David Malcolm - 2.5.2-1 +- 2.5.2 +- bump gtkhtml requirement from 3.7.6 to 3.9.2 +- bump eds requirement from 1.4.1.1 to 1.5.2 +- bump evo_major from 2.4 to 2.6 +- updated patch 107 +- updated patch 108 +- updated patch 800, replacing + rh-161817-attach-116019-conduit_pilot_link_updates.diff with + evolution-2.5.2-fix-conduits.patch. Not yet complete. +- disable pilot support for now (see #175160) +- added hula plugin to list of packaged plugins +- generalize gconf schema packaging to support changing evo_major + +* Fri Dec 2 2005 David Malcolm - 2.4.2-2 +- force regeneration of the intltool files to prevent a problem where the + tarball copy of intltool-merge.in was out of sync with the intltool.m4 in the + latest shipped copy of intltool, which resulted in a broken intltool-merge + script when the tree was reautotooled. (appears that the tarball was built + with a CVS copy of intltool where @EXPANDED_LIBDIR@ had been renamed to + @INTLTOOL_LIBDIR@, but our aclocal/intltool.m4 doesn't yet reflect that + change) + +* Tue Nov 29 2005 David Malcolm - 2.4.2-1 +- 2.4.2 +- explicitly list the plugins that are packaged (#166234) +- added build-time requirement on gstreamer-devel to cope with audio-inline + plugin + +* Tue Nov 29 2005 David Malcolm - 2.4.1-8 +- add -DLDAP_DEPRECATED to CFLAGS (#172999) + +* Wed Oct 26 2005 David Malcolm - 2.4.1-7 +- Added a patch (110) to hide the component switcher buttons by default on new + windows (#170799) by patching the GConf schema. +- Made list of installed schemas explicit. +- Own the plugins subdirectory + +* Tue Oct 25 2005 David Malcolm - 2.4.1-6 +- use 4 separate .desktop files from the redhat-menus package, rather than the + current single one; bump the redhat-menus requirement accordingly (from 1.13 + to 5.0.4); introduce a macro for this requirement. + +* Mon Oct 24 2005 David Malcolm - 2.4.1-5 +- fix removal of upstream .desktop file (broke on upgrade to Evolution 2.2, and + continued to be broken with 2.3/2.4) (#103826, again) + +* Tue Oct 18 2005 David Malcolm - 2.4.1-4 +- updated patch 804 to declare e_calendar_table_process_completed_tasks + +* Tue Oct 18 2005 David Malcolm - 2.4.1-3 +- added patch (804: evolution-2.4.1-fix-missing-declarations.patch) to fix + missing declaration (thanks to Peter Robinson) + +* Mon Oct 17 2005 David Malcolm - 2.4.1-2 +- bump e-d-s requirement to 1.4.1.1 + +* Tue Oct 4 2005 David Malcolm - 2.4.1-1 +- 2.4.1 +- regenerate patch 101 to handle conflict in + calendar/gui.print.c: print_week_day_event introduced by fix to upstream bug + 244981 (end date added while printing in the week view); bump patch name from + version 5 to version 6 +- removed patch 804 (conduits-multi-day-crash); this is now in upstream tarball + +* Wed Sep 14 2005 Jeremy Katz - 2.4.0-2 +- rebuild for mozilla on ppc64 + +* Wed Sep 7 2005 David Malcolm - 2.4.0-1 +- 2.4.0 +- Removed patch to fix implicit function declarations (patch 110, added in + 2.3.8-1) as this is now upstream. + +* Thu Sep 1 2005 David Malcolm - 2.3.8-4 +- Enable exchange support when configuring, so that the exchange-operations + plugin gets built. + +* Fri Aug 26 2005 David Malcolm - 2.3.8-3 +- Added patch for #157074 (patch 804) + +* Fri Aug 26 2005 David Malcolm - 2.3.8-2 +- Move -Werror-implicit-function-declaration from configuration to the make + stage, to avoid breaking configuration tests. + +* Tue Aug 23 2005 David Malcolm - 2.3.8-1 +- 2.3.8 +- add -Werror-implicit-function-declaration to CFLAGS and a patch to fix the + problems arising (patch 110) + +* Tue Aug 16 2005 David Malcolm - 2.3.7-3 +- Introduce macro for gnome-pilot dependency, bumping from 2.0.6 to 2.0.13 +- Add obsoletion of libgal2/libgal2-devel (dependency was removed in 2.3.6-1); + based on the last EVR of the libgal2 package in CVS, 2:2.5.3-2 + +* Mon Aug 15 2005 David Malcolm - 2.3.7-2 +- rebuild + +* Tue Aug 9 2005 David Malcolm - 2.3.7-1 +- 2.3.7 +- Bump evolution-data-server requirement from 1.3.6 to 1.3.7 +- Bump gtkhtml3 requirement from 3.6.2 to 3.7.6 + +* Mon Aug 8 2005 Tomas Mraz - 2.3.6.1-5 +- rebuild with new gnutls + +* Tue Aug 2 2005 David Malcolm - 2.3.6.1-4 +- Added patch to show correct mimetype for OpenOffice.org files when guessing + type for attachments with mimetype "application/octet-stream" (#164957) + +* Mon Aug 1 2005 David Malcolm - 2.3.6.1-3 +- Improved version of evolution-2.3.5.1-fix-150458.patch (#150458) + +* Sat Jul 30 2005 David Malcolm 2.3.6.1-2 +- Fixed version numbers in GConf schema files (#164622); added + apps-evolution-mail-prompts-checkdefault-2.4.schemas + +* Fri Jul 29 2005 David Malcolm - 2.3.6.1-1 +- 2.3.6.1 + +* Thu Jul 28 2005 David Malcolm - 2.3.6-1 +- 2.3.6 +- Bump evolution-data-server requirement to 1.3.6 (needed for + CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING) +- Removed libgal2[-devel] dependencies; the code has been moved into the + evolution tarball + +* Thu Jul 28 2005 David Malcolm - 2.3.5.1-2 +- added experimental patch to port ETable printing to use Pango (#150458) + +* Mon Jul 25 2005 David Malcolm - 2.3.5.1-1 +- 2.3.5.1 +- Update evo_major from 2.2 to 2.4 +- Updated evo-calendar-print-with-pango- patch from version 4 to 5 +- Removed Patch105: evolution-2.2.2-fix-new-mail-notify.patch as configure.in + in this branch tests for existance for dbus-glib-1, rather than max-version. +- Removed Patch801: gb-309138-attach-48417-fix-evo-conduit-memleaks.patch as + this is now in upstream tarball. +- Removed evolution-calendar-importers and evolution-addressbook-importers + directories. +- Updated evolution-2.2.2-no-gnome-common.patch to include a patch to rename + mozilla-nspr to nspr + +* Tue Jun 28 2005 David Malcolm - 2.2.2-11.fc5 +- Remove GNOME_COMPILE_WARNINGS from configure.in (since gnome-common might not be available when we rerun the autotools; patch 803) + +* Tue Jun 28 2005 David Malcolm - 2.2.2-10.fc5 +- Moved .conduit files to libdir/gnome-pilot/conduits, rather than beneath datadir, to match gnome-pilot (patch 802) + +* Mon Jun 27 2005 David Malcolm - 2.2.2-9.fc5 +- Replaced patch to port conduits to pilot-link-0.12 with Mark G Adams's version of same (#161817) +- Added Mark G Adams's memory leak fix (patch 801) + +* Mon Jun 6 2005 David Malcolm - 2.2.2-8 +- Added Ivan Gyurdiev's patch to move autosave files inside the .evolution + directory + +* Thu May 26 2005 David Malcolm - 2.2.2-7 +- Added Akira Tagoh's patch for calendar keypress handling (#154360) + +* Mon May 23 2005 David Malcolm - 2.2.2-6 +- Remove static versions of libraries + +* Thu May 5 2005 David Malcolm - 2.2.2-5 +- added evolution-2.2.2-fix-new-mail-notify.patch to CVS + +* Thu May 5 2005 David Malcolm - 2.2.2-4 +- Removed explicit mozilla_build_version; instead use pkg-config to determine +the path to the NSS/NSPR headers. +- Use a macro to express requirement on pilot-link (was 1:0.11.4, now 0.12; +patches depend on this) +- Re-enabled the new-mail-notify plugin (my patch to handle differing DBus +versions is in the upstream tarball; but configure.in disables the plugin for +dbus versions > 0.23; patched configure.in to allow arbitrary DBus versions, +and run autoconf at the start of the build) (#156328) + +* Sat Apr 30 2005 David Malcolm - 2.2.2-3 +- updated mozilla_build_version to 1.7.7 + +* Sat Apr 30 2005 David Malcolm - 2.2.2-2 +- Finished porting conduits to pilot-link-0.12 API; re-enabled pilot support (#152172) + +* Mon Apr 11 2005 David Malcolm - 2.2.2-1 +- 2.2.2 +- updated evo-calendar-print-with-pango-4.patch to handle upstream change to print_comp_item +- removed patch for XB73912; now in upstream tarball +- removed patch to new-mail-notify; generalised fix to cope with various DBus API versions is now upstream +- removed patch for XB73844; now in upstream tarball +- Update requirements: + - gtkhtml3 from 3.6.1 to 3.6.2 + - libgal2 from 2.4.1 to 2.4.2 + - eds from 1.2.1 to 1.2.2 + +* Wed Mar 23 2005 David Malcolm - 2.2.1.1-2 +- Add patch for upstream bug XB73844 (should now be able to accept meeting requests) + +* Fri Mar 18 2005 David Malcolm - 2.2.1.1-1 +- 2.1.1.1 + +* Thu Mar 17 2005 David Malcolm - 2.2.1-1 +- 2.2.1 +- Updated requirements: + * gtkhtml3 from 3.6.0 to 3.6.1 + * libgal2 from 2.4.0 to 2.4.1 + * eds from 1.2.0 to 1.2.1 +- Added rum-time requirement on gnome-vfs2; updated version requirement from 2.0 to 2.4 +- The new-mail-notify plugin will not be built for now since the upstream configure test now checks for dbus-glib-1 version <= 0.23.4 (to minimise problems caused by the API change) + +* Mon Mar 14 2005 David Malcolm - 2.2.0-10 +- disabled pilot-link support for now so that we have an evolution package; more patching is needed to get this to work with pilot-link-0.12 + +* Mon Mar 14 2005 David Malcolm - 2.2.0-9 +- another attempt at porting to pilot-link 0.12 + +* Mon Mar 14 2005 David Malcolm - 2.2.0-8 +- Added patch to deal with changes to pilot-link from 0.11->0.12 + +* Mon Mar 14 2005 David Malcolm - 2.2.0-7 +- use 0.31 rather than 0.31.0 for DBus version + +* Mon Mar 14 2005 David Malcolm - 2.2.0-6 +- rebuilt against pilot-link-0.12 +- added versioning to the requirement on dbus (>=0.31) + +* Thu Mar 10 2005 David Malcolm - 2.2.0-5 +- Added patch for changes to DBus API in version 0.31 (#150671) +- Removed explicit run-time spec-file requirement on mozilla. + The Mozilla NSS API/ABI stabilised by version 1.7.3 + The libraries are always located in the libdir + However, the headers are in /usr/include/mozilla-%{mozilla_build_version} + and so they move each time the mozilla version changes. + So we no longer have an explicit mozilla run-time requirement in the specfile; + a requirement on the appropriate NSS and NSPR .so files is automagically generated on build. + We have an explicit, exact build-time version, so that we can find the headers (without + invoking an RPM query from the spec file; to do so is considered bad practice) +- Introduced mozilla_build_version, to replace mozilla_version + +* Wed Mar 9 2005 Christopher Aillon - 2.2.0-4 +- Depend on mozilla 1.7.6 + +* Wed Mar 9 2005 David Malcolm - 2.2.0-3 +- added patch from upstream for bug XB-73192, fixing missing "Mark as Read/Unread" context menu items + +* Tue Mar 8 2005 David Malcolm - 2.2.0-2 +- actually add source tarball this time + +* Tue Mar 8 2005 David Malcolm - 2.2.0-1 +- 2.2.0 +- Removed patch for GCC 4 fix as this is now in upstream tarball +- Updated requirements: + * gtkhtml3 from 3.5.7 to 3.6.0 + * libgal2 from 2.3.5 to 2.4.0 + * eds from 1.1.6 to 1.2.0 + +* Tue Mar 8 2005 David Malcolm - 2.1.6-3 +- rebuild (to use latest DBus library) + +* Tue Mar 1 2005 David Malcolm - 2.1.6-2 +- added patch to fix build with GCC4 + +* Tue Mar 1 2005 David Malcolm - 2.1.6-1 +- Update from upstream unstable 2.1.6 to 2.1.6 +- Added patches to fix calendar and addressbook printing for non-Roman scripts (#138075) +- Added explicit requirement on libgnomeprint22 >= 2.8.0 +- Added BuildRequires: gtk-doc +- Updated requirements: + * gtkhtml3 from 3.5.6 to 3.5.7 + * libgal2 from 2.3.4 to 2.3.5 + * eds from 1.1.5 to 1.1.6 + +* Wed Feb 9 2005 David Malcolm - 2.1.5-1 +- Update from upstream unstable 2.1.4 to 2.1.5 +- Updated requirements: + * gtkhtml3 from 3.5.4 to 3.5.6 + * libgal2 from 2.3.3 to 2.3.4 + * eds from 1.1.4.1 to 1.1.5 +- Removed explicit packaging of weather icons as these are now below DATADIR/evolution/2.2 rather than DATADIR/evolution-2.2 + +* Wed Jan 26 2005 David Malcolm - 2.1.4-1 +- Update from upstream stable 2.0.3 to unstable 2.1.4 +- Updated evo_major from 2.0 to 2.2 +- Removed camel packaging as this has been moved to evolution-data-server for Evolution 2.2 +- Added plugins to the packaged files +- Added weather icons to the packaged files +- Updated requirements: + * gtkhtml3 from 3.3.2 to 3.5.4 + * libgal2 from 2.2.4 to 2.3.3 + * eds from 1.0.3 to 1.1.4.1 + * libsoup from 2.2.0 to 2.2.2 +- Added built-time requirement on atk-devel +- Enable all plugins for now +- Added requirement on dbus (for the new-mail-notify plugin) +- Enable gtk-doc +- Updated GConf schema name suffixes from 2.0 to 2.2 + +* Sun Dec 19 2004 Christopher Aillon 2.0.3-2 +- Rebuild against mozilla 1.7.5 + +* Wed Dec 15 2004 David Malcolm - 2.0.3-1 +- Update from upstream 2.0.2 to 2.0.3 with these bug fixes: + * Addressbook + XB67656 - almost the same email address are considrered identical (Siva) + XB69079 - Data repeated after save with bad date format (Siva) + XB66854 - Some strings are missed to translation (Rodney) + + * Calendar + XB47529 - Date in reminder window appears in UTF-8 in non-UTF-8 locale (Rodney) + XB68707 - Events ending at 12:00 AM show as ending at 12:00 pm (JP) + XB67403 - wrong alarm time displayed (Rodrigo) + XB68077 - appointment dialog re-size (Rodrigo) + - leak fixes (Chen) + - sensitize menu items in list view properly (JP) + - redraw display when 24hr time setting changes (JP) + + * Mail + XB69533 - Unable to subscribe to the alt hierarchy (Michael) + XB69776 - Signed Mail with attachments displays everything with multipart/boundaries stuff (Michael) + XB69615 - delete certificate after viewing smime message (Michael) + XB69109 - EHLO or HELO with ip addresses does not conform rfc 821 (Michael) + XB69982 - During Newsgroup list refresh, it crashes (Michael) + XB69446 - Mail shown as attachment if some headers are upper case (S. Caglar Onur) + XB68556 - NNTP with SSL won't work, even with stunnel (Michael) + XB69145 - toplevel message/rfc822 parts are broken for IMAP (Michael) + XB69241 - base64 attachement holding PGP block (Jeff) + XB67895 - nntp support not asking for password (Michael) + XB67898 - Use of symbolic port-names is not guaranteed to work everywhere (Michael) + XB69851 - remember password check doesn't stick (Michael) + XB69623 - Moving a message from an IMAP INBOX to an IMAP folder caused crash (Radek) + XB69339 - postscript and some other attachments not visable (Michael) + XB69579 - vFoldersXBUNMATCHED generates errors (Michael) + XB68958 - current message forgotten in vfolders (Michael) + XB68974 - Wizard doesn't store smtp auth settings (Michael) + XB67496 - html email not rendered in preview pane (Michael) + XB67014 - Checking supported auth types doesn't work with new SSL certificate (Michael) + XB68006 - Evo crashed after viewing previously-sent email and copying URL from it (Michael) + XB68787 - Crash when migrating 1.4 data to 2.0.2 (Michael) + XB67622 - SMTP auth usernames containing % character fail (Jeff) + - fix pthread_key_delete args (Julio M. Merino Vidal) +- Removed patch for "Unmatched" vfolder properties dialog (#141458) as this is now in upstream tarball (XB69579 above) +- Update dependency on e-d-s from 1.0.2 to 1.0.3 +- Update dependency on libgal2 from 2.2.3 to 2.2.4 + +* Wed Dec 1 2004 David Malcolm - 2.0.2-6 +- Fix broken properties dialog for "Unmatched" vfolder (#141458) + +* Wed Oct 27 2004 Christopher Aillon - 2.0.2-4 +- Re-enable s390(x) + +* Fri Oct 22 2004 David Malcolm - 2.0.2-3 +- added requirement on gnutls/gnutls-devel + +* Fri Oct 22 2004 David Malcolm - 2.0.2-2 +- Fix for #132050 (no entry for Evolution in the menus): use the new redhat-evolution.desktop file provided by redhat-menus-1.13 + +* Tue Oct 12 2004 David Malcolm - 2.0.2-1 +- Update from 2.0.1 to 2.0.2 +- Updated dependency on e-d-s from 1.0.1 to 1.0.2 +- Updated dependency on libgal2 from 2.2.2 to 2.2.3 +- Updated dependency on gtkhtml3 from 3.3.0 to 3.3.2 +- ppc's mozilla dependency is now in line with the other architectures at 1.7.3 + +* Sat Oct 9 2004 David Malcolm +- disable s390/s390x for now + +* Fri Oct 8 2004 David Malcolm - 2.0.1-3 +- Fix for #135135, updating the fix for #103826 that removes the evolution.desktop file in "Office"; the file to delete had been renamed to evolution-2.0.desktop +- Added requirement on redhat-menus, since this supplies the target of our .desktop symlink + +* Tue Sep 28 2004 David Malcolm - 2.0.1-2 +- update mozilla dependency from 1.7.2 to 1.7.3, apart from on ppc (and on s390 and s390x, which remain at 1.6, and on ppc64 where it isn't available at all) + +* Tue Sep 28 2004 David Malcolm - 2.0.1-1 +- Update from 2.0.0 to 2.0.1 +- Updated dependency on e-d-s from 1.0.0 to 1.0.1 +- Updated dependency on libgal2 from 2.2.0 to 2.2.2 + +* Mon Sep 20 2004 David Malcolm - 2.0.0-2 +- rebuilt + +* Tue Sep 14 2004 David Malcolm - 2.0.0-1 +- Update from 1.5.94.1 to 2.0.0 +- Change source FTP location from 1.5 to 2.0 +- Updated dependency on e-d-s from 0.0.99 to 1.0.0 +- Documentation has now moved from 1.5 to 2.0 + +* Tue Aug 31 2004 David Malcolm - 1.5.94.1-1 +- updated tarball from 1.5.93 to 1.5.94.1 +- the BASE_VERSION in the configure.in script has finally been updated from 1.5 to 2.0 (affects OAFIIDs, install dirs, binary names etc); updated evo_major and various other parts of the spec-file to reflect this; however documentation is still 1.5 in upstream tarball +- updated dependency on libgal2 from 2:2.1.14 to 2:2.2.0 +- updated dependency on libsoup from 2.1.13 to 2.2.0 +- updated dependency on e-d-s from 0.0.98 to 0.0.99 + +* Tue Aug 17 2004 David Malcolm - 1.5.93-2 +- updated gnome-icon-theme requirement from 1.2.0 to 1.3.6 to fix problem with missing stock icons (bz #130142) + +* Mon Aug 16 2004 David Malcolm - 1.5.93-1 +- updated tarball from 1.5.92.2 to 1.5.93 +- removed filechooser patch - this is now in the upstream tarball, with a test at configuration time; it was autodetected and enabled in my test build; I've explicitly enabled it to be certain. +- updated dependency on libgal2 from 2:2.1.13 to 2:2.1.14 +- updated dependency on libsoup from 2.1.12 to 2.1.13 +- updated dependency on e-d-s from 0.0.97 to 0.0.98 + +* Wed Aug 11 2004 David Malcolm - 1.5.92.2-2 +- Increased mozilla_version from 1.7 to 1.7.2 so that the NSS test looks in the correct place + +* Wed Aug 11 2004 David Malcolm - 1.5.92.2-1 +- updated tarball from 1.5.92.1 to 1.5.92.2 + +* Wed Aug 4 2004 David Malcolm - 1.5.92.1-1 +- updated tarball from 1.5.91 to 1.5.92.1 +- added a dependency on gnome-icon-theme +- updated dependency on libgal2 from 2:2.1.11 to 2:2.1.13 +- updated dependency on gtkhtml3 from 3.1.17 to 3.3.0 +- updated dependency on libsoup from 2.1.11 to 2.1.12 +- updated dependency on e-d-s from 0.0.95 to 0.0.97 + +* Mon Jul 26 2004 David Malcolm - 1.5.91-1 +- 1.5.91 + +* Thu Jul 8 2004 Jeremy Katz - 1.5.90-5 +- use mozilla 1.7 on platforms where it's available +- check to make sure the appropriate mozilla headers exist if using + mozilla nss for ssl or fail the build + +* Thu Jul 8 2004 David Malcolm +- rebuilt + +* Wed Jul 7 2004 David Malcolm +- rebuilt + +* Tue Jul 6 2004 David Malcolm - 1.5.90-2 +- Fixed sources file + +* Tue Jul 6 2004 David Malcolm - 1.5.90-1 +- 1.5.90; updated requirements on gtkhtml3, libgal2, and e-d-s + +* Thu Jun 17 2004 David Malcolm - 1.5.9.2-1 +- 1.5.9.2 + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Tue Jun 8 2004 David Malcolm - 1.5.9.1-3 +- Replaced /usr/lib with %%{_libdir} in mozills_nss ssl_flags + +* Mon Jun 7 2004 David Malcolm - 1.5.9.1-2 +- updated filechooser patch again + +* Mon Jun 7 2004 David Malcolm - 1.5.9.1-1 +- 1.5.9.1; updated filechooser patch + +* Wed May 26 2004 David Malcolm - 1.5.8-3 +- added ORBit2 and spamassassin requirements + +* Mon May 24 2004 David Malcolm - 1.5.8-2 +- Fixed up filechooser patch and re-enabled it + +* Fri May 21 2004 David Malcolm - 1.5.8-1 +- 1.5.8; added explicit libbonoboui requirement; disabled filechooser patch for now + +* Tue May 4 2004 David Malcolm - 1.5.7-3 +- Added GtkFileChooser patch based on work by Carlos Garnacho Parro (http://lists.ximian.com/archives/public/evolution-patches/2004-March/004867.html); added requirement for GTK 2.4 + +* Thu Apr 22 2004 David Malcolm - 1.5.7-2 +- added emfv signal fix patch and fix for defaults in switch statements on gcc3.4 + +* Wed Apr 21 2004 David Malcolm - 1.5.7-1 +- 1.5.7 + +* Wed Mar 10 2004 Jeremy Katz - 1.5.5-1 +- 1.5.5 + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Wed Feb 18 2004 Jeremy Katz - 1.5.4-1 +- 1.5.4 + +* Tue Feb 17 2004 Jeremy Katz +- buildrequire e-d-s-devel instead of e-d-s (#114712) +- enable nntp support (#114802) + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Tue Jan 27 2004 Jeremy Katz 1.5.3-1 +- 1.5.3 + +* Wed Jan 21 2004 Jeremy Katz 1.5.2-2 +- size_t/int mismatch compile fix for 64bit platforms + +* Wed Jan 14 2004 Jeremy Katz 1.5.2-0 +- 1.5.2 +- add patch to fix gconf warning with schema + +* Sun Jan 4 2004 Jeremy Katz 1.5.1-0 +- 1.5.1 +- temporarily disable redhatify patch +- use mozilla-nss for SSL +- fix schema names + +* Thu Nov 6 2003 Jeremy Katz 1.4.5-8 +- fall back to HELO for ESMTP (#108753) + +* Tue Oct 28 2003 Jeremy Katz 1.4.5-7 +- fix title on composer save dialog (#108159) + +* Mon Oct 27 2003 Jeremy Katz 1.4.5-6 +- Make imap command length shorter to avoid choking some imap servers + (notably cyrus-imap). +- Make wombat session managed so that we don't hit weird bonobo activation + things. This adds a dependency on $DISPLAY for wombat. (#106826) + +* Sun Oct 19 2003 Jeremy Katz 1.4.5-5 +- use AI_ADDRCONFIG to avoid returning IPv6 addresses on hosts without + IPv6 support +- add patch from upstream with reply-to-list shortcut (Ctrl-l) + +* Wed Oct 15 2003 Jeremy Katz 1.4.5-4 +- really, really remove duplicate menu entry (#103826) + +* Tue Oct 14 2003 Jeremy Katz 1.4.5-3 +- Pull in some patches from upstream CVS + * Avoid division by zero with POP (X#41610) + * Don't mangle headers (X#33545) + * Prefix IPV6 numeric hosts properly (X#46006, #105028) + * Use proper function for IPV6 reverse lookups (X#46006) + * Allow timezone offset to be up to 14 hours (X#49357) + +* Mon Oct 13 2003 Jeremy Katz +- add patch from upstream CVS to fix SMTP syntax problems (#106630) +- really remove duplicate menu entry (#103826) + +* Mon Oct 6 2003 Jeremy Katz +- make redhat-email.desktop symlink relative (#104391) + +* Wed Sep 24 2003 Jeremy Katz +- add ipv6 support per dwmw2's request + +* Tue Sep 23 2003 Jeremy Katz 1.4.5-2 +- 1.4.5 + +* Wed Sep 17 2003 Jeremy Katz +- move static libs into -devel (#104399) + +* Tue Sep 16 2003 Jeremy Katz 1.4.4-7 +- filter types are gtypes, not ints (#103934) + +* Wed Sep 10 2003 Jeremy Katz 1.4.4-6 +- fix from upstream (will be in 1.4.5) to fix menu merging in the + composer with new libbonobo + +* Fri Sep 5 2003 Jeremy Katz +- remove the desktop file in Office (#103826) + +* Tue Sep 2 2003 Jeremy Katz 1.4.4-5 +- patch from upstream to fix display of some mails in + different charsets (#102899) +- add requires on newer version of ORBit2 (#103386) +- add patch from upstream (extracted by George Karabin) to use gnome-vfs + mime icon lookup where available (#102553) + +* Fri Aug 22 2003 Jeremy Katz 1.4.4-4 +- include static libs (#102834) + +* Wed Aug 6 2003 Jeremy Katz 1.4.4-3 +- add a -devel subpackage (#99376) + +* Mon Aug 4 2003 Jeremy Katz 1.4.4-1 +- 1.4.4 + +* Wed Jul 30 2003 Jeremy Katz +- buildrequires fixup from Ville Skytta (#101325) + +* Thu Jul 24 2003 Jeremy Katz 1.4.3-6 +- include tagoh's patch for printing cjk contacts (committed upstream, #99374) + +* Tue Jul 22 2003 Nalin Dahyabhai 1.4.3-5 +- rebuild + +* Tue Jul 15 2003 Jeremy Katz 1.4.3-4 +- build on all arches again + +* Mon Jul 14 2003 Jeremy Katz 1.4.3-3 +- rebuild + +* Thu Jul 10 2003 Jeremy Katz 1.4.3-1 +- 1.4.3 + +* Thu Jun 19 2003 Jeremy Katz +- make gal version dep more explicit + +* Fri Jun 13 2003 Jeremy Katz +- fix desktop file (#97162) + +* Tue Jun 10 2003 Jeremy Katz 1.4.0-2 +- rebuild +- excludearch ppc64 for now + +* Mon Jun 9 2003 Jeremy Katz 1.4.0-1 +- 1.4.0 + +* Wed Jun 5 2003 Elliot Lee +- rebuilt + +* Thu Jun 5 2003 Jeremy Katz 1.3.92-2 +- rebuild + +* Wed Jun 4 2003 Jeremy Katz +- buildrequires gettext (#92276) + +* Sun May 25 2003 Jeremy Katz 1.3.92-1 +- 1.3.92 + +* Wed May 7 2003 Jeremy Katz 1.3.3-2 +- fix default for /schemas/apps/evolution/mail/display/mime_types + +* Tue May 6 2003 Jeremy Katz 1.3.3-1 +- 1.3.3 + +* Sun May 4 2003 Jeremy Katz 1.3.2-2 +- enable pilot support +- add redhatify patch back + +* Tue Apr 22 2003 Jeremy Katz +- add a /usr/bin/evolution symlink + +* Mon Apr 21 2003 Jeremy Katz +- fix gnome-spell version requirement + +* Wed Apr 16 2003 Jeremy Katz 1.3.2-1 +- add trivial fix for evolution-mail schema key (ximian #41419) + +* Tue Apr 15 2003 Jeremy Katz +- update to 1.3 +- don't build with pilot support for now +- don't redhat-ify the summary prefs for now + +* Sun Apr 6 2003 Jeremy Katz 1.2.4-2 +- fix krb5 libdir for lib64 systems + +* Sun Apr 6 2003 Jeremy Katz 1.2.4-1 +- update to 1.2.4 + +* Thu Apr 3 2003 Jeremy Katz 1.2.2-7 +- oops, fix a tyop + +* Thu Apr 3 2003 Jeremy Katz 1.2.2-6 +- add a few cleanups for 64bit cleanliness (#86347) + +* Sun Mar 30 2003 Jeremy Katz +- add some buildrequires (#87612) + +* Mon Mar 24 2003 Jeremy Katz 1.2.3-1 +- update to 1.2.3 + +* Wed Mar 19 2003 Jeremy Katz 1.2.2-5 +- security patches from upstream + - sanity check UUEncoding header before decoding (CAN-2003-0128) + - don't decode doubly UUEncoded content (CAN-2003-0129) + - don't use a bonobo component to display things without registered + handlers (CAN-2003-0130) + +* Mon Feb 24 2003 Elliot Lee 1.2.2-4 +- debuginfo rebuild + +* Thu Feb 20 2003 Jeremy Katz 1.2.2-3 +- memleak patch had some bits that weren't supposed to be there. update + to newer from upstream. +- fix directory checking in proxy patch + +* Thu Feb 20 2003 Jeremy Katz 1.2.2-2 +- add missing build dep (#84388) +- add patch from upstream for evolution-mail memleak +- add patch from upstream to use the gnome2 proxy settings by default + +* Fri Feb 7 2003 Jeremy Katz 1.2.2-1 +- 1.2.2 +- build on x86_64 + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Tue Jan 7 2003 Nalin Dahyabhai 1.2.1-4 +- rebuild + +* Fri Jan 3 2003 Nalin Dahyabhai +- if building with OpenSSL, attempt to get cflags and ldflags from pkgconfig + +* Thu Jan 2 2003 Jeremy Katz 1.2.1-3 +- we don't want to use native POSIX threads for mutexes in db3, override them + +* Mon Dec 16 2002 Tim Powers 1.2.1-2 +- rebuild + +* Fri Dec 13 2002 Jeremy Katz 1.2.1-1 +- update to 1.2.1 + +* Thu Dec 12 2002 Jeremy Katz 1.2.0-6 +- require a newer soup, the old one Has Bugs (tm) +- excludearch x86_64; getting a R_X86_64_32S relocation in libical + although everything appears to be built with -fPIC correctly + +* Tue Dec 10 2002 Jeremy Katz 1.2.0-5 +- patch for multilib krb5 + +* Mon Dec 2 2002 Jeremy Katz 1.2.0-4 +- add upstream patch to handle LDAPv3 better +- add upstream patch to fix shell memory leaks +- add upstream patch to fix ldap scope selection +- build with openssl instead of mozilla-nss since it's available on + more platforms +- build on all arches + +* Fri Nov 22 2002 Jeremy Katz +- require bonobo-conf, not -devel (#78398) + +* Wed Nov 20 2002 Florian La Roche 1.2.0-3 +- disable pilot support for mainframe + +* Mon Nov 18 2002 Jeremy Katz 1.2.0-2 +- macro-ify the mozilla version to make it easier to build against + newer mozillas with headers in new locations +- buildrequire pilot-link-devel (#78077) +- drop uneeded ldapv3 patch (toshok says 1.2 already handles this) +- drop unneeded patch for ordering of the libdb checks +- add fejj's patch to always subscribe to the inbox from evolution-patches + +* Tue Nov 12 2002 Jeremy Katz 1.2.0-1 +- 1.2.0 + +* Sat Nov 2 2002 Jeremy Katz 1.1.90-2 +- reenable pilot support +- redhatify + +* Fri Nov 1 2002 Jeremy Katz 1.1.90-1 +- update to 1.1.90 + +* Thu Oct 31 2002 Jeremy Katz +- include mozilla epochs in requires (#74577) +- add build requires on newer oaf (#76801) + +* Thu Oct 24 2002 Jeremy Katz 1.1.2-1 +- update to 1.1.2 +- remove unpackaged files from the buildrooot +- disable pilot support for now + +* Tue Sep 3 2002 Jeremy Katz 1.0.8-10 +- add freetype-devel to build requires (#73319) + +* Mon Sep 2 2002 Owen Taylor +- Fix a problem where evolution-mail right click items corrupted the stack + (#67992) + +* Thu Aug 29 2002 Jeremy Katz 1.0.8-9 +- don't install two desktop files (#72871) + +* Wed Aug 28 2002 Preston Brown 1.0.8-8 +- absolute symlink .desktop file (#72913) + +* Thu Aug 22 2002 han Ngo 1.0.8-7 +- rebuild against new pilot-link + +* Sat Aug 10 2002 Florian La Roche +- bzip2 source + +* Tue Aug 6 2002 Than Ngo 1.0.8-5 +- rebuild against new pilot-link-0.11.2 + +* Thu Jul 18 2002 Jeremy Katz 1.0.8-4 +- rebuild against new gnome-pilot + +* Tue Jul 9 2002 Jeremy Katz 1.0.8-3 +- remove static and libtool archives for importers and camel-providers (#68222) +- do desktop-file-install magic +- remove dead sites from summary list (#64522) +- support openldap protocol version 3 based off of Nalin's autofs changes + +* Mon Jul 8 2002 Jeremy Katz 1.0.8-2 +- fix openldap-devel buildrequire + +* Mon Jul 1 2002 Jeremy Katz 1.0.8-1 +- 1.0.8 + +* Thu Jun 27 2002 Jeremy Katz 1.0.7-2 +- include patch to omf files from otaylor@redhat.com to fix + scrollkeeper validation errors + +* Sun Jun 23 2002 Jeremy Katz 1.0.7-1 +- update to 1.0.7 +- excludearch alpha while mozilla isn't being built there + +* Sun May 26 2002 Tim Powers 1.0.5-2 +- automated rebuild + +* Mon May 13 2002 Jeremy Katz 1.0.5-1 +- update to 1.0.5 + +* Fri May 3 2002 Jeremy Katz 1.0.3-6 +- add patch to fix spool unread counts (#64198) +- build with the fix for the crasher mail sent to + evolution-list (ximian #24140) + +* Mon Apr 15 2002 Jeremy Katz 1.0.3-4 +- include fejj(at)ximian.com's patch to fix the EINPROGRESS error with ssl + since it's been committed to the branch and fixes the problem for me +- include patch from tagoh(at)redhat.com to change the default charset + for Japanese to ISO-2022-JP (#63214) + +* Wed Apr 10 2002 Jeremy Katz 1.0.3-3 +- minor tweaks to the redhatify patch +- make accepting appointments sent to mailing lists work +- use the RFC specified LDAP attribs for freebusy and calendarURI + in addressbook +- fix a crash in the startup wizard + +* Sun Mar 31 2002 Jeremy Katz 1.0.3-2 +- move desktop file to /etc/X11/applnk (#62399) + +* Sun Mar 24 2002 Jeremy Katz 1.0.3-1 +- update to evolution 1.0.3 +- change summary view to show a recent errata list by default + +* Thu Mar 14 2002 Jeremy Katz +- put correct path to nspr includes on configure command line + +* Mon Mar 11 2002 Jeremy Katz 1.0.2-3 +- mozilla 0.9.9 has nspr and nss subpackages, hooray! rip out the static + libnss linkage and just link against what is provided dynamically +- kill the -devel subpackage since it's of questionable use +- explicitly require mozilla-nss and mozilla-nspr packages to make it easier + to resolve the requirements + +* Thu Feb 21 2002 Jeremy Katz 1.0.2-2 +- rebuild in new environment +- temporarily exclude on ia64 again + +* Thu Jan 31 2002 Jeremy Katz 1.0.2-1 +- update to 1.0.2 + +* Mon Jan 28 2002 Jeremy Katz 1.0.1-4 +- build on ia64 now that mozilla exists for ia64 + +* Sun Jan 27 2002 Jeremy Katz 1.0.1-3 +- rebuild in new environment +- add pilot support + +* Sun Jan 13 2002 Jeremy Katz 1.0.1-2 +- rebuild without mozilla-psm in the buildroot so libnss is linked + statically as intended + +* Sat Jan 12 2002 Jeremy Katz 1.0.1-1 +- update to 1.0.1 +- patch for autoconf 2.52 accepted upstream +- include man page +- use --with-sub-version=" (%%{version}-%%{release})" + +* Tue Dec 18 2001 Jeremy Katz 1.0-2 +- really disable news +- add patch from Jens Petersen to hopefully get + builds working with autoconf 2.52 +- conditionalize static libnss stuff so that it can go away when we + have a mozilla with shared libnss + +* Thu Dec 6 2001 Jeremy Katz 1.0-1.7.2 +- add patches off of branch for: + * do not show up as Preview Release in version string + * have next/previous work with multiple selected messages +- build without pilot support + +* Mon Dec 3 2001 Jeremy Katz 1.0-1 +- and bump to 1.0 + +* Sun Dec 2 2001 Jeremy Katz +- let's build with an included copy of libnss now since OpenSSL is support + is disabled on the 1.0 branch +- build with --enable-dot-locking=no +- excludearch ia64 again now that we need libnspr + +* Mon Nov 26 2001 Jeremy Katz +- build with gnome-pilot and krb5 support +- conditionalize ldap, pilot and krb5 support +- clean up buildrequires some + +* Sat Nov 17 2001 Jeremy Katz +- we can build on ia64 since we're using openssl instead of nspr +- disable non-functional nntp support +- 0.99.2 (rc2) + +* Fri Nov 9 2001 Jeremy Katz +- add explicit requires on current bonobo, oaf, and GConf to help people + help themselves +- s/Copyright/License/ + +* Thu Nov 8 2001 Jeremy Katz +- add a patch to revert changes to camel-tcp-stream-openssl; appears to + fix the SSL hangs + +* Wed Nov 7 2001 Jeremy Katz +- fix filelist to include libical zoneinfo +- add devel subpackage with includes and static libs + +* Mon Nov 5 2001 Jeremy Katz +- updated to 0.99.0 aka 1.0 RC1 + +* Tue Oct 23 2001 Havoc Pennington +- 0.16 snagged from Ximian GNOME + +* Fri Oct 5 2001 Havoc Pennington +- initial build based on David Sainty's specfile + +* Thu Oct 04 2001 David Sainty +- Updated to 0.15.99, 20011004 from cvs. + +* Wed Sep 05 2001 David Sainty +- Updated to 0.13.99, 20010905 from cvs. + +* Mon Sep 03 2001 David Sainty +- Updated to 0.13.99, 20010903 from cvs. +- Fixed Requires + BuildRequires + +* Mon Aug 06 2001 David Sainty +- Updated to 0.12.99, 20010806 from cvs. + +* Mon Aug 06 2001 David Sainty +- Relocated libical* from /usr/lib due to kdepim, -2 + +* Mon Aug 06 2001 David Sainty +- First spec file for evolution. +