summaryrefslogtreecommitdiff
path: root/source/vid_sdl.c
diff options
context:
space:
mode:
authorAndrey Nazarov <skuller@skuller.net>2007-12-14 23:30:31 +0000
committerAndrey Nazarov <skuller@skuller.net>2007-12-14 23:30:31 +0000
commita21868632c585f33742f7e295aafad36a436cdd9 (patch)
tree91d01192835662109845c2f9fd4d840d842e2b47 /source/vid_sdl.c
parent0ec5f1b7a5689865d6cd10daa17883201766dc6a (diff)
Distinguish left and right SHIFT, CTRL, ALT modifiers.
Take SHIFT modifier into account when executing key bindings. Added `text' command which just stuffs its arguments into the command buffer for further macro expansion. Made sure $$ escaping works.
Diffstat (limited to 'source/vid_sdl.c')
-rw-r--r--source/vid_sdl.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/source/vid_sdl.c b/source/vid_sdl.c
index c11041b..dcccc80 100644
--- a/source/vid_sdl.c
+++ b/source/vid_sdl.c
@@ -196,7 +196,7 @@ static void QSDL_UpdateGamma( const byte *table ) {
}
static void QSDL_KeyEvent( SDL_keysym *keysym, qboolean down ) {
- uint32 key;
+ uint32 key1, key2 = 0;
if( keysym->sym <= 127 ) {
// ASCII chars are mapped directly
@@ -204,7 +204,8 @@ static void QSDL_KeyEvent( SDL_keysym *keysym, qboolean down ) {
return;
}
-#define K( s, d ) case SDLK_ ## s: key = K_ ## d; break;
+#define K( s, d ) case SDLK_ ## s: key1 = K_ ## d; break;
+#define KK( s, d1, d2 ) case SDLK_ ## s: key1 = K_ ## d1; key2 = K_ ## d2; break;
switch( keysym->sym ) {
K( KP0, KP_INS )
@@ -254,21 +255,25 @@ static void QSDL_KeyEvent( SDL_keysym *keysym, qboolean down ) {
K( RSUPER, RWINKEY )
K( MENU, MENU )
- K( RSHIFT, SHIFT )
- K( LSHIFT, SHIFT )
- K( RCTRL, CTRL )
- K( LCTRL, CTRL )
- K( RALT, ALT )
- K( LALT, ALT )
+ KK( RSHIFT, SHIFT, RSHIFT )
+ KK( LSHIFT, SHIFT, LSHIFT )
+ KK( RCTRL, CTRL, RCTRL )
+ KK( LCTRL, CTRL, LCTRL )
+ KK( RALT, ALT, RALT )
+ KK( LALT, ALT, LALT )
#undef K
+#undef KK
default:
Com_DPrintf( "%s: unknown keysym %d\n", __func__, keysym->sym );
return;
}
- Key_Event( key, down, com_eventTime );
+ Key_Event( key1, down, com_eventTime );
+ if( key2 ) {
+ Key_Event( key2, down, com_eventTime );
+ }
}
static void QSDL_MouseButtonEvent( int button, qboolean down ) {