summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--x11/modular-xorg-server/Makefile4
-rw-r--r--x11/modular-xorg-server/distinfo3
-rw-r--r--x11/modular-xorg-server/patches/patch-xkb83
3 files changed, 87 insertions, 3 deletions
diff --git a/x11/modular-xorg-server/Makefile b/x11/modular-xorg-server/Makefile
index 6650da8086b..160635152b7 100644
--- a/x11/modular-xorg-server/Makefile
+++ b/x11/modular-xorg-server/Makefile
@@ -1,9 +1,9 @@
-# $NetBSD: Makefile,v 1.37 2008/11/10 17:21:38 wiz Exp $
+# $NetBSD: Makefile,v 1.38 2008/12/21 10:23:23 ahoka Exp $
#
DISTNAME= xorg-server-1.4.2
PKGNAME= modular-${DISTNAME}
-PKGREVISION= 2
+PKGREVISION= 3
CATEGORIES= x11
MASTER_SITES= ${MASTER_SITE_XORG:=xserver/}
EXTRACT_SUFX= .tar.bz2
diff --git a/x11/modular-xorg-server/distinfo b/x11/modular-xorg-server/distinfo
index 58f65acbf9a..6e636b4c920 100644
--- a/x11/modular-xorg-server/distinfo
+++ b/x11/modular-xorg-server/distinfo
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.28 2008/10/29 22:20:28 bjs Exp $
+$NetBSD: distinfo,v 1.29 2008/12/21 10:23:23 ahoka Exp $
SHA1 (Mesa-7.0.4-xorg-server_GL) = 6aed65e64c7a684a5d707334a4b4fe7711966380
RMD160 (Mesa-7.0.4-xorg-server_GL) = 2028532d79f5bba1d09ae787a1799fc4b206a5d7
@@ -23,3 +23,4 @@ SHA1 (patch-sb) = b769780b446e4f10bc99ccd3373d666daf44f863
SHA1 (patch-sc) = 33c4d4731e3732032f84946fc17e28d0cba389a6
SHA1 (patch-sd) = ac8f5bc3bca8c21e91d7206a5b2cb400c54f7414
SHA1 (patch-se) = 22b20c734b7fcf59d75227aeb1fa703465582568
+SHA1 (patch-xkb) = 4bd5f8d86cf3ad2f351cf8407221cf79812ed8e6
diff --git a/x11/modular-xorg-server/patches/patch-xkb b/x11/modular-xorg-server/patches/patch-xkb
new file mode 100644
index 00000000000..b031dc0372c
--- /dev/null
+++ b/x11/modular-xorg-server/patches/patch-xkb
@@ -0,0 +1,83 @@
+From d9f2792dd4a6bc078bb58e22c55ee20c56aabe49 Mon Sep 17 00:00:00 2001
+From: Peter Hutterer <peter.hutterer@redhat.com>
+Date: Fri, 19 Sep 2008 18:27:24 +0930
+Subject: [PATCH] xkb: fix core keyboard map generation. #14373
+
+According to Section 12.4 of the XKB Protocol Spec, if a key only has a single
+group but the keyboard has multiple groups defined, the core description of
+the key is a duplication of the single group across all symbols. i.e.
+G1L1 G1L2 G1L1 G1L2 G1L3 G1L4 G1L3 G1L4
+
+The previous code generated G1L1 G1L2 G1L3 G1L4 G1L3 G1L4, leading to
+"invented" groups when the process is reversed.
+
+Note that this creates wrong key types on reconstruction from core to xkb,
+i.e. any single-group key with a key type that is not one of the canonical
+four (Sec 12.2.3), will get the assigned type on group 1, and a canonical type
+for the other gruops.
+
+X.Org Bug 14373 <http://bugs.freedesktop.org/show_bug.cgi?id=14373>
+---
+ xkb/xkbUtils.c | 39 ++++++++++++++++++++++++++++++++++-----
+ 1 files changed, 34 insertions(+), 5 deletions(-)
+
+diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
+index 486446a..7e9f8d0 100644
+--- xkb/xkbUtils.c
++++ xkb/xkbUtils.c
+@@ -504,6 +504,40 @@ CARD8 keysPerMod[XkbNumModifiers];
+ if (groupWidth>2)
+ nOut= groupWidth;
+ }
++
++ /* See XKB Protocol Sec, Section 12.4.
++ A 1-group key with ABCDE on a 2 group keyboard must be
++ duplicated across all groups as ABABCDECDE.
++ */
++ if (nGroups == 1)
++ {
++ int idx;
++
++ groupWidth = XkbKeyGroupWidth(xkb, key, XkbGroup1Index);
++
++ /* AB..CDE... -> ABABCDE... */
++ if (groupWidth > 0 && maxSymsPerKey >= 3)
++ pCore[2] = pCore[0];
++ if (groupWidth > 1 && maxSymsPerKey >= 4)
++ pCore[3] = pCore[1];
++
++ /* ABABCDE... -> ABABCDECDE */
++ idx = 2 + groupWidth;
++ while (groupWidth > 2 &&
++ idx < maxSymsPerKey &&
++ idx < groupWidth * 2)
++ {
++ pCore[idx] = pCore[idx - groupWidth + 2];
++ idx++;
++ }
++ idx = 2 * groupWidth;
++ if (idx < 4)
++ idx = 4;
++ /* 3 or more groups: ABABCDECDEABCDEABCDE */
++ for (n = 0; n < groupWidth && idx < maxSymsPerKey; n++)
++ pCore[idx++] = pXKB[n];
++ }
++
+ pXKB+= XkbKeyGroupsWidth(xkb,key);
+ nOut+= 2;
+ if (nGroups>1) {
+@@ -525,11 +559,6 @@ CARD8 keysPerMod[XkbNumModifiers];
+ }
+ pXKB+= XkbKeyGroupsWidth(xkb,key);
+ }
+- if (!pCore[2] && !pCore[3] && maxSymsPerKey >= 6 &&
+- (pCore[4] || pCore[5])) {
+- pCore[2] = pCore[4];
+- pCore[3] = pCore[5];
+- }
+ }
+ if (keyc->modifierMap[key]!=0) {
+ register unsigned bit,i,mask;
+--
+1.5.4.3
+