aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Blott2015-01-05 13:20:19 +0000
committerStephen Blott2015-01-05 13:20:19 +0000
commit308e4007814443955fa77a793da3cd2ec274686c (patch)
treeaaeab0bcb52010b15f33f046f34f3a64fb48c194
parent73f66f25e6b8e5b5b8456074ad4fa79ba1d3ca4d (diff)
downloadvimium-308e4007814443955fa77a793da3cd2ec274686c.tar.bz2
Modes; fix findFocus.
-rw-r--r--content_scripts/mode_find.coffee3
-rw-r--r--content_scripts/mode_insert.coffee6
-rw-r--r--content_scripts/vimium_frontend.coffee70
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