From 3d6a3aaa2a8bafa40b545c2dd9a5047f401601e2 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 17 Dec 2017 21:56:28 -0800 Subject: [PATCH] GUACAMOLE-352: Rely on isComposing property of InputEvent to determine whether the event should be ignored. --- .../src/main/webapp/modules/Keyboard.js | 50 +------------------ 1 file changed, 2 insertions(+), 48 deletions(-) diff --git a/guacamole-common-js/src/main/webapp/modules/Keyboard.js b/guacamole-common-js/src/main/webapp/modules/Keyboard.js index 1df14e20f..a11050ff9 100644 --- a/guacamole-common-js/src/main/webapp/modules/Keyboard.js +++ b/guacamole-common-js/src/main/webapp/modules/Keyboard.js @@ -1207,39 +1207,6 @@ Guacamole.Keyboard = function(element) { }, true); - /** - * Returns whether the given string is fully composed. A string is fully - * composed if it does not end with combining characters. - * - * @private - * @param {String} str - * The string to test. - * - * @returns {Boolean} - * true of the string is fully composed, false otherwise. - */ - var isComposed = function isComposed(str) { - - // The empty string is fully composed - if (!str) - return true; - - // Test whether the last character is within the "Combining - // Diacritical Marks" Unicode block (U+0300 through U+036F) - var lastCodepoint = str.charCodeAt(str.length - 1); - return !(lastCodepoint >= 0x0300 && lastCodepoint <= 0x036F); - - }; - - /** - * The in-progress composition, if any, such as the intermediate result of - * pressing a series of dead keys. - * - * @private - * @type {String} - */ - var inProgressComposition = ''; - /** * Handles the given "input" event, typing the data within the input text. * If the event is complete (text is provided), handling of "compositionend" @@ -1254,13 +1221,8 @@ Guacamole.Keyboard = function(element) { // Only intercept if handler set if (!guac_keyboard.onkeydown && !guac_keyboard.onkeyup) return; - // Ignore input events which represent the in-progress composition, - // as reported by composition events - if (e.data === inProgressComposition) - return; - // Type all content written - if (e.data && isComposed(e.data)) { + if (e.data && !e.isComposing) { element.removeEventListener("compositionend", handleComposition, false); guac_keyboard.type(e.data); } @@ -1283,7 +1245,7 @@ Guacamole.Keyboard = function(element) { if (!guac_keyboard.onkeydown && !guac_keyboard.onkeyup) return; // Type all content written - if (e.data && isComposed(e.data)) { + if (e.data) { element.removeEventListener("input", handleInput, false); guac_keyboard.type(e.data); } @@ -1294,14 +1256,6 @@ Guacamole.Keyboard = function(element) { element.addEventListener("input", handleInput, false); element.addEventListener("compositionend", handleComposition, false); - element.addEventListener("compositionstart", function resetComposition() { - inProgressComposition = ''; - }, false); - - element.addEventListener("compositionupdate", function updateComposition(e) { - inProgressComposition = e.data; - }, false); - }; /**