diff options
author | Tomas Popela <tpopela@redhat.com> | 2014-06-09 22:32:25 +0800 |
---|---|---|
committer | Tomas Popela <tpopela@redhat.com> | 2014-06-09 22:32:25 +0800 |
commit | 8650fb139a9143f04615de74ff569bce3e0c4ce3 (patch) | |
tree | 89a41d08f179a5359b8eaee0c9344b8a5bf07cb3 /mail | |
parent | 04b7c97275ae420dca43f3e65c2ef54d02f01bdd (diff) | |
download | gsoc2013-evolution-8650fb139a9143f04615de74ff569bce3e0c4ce3.tar gsoc2013-evolution-8650fb139a9143f04615de74ff569bce3e0c4ce3.tar.gz gsoc2013-evolution-8650fb139a9143f04615de74ff569bce3e0c4ce3.tar.bz2 gsoc2013-evolution-8650fb139a9143f04615de74ff569bce3e0c4ce3.tar.lz gsoc2013-evolution-8650fb139a9143f04615de74ff569bce3e0c4ce3.tar.xz gsoc2013-evolution-8650fb139a9143f04615de74ff569bce3e0c4ce3.tar.zst gsoc2013-evolution-8650fb139a9143f04615de74ff569bce3e0c4ce3.zip |
Bug 540362: [webkit-composer] Use webkit for composer
Merge wip/webkit-composer branch into master.
Diffstat (limited to 'mail')
-rw-r--r-- | mail/Makefile.am | 5 | ||||
-rw-r--r-- | mail/e-http-request.c | 72 | ||||
-rw-r--r-- | mail/e-mail-display.c | 130 | ||||
-rw-r--r-- | mail/e-mail-reader-utils.c | 1 | ||||
-rw-r--r-- | mail/e-mail-reader.c | 2 | ||||
-rw-r--r-- | mail/em-composer-utils.c | 120 | ||||
-rw-r--r-- | mail/em-utils.c | 5 | ||||
-rw-r--r-- | mail/em-utils.h | 1 | ||||
-rw-r--r-- | mail/importers/Makefile.am | 6 | ||||
-rw-r--r-- | mail/mail-config.ui | 93 |
10 files changed, 253 insertions, 182 deletions
diff --git a/mail/Makefile.am b/mail/Makefile.am index d40922e605..d0b7220c89 100644 --- a/mail/Makefile.am +++ b/mail/Makefile.am @@ -46,10 +46,10 @@ libevolution_mail_la_CPPFLAGS = \ $(GNOME_PLATFORM_CFLAGS) \ $(CERT_UI_CFLAGS) \ $(CANBERRA_CFLAGS) \ - $(GTKHTML_CFLAGS) \ $(LIBCRYPTUI_CFLAGS) \ $(LIBSOUP_CFLAGS) \ - $(CODE_COVERAGE_CFLAGS) + $(CODE_COVERAGE_CFLAGS) \ + $(NULL) mailinclude_HEADERS = \ e-http-request.h \ @@ -225,7 +225,6 @@ libevolution_mail_la_LIBADD = \ $(GNOME_PLATFORM_LIBS) \ $(CERT_UI_LIBS) \ $(CANBERRA_LIBS) \ - $(GTKHTML_LIBS) \ $(SMIME_LIBS) \ $(LIBCRYPTUI_LIBS) \ $(LIBSOUP_LIBS) \ diff --git a/mail/e-http-request.c b/mail/e-http-request.c index 534e30bff6..39db7a1b84 100644 --- a/mail/e-http-request.c +++ b/mail/e-http-request.c @@ -165,17 +165,16 @@ handle_http_request (GSimpleAsyncResult *res, SoupRequest *soup_request; SoupSession *soup_session; gchar *evo_uri, *uri; - gchar *mail_uri; + gchar *mail_uri = NULL; GInputStream *stream; gboolean force_load_images = FALSE; - EMailImageLoadingPolicy image_policy; + EImageLoadingPolicy image_policy; gchar *uri_md5; EShell *shell; GSettings *settings; - const gchar *user_cache_dir; + const gchar *user_cache_dir, *soup_query; CamelDataCache *cache; GIOStream *cache_stream; - GHashTable *query; gint uri_len; if (g_cancellable_is_cancelled (cancellable)) @@ -185,24 +184,27 @@ handle_http_request (GSimpleAsyncResult *res, soup_request = SOUP_REQUEST (source_object); soup_session = soup_request_get_session (soup_request); + soup_uri = soup_request_get_uri (soup_request); /* Remove the __evo-mail query */ - soup_uri = soup_request_get_uri (soup_request); - g_return_if_fail (soup_uri_get_query (soup_uri) != NULL); + soup_query = soup_uri_get_query (soup_uri); + if (soup_query) { + GHashTable *query; - query = soup_form_decode (soup_uri_get_query (soup_uri)); - mail_uri = g_hash_table_lookup (query, "__evo-mail"); - if (mail_uri) - mail_uri = g_strdup (mail_uri); + query = soup_form_decode (soup_uri_get_query (soup_uri)); + mail_uri = g_hash_table_lookup (query, "__evo-mail"); + if (mail_uri) + mail_uri = g_strdup (mail_uri); - g_hash_table_remove (query, "__evo-mail"); + g_hash_table_remove (query, "__evo-mail"); - /* 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"); + /* 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"); - soup_uri_set_query_from_form (soup_uri, query); - g_hash_table_unref (query); + soup_uri_set_query_from_form (soup_uri, query); + g_hash_table_unref (query); + } evo_uri = soup_uri_to_string (soup_uri, FALSE); @@ -305,7 +307,7 @@ handle_http_request (GSimpleAsyncResult *res, /* Item not found in cache, but image loading policy allows us to fetch * it from the interwebs */ if (!force_load_images && mail_uri != NULL && - (image_policy == E_MAIL_IMAGE_LOADING_POLICY_SOMETIMES)) { + (image_policy == E_IMAGE_LOADING_POLICY_SOMETIMES)) { CamelObjectBag *registry; gchar *decoded_uri; EMailPartList *part_list; @@ -350,7 +352,7 @@ handle_http_request (GSimpleAsyncResult *res, g_free (decoded_uri); } - if ((image_policy == E_MAIL_IMAGE_LOADING_POLICY_ALWAYS) || + if ((image_policy == E_IMAGE_LOADING_POLICY_ALWAYS) || force_load_images) { SoupSession *temp_session; @@ -488,27 +490,25 @@ http_request_send_async (SoupRequest *request, gpointer user_data) { GSimpleAsyncResult *simple; - SoupURI *uri; - const gchar *enc; - GHashTable *query; - - uri = soup_request_get_uri (request); - g_return_if_fail (soup_uri_get_query (uri) != NULL); - - query = soup_form_decode (soup_uri_get_query (uri)); d ({ - gchar *uri_str = soup_uri_to_string (uri, FALSE); - printf ("received request for %s\n", uri_str); - g_free (uri_str); - }); + const gchar *soup_query; + SoupURI *uri; - enc = g_hash_table_lookup (query, "__evo-mail"); + uri = soup_request_get_uri (request); + soup_query = soup_uri_get_query (uri); - if (enc == NULL || *enc == '\0') { - g_hash_table_destroy (query); - return; - } + if (soup_query) { + gchar *uri_str; + GHashTable *query; + + query = soup_form_decode (soup_uri_get_query (uri)); + uri_str = soup_uri_to_string (uri, FALSE); + printf ("received request for %s\n", uri_str); + g_free (uri_str); + g_hash_table_destroy (query); + } + }); simple = g_simple_async_result_new ( G_OBJECT (request), callback, @@ -521,8 +521,6 @@ http_request_send_async (SoupRequest *request, G_PRIORITY_DEFAULT, cancellable); g_object_unref (simple); - - g_hash_table_destroy (query); } static GInputStream * diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c index 61751dfbee..7741a40bee 100644 --- a/mail/e-mail-display.c +++ b/mail/e-mail-display.c @@ -142,11 +142,11 @@ formatter_image_loading_policy_changed_cb (GObject *object, { EMailDisplay *display = user_data; EMailFormatter *formatter = E_MAIL_FORMATTER (object); - EMailImageLoadingPolicy policy; + EImageLoadingPolicy policy; policy = e_mail_formatter_get_image_loading_policy (formatter); - if (policy == E_MAIL_IMAGE_LOADING_POLICY_ALWAYS) + if (policy == E_IMAGE_LOADING_POLICY_ALWAYS) e_mail_display_load_images (display); else e_mail_display_reload (display); @@ -1294,7 +1294,7 @@ mail_display_redirect_uri (EWebView *web_view, SoupURI *soup_uri; GHashTable *query; gboolean image_exists; - EMailImageLoadingPolicy image_policy; + EImageLoadingPolicy image_policy; /* Check Evolution's cache */ image_exists = mail_display_image_exists_in_cache (uri); @@ -1305,7 +1305,7 @@ mail_display_redirect_uri (EWebView *web_view, image_policy = e_mail_formatter_get_image_loading_policy ( display->priv->formatter); if (!image_exists && !display->priv->force_image_load && - (image_policy == E_MAIL_IMAGE_LOADING_POLICY_NEVER)) { + (image_policy == E_IMAGE_LOADING_POLICY_NEVER)) { return g_strdup ("about:blank"); } @@ -1352,39 +1352,46 @@ chainup: redirect_uri (web_view, uri); } -static gchar * -mail_display_suggest_filename (EWebView *web_view, - const gchar *uri) +static CamelMimePart * +camel_mime_part_from_cid (EMailDisplay *display, + const gchar *uri) { - if (g_str_has_prefix (uri, "cid:")) { - EMailDisplay *display; - EMailPartList *part_list; - CamelMimeMessage *message; - CamelMimePart *mime_part; - const gchar *filename; + EMailPartList *part_list; + CamelMimeMessage *message; + CamelMimePart *mime_part; - /* Note, this assumes the URI comes - * from the currently loaded message. */ + if (!g_str_has_prefix (uri, "cid:")) + return NULL; - display = E_MAIL_DISPLAY (web_view); + part_list = e_mail_display_get_part_list (display); + if (!part_list) + return NULL; - part_list = e_mail_display_get_part_list (display); - if (part_list == NULL) - return NULL; + message = e_mail_part_list_get_message (part_list); + if (!message) + return NULL; - message = e_mail_part_list_get_message (part_list); - if (message == NULL) - return NULL; + mime_part = camel_mime_message_get_part_by_content_id ( + message, uri + 4); - mime_part = camel_mime_message_get_part_by_content_id ( - message, uri + 4); - if (mime_part == NULL) - return NULL; + return mime_part; +} - filename = camel_mime_part_get_filename (mime_part); +static gchar * +mail_display_suggest_filename (EWebView *web_view, + const gchar *uri) +{ + EMailDisplay *display; + CamelMimePart *mime_part; - return g_strdup (filename); - } + /* Note, this assumes the URI comes + * from the currently loaded message. */ + display = E_MAIL_DISPLAY (web_view); + + mime_part = camel_mime_part_from_cid (display, uri); + + if (mime_part) + return g_strdup (camel_mime_part_get_filename (mime_part)); /* Chain up to parent's suggest_filename() method. */ return E_WEB_VIEW_CLASS (e_mail_display_parent_class)-> @@ -1446,6 +1453,68 @@ e_mail_display_test_change_and_update_fonts_cb (EMailDisplay *mail_display, } static void +mail_display_drag_data_get (GtkWidget *widget, + GdkDragContext *context, + GtkSelectionData *data, + guint info, + guint time, + EMailDisplay *display) +{ + CamelDataWrapper *dw; + CamelMimePart *mime_part; + CamelStream *stream; + gchar *src, *base64_encoded, *mime_type, *uri; + const gchar *filename; + const guchar *data_from_webkit; + gint length; + GByteArray *byte_array; + + data_from_webkit = gtk_selection_data_get_data (data); + length = gtk_selection_data_get_length (data); + + uri = g_strndup ((const gchar *) data_from_webkit, length); + + mime_part = camel_mime_part_from_cid (display, uri); + + if (!mime_part) + goto out; + + stream = camel_stream_mem_new (); + dw = camel_medium_get_content (CAMEL_MEDIUM (mime_part)); + g_return_if_fail (dw); + + mime_type = camel_data_wrapper_get_mime_type (dw); + camel_data_wrapper_decode_to_stream_sync (dw, stream, NULL, NULL); + camel_stream_close (stream, NULL, NULL); + + byte_array = camel_stream_mem_get_byte_array (CAMEL_STREAM_MEM (stream)); + + if (!byte_array->data) { + g_object_unref (stream); + goto out; + } + + base64_encoded = g_base64_encode ((const guchar *) byte_array->data, byte_array->len); + + filename = camel_mime_part_get_filename (mime_part); + /* Insert filename before base64 data */ + src = g_strconcat (filename, ";data:", mime_type, ";base64,", base64_encoded, NULL); + + gtk_selection_data_set ( + data, + gtk_selection_data_get_data_type (data), + gtk_selection_data_get_format (data), + (const guchar *) src, strlen (src)); + + g_free (src); + g_free (base64_encoded); + g_free (mime_type); + g_object_unref (stream); + out: + g_free (uri); +} + +static void e_mail_display_class_init (EMailDisplayClass *class) { GObjectClass *object_class; @@ -1575,6 +1644,9 @@ e_mail_display_init (EMailDisplay *display) g_signal_connect ( display, "document-load-finished", G_CALLBACK (initialize_web_view_colors), NULL); + g_signal_connect_after ( + display, "drag-data-get", + G_CALLBACK (mail_display_drag_data_get), display); display->priv->settings = g_settings_new ("org.gnome.evolution.mail"); g_signal_connect_swapped ( diff --git a/mail/e-mail-reader-utils.c b/mail/e-mail-reader-utils.c index 07ac1928f6..f1a6126907 100644 --- a/mail/e-mail-reader-utils.c +++ b/mail/e-mail-reader-utils.c @@ -28,7 +28,6 @@ #include <glib/gi18n.h> #include <libxml/tree.h> -#include <gtkhtml/gtkhtml.h> #include <camel/camel.h> #include <shell/e-shell-utils.h> diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index cbc595a042..46c4cf92e3 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2464,7 +2464,7 @@ mail_reader_key_press_event_cb (EMailReader *reader, if (frame != NULL) { dom = webkit_web_frame_get_dom_document (frame); /* intentionally used "static_cast" */ - element = webkit_dom_html_document_get_active_element ((WebKitDOMHTMLDocument *) dom); + element = webkit_dom_html_document_get_active_element (WEBKIT_DOM_HTML_DOCUMENT (dom)); if (element != NULL) name = webkit_dom_node_get_node_name (WEBKIT_DOM_NODE (element)); diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c index 22cc594273..afa7e28c18 100644 --- a/mail/em-composer-utils.c +++ b/mail/em-composer-utils.c @@ -296,9 +296,11 @@ composer_presend_check_recipients (EMsgComposer *composer, /* I'm sensing a lack of love, er, I mean recipients. */ if (num == 0 && num_post == 0) { - e_alert_submit ( - E_ALERT_SINK (composer), - "mail:send-no-recipients", NULL); + EHTMLEditor *editor; + + editor = e_msg_composer_get_editor (composer); + e_alert_submit (E_ALERT_SINK (editor), "mail:send-no-recipients", NULL); + goto finished; } @@ -443,6 +445,8 @@ composer_presend_check_unwanted_html (EMsgComposer *composer, EMailSession *session) { EDestination **recipients; + EHTMLEditor *editor; + EHTMLEditorView *view; EComposerHeaderTable *table; GSettings *settings; gboolean check_passed = TRUE; @@ -453,9 +457,12 @@ composer_presend_check_unwanted_html (EMsgComposer *composer, settings = g_settings_new ("org.gnome.evolution.mail"); + editor = e_msg_composer_get_editor (composer); + view = e_html_editor_get_view (editor); + html_mode = e_html_editor_view_get_html_mode (view); + table = e_msg_composer_get_header_table (composer); recipients = e_composer_header_table_get_destinations (table); - html_mode = gtkhtml_editor_get_html_mode (GTKHTML_EDITOR (composer)); send_html = g_settings_get_boolean (settings, "composer-send-html"); confirm_html = g_settings_get_boolean (settings, "prompt-on-unwanted-html"); @@ -585,8 +592,13 @@ exit: g_clear_error (&local_error); if (set_changed) { - gtkhtml_editor_set_changed ( - GTKHTML_EDITOR (async_context->composer), TRUE); + EHTMLEditor *editor; + EHTMLEditorView *view; + + editor = e_msg_composer_get_editor (async_context->composer); + view = e_html_editor_get_view (editor); + e_html_editor_view_set_changed (view, TRUE); + gtk_window_present (GTK_WINDOW (async_context->composer)); } @@ -638,14 +650,15 @@ em_utils_composer_send_cb (EMsgComposer *composer, static void composer_set_no_change (EMsgComposer *composer) { - GtkhtmlEditor *editor; + EHTMLEditor *editor; + EHTMLEditorView *view; g_return_if_fail (composer != NULL); - editor = GTKHTML_EDITOR (composer); + editor = e_msg_composer_get_editor (composer); + view = e_html_editor_get_view (editor); - gtkhtml_editor_drop_undo (editor); - gtkhtml_editor_set_changed (editor, FALSE); + e_html_editor_view_set_changed (view, FALSE); } /* delete original messages from Outbox folder */ @@ -690,8 +703,15 @@ composer_save_to_drafts_complete (GObject *source_object, { EActivity *activity; AsyncContext *async_context; + EHTMLEditor *editor; + EHTMLEditorView *view; GError *local_error = NULL; + async_context = (AsyncContext *) user_data; + + editor = e_msg_composer_get_editor (async_context->composer); + view = e_html_editor_get_view (editor); + /* We don't really care if this failed. If something other than * cancellation happened, emit a runtime warning so the error is * not completely lost. */ @@ -704,13 +724,11 @@ composer_save_to_drafts_complete (GObject *source_object, E_MAIL_SESSION (source_object), result, &local_error); if (e_activity_handle_cancellation (activity, local_error)) { - gtkhtml_editor_set_changed ( - GTKHTML_EDITOR (async_context->composer), TRUE); + e_html_editor_view_set_changed (view, TRUE); g_error_free (local_error); } else if (local_error != NULL) { - gtkhtml_editor_set_changed ( - GTKHTML_EDITOR (async_context->composer), TRUE); + e_html_editor_view_set_changed (view, TRUE); g_warning ("%s", local_error->message); g_error_free (local_error); @@ -738,35 +756,32 @@ composer_save_to_drafts_cleanup (GObject *source_object, EActivity *activity; EAlertSink *alert_sink; GCancellable *cancellable; + EHTMLEditor *editor; + EHTMLEditorView *view; AsyncContext *async_context; GError *local_error = NULL; async_context = (AsyncContext *) user_data; + editor = e_msg_composer_get_editor (async_context->composer); + view = e_html_editor_get_view (editor); + activity = async_context->activity; alert_sink = e_activity_get_alert_sink (activity); cancellable = e_activity_get_cancellable (activity); - e_mail_folder_append_message_finish ( - CAMEL_FOLDER (source_object), result, - &async_context->message_uid, &local_error); - if (e_activity_handle_cancellation (activity, local_error)) { - g_warn_if_fail (async_context->message_uid == NULL); - gtkhtml_editor_set_changed ( - GTKHTML_EDITOR (async_context->composer), TRUE); + e_html_editor_view_set_changed (view, TRUE); async_context_free (async_context); g_error_free (local_error); return; } else if (local_error != NULL) { - g_warn_if_fail (async_context->message_uid == NULL); e_alert_submit ( alert_sink, "mail-composer:save-to-drafts-error", local_error->message, NULL); - gtkhtml_editor_set_changed ( - GTKHTML_EDITOR (async_context->composer), TRUE); + e_html_editor_view_set_changed (view, TRUE); async_context_free (async_context); g_error_free (local_error); return; @@ -830,6 +845,8 @@ composer_save_to_drafts_got_folder (GObject *source_object, { EActivity *activity; CamelFolder *drafts_folder; + EHTMLEditor *editor; + EHTMLEditorView *view; AsyncContext *async_context; GError *local_error = NULL; @@ -837,6 +854,9 @@ composer_save_to_drafts_got_folder (GObject *source_object, activity = async_context->activity; + editor = e_msg_composer_get_editor (async_context->composer); + view = e_html_editor_get_view (editor); + drafts_folder = e_mail_session_uri_to_folder_finish ( E_MAIL_SESSION (source_object), result, &local_error); @@ -846,8 +866,7 @@ composer_save_to_drafts_got_folder (GObject *source_object, ((drafts_folder == NULL) && (local_error != NULL))); if (e_activity_handle_cancellation (activity, local_error)) { - gtkhtml_editor_set_changed ( - GTKHTML_EDITOR (async_context->composer), TRUE); + e_html_editor_view_set_changed (view, TRUE); async_context_free (async_context); g_error_free (local_error); return; @@ -865,8 +884,7 @@ composer_save_to_drafts_got_folder (GObject *source_object, GTK_WINDOW (async_context->composer), "mail:ask-default-drafts", NULL); if (response != GTK_RESPONSE_YES) { - gtkhtml_editor_set_changed ( - GTKHTML_EDITOR (async_context->composer), TRUE); + e_html_editor_view_set_changed (view, TRUE); async_context_free (async_context); return; } @@ -1155,6 +1173,7 @@ em_utils_compose_new_message (EShell *shell, composer = create_new_composer (shell, "", folder); composer_set_no_change (composer); + e_msg_composer_is_from_new_message (composer, TRUE); gtk_widget_show (GTK_WIDGET (composer)); @@ -1770,7 +1789,7 @@ forward_non_attached (EMailBackend *backend, forward = quoting_text (QUOTING_FORWARD); text = em_utils_message_to_html ( CAMEL_SESSION (session), message, - forward, flags, NULL, NULL, &validity_found); + forward, flags, NULL, NULL, NULL, &validity_found); if (text != NULL) { CamelDataWrapper *content; @@ -2818,16 +2837,10 @@ composer_set_body (EMsgComposer *composer, gchar *text, *credits, *original; CamelMimePart *part; CamelSession *session; - GSettings *settings; - gboolean start_bottom, has_body_text = FALSE; guint32 validity_found = 0; session = e_msg_composer_ref_session (composer); - settings = g_settings_new ("org.gnome.evolution.mail"); - - start_bottom = g_settings_get_boolean (settings, "composer-reply-start-bottom"); - switch (style) { case E_MAIL_REPLY_STYLE_DO_NOT_QUOTE: /* do nothing */ @@ -2842,9 +2855,9 @@ composer_set_body (EMsgComposer *composer, original = quoting_text (QUOTING_ORIGINAL); text = em_utils_message_to_html ( session, message, original, E_MAIL_FORMATTER_QUOTE_FLAG_HEADERS, - parts_list, start_bottom ? "<BR>" : NULL, &validity_found); + parts_list, "<span id=\"-x-evolution-reply-citation\">", + "</span>", &validity_found); e_msg_composer_set_body_text (composer, text, TRUE); - has_body_text = text && *text; g_free (text); g_free (original); emu_update_composers_security (composer, validity_found); @@ -2856,41 +2869,15 @@ composer_set_body (EMsgComposer *composer, credits = attribution_format (message); text = em_utils_message_to_html ( session, message, credits, E_MAIL_FORMATTER_QUOTE_FLAG_CITE, - parts_list, start_bottom ? "<BR>" : NULL, &validity_found); + parts_list, "<span id=\"-x-evolution-reply-citation\">", + "</span>", &validity_found); g_free (credits); e_msg_composer_set_body_text (composer, text, TRUE); - has_body_text = text && *text; g_free (text); emu_update_composers_security (composer, validity_found); break; } - if (has_body_text && start_bottom) { - GtkhtmlEditor *editor = GTKHTML_EDITOR (composer); - gboolean move_cursor_to_end; - gboolean top_signature; - - /* If we are placing signature on top, then move cursor to the end, - * otherwise try to find the signature place and place cursor just - * before the signature. We added there an empty line already. */ - gtkhtml_editor_run_command (editor, "block-selection"); - gtkhtml_editor_run_command (editor, "cursor-bod"); - - top_signature = g_settings_get_boolean (settings, "composer-top-signature"); - - move_cursor_to_end = top_signature || - !gtkhtml_editor_search_by_data ( - editor, 1, "ClueFlow", "signature", "1"); - - if (move_cursor_to_end) - gtkhtml_editor_run_command (editor, "cursor-eod"); - else - gtkhtml_editor_run_command (editor, "selection-move-left"); - gtkhtml_editor_run_command (editor, "unblock-selection"); - } - - g_object_unref (settings); - g_object_unref (session); } @@ -2900,13 +2887,14 @@ em_utils_construct_composer_text (CamelSession *session, EMailPartList *parts_list) { gchar *text, *credits; + gboolean start_bottom = FALSE; g_return_val_if_fail (CAMEL_IS_SESSION (session), NULL); credits = attribution_format (message); text = em_utils_message_to_html ( session, message, credits, E_MAIL_FORMATTER_QUOTE_FLAG_CITE, - parts_list, NULL, NULL); + parts_list, NULL, start_bottom ? "<BR>" : NULL, NULL); g_free (credits); return text; diff --git a/mail/em-utils.c b/mail/em-utils.c index 2291e0869b..f1f23d364d 100644 --- a/mail/em-utils.c +++ b/mail/em-utils.c @@ -1191,6 +1191,7 @@ em_utils_message_to_html (CamelSession *session, const gchar *credits, guint32 flags, EMailPartList *parts_list, + const gchar *prepend, const gchar *append, EMailPartValidityFlags *validity_found) { @@ -1265,6 +1266,10 @@ em_utils_message_to_html (CamelSession *session, if (validity_found != NULL) *validity_found = is_validity_found; + if (prepend != NULL && *prepend != '\0') + g_output_stream_write_all ( + stream, prepend, strlen (prepend), NULL, NULL, NULL); + e_mail_formatter_format_sync ( formatter, parts_list, stream, 0, E_MAIL_FORMATTER_MODE_PRINTING, NULL); diff --git a/mail/em-utils.h b/mail/em-utils.h index 6725a0692e..907a91b7d7 100644 --- a/mail/em-utils.h +++ b/mail/em-utils.h @@ -64,6 +64,7 @@ gchar * em_utils_message_to_html (CamelSession *session, const gchar *credits, guint32 flags, struct _EMailPartList *parts_list, + const gchar *prepend, const gchar *append, EMailPartValidityFlags *validity_found); diff --git a/mail/importers/Makefile.am b/mail/importers/Makefile.am index a1843c5098..d9beee985f 100644 --- a/mail/importers/Makefile.am +++ b/mail/importers/Makefile.am @@ -9,8 +9,8 @@ libevolution_mail_importers_la_CPPFLAGS = \ -DEVOLUTION_PRIVDATADIR=\""$(privdatadir)"\" \ $(EVOLUTION_DATA_SERVER_CFLAGS) \ $(GNOME_PLATFORM_CFLAGS) \ - $(GTKHTML_CFLAGS) \ - $(CODE_COVERAGE_CFLAGS) + $(CODE_COVERAGE_CFLAGS) \ + $(NULL) libevolution_mail_importers_la_SOURCES = \ mail-importer.c \ @@ -28,6 +28,6 @@ libevolution_mail_importers_la_LIBADD = \ $(top_builddir)/libemail-engine/libemail-engine.la \ $(EVOLUTION_DATA_SERVER_LIBS) \ $(GNOME_PLATFORM_LIBS) \ - $(GTKHTML_LIBS) + $(NULL) -include $(top_srcdir)/git.mk diff --git a/mail/mail-config.ui b/mail/mail-config.ui index ddc5b89fa1..7b7e7c1ce1 100644 --- a/mail/mail-config.ui +++ b/mail/mail-config.ui @@ -173,6 +173,13 @@ <property name="step_increment">1</property> <property name="page_increment">10</property> </object> + <object class="GtkAdjustment" id="adjustment7"> + <property name="upper">200</property> + <property name="lower">31</property> + <property name="value">71</property> + <property name="step_increment">1</property> + <property name="page_increment">1</property> + </object> <object class="GtkNotebook" id="composer_toplevel"> <property name="visible">True</property> <property name="can_focus">True</property> @@ -294,6 +301,49 @@ </packing> </child> <child> + <object class="GtkHBox" id="hboxWrapCharactersCount"> + <property name="visible">True</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="lblWordWrapLength"> + <property name="visible">True</property> + <property name="label" translatable="yes">Number of characters for word w_rapping:</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="spinWordWrapLength"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="max_length">3</property> + <property name="adjustment">adjustment7</property> + <property name="caps_lock_warning">False</property> + <property name="numeric">True</property> + <property name="update_policy">if-valid</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + <child> <object class="GtkHBox" id="hboxComposerCharset"> <property name="visible">True</property> <property name="can_focus">False</property> @@ -320,7 +370,7 @@ <packing> <property name="expand">False</property> <property name="fill">False</property> - <property name="position">5</property> + <property name="position">6</property> </packing> </child> </object> @@ -797,47 +847,6 @@ <property name="position">0</property> </packing> </child> - <child> - <object class="GtkHBox" id="hboxSpellCheckColor"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">6</property> - <child> - <object class="GtkLabel" id="lblSpellCheckColor"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Color for _misspelled words:</property> - <property name="use_underline">True</property> - <property name="justify">center</property> - <property name="mnemonic_widget">colorButtonSpellCheckColor</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkColorButton" id="colorButtonSpellCheckColor"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="title" translatable="yes">Pick a color</property> - <property name="color">#000000000000</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> </object> </child> </object> |