#ifndef _GUAC_RDP_RDP_KEYMAP_H
#define _GUAC_RDP_RDP_KEYMAP_H
+#include <freerdp/kbd/layouts.h>
+
/**
* Represents a keysym-to-scancode mapping for RDP, with extra information
* about the state of prerequisite keysyms.
*/
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;
+
};
/**
rdp_guac_client_data* guac_client_data =
(rdp_guac_client_data*) client->data;
+
/* Get mapping */
const guac_rdp_keysym_desc* mapping = keymap->mapping;
int port = RDP_DEFAULT_PORT;
boolean bitmap_cache;
+ /**
+ * Selected server-side keymap. Client will be assumed to also use this
+ * keymap. Keys will be sent to server based on client input on a
+ * best-effort basis.
+ *
+ * Currently hard-coded to en-us-qwerty.
+ */
+ const guac_rdp_keymap* chosen_keymap = &guac_rdp_keymap_en_us;
+
if (argc < 8) {
guac_protocol_send_error(client->socket,
((rdp_freerdp_context*) rdp_inst->context)->client = client;
/* Load keymap into client */
- __guac_rdp_client_load_keymap(client, &guac_rdp_keymap_en_us);
+ __guac_rdp_client_load_keymap(client, chosen_keymap);
+
+ /* Set server-side keymap */
+ settings->kbd_layout = chosen_keymap->freerdp_keyboard_layout;
/* Connect to RDP server */
if (!freerdp_connect(rdp_inst)) {
* ***** END LICENSE BLOCK ***** */
#include <freerdp/input.h>
+#include <freerdp/kbd/layouts.h>
#include "rdp_keymap.h"
.name = "en-us-qwerty",
.parent = &guac_rdp_keymap_base,
- .mapping = __guac_rdp_keymap_mapping
+ .mapping = __guac_rdp_keymap_mapping,
+ .freerdp_keyboard_layout = KBD_US
};