mirror of
				https://github.com/gyurix1968/guacamole-client.git
				synced 2025-10-31 00:53:21 +00:00 
			
		
		
		
	Implement right and middle-click.
This commit is contained in:
		| @@ -143,28 +143,38 @@ Guacamole.Mouse = function(element) { | |||||||
|  |  | ||||||
|     }, false); |     }, false); | ||||||
|  |  | ||||||
|  |     var touch_count = 0; | ||||||
|     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 last_touch_time = 0; | ||||||
|     var pixels_moved = 0; |     var pixels_moved = 0; | ||||||
|  |  | ||||||
|  |     var touch_buttons = { | ||||||
|  |         1: "left", | ||||||
|  |         2: "right", | ||||||
|  |         3: "middle" | ||||||
|  |     }; | ||||||
|  |  | ||||||
|     var gesture_in_progress = false; |     var gesture_in_progress = false; | ||||||
|     var click_release_timeout = null; |     var click_release_timeout = null; | ||||||
|  |  | ||||||
|     element.addEventListener("touchend", function(e) { |     element.addEventListener("touchend", function(e) { | ||||||
|          |          | ||||||
|         // If we're handling a gesture |         // If we're handling a gesture AND this is the last touch | ||||||
|         if (gesture_in_progress) { |         if (gesture_in_progress && e.touches.length == 1) { | ||||||
|              |              | ||||||
|             cancelEvent(e); |             cancelEvent(e); | ||||||
|              |              | ||||||
|             var time = new Date().getTime(); |             var time = new Date().getTime(); | ||||||
|  |  | ||||||
|             // If mouse already down, release anad clear timeout |             // Get corresponding mouse button | ||||||
|             if (guac_mouse.currentState.left) { |             var button = touch_buttons[touch_count]; | ||||||
|  |  | ||||||
|                 // Fire left button up event |             // If mouse already down, release anad clear timeout | ||||||
|                 guac_mouse.currentState.left = false; |             if (guac_mouse.currentState[button]) { | ||||||
|  |  | ||||||
|  |                 // Fire button up event | ||||||
|  |                 guac_mouse.currentState[button] = false; | ||||||
|                 if (guac_mouse.onmouseup) |                 if (guac_mouse.onmouseup) | ||||||
|                     guac_mouse.onmouseup(guac_mouse.currentState); |                     guac_mouse.onmouseup(guac_mouse.currentState); | ||||||
|  |  | ||||||
| @@ -179,8 +189,8 @@ Guacamole.Mouse = function(element) { | |||||||
|             // If single tap detected (based on time and distance) |             // If single tap detected (based on time and distance) | ||||||
|             if (time - last_touch_time <= 250 && pixels_moved < 10) { |             if (time - last_touch_time <= 250 && pixels_moved < 10) { | ||||||
|  |  | ||||||
|                 // Fire left button down event |                 // Fire button down event | ||||||
|                 guac_mouse.currentState.left = true; |                 guac_mouse.currentState[button] = true; | ||||||
|                 if (guac_mouse.onmousedown) |                 if (guac_mouse.onmousedown) | ||||||
|                     guac_mouse.onmousedown(guac_mouse.currentState); |                     guac_mouse.onmousedown(guac_mouse.currentState); | ||||||
|  |  | ||||||
| @@ -188,8 +198,8 @@ Guacamole.Mouse = function(element) { | |||||||
|                 // touchstart within timeout. |                 // touchstart within timeout. | ||||||
|                 click_release_timeout = window.setTimeout(function() { |                 click_release_timeout = window.setTimeout(function() { | ||||||
|                      |                      | ||||||
|                     // Fire left button up event |                     // Fire button up event | ||||||
|                     guac_mouse.currentState.left = false; |                     guac_mouse.currentState[button] = false; | ||||||
|                     if (guac_mouse.onmouseup) |                     if (guac_mouse.onmouseup) | ||||||
|                         guac_mouse.onmouseup(guac_mouse.currentState); |                         guac_mouse.onmouseup(guac_mouse.currentState); | ||||||
|                      |                      | ||||||
| @@ -206,7 +216,10 @@ Guacamole.Mouse = function(element) { | |||||||
|  |  | ||||||
|     element.addEventListener("touchstart", function(e) { |     element.addEventListener("touchstart", function(e) { | ||||||
|  |  | ||||||
|         // Record initial touch location and time for single-touch movement |         // Track number of touches, but no more than three | ||||||
|  |         touch_count = Math.max(e.touches.length, 3); | ||||||
|  |  | ||||||
|  |         // Record initial touch location and time for touch movement | ||||||
|         // and tap gestures |         // and tap gestures | ||||||
|         if (e.touches.length == 1) { |         if (e.touches.length == 1) { | ||||||
|  |  | ||||||
| @@ -228,52 +241,45 @@ Guacamole.Mouse = function(element) { | |||||||
|             last_touch_time = new Date().getTime(); |             last_touch_time = new Date().getTime(); | ||||||
|             pixels_moved = 0; |             pixels_moved = 0; | ||||||
|  |  | ||||||
|             // TODO: Handle different buttons |  | ||||||
|  |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|     }, false); |     }, false); | ||||||
|  |  | ||||||
|     element.addEventListener("touchmove", function(e) { |     element.addEventListener("touchmove", function(e) { | ||||||
|  |  | ||||||
|         // Handle single-touch movement gesture (touchpad mouse move) |         cancelEvent(e); | ||||||
|         if (e.touches.length == 1) { |  | ||||||
|  |  | ||||||
|             cancelEvent(e); |         // Get change in touch location | ||||||
|  |         var touch = e.touches[0]; | ||||||
|  |         var delta_x = touch.screenX - last_touch_x; | ||||||
|  |         var delta_y = touch.screenY - last_touch_y; | ||||||
|  |  | ||||||
|             // Get change in touch location |         // Track pixels moved | ||||||
|             var touch = e.touches[0]; |         pixels_moved += Math.abs(delta_x) + Math.abs(delta_y); | ||||||
|             var delta_x = touch.screenX - last_touch_x; |  | ||||||
|             var delta_y = touch.screenY - last_touch_y; |  | ||||||
|  |  | ||||||
|             // Track pixels moved |         // Update mouse location | ||||||
|             pixels_moved += Math.abs(delta_x) + Math.abs(delta_y); |         guac_mouse.currentState.x += delta_x; | ||||||
|  |         guac_mouse.currentState.y += delta_y; | ||||||
|  |  | ||||||
|             // Update mouse location |         // Prevent mouse from leaving screen | ||||||
|             guac_mouse.currentState.x += delta_x; |  | ||||||
|             guac_mouse.currentState.y += delta_y; |  | ||||||
|  |  | ||||||
|             // Prevent mouse from leaving screen |         if (guac_mouse.currentState.x < 0) | ||||||
|  |             guac_mouse.currentState.x = 0; | ||||||
|  |         else if (guac_mouse.currentState.x >= element.offsetWidth) | ||||||
|  |             guac_mouse.currentState.x = element.offsetWidth - 1; | ||||||
|  |  | ||||||
|             if (guac_mouse.currentState.x < 0) |         if (guac_mouse.currentState.y < 0) | ||||||
|                 guac_mouse.currentState.x = 0; |             guac_mouse.currentState.y = 0; | ||||||
|             else if (guac_mouse.currentState.x >= element.offsetWidth) |         else if (guac_mouse.currentState.y >= element.offsetHeight) | ||||||
|                 guac_mouse.currentState.x = element.offsetWidth - 1; |             guac_mouse.currentState.y = element.offsetHeight - 1; | ||||||
|  |  | ||||||
|             if (guac_mouse.currentState.y < 0) |         // Fire movement event, if defined | ||||||
|                 guac_mouse.currentState.y = 0; |         if (guac_mouse.onmousemove) | ||||||
|             else if (guac_mouse.currentState.y >= element.offsetHeight) |             guac_mouse.onmousemove(guac_mouse.currentState); | ||||||
|                 guac_mouse.currentState.y = element.offsetHeight - 1; |  | ||||||
|  |  | ||||||
|             // Fire movement event, if defined |         // Update touch location | ||||||
|             if (guac_mouse.onmousemove) |         last_touch_x = touch.screenX; | ||||||
|                 guac_mouse.onmousemove(guac_mouse.currentState); |         last_touch_y = touch.screenY; | ||||||
|  |  | ||||||
|             // Update touch location |  | ||||||
|             last_touch_x = touch.screenX; |  | ||||||
|             last_touch_y = touch.screenY; |  | ||||||
|  |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|     }, false); |     }, false); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user