cosmetic and comments for guacamole integration
[libguac-client-rdp.git] / include / rdp_keymap.h
index 85eb8f4..63460e1 100644 (file)
 #ifndef _GUAC_RDP_RDP_KEYMAP_H
 #define _GUAC_RDP_RDP_KEYMAP_H
 
+#include <freerdp/locale/keyboard.h>
+
 /**
  * Represents a keysym-to-scancode mapping for RDP, with extra information
  * about the state of prerequisite keysyms.
  */
-typedef struct guac_rdp_scancode_map {
+typedef struct guac_rdp_keysym_desc {
+
+    /**
+     * The keysym being mapped.
+     */
+    int keysym;
 
     /**
      * The scancode this keysym maps to.
@@ -50,7 +57,7 @@ typedef struct guac_rdp_scancode_map {
     int scancode;
 
     /**
-     * Required RDP-specific flags
+     * Required RDP-specific flags.
      */
     int flags;
 
@@ -66,47 +73,59 @@ typedef struct guac_rdp_scancode_map {
      */
     const int* clear_keysyms;
 
-} guac_rdp_scancode_map;
+} guac_rdp_keysym_desc;
 
 /**
- * Represents the Alt-code which types a given keysym. This is used as a
- * fallback mapping, should a particular keymap not support a certain keysym.
- *
- * See: http://en.wikipedia.org/wiki/Alt_code
+ * Hierarchical keysym mapping
  */
-typedef struct guac_rdp_altcode_map {
+typedef struct guac_rdp_keymap guac_rdp_keymap;
+struct guac_rdp_keymap {
 
     /**
-     * The 4-digit Alt-code which types this keysym.
+     * The parent mapping this map will inherit its initial mapping from.
+     * Any other mapping information will add to or override the mapping
+     * inherited from the parent.
      */
-    const char* altcode;
+    const guac_rdp_keymap* parent;
 
-} guac_rdp_altcode_map;
+    /**
+     * Descriptive name of this keymap
+     */
+    const char* name;
 
-/**
- * Mapping from keysym to current state
- */
-typedef int guac_rdp_keysym_state_map[256][256];
+    /**
+     * Null-terminated array of scancode mappings.
+     */
+    const guac_rdp_keysym_desc* mapping;
+
+    /**
+     * FreeRDP keyboard layout associated with this
+     * keymap. If this keymap is selected, this layout
+     * will be requested from the server.
+     */
+    const uint32 freerdp_keyboard_layout;
+
+};
 
 /**
  * Static mapping from keysyms to scancodes.
  */
-typedef guac_rdp_scancode_map guac_rdp_keysym_scancode_map[256][256];
+typedef guac_rdp_keysym_desc guac_rdp_static_keymap[256][256];
 
 /**
- * Static mapping from keysyms to Alt-codes.
+ * Mapping from keysym to current state
  */
-typedef guac_rdp_altcode_map guac_rdp_keysym_altcode_map[256][256];
+typedef int guac_rdp_keysym_state_map[256][256];
 
 /**
  * Map of X11 keysyms to RDP scancodes (US English).
  */
-extern const guac_rdp_keysym_scancode_map guac_rdp_keysym_scancode_en_us;
+extern const guac_rdp_keymap guac_rdp_keymap_en_us;
 
 /**
- * Map of X11 keysyms to Windows Alt-codes.
+ * Map of X11 keysyms to RDP scancodes (common non-printable keys).
  */
-extern const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode;
+extern const guac_rdp_keymap guac_rdp_keymap_base;
 
 /**
  * Simple macro for referencing the mapped value of an altcode or scancode for a given keysym.
@@ -118,5 +137,35 @@ extern const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode;
  */
 extern const int GUAC_KEYSYMS_SHIFT[];
 
+/**
+ * Keysym string containing both "shift" keys.
+ */
+extern const int GUAC_KEYSYMS_ALL_SHIFT[];
+
+/**
+ * Keysym string containing only the left "ctrl" key.
+ */
+extern const int GUAC_KEYSYMS_CTRL[];
+
+/**
+ * Keysym string containing both "ctrl" keys.
+ */
+extern const int GUAC_KEYSYMS_ALL_CTRL[];
+
+/**
+ * Keysym string containing only the left "alt" key.
+ */
+extern const int GUAC_KEYSYMS_ALT[];
+
+/**
+ * Keysym string containing both "alt" keys.
+ */
+extern const int GUAC_KEYSYMS_ALL_ALT[];
+
+/**
+ * Keysym string containing all modifier keys.
+ */
+extern const int GUAC_KEYSYMS_ALL_MODIFIERS[];
+
 #endif