On Fri, 24 Mar 2006, Dmitry Timoshkov wrote:
? I do understand why this happens: X11DRV_ToUnicodeEx uses the global, static variable AltGrMask. Is this a bug?
In X11DRV_ToUnicodeEx we need to restore XKeyEvent from the previous KeyPress event. If you have a better idea how to do it without using global variables please let us know.
What about using the thread_input->keystate, just as for Shift, Control, and NumLock?
ToUnicodeEx does have a lpKeyState argument, so to me, it seems very wrong that a static, global variable is needed as well.
TranslateMessage calls GetKeyboardState just before ToUnicode. MSDN documents GetKeyboardState as: "The status changes as a thread removes keyboard messages from its message queue." My interpretation is that this means that ToUnicodeEx consider how the modifiers *was* rather then what they *are*.
The current implementation has another drawback: AltGr key presses never reaches the applications. In Windows, applications recieves VK_CONTROL, VK_MENU when AltGr is pressed.