Bug #681279 - Reply on selection doesn't work

This commit is contained in:
Dan Vrátil
2012-08-08 13:48:25 +02:00
parent 7fbcda0374
commit 83c97e53c0

View File

@ -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