From 6b732af29b8a651dd5d28cd01c507c1173958c4f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marc-Andr=C3=A9=20Moreau?= Date: Thu, 25 Aug 2011 21:35:51 -0400 Subject: [PATCH] xfreerdp: add -k keyboard layout option --- client/X11/xf_keyboard.c | 1 + libfreerdp-core/capabilities.c | 20 ++++++++++++++++---- libfreerdp-utils/args.c | 10 ++++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/client/X11/xf_keyboard.c b/client/X11/xf_keyboard.c index b6831ba..e767d26 100644 --- a/client/X11/xf_keyboard.c +++ b/client/X11/xf_keyboard.c @@ -32,6 +32,7 @@ void xf_kbd_init(xfInfo* xfi) { memset(xfi->pressed_keys, 0, 256 * sizeof(boolean)); + xfi->keyboard_layout_id = xfi->instance->settings->kbd_layout; xfi->keyboard_layout_id = freerdp_kbd_init(xfi->display, xfi->keyboard_layout_id); xfi->instance->settings->kbd_layout = xfi->keyboard_layout_id; } diff --git a/libfreerdp-core/capabilities.c b/libfreerdp-core/capabilities.c index 3750479..daa697c 100644 --- a/libfreerdp-core/capabilities.c +++ b/libfreerdp-core/capabilities.c @@ -613,10 +613,22 @@ void rdp_read_input_capability_set(STREAM* s, rdpSettings* settings) stream_read_uint16(s, inputFlags); /* inputFlags (2 bytes) */ stream_seek_uint16(s); /* pad2OctetsA (2 bytes) */ - stream_read_uint32(s, settings->kbd_layout); /* keyboardLayout (4 bytes) */ - stream_read_uint32(s, settings->kbd_type); /* keyboardType (4 bytes) */ - stream_read_uint32(s, settings->kbd_subtype); /* keyboardSubType (4 bytes) */ - stream_read_uint32(s, settings->kbd_fn_keys); /* keyboardFunctionKeys (4 bytes) */ + + if (settings->server_mode) + { + stream_read_uint32(s, settings->kbd_layout); /* keyboardLayout (4 bytes) */ + stream_read_uint32(s, settings->kbd_type); /* keyboardType (4 bytes) */ + stream_read_uint32(s, settings->kbd_subtype); /* keyboardSubType (4 bytes) */ + stream_read_uint32(s, settings->kbd_fn_keys); /* keyboardFunctionKeys (4 bytes) */ + } + else + { + stream_seek_uint32(s); /* keyboardLayout (4 bytes) */ + stream_seek_uint32(s); /* keyboardType (4 bytes) */ + stream_seek_uint32(s); /* keyboardSubType (4 bytes) */ + stream_seek_uint32(s); /* keyboardFunctionKeys (4 bytes) */ + } + stream_seek(s, 64); /* imeFileName (64 bytes) */ if ((inputFlags & INPUT_FLAG_FASTPATH_INPUT) == 0 && (inputFlags & INPUT_FLAG_FASTPATH_INPUT2) == 0) diff --git a/libfreerdp-utils/args.c b/libfreerdp-utils/args.c index 2a4c61a..32d392c 100644 --- a/libfreerdp-utils/args.c +++ b/libfreerdp-utils/args.c @@ -165,6 +165,16 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv, } settings->port = atoi(argv[index]); } + else if (strcmp("-k", argv[index]) == 0) + { + index++; + if (index == argc) + { + printf("missing keyboard layout id\n"); + return -1; + } + sscanf(argv[index], "%X", &(settings->kbd_layout)); + } else if (strcmp("-n", argv[index]) == 0) { index++; -- 2.7.4