Embed RDP keyboard layout within keymap (see ticket #126).
This commit is contained in:
parent
71b1a2e0cc
commit
cb28ced171
@ -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;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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)) {
|
||||||
|
@ -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
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user