From b1b342a97e6ea31a6080e2bf5cdf94988563b03a Mon Sep 17 00:00:00 2001 From: jalf Date: Wed, 30 Jan 2013 11:48:33 +0100 Subject: [PATCH] Capture mouse events and filter irrelevant ones --- include/input.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/include/input.js b/include/input.js index fa753d94..b996c7d5 100644 --- a/include/input.js +++ b/include/input.js @@ -486,7 +486,8 @@ function Mouse(defaults) { "use strict"; var that = {}, // Public API methods - conf = {}; // Configuration attributes + conf = {}, // Configuration attributes + mouseCaptured = false; // Configuration attributes Util.conf_defaults(conf, that, defaults, [ @@ -499,7 +500,23 @@ Util.conf_defaults(conf, that, defaults, [ ['touchButton', 'rw', 'int', 1, 'Button mask (1, 2, 4) for touch devices (0 means ignore clicks)'] ]); +function captureMouse() { + // capturing the mouse ensures we get the mouseup event + if (conf.target.setCapture) { + conf.target.setCapture(); + } + // some browsers give us mouseup events regardless, + // so if we never captured the mouse, we can disregard the event + mouseCaptured = true; +} + +function releaseMouse() { + if (conf.target.releaseCapture) { + conf.target.releaseCapture(); + } + mouseCaptured = false; +} // // Private functions // @@ -536,11 +553,17 @@ function onMouseButton(e, down) { } function onMouseDown(e) { + captureMouse(); onMouseButton(e, 1); } function onMouseUp(e) { + if (!mouseCaptured) { + return; + } + onMouseButton(e, 0); + releaseMouse(); } function onMouseWheel(e) {