aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Blott2016-04-17 11:54:28 +0100
committerStephen Blott2016-04-17 11:54:28 +0100
commit5c3e4bda2968486e23f8cc3410e776de67fec849 (patch)
tree38743486ac59f76462d6d6da9c8c90038c467834
parentd43f18bd5ce7c39e8e663a657027b233707e2926 (diff)
downloadvimium-5c3e4bda2968486e23f8cc3410e776de67fec849.tar.bz2
Better window focus handling.
This fixes two issues: - We cannot set windowHasFocus until the DOM is ready (because document.hasFocus isn't set until then. - We should use windowhasFocus in prefernce to document.hasFocus because, for framesets, document.hasFocus is true for both the frameset and a focused contained frame.
-rw-r--r--content_scripts/link_hints.coffee6
-rw-r--r--content_scripts/vimium_frontend.coffee3
2 files changed, 5 insertions, 4 deletions
diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee
index f2b9cd0f..702ff69d 100644
--- a/content_scripts/link_hints.coffee
+++ b/content_scripts/link_hints.coffee
@@ -334,7 +334,7 @@ class LinkHintsMode
flashEl = DomUtils.addFlashRect linkMatched.rect
HintCoordinator.onExit.push -> DomUtils.removeElement flashEl
- if document.hasFocus()
+ if windowIsFocused()
startKeyboardBlocker (isSuccess) -> HintCoordinator.sendMessage "exit", {isSuccess}
# If we're using a keyboard blocker, then the frame with the focus sends the "exit" message, otherwise the
@@ -613,12 +613,12 @@ LocalHints =
isClickable ||= element.control? and (@getVisibleClickable element.control).length == 0
when "body"
isClickable ||=
- if element == document.body and not document.hasFocus() and
+ if element == document.body and not windowIsFocused() and
window.innerWidth > 3 and window.innerHeight > 3 and
document.body?.tagName.toLowerCase() != "frameset"
reason = "Frame."
isClickable ||=
- if element == document.body and document.hasFocus() and Scroller.isScrollableElement element
+ if element == document.body and windowIsFocused() and Scroller.isScrollableElement element
reason = "Scroll."
when "div", "ol", "ul"
isClickable ||=
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index 7d6fa9a0..39e8e5d8 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -8,7 +8,8 @@ normalMode = null
# We track whther the current window has the focus or not.
windowIsFocused = do ->
- windowHasFocus = document.hasFocus()
+ windowHasFocus = null
+ DomUtils.documentReady -> windowHasFocus = document.hasFocus()
window.addEventListener "focus", (event) -> windowHasFocus = true if event.target == window; true
window.addEventListener "blur", (event) -> windowHasFocus = false if event.target == window; true
-> windowHasFocus