Skip to content
This repository was archived by the owner on Jul 5, 2022. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions dfb/dfb_event.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ int
dfb_process_event(rdpInst * inst, DFBEvent * event)
{
int keycode;
int hardwarecode;
int cursor_x;
int cursor_y;
int device_flags;
Expand Down Expand Up @@ -78,12 +79,14 @@ dfb_process_event(rdpInst * inst, DFBEvent * event)

case DIET_KEYPRESS:
keycode = input_event->key_id - DIKI_UNKNOWN;
dfb_kb_send_key(inst, 0, keycode);
hardwarecode = input_event->key_code;
dfb_kb_send_key(inst, 0, keycode, hardwarecode);
break;

case DIET_KEYRELEASE:
keycode = input_event->key_id - DIKI_UNKNOWN;
dfb_kb_send_key(inst, 1, keycode);
hardwarecode = input_event->key_code;
dfb_kb_send_key(inst, 1, keycode, hardwarecode);
break;

case DIET_UNKNOWN:
Expand Down
27 changes: 25 additions & 2 deletions dfb/dfb_keyboard.c
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ dfb_kb_init(void)

keymap[DIKI_LESS_SIGN - DIKI_UNKNOWN] = 0;

keymap[DIKI_KP_DECIMAL - DIKI_UNKNOWN] = VK_DECIMAL;
keymap[DIKI_KP_0 - DIKI_UNKNOWN] = VK_NUMPAD0;
keymap[DIKI_KP_1 - DIKI_UNKNOWN] = VK_NUMPAD1;
keymap[DIKI_KP_2 - DIKI_UNKNOWN] = VK_NUMPAD2;
Expand All @@ -153,10 +154,32 @@ dfb_kb_init(void)
}

void
dfb_kb_send_key(rdpInst * inst, RD_BOOL up, uint8 keycode)
dfb_kb_send_key(rdpInst * inst, RD_BOOL up, uint8 keycode, uint8 hardwarecode)
{
RD_BOOL extended;
uint8 scancode = freerdp_kbd_get_scancode_by_virtualkey(keymap[keycode], &extended);
uint8 scancode;

if (keycode)
{
scancode = freerdp_kbd_get_scancode_by_virtualkey(keymap[keycode], &extended);
}
else
{
switch(hardwarecode)
{
case 0x7A:
scancode = freerdp_kbd_get_scancode_by_virtualkey(VK_HANGUL, &extended);
break;

case 0x7B:
scancode = freerdp_kbd_get_scancode_by_virtualkey(VK_HANJA, &extended);
break;

default:
return;
}
}

inst->rdp_send_input_scancode(inst, up, extended, scancode);
}

Expand Down
2 changes: 1 addition & 1 deletion dfb/dfb_keyboard.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
void
dfb_kb_init(void);
void
dfb_kb_send_key(rdpInst * inst, RD_BOOL up, uint8 keycode);
dfb_kb_send_key(rdpInst * inst, RD_BOOL up, uint8 keycode, uint8 hardwarecode);
int
dfb_kb_get_toggle_keys_state(rdpInst * inst);
void
Expand Down
4 changes: 2 additions & 2 deletions libfreerdp-kbd/keyboard.h
Original file line number Diff line number Diff line change
Expand Up @@ -344,11 +344,11 @@ static const virtualKey virtualKeyboard[256 + 2] =
{ 0x38, 0, "VK_MENU" , "LALT" },
{ 0x46, 1, "VK_PAUSE" , "PAUS" },
{ 0x3A, 0, "VK_CAPITAL" , "CAPS" },
{ 0x00, 0, "VK_KANA / VK_HANGUL" , NULL },
{ 0xF2, 0, "VK_KANA / VK_HANGUL" , NULL },
{ 0x00, 0, "" , NULL },
{ 0x00, 0, "VK_JUNJA" , NULL },
{ 0x00, 0, "VK_FINAL" , NULL },
{ 0x00, 0, "VK_HANJA / VK_KANJI" , NULL },
{ 0xF1, 0, "VK_HANJA / VK_KANJI" , NULL },
{ 0x00, 0, "" , NULL },
{ 0x01, 0, "VK_ESCAPE" , "ESC" },
{ 0x00, 0, "VK_CONVERT" , NULL },
Expand Down