aboutsummaryrefslogtreecommitdiffstats
path: root/content_scripts/vimium_frontend.coffee
diff options
context:
space:
mode:
Diffstat (limited to 'content_scripts/vimium_frontend.coffee')
-rw-r--r--content_scripts/vimium_frontend.coffee12
1 files changed, 5 insertions, 7 deletions
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index 51b0695f..741b54af 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -44,7 +44,7 @@ settings =
loadedValues: 0
valuesToLoad: [ "scrollStepSize", "linkHintCharacters", "linkHintNumbers", "filterLinkHints", "hideHud",
"previousPatterns", "nextPatterns", "regexFindMode", "userDefinedLinkHintCss",
- "helpDialog_showAdvancedCommands", "smoothScroll" ]
+ "helpDialog_showAdvancedCommands", "smoothScroll", "grabBackFocus" ]
isLoaded: false
eventListeners: {}
@@ -108,18 +108,16 @@ class GrabBackFocus extends Mode
_name: "grab-back-focus-mousedown"
mousedown: => @alwaysContinueBubbling => @exit()
- # HACK. We use chrome.storage.sync directly here (rather than settings). This avoids a race condition.
- # An input can be focused by the page either before we install our handlers or after, and we handle both
- # cases. There's no uncertainty period while we wait to learn whether the option is set or not.
- # Note. We also assume that the default value for grabBackFocus is false.
- chrome.storage.sync.get "grabBackFocus", (items) =>
- return @exit() if chrome.runtime.lastError or not items.grabBackFocus
+ activate = =>
+ return @exit() unless settings.get "grabBackFocus"
@push
_name: "grab-back-focus-focus"
focus: (event) => @grabBackFocus event.target
# An input may already be focused. If so, grab back the focus.
@grabBackFocus document.activeElement if document.activeElement
+ if settings.isLoaded then activate() else settings.addEventListener "load", activate
+
grabBackFocus: (element) ->
return @continueBubbling unless DomUtils.isEditable element
element.blur()