diff --git a/src/ace/lib/core.js b/src/ace/lib/core.js index 679c34f0..c8915dcd 100644 --- a/src/ace/lib/core.js +++ b/src/ace/lib/core.js @@ -17,6 +17,7 @@ require.def("ace/lib/core", function() { core.isMac = (os == "mac"); core.isLinux = (os == "linux"); core.isIE = ! + "\v1"; + core.isGecko = window.controllers && window.navigator.product === "Gecko"; core.provide = function(namespace) { var parts = namespace.split("."); diff --git a/src/ace/lib/event.js b/src/ace/lib/event.js index 8c4f9bf1..1bfc7f7a 100644 --- a/src/ace/lib/event.js +++ b/src/ace/lib/event.js @@ -149,24 +149,24 @@ require.def("ace/lib/event", ["ace/lib/core"], function(core) { var startX, startY; var listener = function(e) { - clicks += 1; - if (clicks == 1) { - startX = e.clientX; - startY = e.clientY; + clicks += 1; + if (clicks == 1) { + startX = e.clientX; + startY = e.clientY; - setTimeout(function() { - clicks = 0; - }, timeout || 600); - } + setTimeout(function() { + clicks = 0; + }, timeout || 600); + } - if (Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5) - clicks = 0; + if (Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5) + clicks = 0; - if (clicks == count) { - clicks = 0; - callback(e); - } - return event.preventDefault(e); + if (clicks == count) { + clicks = 0; + callback(e); + } + return event.preventDefault(e); }; event.addListener(el, "mousedown", listener); @@ -174,23 +174,24 @@ require.def("ace/lib/event", ["ace/lib/core"], function(core) { }; event.addKeyListener = function(el, callback) { - var lastDown = null; + var lastDown = null; - event.addListener(el, "keydown", function(e) { - lastDown = e.keyIdentifier || e.keyCode; - return callback(e); - }); + event.addListener(el, "keydown", function(e) { + lastDown = e.keyIdentifier || e.keyCode; + return callback(e); + }); - if (core.isMac) { - event.addListener(el, "keypress", function(e) { - var keyId = e.keyIdentifier || e.keyCode; - if (lastDown !== keyId) { - return callback(e); - } else { - lastDown = null; - } - }); - } + // repeated keys are fired as keypress and not keydown events + if (core.isMac && core.isGecko) { + event.addListener(el, "keypress", function(e) { + var keyId = e.keyIdentifier || e.keyCode; + if (lastDown !== keyId) { + return callback(e); + } else { + lastDown = null; + } + }); + } }; return event;