[xorg-x11-server] - server-1.9-99.901-xkb-repeat-issues.patch: update xkb repeat flags when the compat map updates (

Peter Hutterer whot at fedoraproject.org
Thu Jan 13 04:42:54 UTC 2011


commit bd8e89047c3dc49d198832be44d929ace450e62b
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Jan 13 14:42:14 2011 +1000

    - server-1.9-99.901-xkb-repeat-issues.patch: update xkb repeat flags when
      the compat map updates (#537708)

 xorg-x11-server.spec                       |   10 +++-
 xserver-1.9.99.901-xkb-repeat-issues.patch |   79 ++++++++++++++++++++++++++++
 2 files changed, 88 insertions(+), 1 deletions(-)
---
diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec
index 7656615..6cff18f 100644
--- a/xorg-x11-server.spec
+++ b/xorg-x11-server.spec
@@ -30,7 +30,7 @@
 Summary:   X.Org X11 X server
 Name:      xorg-x11-server
 Version:   1.9.99.1
-Release:   2%{?gitdate:.%{gitdate}}%{dist}
+Release:   3%{?gitdate:.%{gitdate}}%{dist}
 URL:       http://www.x.org
 License:   MIT
 Group:     User Interface/X
@@ -89,6 +89,10 @@ Patch6053: xserver-1.8-disable-vboxvideo.patch
 # misc
 Patch7005: xserver-1.9.0-qxl-fallback.patch
 
+# 537708 xmodmap Mode_switch gets stuck on
+# http://patchwork.freedesktop.org/patch/3653/
+Patch7006: xserver-1.9.99.901-xkb-repeat-issues.patch
+
 %define moduledir	%{_libdir}/xorg/modules
 %define drimoduledir	%{_libdir}/dri
 %define sdkdir		%{_includedir}/xorg
@@ -548,6 +552,10 @@ rm -rf $RPM_BUILD_ROOT
 %{xserver_source_dir}
 
 %changelog
+* Thu Jan 13 2011 Peter Hutterer <peter.hutterer at redhat.com> 1.9.99.1-3
+- server-1.9-99.901-xkb-repeat-issues.patch: update xkb repeat flags when
+  the compat map updates (#537708)
+
 * Mon Dec 06 2010 Adam Tkac <atkac redhat com> 1.9.99.1-2
 - add more files to -source subpkg to fix TigerVNC build
 
diff --git a/xserver-1.9.99.901-xkb-repeat-issues.patch b/xserver-1.9.99.901-xkb-repeat-issues.patch
new file mode 100644
index 0000000..ca1579f
--- /dev/null
+++ b/xserver-1.9.99.901-xkb-repeat-issues.patch
@@ -0,0 +1,79 @@
+From 4993bd3187f9e5398014ead5c845d2353cc3de6c Mon Sep 17 00:00:00 2001
+From: Peter Hutterer <peter.hutterer at who-t.net>
+Date: Thu, 13 Jan 2011 12:20:38 +1000
+Subject: [PATCH] xkb: after making changes to the xkb ctrls, copy them back into kbdfeed.
+
+enabled_ctrls_changes nowhere near the usual event or config paths. So this
+condition always evaluated to false and the memcpy would thus never been
+hit. As a result, any modification to the XKB struct during
+XkbUpdateDescActions was not reflected in the kbdfeed ctrls.
+The flag that is set by XkbUpdateDescActions() if ctrls were changed are in
+enabled_ctrls.
+
+This mainly affected keyboard repeat control as XKB uses the kbdfeed ctrls,
+not XKB's per_key_repeats, to determine if a key needs to be repeated. Thus,
+adding a "repeat= False" to the XKB map of any action did not have any
+effect.
+
+Test case:
+assign Mode_switch to any key that by default repeats, e.g. the menu key.
+
+    key <COMP> {         [     Mode_switch ] };
+
+Then modify the Mode_switch action to not repeat the key.
+
+    interpret Mode_switch+AnyOfOrNone(all) {
+        virtualModifier= AltGr;
+        useModMapMods=level1;
+        action= SetGroup(group=+1);
+        // Add this line
+        repeat= False;
+    };
+
+Though the flags are correctly reflected in the description loaded in the
+server, the change is not handed back to the kbdfeed struct and XKB will
+trigger softrepeats of this key.
+
+This patch also adds two explanatory comments and an extra check, as this
+path may be hit before the CtrlProc for the kbdfeed struct is set.
+
+Red Hat Bug 537708 <https://bugzilla.redhat.com/show_bug.cgi?id=537708>
+
+Also fixes broken auto-repeat of the backspace key in the colemak layout
+(mapped to CapsLock).
+
+X.Org Bug 16318 <http://bugs.freedesktop.org/show_bug.cgi?id=16318>
+
+Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
+---
+ xkb/xkbUtils.c |    7 +++++--
+ 1 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
+index 14dc784..23fe57e 100644
+--- a/xkb/xkbUtils.c
++++ b/xkb/xkbUtils.c
+@@ -342,15 +342,18 @@ CARD8 *			repeat;
+     xkb= xkbi->desc;
+     repeat= xkb->ctrls->per_key_repeat;
+ 
++    /* before letting XKB do any changes, copy the current core values */
+     if (pXDev->kbdfeed)
+ 	memcpy(repeat,pXDev->kbdfeed->ctrl.autoRepeats,XkbPerKeyBitArraySize);
+ 
+     XkbUpdateDescActions(xkb,first,num,changes);
+ 
+     if ((pXDev->kbdfeed)&&
+-	(changes->ctrls.enabled_ctrls_changes&XkbPerKeyRepeatMask)) {
++	(changes->ctrls.changed_ctrls&XkbPerKeyRepeatMask)) {
++        /* now copy the modified changes back to core */
+         memcpy(pXDev->kbdfeed->ctrl.autoRepeats,repeat, XkbPerKeyBitArraySize);
+-	(*pXDev->kbdfeed->CtrlProc)(pXDev, &pXDev->kbdfeed->ctrl);
++        if (pXDev->kbdfeed->CtrlProc)
++            (*pXDev->kbdfeed->CtrlProc)(pXDev, &pXDev->kbdfeed->ctrl);
+     }
+     return;
+ }
+-- 
+1.7.3.4
+


More information about the scm-commits mailing list