diff options
Diffstat (limited to 'e-util/e-web-view.c')
-rw-r--r-- | e-util/e-web-view.c | 150 |
1 files changed, 127 insertions, 23 deletions
diff --git a/e-util/e-web-view.c b/e-util/e-web-view.c index afb3cc9fef..0b83d81a34 100644 --- a/e-util/e-web-view.c +++ b/e-util/e-web-view.c @@ -359,8 +359,6 @@ static void web_view_init_web_settings (WebKitWebView *web_view) { WebKitWebSettings *web_settings; - GObjectClass *class; - GParamSpec *pspec; web_settings = webkit_web_settings_new (); @@ -373,19 +371,9 @@ web_view_init_web_settings (WebKitWebView *web_view) "enable-offline-web-application-cache", FALSE, "enable-site-specific-quirks", TRUE, "enable-scripts", FALSE, + "respect-image-orientation", TRUE, NULL); - /* This property was introduced in WebKitGTK 2.0, - * so check for it and enable it if it's present. */ - class = G_OBJECT_GET_CLASS (web_settings); - pspec = g_object_class_find_property ( - class, "respect-image-orientation"); - if (pspec != NULL) { - g_object_set ( - G_OBJECT (web_settings), - pspec->name, TRUE, NULL); - } - g_object_bind_property ( web_settings, "enable-caret-browsing", web_view, "caret-mode", @@ -3377,9 +3365,9 @@ e_web_view_install_request_handler (EWebView *web_view, soup_session_add_feature_by_type (session, handler_type); } -static void -create_and_add_css_style_sheet (WebKitDOMDocument *document, - const gchar *style_sheet_id) +void +e_web_view_create_and_add_css_style_sheet (WebKitDOMDocument *document, + const gchar *style_sheet_id) { WebKitDOMElement *style_element; @@ -3388,15 +3376,9 @@ create_and_add_css_style_sheet (WebKitDOMDocument *document, if (!style_element) { /* Create new <style> element */ style_element = webkit_dom_document_create_element (document, "style", NULL); -#if WEBKIT_CHECK_VERSION(2,2,0) /* XXX should really be (2,1,something) */ webkit_dom_element_set_id ( WEBKIT_DOM_ELEMENT (style_element), style_sheet_id); -#else - webkit_dom_html_element_set_id ( - WEBKIT_DOM_HTML_ELEMENT (style_element), - style_sheet_id); -#endif webkit_dom_html_style_element_set_media ( WEBKIT_DOM_HTML_STYLE_ELEMENT (style_element), "screen"); @@ -3427,7 +3409,7 @@ add_css_rule_into_style_sheet (WebKitDOMDocument *document, style_element = webkit_dom_document_get_element_by_id (document, style_sheet_id); if (!style_element) { - create_and_add_css_style_sheet (document, style_sheet_id); + e_web_view_create_and_add_css_style_sheet (document, style_sheet_id); style_element = webkit_dom_document_get_element_by_id (document, style_sheet_id); } @@ -3551,3 +3533,125 @@ e_web_view_add_css_rule_into_style_sheet (EWebView *view, selector, style); } + +gboolean +element_has_id (WebKitDOMElement *element, + const gchar* id) +{ + gchar *element_id; + + if (!element) + return FALSE; + + if (!WEBKIT_DOM_IS_ELEMENT (element)) + return FALSE; + + element_id = webkit_dom_element_get_id (element); + + if (g_ascii_strcasecmp (element_id, id) != 0) { + g_free (element_id); + return FALSE; + } + g_free (element_id); + + return TRUE; +} + +gboolean +element_has_tag (WebKitDOMElement *element, + const gchar* tag) +{ + gchar *element_tag; + + if (!WEBKIT_DOM_IS_ELEMENT (element)) + return FALSE; + + element_tag = webkit_dom_node_get_local_name (WEBKIT_DOM_NODE (element)); + + if (g_ascii_strcasecmp (element_tag, tag) != 0) { + g_free (element_tag); + return FALSE; + } + g_free (element_tag); + + return TRUE; +} + +gboolean +element_has_class (WebKitDOMElement *element, + const gchar* class) +{ + gchar *element_class; + + if (!element) + return FALSE; + + if (!WEBKIT_DOM_IS_ELEMENT (element)) + return FALSE; + + element_class = webkit_dom_element_get_class_name (element); + + if (g_strstr_len (element_class, -1, class)) { + g_free (element_class); + return TRUE; + } + g_free (element_class); + + return FALSE; +} + +void +element_add_class (WebKitDOMElement *element, + const gchar* class) +{ + gchar *element_class; + gchar *new_class; + + if (!WEBKIT_DOM_IS_ELEMENT (element)) + return; + + if (element_has_class (element, class)) + return; + + element_class = webkit_dom_element_get_class_name (element); + + if (g_strcmp0 (element_class, "") == 0) + new_class = g_strdup (class); + else + new_class = g_strconcat (element_class, " ", class, NULL); + + webkit_dom_element_set_class_name (element, new_class); + + g_free (element_class); + g_free (new_class); +} + +void +element_remove_class (WebKitDOMElement *element, + const gchar* class) +{ + gchar *element_class; + GString *result; + + if (!WEBKIT_DOM_IS_ELEMENT (element)) + return; + + if (!element_has_class (element, class)) + return; + + element_class = webkit_dom_element_get_class_name (element); + + if (g_strcmp0 (element_class, class) == 0) { + webkit_dom_element_remove_attribute (element, "class"); + g_free (element_class); + return; + } + + result = e_str_replace_string (element_class, class, ""); + if (result) { + webkit_dom_element_set_class_name (element, result->str); + g_string_free (result, TRUE); + } + + g_free (element_class); +} |