xfreerdp: add -k keyboard layout option
authorMarc-André Moreau <marcandre.moreau@gmail.com>
Fri, 26 Aug 2011 01:35:51 +0000 (21:35 -0400)
committerMarc-André Moreau <marcandre.moreau@gmail.com>
Fri, 26 Aug 2011 01:35:51 +0000 (21:35 -0400)
client/X11/xf_keyboard.c
libfreerdp-core/capabilities.c
libfreerdp-utils/args.c

index b6831ba..e767d26 100644 (file)
@@ -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;
 }
index 3750479..daa697c 100644 (file)
@@ -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)
index 2a4c61a..32d392c 100644 (file)
@@ -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++;