some Opera key handling fixes (not perfect yet)

This commit is contained in:
Fabian Jakobs 2010-12-15 15:40:53 +01:00
commit a2d271677f
3 changed files with 10 additions and 3 deletions

View file

@ -49,8 +49,14 @@ var KeyBinding = function(element, editor, config) {
var _self = this;
event.addKeyListener(element, function(e) {
var hashId = 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0)
| (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);
// opera on mac swaps ctrl and meta keys
if (core.isOpera && core.isMac)
var hashId = 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0)
| (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);
else
var hashId = 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0)
| (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);
var key = _self.keyNames[e.keyCode];
var commandName = (_self.config.reverse[hashId] || {})[(key

View file

@ -44,6 +44,7 @@ exports.isMac = (os == "mac");
exports.isLinux = (os == "linux");
exports.isIE = ! + "\v1";
exports.isGecko = window.controllers && window.navigator.product === "Gecko";
exports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == "[object Opera]";
exports.provide = function(namespace) {
var parts = namespace.split(".");

View file

@ -224,7 +224,7 @@ exports.addKeyListener = function(el, callback) {
});
// repeated keys are fired as keypress and not keydown events
if (core.isMac && core.isGecko) {
if (core.isMac && (core.isGecko || core.isOpera)) {
exports.addListener(el, "keypress", function(e) {
var keyId = e.keyIdentifier || e.keyCode;
if (lastDown !== keyId) {