diff --git a/lib/ace/mouse/mouse_handler.js b/lib/ace/mouse/mouse_handler.js index 8a0afef2599..7438f8a2f3f 100644 --- a/lib/ace/mouse/mouse_handler.js +++ b/lib/ace/mouse/mouse_handler.js @@ -140,6 +140,7 @@ var MouseHandler = function(editor) { this.isMousePressed = true; // do not move textarea during selection + var editor = this.editor; var renderer = this.editor.renderer; if (renderer.$keepTextAreaAtCursor) renderer.$keepTextAreaAtCursor = null; @@ -160,6 +161,7 @@ var MouseHandler = function(editor) { }; var onCaptureEnd = function(e) { + editor.off("beforeEndOperation", onOperationEnd); clearInterval(timerId); onCaptureInterval(); self[self.state + "End"] && self[self.state + "End"](e); @@ -182,6 +184,18 @@ var MouseHandler = function(editor) { return setTimeout(function() {onCaptureEnd(ev);}); } + var onOperationEnd = function(e) { + // some touchpads fire mouseup event after a slight delay, + // which can cause problems if user presses a keyboard shortcut quickly + if (editor.curOp.command.name && editor.curOp.selectionChanged) { + self[self.state + "End"] && self[self.state + "End"](); + self.state = ""; + self.releaseMouse(); + } + }; + + editor.on("beforeEndOperation", onOperationEnd); + self.$onCaptureMouseMove = onMouseMove; self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd); var timerId = setInterval(onCaptureInterval, 20);