From a21384d49e0764cadfb096c7741a6701f59fecaa Mon Sep 17 00:00:00 2001 From: ydal Date: Sun, 2 Oct 2011 12:05:59 +0900 Subject: [PATCH 1/4] libfreerdp-kbd: update scancode for VK_HANGUL and VK_HANJA. --- libfreerdp-kbd/keyboard.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libfreerdp-kbd/keyboard.h b/libfreerdp-kbd/keyboard.h index 8ddc494c..55f8fe70 100644 --- a/libfreerdp-kbd/keyboard.h +++ b/libfreerdp-kbd/keyboard.h @@ -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 }, From ee2c0d6f6b6f2cd95c8c2930d32a2a963c73121a Mon Sep 17 00:00:00 2001 From: ydal Date: Sun, 2 Oct 2011 12:07:20 +0900 Subject: [PATCH 2/4] dfb: handle directfb hardware key code. --- dfb/dfb_keyboard.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dfb/dfb_keyboard.h b/dfb/dfb_keyboard.h index 5f0ae823..cd96f8bd 100644 --- a/dfb/dfb_keyboard.h +++ b/dfb/dfb_keyboard.h @@ -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 From 1e944ae0533f0cdb465a4954213f43ae230ba249 Mon Sep 17 00:00:00 2001 From: ydal Date: Sun, 2 Oct 2011 12:09:51 +0900 Subject: [PATCH 3/4] dfb: handle directfb hardware key code. --- dfb/dfb_keyboard.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/dfb/dfb_keyboard.c b/dfb/dfb_keyboard.c index eefc0993..605328ad 100644 --- a/dfb/dfb_keyboard.c +++ b/dfb/dfb_keyboard.c @@ -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; @@ -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); } From 375b2ce654fa9a7e90f4a095716e874a1c600981 Mon Sep 17 00:00:00 2001 From: ydal Date: Sun, 2 Oct 2011 12:11:23 +0900 Subject: [PATCH 4/4] dfb: handle directfb hardware key code --- dfb/dfb_event.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dfb/dfb_event.c b/dfb/dfb_event.c index 69f60c5c..072275a6 100644 --- a/dfb/dfb_event.c +++ b/dfb/dfb_event.c @@ -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; @@ -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: