aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormrmr19932015-05-29 14:06:28 +0100
committermrmr19932015-06-10 17:21:22 +0100
commit6ebc5ad32c26841ffe49895b5afc9b3792f68f4e (patch)
tree68159852954899d9540b8edb746391b3f3b1013c
parentdcc8d6ee0dadf4f7a473ab97bd8e20c282a3c445 (diff)
downloadvimium-6ebc5ad32c26841ffe49895b5afc9b3792f68f4e.tar.bz2
Ensure focus is called on the appropriate element when closing the HUD
-rw-r--r--content_scripts/hud.coffee17
1 files changed, 12 insertions, 5 deletions
diff --git a/content_scripts/hud.coffee b/content_scripts/hud.coffee
index 787be6a9..2b3748bf 100644
--- a/content_scripts/hud.coffee
+++ b/content_scripts/hud.coffee
@@ -61,12 +61,19 @@ HUD =
# iframe. To end up with the correct modes active, we create a focus/blur event manually after refocusing
# this window.
window.focus()
- focusNode = window.getSelection().focusNode
- focusNode = focusNode.parentElement if focusNode? and focusNode.nodeType != focusNode.ELEMENT_NODE
- if focusNode? and DomUtils.isFocusable focusNode
- focusNode.focus()
+
+ sel = window.getSelection()
+ focusNode = if not sel.focusNode?
+ null
+ else if sel.focusNode == sel.anchorNode and sel.focusOffset == sel.anchorOffset
+ # The selection either *is* an element, or is inside an opaque element (eg. <input>).
+ sel.focusNode.childNodes[sel.focusOffset]
+ else if sel.focusNode.nodeType != sel.focusNode.ELEMENT_NODE
+ sel.focusNode.parentElement
else
- document.activeElement?.blur()
+ sel.focusNode
+ document.activeElement?.blur()
+ focusNode?.focus()
findModeQuery.rawQuery = data.query
handlerStack.bubbleEvent "keydown", data.event