aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
authorDan Vrátil <dvratil@redhat.com>2012-08-09 01:33:08 +0800
committerDan Vrátil <dvratil@redhat.com>2012-08-09 01:39:27 +0800
commit967b238b77c1912c33e1a508781d9124b9e351a7 (patch)
tree71bbf3a185a1cbe047cf97f60f38fa504bc2a51f /mail
parentb24af8b9cd942e50c43c61e7e688fda175ea858f (diff)
downloadgsoc2013-evolution-967b238b77c1912c33e1a508781d9124b9e351a7.tar
gsoc2013-evolution-967b238b77c1912c33e1a508781d9124b9e351a7.tar.gz
gsoc2013-evolution-967b238b77c1912c33e1a508781d9124b9e351a7.tar.bz2
gsoc2013-evolution-967b238b77c1912c33e1a508781d9124b9e351a7.tar.lz
gsoc2013-evolution-967b238b77c1912c33e1a508781d9124b9e351a7.tar.xz
gsoc2013-evolution-967b238b77c1912c33e1a508781d9124b9e351a7.tar.zst
gsoc2013-evolution-967b238b77c1912c33e1a508781d9124b9e351a7.zip
Remove all references to JavaScriptCore and use of JavaScript
JavaScript is disabled in EWebView, so any attempt to evaluate a JavaScript code will fail. We are using DOM bindings instead to interact with the document. This commit removes some helper functions created in the early days of WebKit port which are not used anymore and also fixes mail-to-task plugin, which was relying on some JavaScript.
Diffstat (limited to 'mail')
-rw-r--r--mail/Makefile.am2
-rw-r--r--mail/e-mail-display.c84
-rw-r--r--mail/e-mail-display.h3
3 files changed, 66 insertions, 23 deletions
diff --git a/mail/Makefile.am b/mail/Makefile.am
index 09c274aad7..3cc30971f7 100644
--- a/mail/Makefile.am
+++ b/mail/Makefile.am
@@ -23,7 +23,6 @@ libevolution_mail_la_CPPFLAGS = \
$(CANBERRA_CFLAGS) \
$(CLUTTER_CFLAGS) \
$(GTKHTML_CFLAGS) \
- $(JAVASCRIPTCORE_CFLAGS) \
$(LIBSOUP_CFLAGS) \
-DEVOLUTION_DATADIR=\""$(datadir)"\" \
-DEVOLUTION_PRIVDATADIR=\""$(privdatadir)"\" \
@@ -228,7 +227,6 @@ libevolution_mail_la_LIBADD = \
$(CANBERRA_LIBS) \
$(CLUTTER_LIBS) \
$(GTKHTML_LIBS) \
- $(JAVASCRIPTCORE_CFLAGS) \
$(E_WIDGETS_LIBS) \
$(SMIME_LIBS) \
$(LIBSOUP_LIBS) \
diff --git a/mail/e-mail-display.c b/mail/e-mail-display.c
index ac98b06e5a..2ca422c353 100644
--- a/mail/e-mail-display.c
+++ b/mail/e-mail-display.c
@@ -49,8 +49,6 @@
#include <camel/camel.h>
-#include <JavaScriptCore/JavaScript.h>
-
#define d(x)
G_DEFINE_TYPE (
@@ -1832,32 +1830,80 @@ e_mail_display_set_status (EMailDisplay *display,
gtk_widget_show_all (GTK_WIDGET (display));
}
+
+static gchar *
+mail_display_get_frame_selection_text (WebKitDOMElement *iframe)
+{
+ WebKitDOMDocument *document;
+ WebKitDOMDOMWindow *window;
+ WebKitDOMDOMSelection *selection;
+ WebKitDOMNodeList *frames;
+ gulong ii, length;
+
+ document = webkit_dom_html_iframe_element_get_content_document (
+ WEBKIT_DOM_HTML_IFRAME_ELEMENT (iframe));
+ window = webkit_dom_document_get_default_view (document);
+ selection = webkit_dom_dom_window_get_selection (window);
+ if (selection && (webkit_dom_dom_selection_get_range_count (selection) > 0)) {
+ WebKitDOMRange *range;
+
+ range = webkit_dom_dom_selection_get_range_at (selection, 0, NULL);
+ if (range) {
+ return webkit_dom_range_to_string (range, NULL);
+ }
+ }
+
+ frames = webkit_dom_document_get_elements_by_tag_name (
+ document, "IFRAME");
+ length = webkit_dom_node_list_get_length (frames);
+ for (ii = 0; ii < length; ii++) {
+ WebKitDOMNode *node;
+ gchar *text;
+
+ node = webkit_dom_node_list_item (frames, ii);
+
+ text = mail_display_get_frame_selection_text (
+ WEBKIT_DOM_ELEMENT (node));
+
+ if (text) {
+ return text;
+ }
+ }
+
+ return NULL;
+}
+
gchar *
-e_mail_display_get_selection_plain_text (EMailDisplay *display,
- gint *len)
+e_mail_display_get_selection_plain_text (EMailDisplay *display)
{
- EWebView *web_view;
- WebKitWebFrame *frame;
- const gchar *frame_name;
- GValue value = {0};
- GType type;
- const gchar *str;
+ WebKitDOMDocument *document;
+ WebKitDOMNodeList *frames;
+ gulong ii, length;
g_return_val_if_fail (E_IS_MAIL_DISPLAY (display), NULL);
- web_view = E_WEB_VIEW (display);
- frame = webkit_web_view_get_focused_frame (WEBKIT_WEB_VIEW (web_view));
- frame_name = webkit_web_frame_get_name (frame);
+ if (!webkit_web_view_has_selection (WEBKIT_WEB_VIEW (display)))
+ return NULL;
+
+ document = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (display));
+ frames = webkit_dom_document_get_elements_by_tag_name (document, "IFRAME");
+ length = webkit_dom_node_list_get_length (frames);
- type = e_web_view_frame_exec_script (web_view, frame_name, "window.getSelection().toString()", &value);
- g_return_val_if_fail (type == G_TYPE_STRING, NULL);
+ for (ii = 0; ii < length; ii++) {
+ gchar *text;
+ WebKitDOMNode *node;
- str = g_value_get_string (&value);
+ node = webkit_dom_node_list_item (frames, ii);
- if (len)
- *len = strlen (str);
+ text = mail_display_get_frame_selection_text (
+ WEBKIT_DOM_ELEMENT (node));
- return g_strdup (str);
+ if (text) {
+ return text;
+ }
+ }
+
+ return NULL;
}
void
diff --git a/mail/e-mail-display.h b/mail/e-mail-display.h
index e19895623a..48c16f36a2 100644
--- a/mail/e-mail-display.h
+++ b/mail/e-mail-display.h
@@ -95,8 +95,7 @@ void e_mail_display_set_status (EMailDisplay *display,
const gchar *status);
gchar * e_mail_display_get_selection_plain_text
- (EMailDisplay *display,
- gint *len);
+ (EMailDisplay *display);
void e_mail_display_load_images (EMailDisplay *display);