[evolution/wip/webkit2] EHTMLEditorSelection - History saved wrongly when setting Blockquote format



commit 0d18f1521882b0c8dc4dcac6464064048700a01e
Author: Tomas Popela <tpopela redhat com>
Date:   Wed Feb 24 13:46:42 2016 +0100

    EHTMLEditorSelection - History saved wrongly when setting Blockquote format

 .../e-html-editor-selection-dom-functions.c        |   39 ++++++++++++--------
 1 files changed, 24 insertions(+), 15 deletions(-)
---
diff --git a/web-extensions/composer/e-html-editor-selection-dom-functions.c 
b/web-extensions/composer/e-html-editor-selection-dom-functions.c
index 90e79d3..58d6c62 100644
--- a/web-extensions/composer/e-html-editor-selection-dom-functions.c
+++ b/web-extensions/composer/e-html-editor-selection-dom-functions.c
@@ -4956,27 +4956,36 @@ dom_selection_set_block_format (WebKitDOMDocument *document,
                        ev->data.style.to = format;
                } else {
                        WebKitDOMDocumentFragment *fragment;
-                       WebKitDOMElement *element;
-                       WebKitDOMNode *block;
+                       WebKitDOMElement *selection_start_marker, *selection_end_marker;
+                       WebKitDOMNode *block, *end_block;
 
-                       fragment = webkit_dom_range_clone_contents (range, NULL);
-
-                       element = webkit_dom_document_get_element_by_id (
+                       selection_start_marker = webkit_dom_document_get_element_by_id (
                                document, "-x-evo-selection-start-marker");
-                       block = get_parent_block_node_from_child (WEBKIT_DOM_NODE (element));
-                       webkit_dom_node_replace_child (
-                               WEBKIT_DOM_NODE (fragment),
-                               webkit_dom_node_clone_node (block, TRUE),
-                               webkit_dom_node_get_first_child (WEBKIT_DOM_NODE (fragment)),
-                               NULL);
+                       selection_end_marker = webkit_dom_document_get_element_by_id (
+                               document, "-x-evo-selection-end-marker");
+                       block = get_parent_block_node_from_child (
+                               WEBKIT_DOM_NODE (selection_start_marker));
+                       end_block = get_parent_block_node_from_child (
+                               WEBKIT_DOM_NODE (selection_end_marker));
+                       if (webkit_dom_range_get_collapsed (range, NULL) ||
+                           webkit_dom_node_is_same_node (block, end_block)) {
+                               fragment = webkit_dom_document_create_document_fragment (document);
 
-                       if (!webkit_dom_range_get_collapsed (range, NULL)) {
-                               element = webkit_dom_document_get_element_by_id (
-                                       document, "-x-evo-selection-end-marker");
-                               block = get_parent_block_node_from_child (WEBKIT_DOM_NODE (element));
+                               webkit_dom_node_append_child (
+                                       WEBKIT_DOM_NODE (fragment),
+                                       webkit_dom_node_clone_node (block, TRUE),
+                                       NULL);
+                       } else {
+                               fragment = webkit_dom_range_clone_contents (range, NULL);
                                webkit_dom_node_replace_child (
                                        WEBKIT_DOM_NODE (fragment),
                                        webkit_dom_node_clone_node (block, TRUE),
+                                       webkit_dom_node_get_first_child (WEBKIT_DOM_NODE (fragment)),
+                                       NULL);
+
+                               webkit_dom_node_replace_child (
+                                       WEBKIT_DOM_NODE (fragment),
+                                       webkit_dom_node_clone_node (end_block, TRUE),
                                        webkit_dom_node_get_last_child (WEBKIT_DOM_NODE (fragment)),
                                        NULL);
                        }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]