This commit is contained in:
Eisuke Kuwahata 2025-06-17 07:02:01 +02:00 committed by GitHub
commit a7190e8f5b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 71 additions and 10 deletions

View File

@ -177,11 +177,29 @@ struct guac_rdp_keymap {
const guac_rdp_keysym_desc* mapping;
/**
* FreeRDP keyboard layout associated with this
* Keyboard layout associated with this
* keymap. If this keymap is selected, this layout
* will be requested from the server.
*/
const UINT32 freerdp_keyboard_layout;
const UINT32 keyboard_layout;
/**
* Keyboard type definition.
* See https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getkeyboardtype
*/
const UINT32 keyboard_type;
/**
* Keyboard subtype definition.
* See https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getkeyboardtype
*/
const UINT32 keyboard_subtype;
/**
* Keyboard number of function keys.
* See https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getkeyboardtype
*/
const UINT32 keyboard_function_key;
};

View File

@ -55,7 +55,10 @@ for my $filename (@ARGV) {
my $content = "";
my $parent = "";
my $layout_name = "";
my $freerdp = "";
my $keyboard_layout = "";
my $keyboard_type = "";
my $keyboard_subtype = "";
my $keyboard_function_key = "";
# Parse file
open INPUT, '<', "$filename";
@ -77,10 +80,26 @@ for my $filename (@ARGV) {
$parent = keymap_symbol($name);
}
# FreeRDP equiv
# FreeRDP equiv keyboard layout
elsif ((my $name) = m/^\s*freerdp\s+"(.*)"\s*(?:#.*)?$/) {
$freerdp = $name;
$keyboard_layout = $name;
}
# keyboard type
elsif ((my $name) = m/^\s*keyboard_type\s+"(.*)"\s*(?:#.*)?$/) {
$keyboard_type = $name;
}
# keyboard subtype
elsif ((my $name) = m/^\s*keyboard_subtype\s+"(.*)"\s*(?:#.*)?$/) {
$keyboard_subtype = $name;
}
# keyboard function key
elsif ((my $name) = m/^\s*keyboard_function_key\s+"(.*)"\s*(?:#.*)?$/) {
$keyboard_function_key = $name;
}
# Map
elsif ((my $range, my $onto) =
@ -241,9 +260,21 @@ for my $filename (@ARGV) {
print OUTPUT " .parent = &$parent,\n";
}
# FreeRDP layout (if any)
if ($freerdp) {
print OUTPUT " .freerdp_keyboard_layout = $freerdp,\n";
# Keyboard layout (if any)
if ($keyboard_layout) {
print OUTPUT " .keyboard_layout = $keyboard_layout,\n";
}
# Keyboard type (if any)
if ($keyboard_type) {
print OUTPUT " .keyboard_type = $keyboard_type,\n";
}
# Keyboard subtype (if any)
if ($keyboard_subtype) {
print OUTPUT " .keyboard_subtype = $keyboard_subtype,\n";
}
# Keyboard funtion keys (if any)
if ($keyboard_function_key) {
print OUTPUT " .keyboard_function_key = $keyboard_function_key,\n";
}
# Desc footer

View File

@ -19,7 +19,10 @@
parent "base"
name "ja-jp-qwerty"
freerdp "KBD_JAPANESE"
keyboard_layout "KBD_JAPANESE"
keyboard_type "KBD_TYPE_JAPANESE"
keyboard_subtype "2"
keyboard_function_key "12"
map -shift 0x02..0x0D 0x7D ~ "1234567890-^\"
map -shift 0x10..0x1B ~ "qwertyuiop@["

View File

@ -1783,7 +1783,16 @@ void guac_rdp_push_settings(guac_client* client,
rdp_settings->DesktopWidth = guac_settings->width;
rdp_settings->DesktopHeight = guac_settings->height;
rdp_settings->AlternateShell = guac_strdup(guac_settings->initial_program);
rdp_settings->KeyboardLayout = guac_settings->server_layout->freerdp_keyboard_layout;
rdp_settings->KeyboardLayout = guac_settings->server_layout->keyboard_layout;
if (guac_settings->server_layout->keyboard_type != 0) {
rdp_settings->KeyboardType = guac_settings->server_layout->keyboard_type;
}
if (guac_settings->server_layout->keyboard_subtype != 0) {
rdp_settings->KeyboardSubType = guac_settings->server_layout->keyboard_subtype;
}
if (guac_settings->server_layout->keyboard_function_key != 0) {
rdp_settings->KeyboardFunctionKey = guac_settings->server_layout->keyboard_function_key;
}
/* Performance flags */
/* Explicitly set flag value */