src/Keyboard.js
function release_simulated_altgr(keysym) {

        // Both Ctrl+Alt must be pressed if simulated AltGr is in use
        if (!guac_keyboard.modifiers.ctrl || !guac_keyboard.modifiers.alt)
            return;

        // Assume [A-Z] never require AltGr
        if (keysym >= 0x0041 && keysym <= 0x005A)
            return;

        // Assume [a-z] never require AltGr
        if (keysym >= 0x0061 && keysym <= 0x007A)
            return;

        // Release Ctrl+Alt if the keysym is printable
        if (keysym <= 0xFF || (keysym & 0xFF000000) === 0x01000000) {
            guac_keyboard.release(0xFFE3); // Left ctrl 
            guac_keyboard.release(0xFFE4); // Right ctrl 
            guac_keyboard.release(0xFFE9); // Left alt
            guac_keyboard.release(0xFFEA); // Right alt
        }

    }
function release_simulated_altgr(keysym) {

        // Both Ctrl+Alt must be pressed if simulated AltGr is in use
        if (!guac_keyboard.modifiers.ctrl || !guac_keyboard.modifiers.alt)
            return;

        // Assume [A-Z] never require AltGr
        if (keysym >= 0x0041 && keysym <= 0x005A)
            return;

        // Assume [a-z] never require AltGr
        if (keysym >= 0x0061 && keysym <= 0x007A)
            return;

        // Release Ctrl+Alt if the keysym is printable
        if (keysym <= 0xFF || (keysym & 0xFF000000) === 0x01000000) {
            guac_keyboard.release(0xFFE3); // Left ctrl 
            guac_keyboard.release(0xFFE4); // Right ctrl 
            guac_keyboard.release(0xFFE9); // Left alt
            guac_keyboard.release(0xFFEA); // Right alt
        }

    }
function release_simulated_altgr ( keysym ) { // Both Ctrl+Alt must be pressed if simulated AltGr is in use if ( ! guac_keyboard . modifiers . ctrl || ! guac_keyboard . modifiers . alt ) return ; // Assume [A-Z] never require AltGr if ( keysym >= 0x0041 && keysym <= 0x005A ) return ; // Assume [a-z] never require AltGr if ( keysym >= 0x0061 && keysym <= 0x007A ) return ; // Release Ctrl+Alt if the keysym is printable if ( keysym <= 0xFF || ( keysym & 0xFF000000 ) === 0x01000000 ) { guac_keyboard . release ( 0xFFE3 ) ; // Left ctrl  guac_keyboard . release ( 0xFFE4 ) ; // Right ctrl  guac_keyboard . release ( 0xFFE9 ) ; // Left alt guac_keyboard . release ( 0xFFEA ) ; // Right alt } }
Releases Ctrl+Alt, if both are currently pressed and the given keysym
looks like a key that may require AltGr.

@private
@param {Number} keysym The key that was just pressed.
Releases Ctrl + Alt if both are currently pressed and the given keysym looks like a key that may require AltGr .