From 828721c7913a2f334f6b6bac08de74c980c38ef5 Mon Sep 17 00:00:00 2001 From: Svein-Erik Larsen Date: Thu, 14 Oct 2010 22:50:27 +0200 Subject: 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. --- CREDITS | 1 + vimiumFrontend.js | 98 ++++++++++++++++++++++++++++++++++++------------------- 2 files changed, 66 insertions(+), 33 deletions(-) diff --git a/CREDITS b/CREDITS index 9f814f7a..c1ccd981 100644 --- a/CREDITS +++ b/CREDITS @@ -17,5 +17,6 @@ Contributors: Tim Morgan (github: seven1m) tsigo Werner Laurensse (github: ab3) + Svein-Erik Larsen (github: feinom) Feel free to add real names in addition to GitHub usernames. 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:"", frameId:frameId}); -- cgit v1.2.3