From: Daniel Carl Date: Mon, 25 Mar 2013 19:39:14 +0000 (+0100) Subject: Blur the active element if insert mode is left. X-Git-Url: https://git.owens.tech/assets/static/git-logo.png/assets/static/git-logo.png/git?a=commitdiff_plain;h=a0feeecda5d62003698aabfeb0426024c3ae86e5;p=vimb.git Blur the active element if insert mode is left. If a editable form element was focussed, vimb browser switched to insert mode. But if the insert mode was left by hitting the element kept focused, so that key-presses went still into the focused element. --- diff --git a/src/dom.c b/src/dom.c index d745ace..ab4d3c4 100644 --- a/src/dom.c +++ b/src/dom.c @@ -27,10 +27,13 @@ static gboolean dom_editable_focus_cb(Element* element, Event* event); static Element* dom_get_active_element(Document* doc); -void dom_check_auto_insert() +void dom_check_auto_insert(void) { Document* doc = webkit_web_view_get_dom_document(vb.gui.webview); Element* active = dom_get_active_element(doc); + + /* the focus was not set automatically - add event listener to track focus + * events on the document */ if (!dom_auto_insert(active)) { HtmlElement* element = webkit_dom_document_get_body(doc); if (!element) { @@ -42,6 +45,19 @@ void dom_check_auto_insert() } } +/** + * Remove focus from active and editable elements. + */ +void dom_clear_focus(void) +{ + Document* doc = webkit_web_view_get_dom_document(vb.gui.webview); + Element* active = dom_get_active_element(doc); + + if (active) { + webkit_dom_element_blur(active); + } +} + /** * Indicates if the given dom element is an editable element like text input, * password or textarea. diff --git a/src/dom.h b/src/dom.h index dd00eda..e9e50c1 100644 --- a/src/dom.h +++ b/src/dom.h @@ -39,7 +39,8 @@ typedef struct { gulong bottom; } DomBoundingRect; -void dom_check_auto_insert(); +void dom_check_auto_insert(void); +void dom_clear_focus(void); gboolean dom_is_editable(Element* element); #endif /* end of include guard: _DOM_H */ diff --git a/src/main.c b/src/main.c index 2e9268a..4b88bb7 100644 --- a/src/main.c +++ b/src/main.c @@ -241,6 +241,7 @@ gboolean vb_set_mode(Mode mode, gboolean clean) } else if (current_mode == VB_MODE_INSERT) { /* clean the input if current mode is insert to remove -- INPUT -- */ clean = TRUE; + dom_clear_focus(); } else if (current_mode == VB_MODE_SEARCH) { /* cleaup previous search */ command_search(&((Arg){VB_SEARCH_OFF}));