aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Crosby2014-08-21 00:00:13 -0700
committerPhil Crosby2014-08-21 00:00:13 -0700
commit43caeb82d91e7cb88b085cb6e33a61a108322875 (patch)
tree9e2eae0b7021c8f737f77d145eca3c866a973e8b
parent435f4494bf6b863ab52b0ae243e4c66b244254fb (diff)
parenta11f9d9c1bb418db586a457d97c2b2c8142605cd (diff)
downloadvimium-43caeb82d91e7cb88b085cb6e33a61a108322875.tar.bz2
Merge pull request #1130 from mrmr1993/fixKeyupCapture
Only block keyup for keys where we have handled a keyup/press event
-rw-r--r--content_scripts/vimium_frontend.coffee36
1 files changed, 29 insertions, 7 deletions
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index c7e5f2ef..565c9e61 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -321,6 +321,8 @@ extend window,
false
+handledKeydownEvents = []
+
#
# Sends everything except i & ESC to the handler in background_page. i & ESC are special because they control
# insert mode which is local state to the page. The key will be are either a single ascii letter or a
@@ -390,31 +392,39 @@ onKeydown = (event) ->
if (isEditable(event.srcElement))
event.srcElement.blur()
exitInsertMode()
- DomUtils.suppressEvent(event)
+ DomUtils.suppressEvent event
+ handledKeydownEvents.push event
else if (findMode)
if (KeyboardUtils.isEscape(event))
handleEscapeForFindMode()
- DomUtils.suppressEvent(event)
+ DomUtils.suppressEvent event
+ handledKeydownEvents.push event
else if (event.keyCode == keyCodes.backspace || event.keyCode == keyCodes.deleteKey)
handleDeleteForFindMode()
- DomUtils.suppressEvent(event)
+ DomUtils.suppressEvent event
+ handledKeydownEvents.push event
else if (event.keyCode == keyCodes.enter)
handleEnterForFindMode()
- DomUtils.suppressEvent(event)
+ DomUtils.suppressEvent event
+ handledKeydownEvents.push event
else if (!modifiers)
event.stopPropagation()
+ handledKeydownEvents.push event
else if (isShowingHelpDialog && KeyboardUtils.isEscape(event))
hideHelpDialog()
+ DomUtils.suppressEvent event
+ handledKeydownEvents.push event
else if (!isInsertMode() && !findMode)
if (keyChar)
if (currentCompletionKeys.indexOf(keyChar) != -1)
- DomUtils.suppressEvent(event)
+ DomUtils.suppressEvent event
+ handledKeydownEvents.push event
keyPort.postMessage({ keyChar:keyChar, frameId:frameId })
@@ -432,11 +442,23 @@ onKeydown = (event) ->
(currentCompletionKeys.indexOf(KeyboardUtils.getKeyChar(event)) != -1 ||
isValidFirstKey(KeyboardUtils.getKeyChar(event))))
event.stopPropagation()
+ handledKeydownEvents.push event
onKeyup = (event) ->
return unless handlerStack.bubbleEvent("keyup", event)
- # Don't propagate the keyup to the underlying page, since Vimium has handled it. See #733.
- event.stopPropagation() unless isInsertMode()
+ return if isInsertMode()
+
+ # Don't propagate the keyup to the underlying page if Vimium has handled it. See #733.
+ for keydown, i in handledKeydownEvents
+ if event.metaKey == keydown.metaKey and
+ event.altKey == keydown.altKey and
+ event.ctrlKey == keydown.ctrlKey and
+ event.keyIdentifier == keydown.keyIdentifier and
+ event.keyCode == keydown.keyCode
+
+ handledKeydownEvents.splice i, 1
+ event.stopPropagation()
+ break
checkIfEnabledForUrl = ->
url = window.location.toString()