Do not use addressof in lookup macro. Update keysym state in event handler.
[libguac-client-rdp.git] / include / rdp_keymap.h
index 99dfb8a..85eb8f4 100644 (file)
@@ -58,13 +58,13 @@ typedef struct guac_rdp_scancode_map {
      * Null-terminated list of keysyms which must be down for this keysym
      * to be properly typed.
      */
-    int* set_keysyms;
+    const int* set_keysyms;
 
     /**
      * Null-terminated list of keysyms which must be up for this keysym
      * to be properly typed.
      */
-    int* clear_keysyms;
+    const int* clear_keysyms;
 
 } guac_rdp_scancode_map;
 
@@ -79,11 +79,16 @@ typedef struct guac_rdp_altcode_map {
     /**
      * The 4-digit Alt-code which types this keysym.
      */
-    char altcode[4];
+    const char* altcode;
 
 } guac_rdp_altcode_map;
 
 /**
+ * Mapping from keysym to current state
+ */
+typedef int guac_rdp_keysym_state_map[256][256];
+
+/**
  * Static mapping from keysyms to scancodes.
  */
 typedef guac_rdp_scancode_map guac_rdp_keysym_scancode_map[256][256];
@@ -106,7 +111,12 @@ extern const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode;
 /**
  * Simple macro for referencing the mapped value of an altcode or scancode for a given keysym.
  */
-#define GUAC_RDP_KEYSYM_LOOKUP(keysym_mapping, keysym) (&((keysym_mapping)[((keysym) & 0xFF00) >> 8][(keysym) & 0xFF]))
+#define GUAC_RDP_KEYSYM_LOOKUP(keysym_mapping, keysym) ((keysym_mapping)[((keysym) & 0xFF00) >> 8][(keysym) & 0xFF])
+
+/**
+ * Keysym string containing only the left "shift" key.
+ */
+extern const int GUAC_KEYSYMS_SHIFT[];
 
 #endif