mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 13:17:41 +00:00
Tap support, ignore mouse events while touch events are in progress.
This commit is contained in:
@@ -107,6 +107,9 @@ Guacamole.Mouse = function(element) {
|
|||||||
|
|
||||||
element.onmousemove = function(e) {
|
element.onmousemove = function(e) {
|
||||||
|
|
||||||
|
// Don't handle if we aren't supposed to
|
||||||
|
if (gesture_in_progress) return;
|
||||||
|
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
|
|
||||||
moveMouse(e.pageX, e.pageY);
|
moveMouse(e.pageX, e.pageY);
|
||||||
@@ -115,30 +118,60 @@ Guacamole.Mouse = function(element) {
|
|||||||
|
|
||||||
var last_touch_x = 0;
|
var last_touch_x = 0;
|
||||||
var last_touch_y = 0;
|
var last_touch_y = 0;
|
||||||
|
var last_touch_time = 0;
|
||||||
|
var pixels_moved = 0;
|
||||||
|
|
||||||
|
var gesture_in_progress = false;
|
||||||
|
|
||||||
element.ontouchend = function(e) {
|
element.ontouchend = function(e) {
|
||||||
|
|
||||||
e.stopPropagation();
|
// If we're handling a gesture
|
||||||
e.preventDefault();
|
if (gesture_in_progress) {
|
||||||
|
|
||||||
|
e.stopPropagation();
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
var time = new Date().getTime();
|
||||||
|
|
||||||
// TODO: Handle tap-to-click.
|
// If single tap detected (based on time and distance)
|
||||||
|
if (time - last_touch_time <= 250 && pixels_moved < 10) {
|
||||||
|
|
||||||
|
// Fire left button down event
|
||||||
|
guac_mouse.currentState.left = true;
|
||||||
|
if (guac_mouse.onmousedown)
|
||||||
|
guac_mouse.onmousedown(guac_mouse.currentState);
|
||||||
|
|
||||||
|
// Fire left button up event
|
||||||
|
guac_mouse.currentState.left = false;
|
||||||
|
if (guac_mouse.onmouseup)
|
||||||
|
guac_mouse.onmouseup(guac_mouse.currentState);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allow mouse events now that touching is over
|
||||||
|
gesture_in_progress = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
element.ontouchstart = function(e) {
|
element.ontouchstart = function(e) {
|
||||||
|
|
||||||
e.stopPropagation();
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
// Record initial touch location and time for single-touch movement
|
// Record initial touch location and time for single-touch movement
|
||||||
// and tap gestures
|
// and tap gestures
|
||||||
if (e.touches.length == 1) {
|
if (e.touches.length == 1) {
|
||||||
|
|
||||||
|
e.stopPropagation();
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
// Stop mouse events while touching
|
||||||
|
gesture_in_progress = true;
|
||||||
|
|
||||||
var starting_touch = e.touches[0];
|
var starting_touch = e.touches[0];
|
||||||
last_touch_x = starting_touch.pageX;
|
last_touch_x = starting_touch.pageX;
|
||||||
last_touch_y = starting_touch.pageY;
|
last_touch_y = starting_touch.pageY;
|
||||||
|
last_touch_time = new Date().getTime();
|
||||||
// TODO: Record time (for sake of tap-to-click)
|
pixels_moved = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,17 +179,20 @@ Guacamole.Mouse = function(element) {
|
|||||||
|
|
||||||
element.ontouchmove = function(e) {
|
element.ontouchmove = function(e) {
|
||||||
|
|
||||||
e.stopPropagation();
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
// Handle single-touch movement gesture (touchpad mouse move)
|
// Handle single-touch movement gesture (touchpad mouse move)
|
||||||
if (e.touches.length == 1) {
|
if (e.touches.length == 1) {
|
||||||
|
|
||||||
|
e.stopPropagation();
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
// Get change in touch location
|
// Get change in touch location
|
||||||
var touch = e.touches[0];
|
var touch = e.touches[0];
|
||||||
var delta_x = touch.pageX - last_touch_x;
|
var delta_x = touch.pageX - last_touch_x;
|
||||||
var delta_y = touch.pageY - last_touch_y;
|
var delta_y = touch.pageY - last_touch_y;
|
||||||
|
|
||||||
|
// Track pixels moved
|
||||||
|
pixels_moved += Math.abs(delta_x) + Math.abs(delta_y);
|
||||||
|
|
||||||
// Update mouse location
|
// Update mouse location
|
||||||
guac_mouse.currentState.x += delta_x;
|
guac_mouse.currentState.x += delta_x;
|
||||||
guac_mouse.currentState.y += delta_y;
|
guac_mouse.currentState.y += delta_y;
|
||||||
@@ -178,6 +214,9 @@ Guacamole.Mouse = function(element) {
|
|||||||
|
|
||||||
element.onmousedown = function(e) {
|
element.onmousedown = function(e) {
|
||||||
|
|
||||||
|
// Don't handle if we aren't supposed to
|
||||||
|
if (gesture_in_progress) return;
|
||||||
|
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
|
|
||||||
switch (e.button) {
|
switch (e.button) {
|
||||||
@@ -200,6 +239,9 @@ Guacamole.Mouse = function(element) {
|
|||||||
|
|
||||||
element.onmouseup = function(e) {
|
element.onmouseup = function(e) {
|
||||||
|
|
||||||
|
// Don't handle if we aren't supposed to
|
||||||
|
if (gesture_in_progress) return;
|
||||||
|
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
|
|
||||||
switch (e.button) {
|
switch (e.button) {
|
||||||
@@ -221,6 +263,9 @@ Guacamole.Mouse = function(element) {
|
|||||||
|
|
||||||
element.onmouseout = function(e) {
|
element.onmouseout = function(e) {
|
||||||
|
|
||||||
|
// Don't handle if we aren't supposed to
|
||||||
|
if (gesture_in_progress) return;
|
||||||
|
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
|
|
||||||
// Release all buttons
|
// Release all buttons
|
||||||
@@ -244,7 +289,10 @@ Guacamole.Mouse = function(element) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Scroll wheel support
|
// Scroll wheel support
|
||||||
function handleScroll(e) {
|
element.onmousewheel = function(e) {
|
||||||
|
|
||||||
|
// Don't handle if we aren't supposed to
|
||||||
|
if (gesture_in_progress) return;
|
||||||
|
|
||||||
var delta = 0;
|
var delta = 0;
|
||||||
if (e.detail)
|
if (e.detail)
|
||||||
@@ -282,14 +330,11 @@ Guacamole.Mouse = function(element) {
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
e.returnValue = false;
|
e.returnValue = false;
|
||||||
}
|
|
||||||
|
|
||||||
element.addEventListener('DOMMouseScroll', handleScroll, false);
|
|
||||||
|
|
||||||
element.onmousewheel = function(e) {
|
|
||||||
handleScroll(e);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
element.addEventListener('DOMMouseScroll', element.onmousewheel, false);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user