aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
authorTomas Popela <tpopela@redhat.com>2014-06-09 22:32:25 +0800
committerTomas Popela <tpopela@redhat.com>2014-06-09 22:32:25 +0800
commit8650fb139a9143f04615de74ff569bce3e0c4ce3 (patch)
tree89a41d08f179a5359b8eaee0c9344b8a5bf07cb3 /mail
parent04b7c97275ae420dca43f3e65c2ef54d02f01bdd (diff)
downloadgsoc2013-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.am5
-rw-r--r--mail/e-http-request.c72
-rw-r--r--mail/e-mail-display.c130
-rw-r--r--mail/e-mail-reader-utils.c1
-rw-r--r--mail/e-mail-reader.c2
-rw-r--r--mail/em-composer-utils.c120
-rw-r--r--mail/em-utils.c5
-rw-r--r--mail/em-utils.h1
-rw-r--r--mail/importers/Makefile.am6
-rw-r--r--mail/mail-config.ui93
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>