From dded6644f875a6d3aaea8368025857178e196c8b Mon Sep 17 00:00:00 2001 From: Frode Langelo Date: Mon, 6 Jul 2015 12:33:43 -0700 Subject: [PATCH 1/3] GUAC-1244: Added timeout to mouse scroll events to catch and issue minor scrolling to remote --- .../src/main/webapp/modules/Mouse.js | 68 +++++++++++-------- 1 file changed, 41 insertions(+), 27 deletions(-) diff --git a/guacamole-common-js/src/main/webapp/modules/Mouse.js b/guacamole-common-js/src/main/webapp/modules/Mouse.js index e3487a77e..3ba8c1dc1 100644 --- a/guacamole-common-js/src/main/webapp/modules/Mouse.js +++ b/guacamole-common-js/src/main/webapp/modules/Mouse.js @@ -39,6 +39,12 @@ Guacamole.Mouse = function(element) { */ var guac_mouse = this; + /** + * Timeout before a single mouse scroll happens. + * @type Number + */ + var mouse_scroll_timeout = null; + /** * The number of mousemove events to require before re-enabling mouse * event handling after receiving a touch event. @@ -273,38 +279,46 @@ Guacamole.Mouse = function(element) { // Update overall delta scroll_delta += delta; - // Up - while (scroll_delta <= -guac_mouse.scrollThreshold) { + if (mouse_scroll_timeout == null) { + // send actual mouse scroll event after a threshold + mouse_scroll_timeout = window.setTimeout(function () { - if (guac_mouse.onmousedown) { - guac_mouse.currentState.up = true; - guac_mouse.onmousedown(guac_mouse.currentState); - } + // Up + if (scroll_delta < 0) { + do { + if (guac_mouse.onmousedown) { + guac_mouse.currentState.up = true; + guac_mouse.onmousedown(guac_mouse.currentState); + } - if (guac_mouse.onmouseup) { - guac_mouse.currentState.up = false; - guac_mouse.onmouseup(guac_mouse.currentState); - } + if (guac_mouse.onmouseup) { + guac_mouse.currentState.up = false; + guac_mouse.onmouseup(guac_mouse.currentState); + } - scroll_delta += guac_mouse.scrollThreshold; + scroll_delta += guac_mouse.scrollThreshold; + } while (scroll_delta < 0); + } + // Down + else if (scroll_delta > 0) { + do { + if (guac_mouse.onmousedown) { + guac_mouse.currentState.down = true; + guac_mouse.onmousedown(guac_mouse.currentState); + } - } - - // Down - while (scroll_delta >= guac_mouse.scrollThreshold) { - - if (guac_mouse.onmousedown) { - guac_mouse.currentState.down = true; - guac_mouse.onmousedown(guac_mouse.currentState); - } - - if (guac_mouse.onmouseup) { - guac_mouse.currentState.down = false; - guac_mouse.onmouseup(guac_mouse.currentState); - } - - scroll_delta -= guac_mouse.scrollThreshold; + if (guac_mouse.onmouseup) { + guac_mouse.currentState.down = false; + guac_mouse.onmouseup(guac_mouse.currentState); + } + scroll_delta -= guac_mouse.scrollThreshold; + } while (scroll_delta > 0); + } + scroll_delta = 0; + window.clearTimeout(mouse_scroll_timeout); + mouse_scroll_timeout = null; + }, 100); } cancelEvent(e); From 198951a3d9c81bed7815d72d61d72f5d17bb56a7 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 7 Jul 2015 19:41:21 -0700 Subject: [PATCH 2/3] GUAC-1244: Restore compliance with coding style. --- guacamole-common-js/src/main/webapp/modules/Mouse.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/guacamole-common-js/src/main/webapp/modules/Mouse.js b/guacamole-common-js/src/main/webapp/modules/Mouse.js index 3ba8c1dc1..646b97ca3 100644 --- a/guacamole-common-js/src/main/webapp/modules/Mouse.js +++ b/guacamole-common-js/src/main/webapp/modules/Mouse.js @@ -279,13 +279,15 @@ Guacamole.Mouse = function(element) { // Update overall delta scroll_delta += delta; - if (mouse_scroll_timeout == null) { - // send actual mouse scroll event after a threshold + if (mouse_scroll_timeout === null) { + + // Send actual mouse scroll event after a threshold mouse_scroll_timeout = window.setTimeout(function () { // Up if (scroll_delta < 0) { do { + if (guac_mouse.onmousedown) { guac_mouse.currentState.up = true; guac_mouse.onmousedown(guac_mouse.currentState); @@ -297,11 +299,14 @@ Guacamole.Mouse = function(element) { } scroll_delta += guac_mouse.scrollThreshold; + } while (scroll_delta < 0); } + // Down else if (scroll_delta > 0) { do { + if (guac_mouse.onmousedown) { guac_mouse.currentState.down = true; guac_mouse.onmousedown(guac_mouse.currentState); @@ -313,11 +318,14 @@ Guacamole.Mouse = function(element) { } scroll_delta -= guac_mouse.scrollThreshold; + } while (scroll_delta > 0); } + scroll_delta = 0; window.clearTimeout(mouse_scroll_timeout); mouse_scroll_timeout = null; + }, 100); } From 3d3149246af6fdb31db90b56d129a8b07981e40b Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 7 Jul 2015 20:33:02 -0700 Subject: [PATCH 3/3] GUAC-1244: Replace timeout with better line/page constants. Reset scroll_delta so the delta doesn't have to evenly divide into scrollThreshold. --- .../src/main/webapp/modules/Mouse.js | 94 +++++++++---------- 1 file changed, 44 insertions(+), 50 deletions(-) diff --git a/guacamole-common-js/src/main/webapp/modules/Mouse.js b/guacamole-common-js/src/main/webapp/modules/Mouse.js index 646b97ca3..b679aa24c 100644 --- a/guacamole-common-js/src/main/webapp/modules/Mouse.js +++ b/guacamole-common-js/src/main/webapp/modules/Mouse.js @@ -39,12 +39,6 @@ Guacamole.Mouse = function(element) { */ var guac_mouse = this; - /** - * Timeout before a single mouse scroll happens. - * @type Number - */ - var mouse_scroll_timeout = null; - /** * The number of mousemove events to require before re-enabling mouse * event handling after receiving a touch event. @@ -55,17 +49,17 @@ Guacamole.Mouse = function(element) { * The minimum amount of pixels scrolled required for a single scroll button * click. */ - this.scrollThreshold = 120; + this.scrollThreshold = 53; /** * The number of pixels to scroll per line. */ - this.PIXELS_PER_LINE = 40; + this.PIXELS_PER_LINE = 18; /** * The number of pixels to scroll per page. */ - this.PIXELS_PER_PAGE = 640; + this.PIXELS_PER_PAGE = this.PIXELS_PER_LINE * 16; /** * The current mouse state. The properties of this state are updated when @@ -279,54 +273,54 @@ Guacamole.Mouse = function(element) { // Update overall delta scroll_delta += delta; - if (mouse_scroll_timeout === null) { + // Up + if (scroll_delta <= -guac_mouse.scrollThreshold) { - // Send actual mouse scroll event after a threshold - mouse_scroll_timeout = window.setTimeout(function () { + // Repeatedly click the up button until insufficient delta remains + do { - // Up - if (scroll_delta < 0) { - do { - - if (guac_mouse.onmousedown) { - guac_mouse.currentState.up = true; - guac_mouse.onmousedown(guac_mouse.currentState); - } - - if (guac_mouse.onmouseup) { - guac_mouse.currentState.up = false; - guac_mouse.onmouseup(guac_mouse.currentState); - } - - scroll_delta += guac_mouse.scrollThreshold; - - } while (scroll_delta < 0); + if (guac_mouse.onmousedown) { + guac_mouse.currentState.up = true; + guac_mouse.onmousedown(guac_mouse.currentState); } - // Down - else if (scroll_delta > 0) { - do { - - if (guac_mouse.onmousedown) { - guac_mouse.currentState.down = true; - guac_mouse.onmousedown(guac_mouse.currentState); - } - - if (guac_mouse.onmouseup) { - guac_mouse.currentState.down = false; - guac_mouse.onmouseup(guac_mouse.currentState); - } - - scroll_delta -= guac_mouse.scrollThreshold; - - } while (scroll_delta > 0); + if (guac_mouse.onmouseup) { + guac_mouse.currentState.up = false; + guac_mouse.onmouseup(guac_mouse.currentState); } - scroll_delta = 0; - window.clearTimeout(mouse_scroll_timeout); - mouse_scroll_timeout = null; + scroll_delta += guac_mouse.scrollThreshold; + + } while (scroll_delta <= -guac_mouse.scrollThreshold); + + // Reset delta + scroll_delta = 0; + + } + + // Down + if (scroll_delta >= guac_mouse.scrollThreshold) { + + // Repeatedly click the down button until insufficient delta remains + do { + + if (guac_mouse.onmousedown) { + guac_mouse.currentState.down = true; + guac_mouse.onmousedown(guac_mouse.currentState); + } + + if (guac_mouse.onmouseup) { + guac_mouse.currentState.down = false; + guac_mouse.onmouseup(guac_mouse.currentState); + } + + scroll_delta -= guac_mouse.scrollThreshold; + + } while (scroll_delta >= guac_mouse.scrollThreshold); + + // Reset delta + scroll_delta = 0; - }, 100); } cancelEvent(e);