diff options
| author | Stephen Blott | 2015-01-05 13:20:19 +0000 |
|---|---|---|
| committer | Stephen Blott | 2015-01-05 13:20:19 +0000 |
| commit | 308e4007814443955fa77a793da3cd2ec274686c (patch) | |
| tree | aaeab0bcb52010b15f33f046f34f3a64fb48c194 | |
| parent | 73f66f25e6b8e5b5b8456074ad4fa79ba1d3ca4d (diff) | |
| download | vimium-308e4007814443955fa77a793da3cd2ec274686c.tar.bz2 | |
Modes; fix findFocus.
| -rw-r--r-- | content_scripts/mode_find.coffee | 3 | ||||
| -rw-r--r-- | content_scripts/mode_insert.coffee | 6 | ||||
| -rw-r--r-- | content_scripts/vimium_frontend.coffee | 70 |
3 files changed, 48 insertions, 31 deletions
diff --git a/content_scripts/mode_find.coffee b/content_scripts/mode_find.coffee index 795e7a14..8b458770 100644 --- a/content_scripts/mode_find.coffee +++ b/content_scripts/mode_find.coffee @@ -10,8 +10,7 @@ class PostFindMode extends InsertModeBlocker constructor: (findModeAnchorNode) -> element = document.activeElement - super PostFindMode, element, - name: "post-find" + super PostFindMode, element, {name: "post-find"} return @exit() unless element and findModeAnchorNode diff --git a/content_scripts/mode_insert.coffee b/content_scripts/mode_insert.coffee index 32994aef..bead43f8 100644 --- a/content_scripts/mode_insert.coffee +++ b/content_scripts/mode_insert.coffee @@ -27,12 +27,6 @@ class InsertMode extends ConstrainedMode keypress: (event) => @stopBubblingAndTrue keyup: (event) => @stopBubblingAndTrue - @push - focus: (event, extra) => - handlerStack.alwaysContinueBubbling => - # Inform InsertModeTrigger that InsertMode is already active. - extra.insertModeActive = true - Mode.updateBadge() exit: (event=null) -> diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index 299cdcf2..cd717d5e 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -5,7 +5,6 @@ # "domReady". # -insertMode = null passKeysMode = null insertModeLock = null findMode = false @@ -362,15 +361,13 @@ extend window, selectedInputIndex = Math.min(count - 1, visibleInputs.length - 1) - # There's feature interference between PostFindMode, InsertMode and focusInput. PostFindMode prevents - # InsertMode from triggering on focus events. Therefore, an input element can already be focused, but - # InsertMode is not active. When that element is then (again) focused by focusInput, below, no new focus - # event is generated, so we don't drop into InsertMode as expected. - # Therefore we blur() the element before focussing it. element = visibleInputs[selectedInputIndex].element - element.blur() if document.activeElement == element element.focus() + # If PostFindMode is was previously active, then element may already have had the focus. In this case, + # focus() does not generate a "focus" event. So we now force insert mode. + new InsertMode element + return if visibleInputs.length == 1 hints = for tuple in visibleInputs @@ -390,23 +387,50 @@ extend window, hintContainingDiv = DomUtils.addElementList(hints, { id: "vimiumInputMarkerContainer", className: "vimiumReset" }) - handlerStack.push keydown: (event) -> - if event.keyCode == KeyboardUtils.keyCodes.tab - hints[selectedInputIndex].classList.remove 'internalVimiumSelectedInputHint' - if event.shiftKey - if --selectedInputIndex == -1 - selectedInputIndex = hints.length - 1 - else - if ++selectedInputIndex == hints.length - selectedInputIndex = 0 - hints[selectedInputIndex].classList.add 'internalVimiumSelectedInputHint' - visibleInputs[selectedInputIndex].element.focus() - else unless event.keyCode == KeyboardUtils.keyCodes.shiftKey - DomUtils.removeElement hintContainingDiv - @remove() - return true + class FocusSelector extends InsertModeBlocker + constructor: -> + super InsertModeBlocker, null, + name: "focus-selector" + badge: "?" + keydown: (event) => + if event.keyCode == KeyboardUtils.keyCodes.tab + hints[selectedInputIndex].classList.remove 'internalVimiumSelectedInputHint' + if event.shiftKey + if --selectedInputIndex == -1 + selectedInputIndex = hints.length - 1 + else + if ++selectedInputIndex == hints.length + selectedInputIndex = 0 + hints[selectedInputIndex].classList.add 'internalVimiumSelectedInputHint' + element = visibleInputs[selectedInputIndex].element + element.focus() + false + else unless event.keyCode == KeyboardUtils.keyCodes.shiftKey + DomUtils.removeElement hintContainingDiv + @exit() + new InsertMode element + return true + keypress: (event) -> false + keyup: (event) -> false + + new FocusSelector() + + # handlerStack.push keydown: (event) -> + # if event.keyCode == KeyboardUtils.keyCodes.tab + # hints[selectedInputIndex].classList.remove 'internalVimiumSelectedInputHint' + # if event.shiftKey + # if --selectedInputIndex == -1 + # selectedInputIndex = hints.length - 1 + # else + # if ++selectedInputIndex == hints.length + # selectedInputIndex = 0 + # hints[selectedInputIndex].classList.add 'internalVimiumSelectedInputHint' + # visibleInputs[selectedInputIndex].element.focus() + # else unless event.keyCode == KeyboardUtils.keyCodes.shiftKey + # DomUtils.removeElement hintContainingDiv + # @remove() + # return true - false # Decide whether this keyChar should be passed to the underlying page. # Keystrokes are *never* considered passKeys if the keyQueue is not empty. So, for example, if 't' is a |
