[evolution/wip-webkit2] Move EMailReader to WK2



commit da0ee8b32ecd30cfd523b0dea36d34caade5884c
Author: Tomas Popela <tpopela redhat com>
Date:   Tue Oct 29 14:22:02 2013 +0100

    Move EMailReader to WK2

 e-util/e-dom-utils.c                     |   14 ++++++++
 e-util/e-dom-utils.h                     |    3 +-
 mail/e-mail-reader.c                     |   54 ++++++++++++++++-------------
 web-extensions/evolution-web-extension.c |   19 ++++++++++
 4 files changed, 65 insertions(+), 25 deletions(-)
---
diff --git a/e-util/e-dom-utils.c b/e-util/e-dom-utils.c
index 3847488..475e934 100644
--- a/e-util/e-dom-utils.c
+++ b/e-util/e-dom-utils.c
@@ -469,3 +469,17 @@ e_dom_utils_eab_contact_formatter_bind_dom (WebKitDOMDocument *document)
        }
 }
 
+gchar *
+e_dom_utils_get_active_element_name (WebKitDOMDocument *document)
+{
+       WebKitDOMElement *element;
+       /* FIXME XXX Do version that checks underlying documents */
+
+       element = webkit_dom_html_document_get_active_element (
+                       WEBKIT_DOM_HTML_DOCUMENT (document));
+       if (!element)
+               return NULL;
+
+       return webkit_dom_node_get_local_name (WEBKIT_DOM_NODE (element));
+}
+
diff --git a/e-util/e-dom-utils.h b/e-util/e-dom-utils.h
index 960b677..b8a6989 100644
--- a/e-util/e-dom-utils.h
+++ b/e-util/e-dom-utils.h
@@ -48,7 +48,8 @@ void          e_dom_utils_add_css_rule_into_style_sheet
                                                 const gchar *style);
 void           e_dom_utils_eab_contact_formatter_bind_dom
                                                (WebKitDOMDocument *document);
-
+gchar *        e_dom_utils_get_active_element_name
+                                               (WebKitDOMDocument *document);
 G_END_DECLS
 
 #endif /* E_DOM_UTILS_H */
diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c
index a0e24ab..984f687 100644
--- a/mail/e-mail-reader.c
+++ b/mail/e-mail-reader.c
@@ -1777,11 +1777,11 @@ action_mail_zoom_out_cb (GtkAction *action,
        display = e_mail_reader_get_mail_display (reader);
 
        /* There is no webkit_web_view_zoom_out function in WK2, so emulate it */
-       zoom_level = webkit_web_view_get_zoom_level (WEBKIT_WEB_VIEW (web_view));
+       zoom_level = webkit_web_view_get_zoom_level (WEBKIT_WEB_VIEW (display));
        /* zoom-step in WK1 was 0.1 */
        zoom_level -= 0.1;
        if (zoom_level >= 0)
-               webkit_web_view_set_zoom_level (WEBKIT_WEB_VIEW (web_view), zoom_level);
+               webkit_web_view_set_zoom_level (WEBKIT_WEB_VIEW (display), zoom_level);
 /* FIXME XXX
        webkit_web_view_zoom_out (WEBKIT_WEB_VIEW (web_view));*/
 }
@@ -2462,32 +2462,38 @@ mail_reader_key_press_event_cb (EMailReader *reader,
        const gchar *action_name;
 
        if (!gtk_widget_has_focus (GTK_WIDGET (reader))) {
-               WebKitWebFrame *frame;
-               WebKitDOMDocument *dom;
-               WebKitDOMElement *element;
                EMailDisplay *display;
-               gchar *name = NULL;
+               GDBusProxy *web_extension;
 
                display = e_mail_reader_get_mail_display (reader);
-               frame = webkit_web_view_get_focused_frame (WEBKIT_WEB_VIEW (display));
-
-               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);
-
-                       if (element != NULL)
-                               name = webkit_dom_node_get_node_name (WEBKIT_DOM_NODE (element));
-
-                       /* If INPUT or TEXTAREA has focus,
-                        * then any key press should go there. */
-                       if (name != NULL &&
-                           (g_ascii_strcasecmp (name, "INPUT") == 0 ||
-                            g_ascii_strcasecmp (name, "TEXTAREA") == 0)) {
-                               g_free (name);
-                               return FALSE;
+               web_extension = e_web_view_get_web_extension_proxy (E_WEB_VIEW (display));
+               if (web_extension) {
+                       GVariant *result;
+                       const gchar *element_name = NULL;
+
+                       result = g_dbus_proxy_call_sync (
+                                       web_extension,
+                                       "GetActiveElementName",
+                                       g_variant_new (
+                                               "(t)",
+                                               webkit_web_view_get_page_id (
+                                                       WEBKIT_WEB_VIEW (display))),
+                                       G_DBUS_CALL_FLAGS_NONE,
+                                       -1,
+                                       NULL,
+                                       NULL);
+
+                       if (result) {
+                               element_name = g_variant_get_string (result, NULL);
+                               g_variant_unref (result);
+
+                               if (element_name && *element_name) {
+                                       if (g_strcmp0 (element_name, "input") == 0 ||
+                                                       g_strcmp0 (element_name, "textarea") == 0) {
+                                               return FALSE;
+                                       }
+                               }
                        }
-                       g_free (name);
                }
        }
 
diff --git a/web-extensions/evolution-web-extension.c b/web-extensions/evolution-web-extension.c
index 733e119..9b9de91 100644
--- a/web-extensions/evolution-web-extension.c
+++ b/web-extensions/evolution-web-extension.c
@@ -58,6 +58,10 @@ static const char introspection_xml[] =
 "    <method name='EABContactFormatterBindDOM'>"
 "      <arg type='t' name='page_id' direction='in'/>"
 "    </method>"
+"    <method name='GetActiveElementName'>"
+"      <arg type='t' name='page_id' direction='in'/>"
+"      <arg type='s' name='element_name' direction='out'/>"
+"    </method>"
 "  </interface>"
 "</node>";
 
@@ -206,6 +210,21 @@ handle_method_call (GDBusConnection *connection,
                e_dom_utils_eab_contact_formatter_bind_dom (document);
 
                g_dbus_method_invocation_return_value (invocation, NULL);
+       } else if (g_strcmp0 (method_name, "GetActiveElementName") == 0) {
+               gchar *element_name;
+
+               g_variant_get (parameters, "(t)", &page_id);
+               web_page = get_webkit_web_page_or_return_dbus_error (invocation, web_extension, page_id);
+               if (!web_page)
+                       return;
+
+               document = webkit_web_page_get_dom_document (web_page);
+               element_name = e_dom_utils_get_active_element_name (document);
+
+               g_dbus_method_invocation_return_value (
+                       invocation, g_variant_new ("(s)", element_name));
+
+               g_free (element_name);
        }
 }
 


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