[evolution] Bug #681279 - Reply on selection doesn't work



commit 83c97e53c0be962d2db12d09b6e1a8bf91fcd93e
Author: Dan VrÃtil <dvratil redhat com>
Date:   Wed Aug 8 13:48:25 2012 +0200

    Bug #681279 - Reply on selection doesn't work

 widgets/misc/e-web-view.c |   89 +++++++++++++++++++++++++++++++++++----------
 1 files changed, 70 insertions(+), 19 deletions(-)
---
diff --git a/widgets/misc/e-web-view.c b/widgets/misc/e-web-view.c
index e4d7be7..bb7f64e 100644
--- a/widgets/misc/e-web-view.c
+++ b/widgets/misc/e-web-view.c
@@ -2847,15 +2847,66 @@ e_web_view_update_actions (EWebView *web_view,
 	g_signal_emit (web_view, signals[UPDATE_ACTIONS], 0, event);
 }
 
-gchar *
-e_web_view_get_selection_html (EWebView *web_view)
+static gchar *
+web_view_get_frame_selection_html (WebKitDOMElement *iframe)
 {
 	WebKitDOMDocument *document;
 	WebKitDOMDOMWindow *window;
 	WebKitDOMDOMSelection *selection;
-	WebKitDOMRange *range;
-	WebKitDOMDocumentFragment *fragment;
-	WebKitDOMHTMLElement *element;
+	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;
+		WebKitDOMElement *element;
+		WebKitDOMDocumentFragment *fragment;
+
+		range = webkit_dom_dom_selection_get_range_at (selection, 0, NULL);
+		if (range) {
+			fragment = webkit_dom_range_clone_contents (
+				range, NULL);
+
+			element = webkit_dom_document_create_element (
+				document, "DIV", NULL);
+			webkit_dom_node_append_child (
+				WEBKIT_DOM_NODE (element),
+				WEBKIT_DOM_NODE (fragment), NULL);
+
+			return webkit_dom_html_element_get_inner_html (
+				WEBKIT_DOM_HTML_ELEMENT (element));
+		}
+	}
+
+	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 = web_view_get_frame_selection_html (
+				WEBKIT_DOM_ELEMENT (node));
+
+		if (text) {
+			return text;
+		}
+	}
+
+	return NULL;
+}
+
+gchar *
+e_web_view_get_selection_html (EWebView *web_view)
+{
+	WebKitDOMDocument *document;
+	WebKitDOMNodeList *frames;
+	gulong ii, length;
 
 	g_return_val_if_fail (E_IS_WEB_VIEW (web_view), NULL);
 
@@ -2863,24 +2914,24 @@ e_web_view_get_selection_html (EWebView *web_view)
 		return NULL;
 
 	document = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (web_view));
-	window = webkit_dom_document_get_default_view (document);
-	selection = webkit_dom_dom_window_get_selection (window);
-	if (!selection)
-		return NULL;
+	frames = webkit_dom_document_get_elements_by_tag_name (document, "IFRAME");
+	length = webkit_dom_node_list_get_length (frames);
 
-	range = webkit_dom_dom_selection_get_range_at (selection, 0, NULL);
-	if (!range)
-		return NULL;
+	for (ii = 0; ii < length; ii++) {
+		gchar *text;
+		WebKitDOMNode *node;
 
-	fragment = webkit_dom_range_clone_contents (range, NULL);
-	if (!fragment)
-		return NULL;
+		node = webkit_dom_node_list_item (frames, ii);
 
-	element = WEBKIT_DOM_HTML_ELEMENT (webkit_dom_document_create_element (document, "div", NULL));
-	webkit_dom_node_append_child (WEBKIT_DOM_NODE (element),
-		WEBKIT_DOM_NODE (fragment), NULL);
+		text = web_view_get_frame_selection_html (
+				WEBKIT_DOM_ELEMENT (node));
 
-	return webkit_dom_html_element_get_inner_html (element);
+		if (text) {
+			return text;
+		}
+	}
+
+	return NULL;
 }
 
 void



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