Summary: | Characters losing their shiftedness when input rapidly | ||||||
---|---|---|---|---|---|---|---|
Product: | xorg | Reporter: | David <spam747> | ||||
Component: | Input/Keyboard | Assignee: | Adam Jackson <ajax> | ||||
Status: | RESOLVED FIXED | QA Contact: | Xorg Project Team <xorg-team> | ||||
Severity: | normal | ||||||
Priority: | high | Keywords: | patch | ||||
Version: | 6.7.0 | ||||||
Hardware: | x86 (IA32) | ||||||
OS: | Linux (All) | ||||||
Whiteboard: | |||||||
i915 platform: | i915 features: | ||||||
Attachments: |
|
Description
David
2004-10-05 13:45:24 UTC
Created attachment 2614 [details] [review] Patch that corrects problem I'm completely new to hacking X, so all I can say is that it seems to work for me. The problem is that the kbd driver looks for two key-pressed keycodes without a key-release keycode between them. It then discards these for certain keys (shift,control,alt, etc.) if they're irrelevant autorepeats. The old code used the KeyPressed() macro to determine whether a "down" keycode had arrived for a key that was already down, but this macro uses data that isn't updated until the event queue is processed. As a result, very rapid keypresses might cause a new "down" to be seen before an older "up" gets processed (a race condition). The magswipe sends an explicit "shift down" and "shift up" before and after each shifted character, triggering the failure. To correct this, the key state information is handled via a static local variable instead of the structure managed by the event handler. i'll take this one. Sorry about the phenomenal bug spam, guys. Adding xorg-team@ to the QA contact so bugs don't get lost in future. This has sense radically changed. If things don't work with the new keyboard driver or evdev, please reopen. |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.