mike-jumper commented on code in PR #895:
URL: https://github.com/apache/guacamole-client/pull/895#discussion_r1242850582


##########
guacamole-common-js/src/main/webapp/modules/Keyboard.js:
##########
@@ -1362,6 +1362,15 @@ Guacamole.Keyboard = function Keyboard(element) {
 
             e.preventDefault();
 
+            // If unreliable caps lock was pressed and event was not marked, 
then
+            // we need to pretend that this is a keydown event because we 
obviously
+            // did not receive it (issue on macos with chrome)
+            if (e.keyCode == 20 && quirks.capsLockKeyupUnreliable) {
+                eventLog.push(new KeydownEvent(e));
+                interpret_events();
+                return;
+            }

Review Comment:
   > If unreliable caps lock was pressed and event was not marked, then we need 
to pretend that this is a keydown event because we obviously did not receive it 
(issue on macos with chrome)
   
   This doesn't look correct:
   
   1. It's unclear what is meant by "event was not marked", but this doesn't 
appear to align with the logic in the `if` that follows.
   
   2. From the description in the PR:
   
      > Chrome on MacOS sends only a single `keydown` event when turning on 
caps-lock, and only a single `keyup` event when turning off caps-lock.
   
      That would mean that we should send our own keydown for Caps Lock if we 
receive a keyup without a corresponding keydown.
   
   3. The intent of the structure of `eventLog` and these various event types 
is to prevent having too much logic directly within the JS event handlers. Such 
logic should instead be in the portion of the keyboard code that 
retrospectively inspects the contents of `eventLog` to produce its final 
interpretation.
   
   As the keyboard already tracks modifier states, attempting to synchronize 
them whenever they change externally, I think a better approach would be to:
   
   1. Track and synchronize lock states in the same way.
   2. Synchronize lock states when inspecting the lone `KeyUpEvent` event in 
the `eventLog`.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@guacamole.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to