diff options
| author | mrmr1993 | 2015-05-29 14:06:28 +0100 |
|---|---|---|
| committer | mrmr1993 | 2015-06-10 17:21:22 +0100 |
| commit | 6ebc5ad32c26841ffe49895b5afc9b3792f68f4e (patch) | |
| tree | 68159852954899d9540b8edb746391b3f3b1013c | |
| parent | dcc8d6ee0dadf4f7a473ab97bd8e20c282a3c445 (diff) | |
| download | vimium-6ebc5ad32c26841ffe49895b5afc9b3792f68f4e.tar.bz2 | |
Ensure focus is called on the appropriate element when closing the HUD
| -rw-r--r-- | content_scripts/hud.coffee | 17 |
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 |
