Race condition in keyboard code?

Peter Åstrand astrand at cendio.se
Fri Mar 24 02:45:06 CST 2006


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.

-- 
Peter Åstrand		ThinLinc Chief Developer
Cendio			http://www.cendio.se
Teknikringen 3
583 30 Linköping        Phone: +46-13-21 46 00


More information about the wine-devel mailing list