A bug made itself present in VkKeyScan's handling of the less-than character on US (and other) keyboard layouts. VkKeyScan('<') in Windows returns 0x1bc, which is VK_OEM_COMMA with the shift key flag set. In Wine, VkKeyScan('<') returns 0xe2, which is VK_OEM_102, or the VK for the "infamous phantom key".
The root cause of this is X's XKeysymToKeycode returning the keycode for the phantom key instead of the keycode for the comma key when passed the keysym for '<' (XK_less). This isn't incorrect on X's part, but inconvenient for Wine as most US keyboards don't have the <> key, but rather use the shifted comma key.
The attached patch adds a new field in the main_key_tab structure. The new field indicates which keysym, if any, should be passed to XKeysymToKeycode instead of '<'. I've filled this field in for every keyboard type already defined in keyboard.c.
Since winex11.drv is a pretty touchy part of Wine, I'm sending this patch to wine-devel for review. I don't have the hardware or software setup to test other language inputs, and LoadKeyboardLayout is not implemented so I can't just test with VkKeyScanEx. If you're using a foreign keyboard, especially one with a <> key, please test VkKeyScan's handling of the '<' character with this patch applied.
Thanks Andrew