Another delightful bug when XKB is disabled. If you feed the core only
repeated KeyPress events, it's supposed to generate KeyRelease events
automatically. Unfortunately that code is broken and generates an
incorrect list of events.

Problems exists in 1.5 and 1.6.

Patch:

--- dix/getevents.c.orig        2009-04-24 16:16:44.000000000 +0200
+++ dix/getevents.c     2009-04-24 16:19:20.000000000 +0200
@@ -406,6 +406,7 @@ GetKeyboardValuatorEvents(xEvent *events
                           int key_code, int first_valuator,
                           int num_valuators, int *valuators) {
     int numEvents = 0;
+    int numReleaseEvents;
     CARD32 ms = 0;
     KeySym *map = pDev->key->curKeySyms.map;
     KeySym sym;
@@ -470,11 +471,13 @@ GetKeyboardValuatorEvents(xEvent *events
         if (noXkbExtension)
 #endif
         {
-            numEvents += GetKeyboardValuatorEvents(events, pDev,
-                                                   KeyRelease, key_code,
-                                                   first_valuator, 
num_valuators,
-                                                   valuators);
-            events += numEvents;
+            numReleaseEvents = GetKeyboardValuatorEvents(events, pDev,
+                                                         KeyRelease, key_code,
+                                                         first_valuator,
+                                                         num_valuators,
+                                                         valuators);
+            numEvents += numReleaseEvents;
+            events += numReleaseEvents;
         }
     }
 


-- 
Pierre Ossman            OpenSource-based Thin Client Technology
System Developer         Telephone: +46-13-21 46 00
Cendio AB                Web: http://www.cendio.com

Attachment: signature.asc
Description: PGP signature

_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to