diff options
| author | Phil Crosby | 2014-08-21 00:00:13 -0700 |
|---|---|---|
| committer | Phil Crosby | 2014-08-21 00:00:13 -0700 |
| commit | 43caeb82d91e7cb88b085cb6e33a61a108322875 (patch) | |
| tree | 9e2eae0b7021c8f737f77d145eca3c866a973e8b | |
| parent | 435f4494bf6b863ab52b0ae243e4c66b244254fb (diff) | |
| parent | a11f9d9c1bb418db586a457d97c2b2c8142605cd (diff) | |
| download | vimium-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.coffee | 36 |
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() |
