diff options
| author | Svein-Erik Larsen | 2010-10-14 22:50:27 +0200 |
|---|---|---|
| committer | Svein-Erik Larsen | 2010-10-14 22:50:27 +0200 |
| commit | 828721c7913a2f334f6b6bac08de74c980c38ef5 (patch) | |
| tree | 08e994008a0f1664a6a604f7366ab263b945af64 /vimiumFrontend.js | |
| parent | 1ad34dcea418bf062564d349207d3b6cbcb526a3 (diff) | |
| download | vimium-828721c7913a2f334f6b6bac08de74c980c38ef5.tar.bz2 | |
Fixed problems with / being interpreted as ?
This also fixed problems with Norwegian keyboards.
Incidentally, this allows website hotkeys to override vimium's hotkeys. I don't know if this is a desired effect, but I kind of like it :)
I have _only_ tested the code on Linux.
Diffstat (limited to 'vimiumFrontend.js')
| -rw-r--r-- | vimiumFrontend.js | 98 |
1 files changed, 65 insertions, 33 deletions
diff --git a/vimiumFrontend.js b/vimiumFrontend.js index d7c429cb..75225a78 100644 --- a/vimiumFrontend.js +++ b/vimiumFrontend.js @@ -141,6 +141,7 @@ function initializePreDomReady() { */ function initializeWhenEnabled() { document.addEventListener("keydown", onKeydown, true); + document.addEventListener("keypress", onKeypress, true); document.addEventListener("focus", onFocusCapturePhase, true); document.addEventListener("blur", onBlurCapturePhase, true); enterInsertModeIfElementIsFocused(); @@ -308,7 +309,7 @@ function toggleViewSourceCallback(url) { * * Note that some keys will only register keydown events and not keystroke events, e.g. ESC. */ -function onKeydown(event) { +function onKeypress(event) { var keyChar = ""; if (linkHintsModeActivated) @@ -316,36 +317,74 @@ function onKeydown(event) { // Ignore modifier keys by themselves. if (event.keyCode > 31) { - keyChar = getKeyChar(event); + keyChar = String.fromCharCode(event.charCode); // Enter insert mode when the user enables the native find interface. - if (keyChar == "f" && !event.shiftKey && isPrimaryModifierKey(event)) + if (keyChar == "f" && isPrimaryModifierKey(event)) { enterInsertMode(); return; } + } - if (keyChar != "") // Again, ignore just modifiers. Maybe this should replace the keyCode > 31 condition. + if (findMode) + { + if (keyChar) { - var modifiers = []; - - if (event.shiftKey) - keyChar = keyChar.toUpperCase(); - if (event.metaKey) - modifiers.push("m"); - if (event.ctrlKey) - modifiers.push("c"); - if (event.altKey) - modifiers.push("a"); - - for (var i in modifiers) - keyChar = modifiers[i] + "-" + keyChar; - - if (modifiers.length > 0 || keyChar.length > 1) - keyChar = "<" + keyChar + ">"; + handleKeyCharForFindMode(keyChar); + + // Don't let the space scroll us if we're searching. + if (event.keyCode == keyCodes.space) + event.preventDefault(); + } + } + + else if (!insertMode && !findMode) { + if (keyChar) { + if (currentCompletionKeys.indexOf(keyChar) != -1) { + event.preventDefault(); + event.stopPropagation(); + } + keyPort.postMessage({keyChar:keyChar, frameId:frameId}); } } +} + +function onKeydown(event) { + var keyChar = ""; + if (linkHintsModeActivated) + return; + + // 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) + { + if (event.keyCode > 31) + { + keyChar = getKeyChar(event); + + if (keyChar != "") // Again, ignore just modifiers. Maybe this should replace the keyCode > 31 condition. + { + var modifiers = []; + + if (event.shiftKey) + keyChar = keyChar.toUpperCase(); + if (event.metaKey) + modifiers.push("m"); + if (event.ctrlKey) + modifiers.push("c"); + if (event.altKey) + modifiers.push("a"); + + for (var i in modifiers) + keyChar = modifiers[i] + "-" + keyChar; + + if (modifiers.length > 0 || keyChar.length > 1) + keyChar = "<" + keyChar + ">"; + } + } + } + if (insertMode && isEscape(event)) { // Note that we can't programmatically blur out of Flash embeds from Javascript. @@ -359,14 +398,6 @@ function onKeydown(event) { { if (isEscape(event)) exitFindMode(); - else if (keyChar) - { - handleKeyCharForFindMode(keyChar); - - // Don't let the space scroll us if we're searching. - if (event.keyCode == keyCodes.space) - event.preventDefault(); - } // Don't let backspace take us back in history. else if (event.keyCode == keyCodes.backspace || event.keyCode == keyCodes.deleteKey) { @@ -382,12 +413,13 @@ function onKeydown(event) { } else if (!insertMode && !findMode) { if (keyChar) { - if (currentCompletionKeys.indexOf(keyChar) != -1) { - event.preventDefault(); - event.stopPropagation(); - } + if (currentCompletionKeys.indexOf(keyChar) != -1) { + event.preventDefault(); + event.stopPropagation(); + } + + keyPort.postMessage({keyChar:keyChar, frameId:frameId}); - keyPort.postMessage({keyChar:keyChar, frameId:frameId}); } else if (isEscape(event)) { keyPort.postMessage({keyChar:"<ESC>", frameId:frameId}); |
