I was informed that
my client (fork of r1q2) experienced a keyjam everytime one pressed a messagemode button while simultaneously holding down a movement key. First I thought this was a problem caused by my own code modifications (I've had to change keyboard routines to support international keyboards), but after I started looking, I traced the problem back to r1q2 code. The problem lies in keys.c (line 1310 in b6557):
// key up events only generate commands if the game key binding is
// a button command (leading + sign). These will occur even in console mode,
// to keep the character from continuing an action started before a console
// switch. Button commands include the kenum as a parameter, so multiple
// downs can be matched with ups
//
if (!down)
{
//r1ch: don't run buttons in console/chat/menu
if (cls.key_dest == key_game)
{
...
The solution is to remove the last if statement you've (r1ch) added. The original id comments shown are pretty self-explanatory. In this case, when a user pops up the messagemode dialog, cls.key_dest is instantly changed to key_message. With the if statement in place, key up events from movement keys (and other + commands) are no longer registered properly, hence causing them to 'stick'.
I'm not sure if this is related to the issue why people are experiencing unusually frequent keyjams with r1q2 compared to other clients, but it might very well be a part of it. Worth the fix anyway.
- Ateisti
P.S. What's up with your forum's signatures? BB code doesn't seem to get parsed.