1
/* -*- c-basic-offset: 8 -*-
2
FreeRDP: A Remote Desktop Protocol client.
3
DirectFB UI Keyboard Handling
5
Copyright (C) Marc-Andre Moreau <marcandre.moreau@gmail.com> 2010
7
This program is free software; you can redistribute it and/or modify
8
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation; either version 2 of the License, or
10
(at your option) any later version.
12
This program is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
GNU General Public License for more details.
17
You should have received a copy of the GNU General Public License
18
along with this program; if not, write to the Free Software
19
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25
#include "libfreerdpkbd/keyboard.h"
26
#include <freerdp/freerdp.h>
27
#include <freerdp/kbd.h>
28
#include "dfb_event.h"
30
unsigned char keymap[256];
35
memset(keymap, 0, sizeof(keymap));
37
/* Map DirectFB keycodes to Virtual Key Codes */
39
keymap[DIKI_A - DIKI_UNKNOWN] = VK_KEY_A;
40
keymap[DIKI_B - DIKI_UNKNOWN] = VK_KEY_B;
41
keymap[DIKI_C - DIKI_UNKNOWN] = VK_KEY_C;
42
keymap[DIKI_D - DIKI_UNKNOWN] = VK_KEY_D;
43
keymap[DIKI_E - DIKI_UNKNOWN] = VK_KEY_E;
44
keymap[DIKI_F - DIKI_UNKNOWN] = VK_KEY_F;
45
keymap[DIKI_G - DIKI_UNKNOWN] = VK_KEY_G;
46
keymap[DIKI_H - DIKI_UNKNOWN] = VK_KEY_H;
47
keymap[DIKI_I - DIKI_UNKNOWN] = VK_KEY_I;
48
keymap[DIKI_J - DIKI_UNKNOWN] = VK_KEY_J;
49
keymap[DIKI_K - DIKI_UNKNOWN] = VK_KEY_K;
50
keymap[DIKI_L - DIKI_UNKNOWN] = VK_KEY_L;
51
keymap[DIKI_M - DIKI_UNKNOWN] = VK_KEY_M;
52
keymap[DIKI_N - DIKI_UNKNOWN] = VK_KEY_N;
53
keymap[DIKI_O - DIKI_UNKNOWN] = VK_KEY_O;
54
keymap[DIKI_P - DIKI_UNKNOWN] = VK_KEY_P;
55
keymap[DIKI_Q - DIKI_UNKNOWN] = VK_KEY_Q;
56
keymap[DIKI_R - DIKI_UNKNOWN] = VK_KEY_R;
57
keymap[DIKI_S - DIKI_UNKNOWN] = VK_KEY_S;
58
keymap[DIKI_T - DIKI_UNKNOWN] = VK_KEY_T;
59
keymap[DIKI_U - DIKI_UNKNOWN] = VK_KEY_U;
60
keymap[DIKI_V - DIKI_UNKNOWN] = VK_KEY_V;
61
keymap[DIKI_W - DIKI_UNKNOWN] = VK_KEY_W;
62
keymap[DIKI_X - DIKI_UNKNOWN] = VK_KEY_X;
63
keymap[DIKI_Y - DIKI_UNKNOWN] = VK_KEY_Y;
64
keymap[DIKI_Z - DIKI_UNKNOWN] = VK_KEY_Z;
66
keymap[DIKI_0 - DIKI_UNKNOWN] = VK_KEY_0;
67
keymap[DIKI_1 - DIKI_UNKNOWN] = VK_KEY_1;
68
keymap[DIKI_2 - DIKI_UNKNOWN] = VK_KEY_2;
69
keymap[DIKI_3 - DIKI_UNKNOWN] = VK_KEY_3;
70
keymap[DIKI_4 - DIKI_UNKNOWN] = VK_KEY_4;
71
keymap[DIKI_5 - DIKI_UNKNOWN] = VK_KEY_5;
72
keymap[DIKI_6 - DIKI_UNKNOWN] = VK_KEY_6;
73
keymap[DIKI_7 - DIKI_UNKNOWN] = VK_KEY_7;
74
keymap[DIKI_8 - DIKI_UNKNOWN] = VK_KEY_8;
75
keymap[DIKI_9 - DIKI_UNKNOWN] = VK_KEY_9;
77
keymap[DIKI_F1 - DIKI_UNKNOWN] = VK_F1;
78
keymap[DIKI_F2 - DIKI_UNKNOWN] = VK_F2;
79
keymap[DIKI_F3 - DIKI_UNKNOWN] = VK_F3;
80
keymap[DIKI_F4 - DIKI_UNKNOWN] = VK_F4;
81
keymap[DIKI_F5 - DIKI_UNKNOWN] = VK_F5;
82
keymap[DIKI_F6 - DIKI_UNKNOWN] = VK_F6;
83
keymap[DIKI_F7 - DIKI_UNKNOWN] = VK_F7;
84
keymap[DIKI_F8 - DIKI_UNKNOWN] = VK_F8;
85
keymap[DIKI_F9 - DIKI_UNKNOWN] = VK_F9;
86
keymap[DIKI_F10 - DIKI_UNKNOWN] = VK_F10;
87
keymap[DIKI_F11 - DIKI_UNKNOWN] = VK_F11;
88
keymap[DIKI_F12 - DIKI_UNKNOWN] = VK_F12;
90
keymap[DIKI_COMMA - DIKI_UNKNOWN] = VK_OEM_COMMA;
91
keymap[DIKI_PERIOD - DIKI_UNKNOWN] = VK_OEM_PERIOD;
92
keymap[DIKI_MINUS_SIGN - DIKI_UNKNOWN] = VK_OEM_MINUS;
93
keymap[DIKI_EQUALS_SIGN - DIKI_UNKNOWN] = VK_OEM_PLUS;
95
keymap[DIKI_ESCAPE - DIKI_UNKNOWN] = VK_ESCAPE;
96
keymap[DIKI_LEFT - DIKI_UNKNOWN] = VK_LEFT;
97
keymap[DIKI_RIGHT - DIKI_UNKNOWN] = VK_RIGHT;
98
keymap[DIKI_UP - DIKI_UNKNOWN] = VK_UP;
99
keymap[DIKI_DOWN - DIKI_UNKNOWN] = VK_DOWN;
100
keymap[DIKI_CONTROL_L - DIKI_UNKNOWN] = VK_LCONTROL;
101
keymap[DIKI_CONTROL_R - DIKI_UNKNOWN] = VK_RCONTROL;
102
keymap[DIKI_SHIFT_L - DIKI_UNKNOWN] = VK_LSHIFT;
103
keymap[DIKI_SHIFT_R - DIKI_UNKNOWN] = VK_RSHIFT;
104
keymap[DIKI_ALT_L - DIKI_UNKNOWN] = VK_LMENU;
105
keymap[DIKI_ALT_R - DIKI_UNKNOWN] = VK_RMENU;
106
keymap[DIKI_TAB - DIKI_UNKNOWN] = VK_TAB;
107
keymap[DIKI_ENTER - DIKI_UNKNOWN] = VK_RETURN;
108
keymap[DIKI_SPACE - DIKI_UNKNOWN] = VK_SPACE;
109
keymap[DIKI_BACKSPACE - DIKI_UNKNOWN] = VK_BACK;
110
keymap[DIKI_INSERT - DIKI_UNKNOWN] = VK_INSERT;
111
keymap[DIKI_DELETE - DIKI_UNKNOWN] = VK_DELETE;
112
keymap[DIKI_HOME - DIKI_UNKNOWN] = VK_HOME;
113
keymap[DIKI_END - DIKI_UNKNOWN] = VK_END;
114
keymap[DIKI_PAGE_UP - DIKI_UNKNOWN] = VK_PRIOR;
115
keymap[DIKI_PAGE_DOWN - DIKI_UNKNOWN] = VK_NEXT;
116
keymap[DIKI_CAPS_LOCK - DIKI_UNKNOWN] = VK_CAPITAL;
117
keymap[DIKI_NUM_LOCK - DIKI_UNKNOWN] = VK_NUMLOCK;
118
keymap[DIKI_SCROLL_LOCK - DIKI_UNKNOWN] = VK_SCROLL;
119
keymap[DIKI_PRINT - DIKI_UNKNOWN] = VK_PRINT;
120
keymap[DIKI_PAUSE - DIKI_UNKNOWN] = VK_PAUSE;
121
keymap[DIKI_KP_DIV - DIKI_UNKNOWN] = VK_DIVIDE;
122
keymap[DIKI_KP_MULT - DIKI_UNKNOWN] = VK_MULTIPLY;
123
keymap[DIKI_KP_MINUS - DIKI_UNKNOWN] = VK_SUBTRACT;
124
keymap[DIKI_KP_PLUS - DIKI_UNKNOWN] = VK_ADD;
125
keymap[DIKI_KP_ENTER - DIKI_UNKNOWN] = VK_RETURN;
129
dfb_kb_send_key(rdpInst * inst, int flags, uint8 keycode)
131
int scancode = freerdp_kbd_get_scancode_by_virtualkey(keymap[keycode]);
132
inst->rdp_send_input(inst, RDP_INPUT_SCANCODE, flags, scancode, 0);
136
dfb_kb_get_toggle_keys_state(rdpInst * inst)
142
dfb_kb_focus_in(rdpInst * inst)