-
#ifndef _GUAC_UNICODE_CONVTABLE_H
#define _GUAC_UNICODE_CONVTABLE_H
int keysym2uni(int keysym);
/* Keysym->unicode Exceptions tables */
-int keysym2uni_base[65536];// = { 0x0 };
-int keysym2uni_ext0[4096];// = { 0x0 };
-int keysym2uni_ext1[4096];// = { 0x0 };
-int keysym2uni_ext2[4096];// = { 0x0 };
-
-
+int keysym2uni_base[65536];
+int keysym2uni_ext0[4096];
+int keysym2uni_ext1[4096];
+int keysym2uni_ext2[4096];
/* Fill global tables, if needed (only on first call) */
void init_unicode_tables();
/* Send actual key */
rdp_inst->input->KeyboardEvent(
- rdp_inst->input,
+ rdp_inst->input,
keysym_desc->flags
- | (pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE),
- keysym_desc->scancode);
+ | (pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE),
+ keysym_desc->scancode);
- guac_client_log_info(client, "Base flags are %d", keysym_desc->flags);
+ guac_client_log_info(client, "Base flags are %d", keysym_desc->flags);
/* If defined, release any keys that were originally released */
if (keysym_desc->set_keysyms != NULL)
__guac_rdp_update_keysyms(client, keysym_desc->clear_keysyms, 1, 1);
-
- /* /\* If undefined but has Alt-code, use Alt-Code *\/ */
- /* else if (keysym <= 0xFF) { */
-
- /* /\* NOTE: The Alt-codes are conveniently identical to keysyms. *\/ */
-
- /* /\* Only send Alt-code on press *\/ */
- /* if (pressed) */
- /* __guac_rdp_send_altcode(client, keysym); */
-
- /* } */
-
- /* /\* If no defined Alt-code, log warning *\/ */
- /* else */
- /* guac_client_log_info(client, "unmapped keysym: 0x%x", keysym); */
-
} else {
- /* Fall back to unicode events */
+ /* Fall back to unicode events if undefined inside current keymap */
int unicode_code = keysym2uni(keysym);
guac_client_log_info(client, "Translated keysym:0x%x to unicode:0x%x (pressed=%d flag=%d)",
keysym, unicode_code, pressed, pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE);
/* LibfreeRDP seems not to take into account the DOWN/RELEASE flags.
- * So we send only the key once.
+ * So we send only on of the two key events.
*/
if (pressed) {
rdp_inst->input->UnicodeKeyboardEvent(
rdp_inst->input,
- 0,//pressed ? KBD_FLAGS_DOW : KBD_FLAGS_RELEASE,
+ //pressed ? KBD_FLAGS_DOW : KBD_FLAGS_RELEASE, <- not
+ // taken into account
+ 0,
unicode_code);
} else {