http://bugs.winehq.org/show_bug.cgi?id=23569
--- Comment #10 from Dmitry Timoshkov dmitry@codeweavers.com 2010-07-12 03:40:10 --- (In reply to comment #9)
OK, a log of starting notepad, pressing the left bracket, pressing the right bracket, closing notepad.
Thanks.
The problem starts here: trace:keyboard:X11DRV_InitKeyboard keycode 187 => vkey 0000
then once there is a KeyPress even:
trace:event:call_event_handler 47 KeyPress for hwnd/window 0x10052/5200001 trace:key:X11DRV_KeyEvent type 2, window 5200001, state 0x0011, keycode 187 trace:keyboard:X11DRV_KeyEvent XmbLookupString needs 1 byte(s) trace:key:X11DRV_KeyEvent nbyte = 1, status 4 trace:key:X11DRV_KeyEvent KeyPress : keysym=28 (parenleft), # of chars=1 / "(" trace:key:EVENT_event_to_vkey e->keycode = 187 trace:key:X11DRV_KeyEvent keycode 187 converted to vkey 0xFC
keycode 187 actually gets converted to vkey 0, and the code assumes that's the special case and converts it to VK_NONAME (0xFC), which is an internal trick to handle dead keys.
Keyboard detection code is to blame here.