Skip to content

Commit

Permalink
Merge pull request #3478 from ajaxorg/fix-mouseup-delay
Browse files Browse the repository at this point in the history
workaround for delayed mouseup event from touchpads
  • Loading branch information
nightwing committed Dec 26, 2017
2 parents 3024dcd + 8102837 commit 6bd1b82
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions lib/ace/mouse/mouse_handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand All @@ -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);
Expand Down

0 comments on commit 6bd1b82

Please sign in to comment.