Skip to content

Commit

Permalink
* Handle dead keys more gracefully by taking a "best guess" rather th…
Browse files Browse the repository at this point in the history
…an ignoring

  completely
* When activating or deactivating the mouse flush any pending motion events;
  this should stop the view moving unpredictably in these circumstances
* Add keyname completion to "unbind"
  • Loading branch information
timangus committed Aug 25, 2008
1 parent a6382d2 commit 36a43f2
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 15 deletions.
8 changes: 8 additions & 0 deletions code/qcommon/common.c
Expand Up @@ -3333,6 +3333,14 @@ static void Field_CompleteCommand( char *cmd,
Field_CompleteCommand( p, qtrue, qtrue );
}
}
else if( !Q_stricmp( baseCmd, "unbind" ) && completionArgument == 2 )
{
// Skip "unbind "
p = Com_SkipTokens( cmd, 1, " " );

if( p > cmd )
Field_CompleteKeyname( );
}
#endif
}
}
Expand Down
61 changes: 46 additions & 15 deletions code/sdl/sdl_input.c
Expand Up @@ -218,25 +218,37 @@ static const char *IN_TranslateSDLToQ3Key( SDL_keysym *keysym,
}
}

if( down && !( keysym->unicode & 0xFF80 ) )
if( down )
{
char ch = (char)keysym->unicode & 0x7F;

switch( ch )
if( keysym->unicode && !( keysym->unicode & 0xFF80 ) )
{
// So the key marked ~ always drops the console
case '~': *key = '~'; break;
char ch = (char)keysym->unicode & 0x7F;

case 127: // ASCII delete
if( *key != K_DEL )
{
// ctrl-h
*buf = CTRL('h');
break;
}
// fallthrough
switch( ch )
{
// So the key marked ~ always drops the console
case '~': *key = '~'; break;

case 127: // ASCII delete
if( *key != K_DEL )
{
// ctrl-h
*buf = CTRL('h');
break;
}
// fallthrough

default: *buf = ch; break;
default: *buf = ch; break;
}
}
else
{
// Unicode character which isn't ASCII, possibly the character
// following a dead key. Fallback on what SDL calls the key

const char *keyString = SDL_GetKeyName( keysym->sym );
if( strlen( keyString ) == 1 )
*buf = *keyString;
}
}

Expand Down Expand Up @@ -278,6 +290,21 @@ static io_connect_t IN_GetIOHandle(void) // mac os x mouse accel hack
}
#endif

/*
===============
IN_GobbleMotionEvents
===============
*/
static void IN_GobbleMotionEvents( void )
{
SDL_Event dummy[ 1 ];

// Gobble any mouse motion events
SDL_PumpEvents( );
while( SDL_PeepEvents( dummy, 1, SDL_GETEVENT,
SDL_EVENTMASK( SDL_MOUSEMOTION ) ) ) { }
}

/*
===============
IN_ActivateMouse
Expand Down Expand Up @@ -333,6 +360,8 @@ static void IN_ActivateMouse( void )
SDL_ShowCursor( 0 );
#endif
SDL_WM_GrabInput( SDL_GRAB_ON );

IN_GobbleMotionEvents( );
}

// in_nograb makes no sense in fullscreen mode
Expand Down Expand Up @@ -391,6 +420,8 @@ static void IN_DeactivateMouse( void )

if( mouseActive )
{
IN_GobbleMotionEvents( );

SDL_WM_GrabInput( SDL_GRAB_OFF );

// Don't warp the mouse unless the cursor is within the window
Expand Down

0 comments on commit 36a43f2

Please sign in to comment.