From 73ff5ff3f3d24fff8bc4c6dc444679ecd4e74672 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 9 Apr 2012 13:57:58 -0700 Subject: [PATCH] Fix non-left mouse button clicks (there may not be one touchstart event per touch). Fix setting/resetting of `gesture_in_progress` flag. --- src/main/resources/mouse.js | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/main/resources/mouse.js b/src/main/resources/mouse.js index 8613ce9..1c68174 100644 --- a/src/main/resources/mouse.js +++ b/src/main/resources/mouse.js @@ -163,7 +163,6 @@ Guacamole.Mouse = function(element) { var last_touch_y = 0; var last_touch_time = 0; var pixels_moved = 0; - var touch_distance = 0; var touch_buttons = { 1: "left", @@ -176,11 +175,11 @@ Guacamole.Mouse = function(element) { element.addEventListener("touchend", function(e) { + cancelEvent(e); + // If we're handling a gesture AND this is the last touch if (gesture_in_progress && e.touches.length == 0) { - cancelEvent(e); - var time = new Date().getTime(); // Get corresponding mouse button @@ -220,37 +219,41 @@ Guacamole.Mouse = function(element) { if (guac_mouse.onmouseup) guac_mouse.onmouseup(guac_mouse.currentState); - // Allow mouse events now that touching is over + // Gesture now over gesture_in_progress = false; - + }, guac_mouse.clickTimingThreshold); } + // If we're not waiting to see if this is a click, stop gesture + if (!click_release_timeout) + gesture_in_progress = false; + } }, false); element.addEventListener("touchstart", function(e) { + cancelEvent(e); + // Track number of touches, but no more than three touch_count = Math.min(e.touches.length, 3); + // Clear timeout, if set + if (click_release_timeout) { + window.clearTimeout(click_release_timeout); + click_release_timeout = null; + } + // Record initial touch location and time for touch movement // and tap gestures - if (e.touches.length == 1) { - - cancelEvent(e); + if (!gesture_in_progress) { // Stop mouse events while touching gesture_in_progress = true; - // Clear timeout, if set - if (click_release_timeout) { - window.clearTimeout(click_release_timeout); - click_release_timeout = null; - } - // Record touch location and time var starting_touch = e.touches[0]; last_touch_x = starting_touch.clientX; -- 1.7.10.4