diff --git a/lib/ace/editor.js b/lib/ace/editor.js index f64f63db..a3240fba 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -357,10 +357,16 @@ var Editor =function(renderer, session) { var pos = this.renderer.screenToTextCoordinates(pageX, pageY); pos.row = Math.max(0, Math.min(pos.row, this.session.getLength()-1)); - if (event.getButton(e) != 0) { - if (this.selection.isEmpty()) { + var button = event.getButton(e) + if (button != 0) { + var isEmpty = this.selection.isEmpty() + if (isEmpty) { this.moveCursorToPosition(pos); } + if(button == 2) { + this.textInput.onContextMenu({x: pageX, y: pageY}, isEmpty); + event.capture(this.container, function(){}, this.textInput.onContextMenuClose); + } return; } diff --git a/lib/ace/keyboard/textinput.js b/lib/ace/keyboard/textinput.js index f4ecac17..097149a7 100644 --- a/lib/ace/keyboard/textinput.js +++ b/lib/ace/keyboard/textinput.js @@ -50,6 +50,7 @@ var TextInput = function(parentNode, host) { var inCompostion = false; var copied = false; + var tempStyle = ''; function sendText(valueToSend) { if (!copied) { @@ -184,10 +185,32 @@ var TextInput = function(parentNode, host) { this.blur = function() { text.blur(); }; - + this.getElement = function() { return text; }; + + this.onContextMenu = function(mousePos, isEmpty){ + if (mousePos) { + if(!tempStyle) + tempStyle = text.style.cssText; + text.style.cssText = 'position:fixed; z-index:1000;' + + 'left:' + (mousePos.x - 2) + 'px; top:' + (mousePos.y - 2) + 'px;' + + } + if (isEmpty) + text.value=''; + } + + this.onContextMenuClose = function(){ + setTimeout(function () { + if (tempStyle) { + text.style.cssText = tempStyle; + tempStyle = ''; + } + sendText(); + }, 0); + } }; exports.TextInput = TextInput;