diff options
Diffstat (limited to 'vimiumFrontend.js')
| -rw-r--r-- | vimiumFrontend.js | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/vimiumFrontend.js b/vimiumFrontend.js index e74b1fbd..c48b5b36 100644 --- a/vimiumFrontend.js +++ b/vimiumFrontend.js @@ -173,9 +173,12 @@ function onKeydown(event) { if (insertMode && event.keyCode == keyCodes.ESC) { - // Remove focus so the user can't just get himself back into insert mode by typing in the same input box. - if (isInputOrText(event.srcElement)) { event.srcElement.blur(); } - exitInsertMode(); + // Note that we can't programmatically blur out of Flash embeds from Javascript. + if (event.srcElement.tagName != "EMBED") { + // Remove focus so the user can't just get himself back into insert mode by typing in the same input box. + if (isInputOrText(event.srcElement)) { event.srcElement.blur(); } + exitInsertMode(); + } } else if (findMode) { @@ -197,15 +200,20 @@ function onKeydown(event) { } function onFocusCapturePhase(event) { - if (isInputOrText(event.target)) + if (isFocusable(event.target)) enterInsertMode(); } function onBlurCapturePhase(event) { - if (isInputOrText(event.target)) + if (isFocusable(event.target)) exitInsertMode(); } +/* + * Returns true if the element is focusable. This includes embeds like Flash, which steal the keybaord focus. + */ +function isFocusable(element) { return isInputOrText(element) || element.tagName == "EMBED"; } + function isInputOrText(target) { return ((target.tagName == "INPUT" && (target.type == "text" || target.type == "password")) || target.tagName == "TEXTAREA"); |
