Fix key repeat workaround for Safari.

Typing "(" now works in Safari
This commit is contained in:
Fabian Jakobs 2010-09-26 19:56:32 +02:00
commit 53ea2aeb17
2 changed files with 32 additions and 30 deletions

View file

@ -17,6 +17,7 @@ require.def("ace/lib/core", function() {
core.isMac = (os == "mac"); core.isMac = (os == "mac");
core.isLinux = (os == "linux"); core.isLinux = (os == "linux");
core.isIE = ! + "\v1"; core.isIE = ! + "\v1";
core.isGecko = window.controllers && window.navigator.product === "Gecko";
core.provide = function(namespace) { core.provide = function(namespace) {
var parts = namespace.split("."); var parts = namespace.split(".");

View file

@ -149,24 +149,24 @@ require.def("ace/lib/event", ["ace/lib/core"], function(core) {
var startX, startY; var startX, startY;
var listener = function(e) { var listener = function(e) {
clicks += 1; clicks += 1;
if (clicks == 1) { if (clicks == 1) {
startX = e.clientX; startX = e.clientX;
startY = e.clientY; startY = e.clientY;
setTimeout(function() { setTimeout(function() {
clicks = 0; clicks = 0;
}, timeout || 600); }, timeout || 600);
} }
if (Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5) if (Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5)
clicks = 0; clicks = 0;
if (clicks == count) { if (clicks == count) {
clicks = 0; clicks = 0;
callback(e); callback(e);
} }
return event.preventDefault(e); return event.preventDefault(e);
}; };
event.addListener(el, "mousedown", listener); event.addListener(el, "mousedown", listener);
@ -174,23 +174,24 @@ require.def("ace/lib/event", ["ace/lib/core"], function(core) {
}; };
event.addKeyListener = function(el, callback) { event.addKeyListener = function(el, callback) {
var lastDown = null; var lastDown = null;
event.addListener(el, "keydown", function(e) { event.addListener(el, "keydown", function(e) {
lastDown = e.keyIdentifier || e.keyCode; lastDown = e.keyIdentifier || e.keyCode;
return callback(e); return callback(e);
}); });
if (core.isMac) { // repeated keys are fired as keypress and not keydown events
event.addListener(el, "keypress", function(e) { if (core.isMac && core.isGecko) {
var keyId = e.keyIdentifier || e.keyCode; event.addListener(el, "keypress", function(e) {
if (lastDown !== keyId) { var keyId = e.keyIdentifier || e.keyCode;
return callback(e); if (lastDown !== keyId) {
} else { return callback(e);
lastDown = null; } else {
} lastDown = null;
}); }
} });
}
}; };
return event; return event;