diff options
| -rw-r--r-- | content_scripts/mode.coffee | 2 | ||||
| -rw-r--r-- | content_scripts/mode_insert.coffee | 13 | ||||
| -rw-r--r-- | content_scripts/vimium_frontend.coffee | 15 | ||||
| -rw-r--r-- | lib/handler_stack.coffee | 7 | 
4 files changed, 19 insertions, 18 deletions
| diff --git a/content_scripts/mode.coffee b/content_scripts/mode.coffee index 24c50561..f411d29b 100644 --- a/content_scripts/mode.coffee +++ b/content_scripts/mode.coffee @@ -53,7 +53,7 @@ class Mode    # Default updateBadgeForMode handler.  This is overridden by sub-classes.  The default is to install the    # current mode's badge, unless the bade is already set.    updateBadgeForMode: (badge) -> -    handlerStack.alwaysPropagate => badge.badge ||= @badge +    handlerStack.alwaysContinueBubbling => badge.badge ||= @badge    # Static method.  Used externally and internally to initiate bubbling of an updateBadgeForMode event.    # Do not update the badge: diff --git a/content_scripts/mode_insert.coffee b/content_scripts/mode_insert.coffee index 34fad926..64aaa445 100644 --- a/content_scripts/mode_insert.coffee +++ b/content_scripts/mode_insert.coffee @@ -67,16 +67,25 @@ class InsertMode extends Mode      @handlers.push handlerStack.push        focus: (event) => -        handlerStack.alwaysPropagate => +        handlerStack.alwaysContinueBubbling =>            if not @isInsertMode and @isFocusable event.target              @activate event.target        blur: (event) => -        handlerStack.alwaysPropagate => +        handlerStack.alwaysContinueBubbling =>            if @isInsertMode and event.target == @insertModeLock              @deactivate()      # We may already have been dropped into insert mode.  So check.      Mode.updateBadge() +# Utility mode. +# Activate this mode to prevent a focused, editable element from triggering insert mode. +class FocusMustNotTriggerInsertMode extends Mode +  constructor: -> +    super() +    @handlers.push handlerStack.push +      focus: => @suppressEvent +  root = exports ? window  root.InsertMode = InsertMode +root.FocusMustNotTriggerInsertMode = FocusMustNotTriggerInsertMode diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index a9b318c6..a252c878 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -114,7 +114,7 @@ class NormalMode extends Mode        keyup: onKeyup    updateBadgeForMode: (badge) -> -    handlerStack.alwaysPropagate => +    handlerStack.alwaysContinueBubbling =>        # Idea...  Instead of an icon, we could show the keyQueue here (if it's non-empty).        super badge        badge.badge = "" unless isEnabledForUrl @@ -750,22 +750,15 @@ class FindMode extends Mode            handlerStack.stopBubblingAndFalse        keypress: (event) -> -        handlerStack.neverPropagate -> +        handlerStack.neverContinueBubbling ->            if event.keyCode > 31              keyChar = String.fromCharCode event.charCode              handleKeyCharForFindMode keyChar if keyChar -      keyup: (event) -> handlerStack.neverPropagate -> false - -    # Prevent insert mode from detecting a focused editable element. -    @handlers.push handlerStack.push -      focus: (event) -> handlerStack.neverPropagate (event) -> +      keyup: (event) => @suppressEvent      Mode.updateBadge() -class FindModeWithoutBadge extends FindMode -  constructor: -> super "" -  performFindInPlace = ->    cachedScrollX = window.scrollX    cachedScrollY = window.scrollY @@ -793,7 +786,7 @@ executeFind = (query, options) ->    HUD.hide(true)    # ignore the selectionchange event generated by find()    document.removeEventListener("selectionchange",restoreDefaultSelectionHighlight, true) -  Mode.runIn FindModeWithoutBadge, -> +  Mode.runIn FocusMustNotTriggerInsertMode, ->      result = window.find(query, options.caseSensitive, options.backwards, true, false, true, false)    setTimeout(      -> document.addEventListener("selectionchange", restoreDefaultSelectionHighlight, true) diff --git a/lib/handler_stack.coffee b/lib/handler_stack.coffee index d2d0672a..f05413d3 100644 --- a/lib/handler_stack.coffee +++ b/lib/handler_stack.coffee @@ -51,13 +51,12 @@ class HandlerStack    isChromeEvent: (event) ->      event?.preventDefault? and event?.stopImmediatePropagation? -  # Convenience wrapper for handlers which always continue propagation. -  alwaysPropagate: (handler) -> +  # Convenience wrappers. +  alwaysContinueBubbling: (handler) ->      handler()      true -  # Convenience wrapper for handlers which never continue propagation. -  neverPropagate: (handler) -> +  neverContinueBubbling: (handler) ->      handler()      false | 
