[evolution] EHTMLEditorView - Get rid of GdkKeyEvent and use boolean flags instead.



commit 5be0bcd00043d62fa3d69c6a6e63e4971affcf35
Author: Tomas Popela <tpopela redhat com>
Date:   Thu Nov 20 13:58:34 2014 +0100

    EHTMLEditorView - Get rid of GdkKeyEvent and use boolean flags instead.
    
    This is mainly for WebKit2 port.

 e-util/e-html-editor-view.c |   65 ++++++++++++++++++++++++++----------------
 1 files changed, 40 insertions(+), 25 deletions(-)
---
diff --git a/e-util/e-html-editor-view.c b/e-util/e-html-editor-view.c
index a14e9eb..a068488 100644
--- a/e-util/e-html-editor-view.c
+++ b/e-util/e-html-editor-view.c
@@ -97,11 +97,11 @@ struct _EHTMLEditorViewPrivate {
        gboolean is_message_from_edit_as_new;
        gboolean is_message_from_selection;
        gboolean remove_initial_input_line;
+       gboolean return_key_pressed;
+       gboolean space_key_pressed;
 
        GHashTable *old_settings;
 
-       GdkEventKey *key_event;
-
        GQueue *post_reload_operations;
 };
 
@@ -1112,8 +1112,7 @@ is_return_key (GdkEventKey *event)
 static void
 html_editor_view_check_magic_links (EHTMLEditorView *view,
                                     WebKitDOMRange *range,
-                                    gboolean include_space_by_user,
-                                    GdkEventKey *event)
+                                    gboolean include_space_by_user)
 {
        gchar *node_text;
        gchar **urls;
@@ -1122,19 +1121,16 @@ html_editor_view_check_magic_links (EHTMLEditorView *view,
        gint start_pos_url, end_pos_url;
        WebKitDOMNode *node;
        gboolean include_space = FALSE;
-       gboolean return_pressed = FALSE;
        gboolean is_email_address = FALSE;
 
-       if (event != NULL) {
-               return_pressed = is_return_key (event);
-               include_space = (event->keyval == GDK_KEY_space);
-       } else {
-               include_space = include_space_by_user;
-       }
+       if (include_space_by_user == TRUE)
+               include_space = TRUE;
+       else
+               include_space = view->priv->space_key_pressed;
 
        node = webkit_dom_range_get_end_container (range, NULL);
 
-       if (return_pressed)
+       if (view->priv->return_key_pressed)
                node = webkit_dom_node_get_previous_sibling (node);
 
        if (!node)
@@ -1176,7 +1172,7 @@ html_editor_view_check_magic_links (EHTMLEditorView *view,
 
                document = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (view));
 
-               if (!return_pressed)
+               if (!view->priv->return_key_pressed)
                        e_html_editor_selection_save_caret_position (
                                e_html_editor_view_get_selection (view));
 
@@ -1228,7 +1224,7 @@ html_editor_view_check_magic_links (EHTMLEditorView *view,
                        WEBKIT_DOM_NODE (url_text_node),
                        NULL);
 
-               if (!return_pressed)
+               if (!view->priv->return_key_pressed)
                        e_html_editor_selection_restore_caret_position (
                                e_html_editor_view_get_selection (view));
 
@@ -1807,12 +1803,28 @@ surround_text_with_paragraph_if_needed (EHTMLEditorSelection *selection,
 }
 
 static void
+body_keypress_event_cb (WebKitDOMElement *element,
+                        WebKitDOMUIEvent *event,
+                        EHTMLEditorView *view)
+{
+       glong key_code;
+
+       view->priv->return_key_pressed = FALSE;
+       view->priv->space_key_pressed = FALSE;
+
+       key_code = webkit_dom_ui_event_get_key_code (event);
+       if (key_code == 13)
+               view->priv->return_key_pressed = TRUE;
+       else if (key_code == 32)
+               view->priv->space_key_pressed = TRUE;
+}
+
+static void
 body_input_event_cb (WebKitDOMElement *element,
                      WebKitDOMEvent *event,
                      EHTMLEditorView *view)
 {
        EHTMLEditorSelection *selection;
-       GdkEventKey *key_event;
        WebKitDOMNode *node;
        WebKitDOMRange *range = html_editor_view_get_dom_range (view);
        WebKitDOMDocument *document;
@@ -1821,16 +1833,12 @@ body_input_event_cb (WebKitDOMElement *element,
        document = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (view));
 
        e_html_editor_view_set_changed (view, TRUE);
-       key_event = view->priv->key_event;
-
-       if (!key_event)
-               return;
 
        if (view->priv->magic_smileys && view->priv->html_mode)
                html_editor_view_check_magic_smileys (view, range);
 
-       if (is_return_key (key_event) || (key_event->keyval == GDK_KEY_space)) {
-               html_editor_view_check_magic_links (view, range, FALSE, key_event);
+       if (view->priv->return_key_pressed || view->priv->space_key_pressed) {
+               html_editor_view_check_magic_links (view, range, FALSE);
                mark_node_as_paragraph_after_ending_list (selection, document);
                if (view->priv->html_mode)
                        fix_paragraph_structure_after_pressing_enter_after_smiley (
@@ -1857,7 +1865,7 @@ body_input_event_cb (WebKitDOMElement *element,
                                prev_sibling = webkit_dom_node_get_previous_sibling (node);
 
                                if (WEBKIT_DOM_IS_HTML_ANCHOR_ELEMENT (prev_sibling))
-                                       html_editor_view_check_magic_links (view, range, FALSE, key_event);
+                                       html_editor_view_check_magic_links (view, range, FALSE);
                        }
                        g_free (text);
                }
@@ -2661,8 +2669,6 @@ html_editor_view_key_press_event (GtkWidget *widget,
 {
        EHTMLEditorView *view = E_HTML_EDITOR_VIEW (widget);
 
-       view->priv->key_event = event;
-
        if (event->keyval == GDK_KEY_Menu) {
                gboolean event_handled;
 
@@ -4699,6 +4705,13 @@ html_editor_convert_view_content (EHTMLEditorView *view,
                FALSE,
                view);
 
+       webkit_dom_event_target_add_event_listener (
+               WEBKIT_DOM_EVENT_TARGET (body),
+               "keypress",
+               G_CALLBACK (body_keypress_event_cb),
+               FALSE,
+               view);
+
        g_free (inner_html);
 }
 
@@ -7181,6 +7194,8 @@ e_html_editor_view_init (EHTMLEditorView *view)
        view->priv->is_message_from_edit_as_new = FALSE;
        view->priv->remove_initial_input_line = FALSE;
        view->priv->convert_in_situ = FALSE;
+       view->priv->return_key_pressed = FALSE;
+       view->priv->space_key_pressed = FALSE;
 
        g_object_set (
                G_OBJECT (settings),
@@ -8045,7 +8060,7 @@ e_html_editor_view_check_magic_links (EHTMLEditorView *view,
        g_return_if_fail (E_IS_HTML_EDITOR_VIEW (view));
 
        range = html_editor_view_get_dom_range (view);
-       html_editor_view_check_magic_links (view, range, include_space, NULL);
+       html_editor_view_check_magic_links (view, range, include_space);
 }
 
 static CamelMimePart *


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