diff --git a/e-util/e-html-editor-view.c b/e-util/e-html-editor-view.c
index 493fa74a60..945b60a3e6 100644
--- a/e-util/e-html-editor-view.c
+++ b/e-util/e-html-editor-view.c
@@ -449,79 +449,6 @@ get_citation_level (WebKitDOMNode *node,
return level;
}
-static WebKitDOMElement *
-insert_new_line_into_citation (EHTMLEditorView *view,
- const gchar *html_to_insert)
-{
- gboolean html_mode, ret_val;
- EHTMLEditorSelection *selection;
- WebKitDOMDocument *document;
- WebKitDOMElement *element, *paragraph = NULL;
- WebKitDOMNode *caret;
-
- html_mode = e_html_editor_view_get_html_mode (view);
- selection = e_html_editor_view_get_selection (view);
-
- ret_val = e_html_editor_view_exec_command (
- view, E_HTML_EDITOR_VIEW_COMMAND_INSERT_NEW_LINE_IN_QUOTED_CONTENT, NULL);
-
- if (!ret_val)
- return NULL;
-
- document = webkit_web_view_get_dom_document (
- WEBKIT_WEB_VIEW (view));
-
- element = webkit_dom_document_query_selector (
- document, "body>br", NULL);
-
- if (!element)
- return NULL;
-
- if (!html_mode) {
- WebKitDOMNode *next_sibling;
-
- next_sibling = webkit_dom_node_get_next_sibling (
- WEBKIT_DOM_NODE (element));
-
- if (WEBKIT_DOM_IS_HTML_QUOTE_ELEMENT (next_sibling)) {
- e_html_editor_view_quote_plain_text_element (
- view, WEBKIT_DOM_ELEMENT (next_sibling));
-
- e_html_editor_view_force_spell_check (view);
- }
- }
-
- caret = e_html_editor_selection_get_caret_position_node (document);
-
- paragraph = e_html_editor_selection_get_paragraph_element (
- selection, document, -1, 0);
-
- if (html_to_insert && *html_to_insert)
- webkit_dom_html_element_set_inner_html (
- WEBKIT_DOM_HTML_ELEMENT (paragraph),
- html_to_insert,
- NULL);
- else
- webkit_dom_html_element_set_inner_text (
- WEBKIT_DOM_HTML_ELEMENT (paragraph),
- UNICODE_ZERO_WIDTH_SPACE,
- NULL);
-
- webkit_dom_node_append_child (WEBKIT_DOM_NODE (paragraph), caret, NULL);
-
- webkit_dom_node_insert_before (
- webkit_dom_node_get_parent_node (WEBKIT_DOM_NODE (element)),
- WEBKIT_DOM_NODE (paragraph),
- WEBKIT_DOM_NODE (element),
- NULL);
-
- remove_node (WEBKIT_DOM_NODE (element));
-
- e_html_editor_selection_restore_caret_position (selection);
-
- return paragraph;
-}
-
static gchar *
get_quotation_for_level (gint quote_level)
{
@@ -578,6 +505,95 @@ quote_plain_text_element_after_wrapping (WebKitDOMDocument *document,
g_free (quotation);
}
+static WebKitDOMElement *
+insert_new_line_into_citation (EHTMLEditorView *view,
+ const gchar *html_to_insert)
+{
+ gboolean html_mode, ret_val;
+ EHTMLEditorSelection *selection;
+ WebKitDOMDocument *document;
+ WebKitDOMElement *element, *paragraph = NULL;
+ WebKitDOMNode *caret;
+
+ html_mode = e_html_editor_view_get_html_mode (view);
+ selection = e_html_editor_view_get_selection (view);
+
+ ret_val = e_html_editor_view_exec_command (
+ view, E_HTML_EDITOR_VIEW_COMMAND_INSERT_NEW_LINE_IN_QUOTED_CONTENT, NULL);
+
+ if (!ret_val)
+ return NULL;
+
+ document = webkit_web_view_get_dom_document (
+ WEBKIT_WEB_VIEW (view));
+
+ element = webkit_dom_document_query_selector (
+ document, "body>br", NULL);
+
+ if (!element)
+ return NULL;
+
+ if (!html_mode) {
+ WebKitDOMNode *next_sibling;
+
+ next_sibling = webkit_dom_node_get_next_sibling (
+ WEBKIT_DOM_NODE (element));
+
+ if (WEBKIT_DOM_IS_HTML_QUOTE_ELEMENT (next_sibling)) {
+ gint citation_level, length;
+ gint word_wrap_length =
+ e_html_editor_selection_get_word_wrap_length (selection);
+ WebKitDOMNode *node;
+
+ citation_level = get_citation_level (next_sibling, FALSE);
+ length = word_wrap_length - 2 * citation_level;
+
+ node = webkit_dom_node_get_first_child (next_sibling);
+ /* Rewrap and requote first block after the newly inserted line */
+ if (node && WEBKIT_DOM_IS_ELEMENT (node)) {
+ remove_quoting_from_element (WEBKIT_DOM_ELEMENT (node));
+ remove_wrapping_from_element (WEBKIT_DOM_ELEMENT (node));
+ node = WEBKIT_DOM_NODE (e_html_editor_selection_wrap_paragraph_length (
+ selection, WEBKIT_DOM_ELEMENT (node), length));
+ quote_plain_text_element_after_wrapping (
+ document, WEBKIT_DOM_ELEMENT (node), citation_level);
+ }
+
+ e_html_editor_view_force_spell_check (view);
+ }
+ }
+
+ caret = e_html_editor_selection_get_caret_position_node (document);
+
+ paragraph = e_html_editor_selection_get_paragraph_element (
+ selection, document, -1, 0);
+
+ if (html_to_insert && *html_to_insert)
+ webkit_dom_html_element_set_inner_html (
+ WEBKIT_DOM_HTML_ELEMENT (paragraph),
+ html_to_insert,
+ NULL);
+ else
+ webkit_dom_html_element_set_inner_text (
+ WEBKIT_DOM_HTML_ELEMENT (paragraph),
+ UNICODE_ZERO_WIDTH_SPACE,
+ NULL);
+
+ webkit_dom_node_append_child (WEBKIT_DOM_NODE (paragraph), caret, NULL);
+
+ webkit_dom_node_insert_before (
+ webkit_dom_node_get_parent_node (WEBKIT_DOM_NODE (element)),
+ WEBKIT_DOM_NODE (paragraph),
+ WEBKIT_DOM_NODE (element),
+ NULL);
+
+ remove_node (WEBKIT_DOM_NODE (element));
+
+ e_html_editor_selection_restore_caret_position (selection);
+
+ return paragraph;
+}
+
static void
body_input_event_cb (WebKitDOMElement *element,
WebKitDOMEvent *event,