diff --git a/lib/ace/keyboard/textinput.js b/lib/ace/keyboard/textinput.js index 802b9236..f0830e71 100644 --- a/lib/ace/keyboard/textinput.js +++ b/lib/ace/keyboard/textinput.js @@ -51,7 +51,7 @@ var TextInput = function(parentNode, host) { text.autocapitalize = "off"; text.spellcheck = false; - text.style.bottom = "2000em"; + text.style.opacity = "0"; parentNode.insertBefore(text, parentNode.firstChild); var PLACEHOLDER = "\x01\x01"; @@ -372,10 +372,13 @@ var TextInput = function(parentNode, host) { var onCompositionUpdate = function() { // console.log("onCompositionUpdate", inComposition && JSON.stringify(text.value)) if (!inComposition) return; - host.onCompositionUpdate(text.value); + var val = text.value.replace(/\x01/g, ""); + if (inComposition.lastValue === val) return; + + host.onCompositionUpdate(val); if (inComposition.lastValue) host.undo(); - inComposition.lastValue = text.value.replace(/\x01/g, "") + inComposition.lastValue = val; if (inComposition.lastValue) { var r = host.selection.getRange(); host.insert(inComposition.lastValue); @@ -424,7 +427,12 @@ var TextInput = function(parentNode, host) { var syncComposition = lang.delayedCall(onCompositionUpdate, 50); event.addListener(text, "compositionstart", onCompositionStart); - event.addListener(text, useragent.isGecko ? "text" : "keyup", function(){syncComposition.schedule()}); + if (useragent.isGecko) { + event.addListener(text, "text", function(){syncComposition.schedule()}); + } else { + event.addListener(text, "keyup", function(){syncComposition.schedule()}); + event.addListener(text, "keydown", function(){syncComposition.schedule()}); + } event.addListener(text, "compositionend", onCompositionEnd); this.getElement = function() {