diff options
| author | jez | 2011-02-01 05:01:39 +0800 |
|---|---|---|
| committer | jez | 2011-02-01 11:12:57 +0800 |
| commit | 1133f348558e8e70aa5e76ca67a739a5303467bd (patch) | |
| tree | b09928d85e438f6297313aefc9b020cedf4ebf95 /vimiumFrontend.js | |
| parent | d31aa9fefc26f562f45043ad184846c469a580a9 (diff) | |
| download | vimium-1133f348558e8e70aa5e76ca67a739a5303467bd.tar.bz2 | |
Use only one key[event] handler for all modes.
Diffstat (limited to 'vimiumFrontend.js')
| -rw-r--r-- | vimiumFrontend.js | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/vimiumFrontend.js b/vimiumFrontend.js index e0b6eb6a..7b43f4c2 100644 --- a/vimiumFrontend.js +++ b/vimiumFrontend.js @@ -12,6 +12,7 @@ var findMode = false; var findModeQuery = ""; var findModeQueryHasResults = false; var isShowingHelpDialog = false; +var handlerStack = []; var keyPort; var settingPort; var saveZoomLevelPort; @@ -339,11 +340,11 @@ function toggleViewSourceCallback(url) { * Note that some keys will only register keydown events and not keystroke events, e.g. ESC. */ function onKeypress(event) { - var keyChar = ""; - - if (linkHints.modeActivated) + if (!bubbleEvent('keypress', event)) return; + var keyChar = ""; + // Ignore modifier keys by themselves. if (event.keyCode > 31) { keyChar = String.fromCharCode(event.charCode); @@ -373,12 +374,22 @@ function onKeypress(event) { } } -function onKeydown(event) { - var keyChar = ""; +function bubbleEvent(type, event) { + for (var i = handlerStack.length-1; i >= 0; i--) { + // We need to check for existence of handler because the last function call may have caused the release of + // more than one handler. + if (handlerStack[i] && handlerStack[i][type] && !handlerStack[i][type](event)) + return false; + } + return true; +} - if (linkHints.modeActivated) +function onKeydown(event) { + if (!bubbleEvent('keydown', event)) return; + var keyChar = ""; + // handle modifiers being pressed.don't handle shiftKey alone (to avoid / being interpreted as ? if (event.metaKey && event.keyCode > 31 || event.ctrlKey && event.keyCode > 31 || event.altKey && event.keyCode > 31) { keyChar = getKeyChar(event); @@ -459,6 +470,11 @@ function onKeydown(event) { event.stopPropagation(); } +function onKeyup() { + if (!bubbleEvent('keyup', event)) + return; +} + function checkIfEnabledForUrl() { var url = window.location.toString(); |
