[evolution/wip/webkit2] EHTMLEditorView - When incidentally writing into smiley, move out just the newly written character b



commit bf509ade725f38863abe09c598f04579f8ac637f
Author: Tomas Popela <tpopela redhat com>
Date:   Wed Apr 22 11:37:25 2015 +0200

    EHTMLEditorView - When incidentally writing into smiley, move out just the newly written character but 
not the entire smiley text out of smiley

 web-extensions/e-html-editor-view-dom-functions.c |   36 ++++++++++++++++++--
 1 files changed, 32 insertions(+), 4 deletions(-)
---
diff --git a/web-extensions/e-html-editor-view-dom-functions.c 
b/web-extensions/e-html-editor-view-dom-functions.c
index f5e7200..7116581 100644
--- a/web-extensions/e-html-editor-view-dom-functions.c
+++ b/web-extensions/e-html-editor-view-dom-functions.c
@@ -1916,18 +1916,46 @@ body_input_event_cb (WebKitDOMElement *element,
                 * smiley wrapper. If he will start to write there we have to move the written
                 * text out of the wrapper and move caret to right place */
                if (WEBKIT_DOM_IS_ELEMENT (parent) &&
-                   element_has_class (WEBKIT_DOM_ELEMENT (parent), "-x-evo-smiley-wrapper")) {
+                   element_has_class (WEBKIT_DOM_ELEMENT (parent), "-x-evo-smiley-text")) {
+                       gchar *text;
+                       WebKitDOMCharacterData *data;
+                       WebKitDOMText *text_node;
+
+                       /* Split out the newly written character to its own text node, */
+                       data = WEBKIT_DOM_CHARACTER_DATA (node);
+                       parent = webkit_dom_node_get_parent_node (parent);
+                       text = webkit_dom_character_data_substring_data (
+                               data,
+                               webkit_dom_character_data_get_length (data) - 1,
+                               1,
+                               NULL);
+                       webkit_dom_character_data_delete_data (
+                               data,
+                               webkit_dom_character_data_get_length (data) - 1,
+                               1,
+                               NULL);
+                       text_node = webkit_dom_document_create_text_node (document, text);
+                       g_free (text);
+
                        webkit_dom_node_insert_before (
                                webkit_dom_node_get_parent_node (parent),
-                               dom_create_caret_position_node (document),
+                               WEBKIT_DOM_NODE (
+                                       dom_create_selection_marker (document, FALSE)),
                                webkit_dom_node_get_next_sibling (parent),
                                NULL);
                        webkit_dom_node_insert_before (
                                webkit_dom_node_get_parent_node (parent),
-                               node,
+                               WEBKIT_DOM_NODE (
+                                       dom_create_selection_marker (document, TRUE)),
                                webkit_dom_node_get_next_sibling (parent),
                                NULL);
-                       dom_restore_caret_position (document);
+                       /* Move the text node outside of smiley. */
+                       webkit_dom_node_insert_before (
+                               webkit_dom_node_get_parent_node (parent),
+                               WEBKIT_DOM_NODE (text_node),
+                               webkit_dom_node_get_next_sibling (parent),
+                               NULL);
+                       dom_selection_restore (document);
                }
        }
 


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