From 56ca4e9aa53ca43d9a130274e998025447f6088c Mon Sep 17 00:00:00 2001 From: James Muehlner Date: Tue, 30 Jan 2024 20:19:00 +0000 Subject: [PATCH] GUACAMOLE-1904: Broadcast events for mouse/touch events in client. --- .../src/app/client/directives/guacClient.js | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/guacamole/src/main/frontend/src/app/client/directives/guacClient.js b/guacamole/src/main/frontend/src/app/client/directives/guacClient.js index fb88f99f5e..18a1b080c5 100644 --- a/guacamole/src/main/frontend/src/app/client/directives/guacClient.js +++ b/guacamole/src/main/frontend/src/app/client/directives/guacClient.js @@ -54,6 +54,7 @@ angular.module('client').directive('guacClient', [function guacClient() { const ManagedClient = $injector.get('ManagedClient'); // Required services + const $rootScope = $injector.get('$rootScope'); const $window = $injector.get('$window'); /** @@ -197,6 +198,28 @@ angular.module('client').directive('guacClient', [function guacClient() { }; + /** + * Return the name of the angular event associated with the provided + * mouse event. + * + * @param {Guacamole.Mouse.MouseEvent} event + * The mouse event to determine an angular event name for. + * + * @returns + * The name of the angular event associated with the provided + * mouse event. + */ + const getMouseEventName = event => { + switch (event.type) { + case 'mousedown': + return 'guacClientMouseDown'; + case 'mouseup': + return 'guacClientMouseUp'; + default: + return 'guacClientMouseMove'; + } + }; + /** * Handles a mouse event originating from the user's actual mouse. * This differs from handleEmulatedMouseEvent() in that the @@ -220,6 +243,9 @@ angular.module('client').directive('guacClient', [function guacClient() { display.showCursor(!localCursor); client.sendMouseState(event.state, true); + // Broadcast the mouse event + $rootScope.$broadcast(getMouseEventName(event), event, client); + }; /** @@ -248,6 +274,31 @@ angular.module('client').directive('guacClient', [function guacClient() { scrollToMouse(event.state); client.sendMouseState(event.state, true); + // Broadcast the mouse event + $rootScope.$broadcast(getMouseEventName(event), event, client); + + }; + + /** + * Return the name of the angular event associated with the provided + * touch event. + * + * @param {Guacamole.Touch.TouchEvent} event + * The touch event to determine an angular event name for. + * + * @returns + * The name of the angular event associated with the provided + * touch event. + */ + const getTouchEventName = event => { + switch (event.type) { + case 'touchstart': + return 'guacClientTouchStart'; + case 'touchend': + return 'guacClientTouchEnd'; + default: + return 'guacClientTouchMove'; + } }; /** @@ -269,6 +320,9 @@ angular.module('client').directive('guacClient', [function guacClient() { display.showCursor(false); client.sendTouchState(event.state, true); + // Broadcast the touch event + $rootScope.$broadcast(getTouchEventName(event), event, client); + }; // Attach any given managed client