From 9adc3720cd8fe2ba843d014dbbfe81bf936f9715 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Tue, 22 Jul 2008 17:21:35 +0000 Subject: more keyboard handling cleanups --- src/client/keyboard.cc | 66 ++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 34 deletions(-) (limited to 'src/client/keyboard.cc') diff --git a/src/client/keyboard.cc b/src/client/keyboard.cc index da93814..410e76c 100644 --- a/src/client/keyboard.cc +++ b/src/client/keyboard.cc @@ -429,17 +429,16 @@ void setkeyboardmode(bool input) */ } -unsigned int translate_keysym(const SDL_keysym &keysym) +unsigned int translate_keysym(int keysym, int modifier) { - int key = keysym.sym; bool shift = false; bool numlock = false; // keypad keys - if (keysym.mod & KMOD_NUM) { + if (modifier & KMOD_NUM) { numlock = true; - switch (key) { + switch (keysym) { case SDLK_KP0: return '0'; break; @@ -475,7 +474,7 @@ unsigned int translate_keysym(const SDL_keysym &keysym) break; } } else { - switch (key) { + switch (keysym) { case SDLK_KP0: return SDLK_INSERT; break; @@ -510,7 +509,7 @@ unsigned int translate_keysym(const SDL_keysym &keysym) } // special keys - switch (key) { + switch (keysym) { case SDLK_ESCAPE: return SDLK_ESCAPE; break; @@ -535,91 +534,90 @@ unsigned int translate_keysym(const SDL_keysym &keysym) } // caps lock - if (keysym.mod & KMOD_CAPS) + if (modifier & KMOD_CAPS) shift = true; // left/right shift - if ((keysym.mod & KMOD_LSHIFT) || (keysym.mod & KMOD_RSHIFT)) { + if ((KMOD_LSHIFT + KMOD_RSHIFT) & modifier) { shift = !shift; } if (shift) { - if ((key >= 'a' && key <= 'z')) { - key = key + 'A' - 'a'; - return key; + if ((keysym >= 'a' && keysym <= 'z')) { + return keysym + 'A' - 'a'; } - switch (key) { + switch (keysym) { case '`': - key = '~'; + return '~'; break; case '1': - key = '!'; + return '!'; break; case '2': - key = '@'; + return '@'; break; case '3': - key = '#'; + return '#'; break; case '4': - key = '$'; + return '$'; break; case '5': - key = '%'; + return '%'; break; case '6': - key = '^'; + return '^'; break; case '7': - key = '&'; + return '&'; break; case '8': - key = '*'; + return '*'; break; case '9': - key = '('; + return '('; break; case '0': - key = ')'; + return ')'; break; case '-': - key = '_'; + return '_'; break; case '=': - key = '+'; + return '+'; break; // second row case '[': - key = '{'; + return '{'; break; case ']': - key = '}'; + return '}'; break; case '|': - key = '\\'; + return '\\'; break; // third row case ';': - key = ':'; + return ':'; break; case '\'': - key = '"'; + return '"'; break; // fourth row case ',': - key = '<'; + return '<'; break; case '.': - key = '>'; + return '>'; break; case '/': - key = '?'; + return '?'; break; } } - return key; + return keysym; } } // namespace client -- cgit v1.2.3