1 #if defined(__linux__) 2 #include <linux/input-event-codes.h> 3 #elif defined(__DragonFly__) 4 #include <dev/misc/evdev/input-event-codes.h> 5 #elif defined(__FreeBSD__) 6 #include <dev/evdev/input-event-codes.h> 7 #endif 8 #include <rfb/keysym.h> 9 #include <stdlib.h> 10 #include <limits.h> 11 #include <Ecore_Input.h> 12 13 static const char *_ecore_fb_li_kbd_syms[144 * 7] = 14 { 15 #include "ecore_fb_keytable.h" 16 }; 17 18 #include "ecore_evas_vnc_server_fb_keymap.h" 19 20 static unsigned int _x11_to_fb(rfbKeySym key,unsigned int * offset)21_x11_to_fb(rfbKeySym key, unsigned int *offset) 22 { 23 switch (key) 24 { 25 case XK_Num_Lock: 26 return KEY_NUMLOCK; 27 case XK_KP_Delete: 28 return KEY_DELETE; 29 case XK_KP_Equal: 30 return KEY_KPEQUAL; 31 case XK_KP_Multiply: 32 return KEY_KPASTERISK; 33 case XK_KP_Add: 34 return KEY_KPPLUS; 35 case XK_KP_Subtract: 36 return KEY_KPMINUS; 37 case XK_KP_Decimal: 38 return KEY_KPDOT; 39 case XK_KP_Divide: 40 return KEY_KPSLASH; 41 case XK_plus: 42 *offset = 1; 43 EINA_FALLTHROUGH; 44 case XK_equal: 45 return KEY_EQUAL; 46 case XK_underscore: 47 *offset = 1; 48 EINA_FALLTHROUGH; 49 case XK_minus: 50 return KEY_MINUS; 51 case XK_quotedbl: 52 *offset = 1; 53 EINA_FALLTHROUGH; 54 case XK_apostrophe: 55 return KEY_APOSTROPHE; 56 case XK_Shift_L: 57 return KEY_LEFTSHIFT; 58 case XK_Shift_R: 59 return KEY_RIGHTSHIFT; 60 case XK_Control_L: 61 return KEY_LEFTCTRL; 62 case XK_Control_R: 63 return KEY_RIGHTCTRL; 64 case XK_Caps_Lock: 65 return KEY_CAPSLOCK; 66 case XK_Meta_L: 67 return KEY_LEFTMETA; 68 case XK_Meta_R: 69 return KEY_RIGHTMETA; 70 case XK_Alt_L: 71 return KEY_LEFTALT; 72 case XK_Alt_R: 73 return KEY_RIGHTALT; 74 case XK_space: 75 return KEY_SPACE; 76 case XK_period: 77 *offset = 1; 78 EINA_FALLTHROUGH; 79 case XK_greater: 80 return KEY_DOT; 81 case XK_bar: 82 *offset = 1; 83 EINA_FALLTHROUGH; 84 case XK_backslash: 85 return KEY_BACKSLASH; 86 case XK_question: 87 *offset = 1; 88 EINA_FALLTHROUGH; 89 case XK_slash: 90 return KEY_SLASH; 91 case XK_braceleft: 92 case XK_bracketleft: 93 return KEY_LEFTBRACE; 94 case XK_braceright: 95 case XK_bracketright: 96 return KEY_RIGHTBRACE; 97 case XK_colon: 98 *offset = 1; 99 EINA_FALLTHROUGH; 100 case XK_semicolon: 101 return KEY_SEMICOLON; 102 case XK_asciitilde: 103 *offset = 1; 104 EINA_FALLTHROUGH; 105 case XK_grave: 106 return KEY_GRAVE; 107 case XK_less: 108 *offset = 1; 109 EINA_FALLTHROUGH; 110 case XK_comma: 111 return KEY_COMMA; 112 case XK_F1: 113 return KEY_F1; 114 case XK_F2: 115 return KEY_F2; 116 case XK_F3: 117 return KEY_F3; 118 case XK_F4: 119 return KEY_F4; 120 case XK_F5: 121 return KEY_F5; 122 case XK_F6: 123 return KEY_F6; 124 case XK_F7: 125 return KEY_F7; 126 case XK_F8: 127 return KEY_F8; 128 case XK_F9: 129 return KEY_F9; 130 case XK_F10: 131 return KEY_F10; 132 case XK_F11: 133 return KEY_F11; 134 case XK_F12: 135 return KEY_F12; 136 case XK_BackSpace: 137 return KEY_BACKSPACE; 138 case XK_Tab: 139 return KEY_TAB; 140 case XK_Return: 141 return KEY_ENTER; 142 case XK_Pause: 143 return KEY_PAUSE; 144 case XK_Escape: 145 return KEY_ESC; 146 case XK_Delete: 147 return KEY_DELETE; 148 case XK_Linefeed: 149 return KEY_LINEFEED; 150 case XK_Scroll_Lock: 151 return KEY_SCROLLLOCK; 152 case XK_Sys_Req: 153 return KEY_SYSRQ; 154 case XK_Home: 155 return KEY_HOME; 156 case XK_Left: 157 return KEY_LEFT; 158 case XK_Up: 159 return KEY_UP; 160 case XK_Right: 161 return KEY_RIGHT; 162 case XK_Down: 163 return KEY_DOWN; 164 case XK_Page_Up: 165 return KEY_PAGEUP; 166 case XK_Page_Down: 167 return KEY_PAGEDOWN; 168 case XK_End: 169 return KEY_END; 170 case XK_KP_0: 171 *offset = 1; 172 EINA_FALLTHROUGH; 173 case XK_KP_Insert: 174 return KEY_KP0; 175 case XK_KP_1: 176 *offset = 1; 177 EINA_FALLTHROUGH; 178 case XK_KP_End: 179 return KEY_KP1; 180 case XK_KP_2: 181 *offset = 1; 182 EINA_FALLTHROUGH; 183 case XK_KP_Down: 184 return KEY_KP2; 185 case XK_KP_3: 186 *offset = 1; 187 EINA_FALLTHROUGH; 188 case XK_KP_Next: 189 return KEY_KP3; 190 case XK_KP_4: 191 *offset = 1; 192 EINA_FALLTHROUGH; 193 case XK_KP_Left: 194 return KEY_KP4; 195 case XK_KP_5: 196 *offset = 1; 197 EINA_FALLTHROUGH; 198 case XK_KP_Begin: 199 return KEY_KP5; 200 case XK_KP_6: 201 *offset = 1; 202 EINA_FALLTHROUGH; 203 case XK_KP_Right: 204 return KEY_KP6; 205 case XK_KP_7: 206 *offset = 1; 207 EINA_FALLTHROUGH; 208 case XK_KP_Home: 209 return KEY_KP7; 210 case XK_KP_8: 211 *offset = 1; 212 EINA_FALLTHROUGH; 213 case XK_KP_Up: 214 return KEY_KP8; 215 case XK_KP_9: 216 *offset = 1; 217 EINA_FALLTHROUGH; 218 case XK_KP_Prior: 219 return KEY_KP9; 220 case XK_KP_Enter: 221 return KEY_KPENTER; 222 case XK_parenright: 223 *offset = 1; 224 EINA_FALLTHROUGH; 225 case XK_0: 226 return KEY_0; 227 case XK_exclam: 228 *offset = 1; 229 EINA_FALLTHROUGH; 230 case XK_1: 231 return KEY_1; 232 case XK_at: 233 *offset = 1; 234 EINA_FALLTHROUGH; 235 case XK_2: 236 return KEY_2; 237 case XK_numbersign: 238 *offset = 1; 239 EINA_FALLTHROUGH; 240 case XK_3: 241 return KEY_3; 242 case XK_dollar: 243 *offset = 1; 244 EINA_FALLTHROUGH; 245 case XK_4: 246 return KEY_4; 247 case XK_percent: 248 *offset = 1; 249 EINA_FALLTHROUGH; 250 case XK_5: 251 return KEY_5; 252 case XK_asciicircum: 253 *offset = 1; 254 EINA_FALLTHROUGH; 255 case XK_6: 256 return KEY_6; 257 case XK_ampersand: 258 *offset = 1; 259 EINA_FALLTHROUGH; 260 case XK_7: 261 return KEY_7; 262 case XK_asterisk: 263 *offset = 1; 264 EINA_FALLTHROUGH; 265 case XK_8: 266 return KEY_8; 267 case XK_parenleft: 268 *offset = 1; 269 EINA_FALLTHROUGH; 270 case XK_9: 271 return KEY_9; 272 case XK_A: 273 *offset = 1; 274 EINA_FALLTHROUGH; 275 case XK_a: 276 return KEY_A; 277 case XK_B: 278 *offset = 1; 279 EINA_FALLTHROUGH; 280 case XK_b: 281 return KEY_B; 282 case XK_C: 283 *offset = 1; 284 EINA_FALLTHROUGH; 285 case XK_c: 286 return KEY_C; 287 case XK_D: 288 *offset = 1; 289 EINA_FALLTHROUGH; 290 case XK_d: 291 return KEY_D; 292 case XK_E: 293 *offset = 1; 294 EINA_FALLTHROUGH; 295 case XK_e: 296 return KEY_E; 297 case XK_F: 298 *offset = 1; 299 EINA_FALLTHROUGH; 300 case XK_f: 301 return KEY_F; 302 case XK_G: 303 *offset = 1; 304 EINA_FALLTHROUGH; 305 case XK_g: 306 return KEY_G; 307 case XK_H: 308 *offset = 1; 309 EINA_FALLTHROUGH; 310 case XK_h: 311 return KEY_H; 312 case XK_I: 313 *offset = 1; 314 EINA_FALLTHROUGH; 315 case XK_i: 316 return KEY_I; 317 case XK_J: 318 *offset = 1; 319 EINA_FALLTHROUGH; 320 case XK_j: 321 return KEY_J; 322 case XK_K: 323 *offset = 1; 324 EINA_FALLTHROUGH; 325 case XK_k: 326 return KEY_K; 327 case XK_L: 328 *offset = 1; 329 EINA_FALLTHROUGH; 330 case XK_l: 331 return KEY_L; 332 case XK_M: 333 *offset = 1; 334 EINA_FALLTHROUGH; 335 case XK_m: 336 return KEY_M; 337 case XK_N: 338 *offset = 1; 339 EINA_FALLTHROUGH; 340 case XK_n: 341 return KEY_N; 342 case XK_O: 343 *offset = 1; 344 EINA_FALLTHROUGH; 345 case XK_o: 346 return KEY_O; 347 case XK_P: 348 *offset = 1; 349 EINA_FALLTHROUGH; 350 case XK_p: 351 return KEY_P; 352 case XK_Q: 353 *offset = 1; 354 EINA_FALLTHROUGH; 355 case XK_q: 356 return KEY_Q; 357 case XK_R: 358 *offset = 1; 359 EINA_FALLTHROUGH; 360 case XK_r: 361 return KEY_R; 362 case XK_S: 363 *offset = 1; 364 EINA_FALLTHROUGH; 365 case XK_s: 366 return KEY_S; 367 case XK_T: 368 *offset = 1; 369 EINA_FALLTHROUGH; 370 case XK_t: 371 return KEY_T; 372 case XK_U: 373 *offset = 1; 374 EINA_FALLTHROUGH; 375 case XK_u: 376 return KEY_U; 377 case XK_V: 378 *offset = 1; 379 EINA_FALLTHROUGH; 380 case XK_v: 381 return KEY_V; 382 case XK_W: 383 *offset = 1; 384 EINA_FALLTHROUGH; 385 case XK_w: 386 return KEY_W; 387 case XK_X: 388 *offset = 1; 389 EINA_FALLTHROUGH; 390 case XK_x: 391 return KEY_X; 392 case XK_Y: 393 *offset = 1; 394 EINA_FALLTHROUGH; 395 case XK_y: 396 return KEY_Y; 397 case XK_Z: 398 *offset = 1; 399 EINA_FALLTHROUGH; 400 case XK_z: 401 return KEY_Z; 402 default: 403 return UINT_MAX; 404 } 405 } 406 407 Eina_Bool ecore_evas_vnc_server_keysym_to_fb_translate(rfbKeySym key,const char ** key_name,const char ** key_str,const char ** compose)408ecore_evas_vnc_server_keysym_to_fb_translate(rfbKeySym key, 409 const char **key_name, 410 const char **key_str, 411 const char **compose) 412 { 413 unsigned int offset = 0; 414 unsigned int id = _x11_to_fb(key, &offset); 415 416 if (id == UINT_MAX) 417 return EINA_FALSE; 418 419 *key_name = _ecore_fb_li_kbd_syms[id * 7]; 420 *key_str = _ecore_fb_li_kbd_syms[(id * 7) + offset]; 421 *compose = _ecore_fb_li_kbd_syms[(id* 7) + 3 + offset]; 422 return EINA_TRUE; 423 } 424