From 6ebc5ad32c26841ffe49895b5afc9b3792f68f4e Mon Sep 17 00:00:00 2001 From: mrmr1993 Date: Fri, 29 May 2015 14:06:28 +0100 Subject: Ensure focus is called on the appropriate element when closing the HUD --- content_scripts/hud.coffee | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'content_scripts') 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. ). + 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 -- cgit v1.2.3