http://bugs.winehq.org/show_bug.cgi?id=8683
--- Comment #6 from Fábio Capela fabio.capela@yahoo.com 2008-01-18 19:27:30 --- (In reply to comment #5)
Does adding a symlink /usr/lib32/locale -> /usr/lib/locale help?
At least in my case it doesn't change anything (I'm also having the same problem, with both the <`> (left of 1), <'> (right of ;) and shift-6 keys, in both WoW and Guild Wars).
If my bug is the same as the other posters, I have reliably reproduced the bug with Armagetron Advanced (www.armagetronad.net, less than 3MB). If you set the keyboard to something without deadkey, for example the US one (setxkbmap us), you can enter the console from the menu by pressing <`>. Now if you set the keyboard to something with deadkeys, such as the US-International one (setxkbmap us -variant alt-intl), you can't enter the console anymore by pressing just <`>, you need to press AltGr+<`>.
This happens because of the:
if (XFilterEvent( &event, None )) continue; /* filtered, ignore it */
line in dlls/winex11.drv/event.c . It is completely discarding all deadkey keypresses; to solve the problem you need to let deadkey keypresses generate WM_KEYDOWN messages (and then, to not break the deadkey handling in wine, you have to catch and store the result of XFilterEvent to pass to the TranslateMessage function when it is eventually called to handle the WM_KEYDOWN; this is what my patch tries to do, although it will fail to correctly pass this information if either you have more than 10 keypress events, or two keypress events for the same key and different string results, before the program calls TranslateMessage).
(combining it with your patch posted in bug 4923, which enforces that at all times there's at most one input event in the wine server queue, would theoretically solve my patch's failures, although I don't think that is the right way to proceed.)
(BTW, I was thinking about how to create a testcase for this bug, but I don't see a way to do it with the current implementation of X11DRV_SendInput in dlls/winex11.drv/event.c - the bug is in converting X keypress events to WM_KEYDOWN messages, and X11DRV_SendInput creates the messages directly, bypassing the conversion step.)