Embed RDP keyboard layout within keymap (see ticket #126).

This commit is contained in:
Michael Jumper 2012-05-01 09:09:16 -07:00
parent 71b1a2e0cc
commit cb28ced171
3 changed files with 26 additions and 2 deletions

View File

@ -38,6 +38,8 @@
#ifndef _GUAC_RDP_RDP_KEYMAP_H #ifndef _GUAC_RDP_RDP_KEYMAP_H
#define _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 * Represents a keysym-to-scancode mapping for RDP, with extra information
* about the state of prerequisite keysyms. * about the state of prerequisite keysyms.
@ -96,6 +98,13 @@ struct guac_rdp_keymap {
*/ */
const guac_rdp_keysym_desc* mapping; 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;
}; };
/** /**

View File

@ -218,6 +218,7 @@ void __guac_rdp_client_load_keymap(guac_client* client,
rdp_guac_client_data* guac_client_data = rdp_guac_client_data* guac_client_data =
(rdp_guac_client_data*) client->data; (rdp_guac_client_data*) client->data;
/* Get mapping */ /* Get mapping */
const guac_rdp_keysym_desc* mapping = keymap->mapping; const guac_rdp_keysym_desc* mapping = keymap->mapping;
@ -253,6 +254,15 @@ int guac_client_init(guac_client* client, int argc, char** argv) {
int port = RDP_DEFAULT_PORT; int port = RDP_DEFAULT_PORT;
boolean bitmap_cache; 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) { if (argc < 8) {
guac_protocol_send_error(client->socket, guac_protocol_send_error(client->socket,
@ -381,7 +391,10 @@ int guac_client_init(guac_client* client, int argc, char** argv) {
((rdp_freerdp_context*) rdp_inst->context)->client = client; ((rdp_freerdp_context*) rdp_inst->context)->client = client;
/* Load keymap into 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 */ /* Connect to RDP server */
if (!freerdp_connect(rdp_inst)) { if (!freerdp_connect(rdp_inst)) {

View File

@ -37,6 +37,7 @@
* ***** END LICENSE BLOCK ***** */ * ***** END LICENSE BLOCK ***** */
#include <freerdp/input.h> #include <freerdp/input.h>
#include <freerdp/kbd/layouts.h>
#include "rdp_keymap.h" #include "rdp_keymap.h"
@ -429,7 +430,8 @@ const guac_rdp_keymap guac_rdp_keymap_en_us = {
.name = "en-us-qwerty", .name = "en-us-qwerty",
.parent = &guac_rdp_keymap_base, .parent = &guac_rdp_keymap_base,
.mapping = __guac_rdp_keymap_mapping .mapping = __guac_rdp_keymap_mapping,
.freerdp_keyboard_layout = KBD_US
}; };