static Element *get_active_element(Document *doc) { char *tagname; Document *d = NULL; Element *active, *result = NULL; active = webkit_dom_html_document_get_active_element((void*)doc); if (!active) { return result; } tagname = webkit_dom_element_get_tag_name(active); if (!g_strcmp0(tagname, "FRAME")) { d = webkit_dom_html_frame_element_get_content_document(WEBKIT_DOM_HTML_FRAME_ELEMENT(active)); result = get_active_element(d); } else if (!g_strcmp0(tagname, "IFRAME")) { d = webkit_dom_html_iframe_element_get_content_document(WEBKIT_DOM_HTML_IFRAME_ELEMENT(active)); result = get_active_element(d); } g_free(tagname); if (result) { return result; } return active; }
void dom_check_auto_insert(WebKitWebView *view) { Document *doc = webkit_web_view_get_dom_document(view); Element *active = get_active_element(doc); if (vb.config.strict_focus || !auto_insert(active)) { /* if the strict-focus is on also blur the possible active element */ if (vb.config.strict_focus) { dom_clear_focus(view); } /* the focus was not set automatically - add event listener to track * focus events on the document */ HtmlElement *element = webkit_dom_document_get_body(doc); if (!element) { element = WEBKIT_DOM_HTML_ELEMENT(webkit_dom_document_get_document_element(doc)); } webkit_dom_event_target_add_event_listener( WEBKIT_DOM_EVENT_TARGET(element), "focus", G_CALLBACK(editable_focus_cb), false, NULL ); } }
Element *dom_get_active_element(WebKitWebView *view) { return get_active_element(webkit_web_view_get_dom_document(view)); }