[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#536006: rules/*.xml allow unsupported model/layout combinations



Package: xkb-data
Version: 1.6-1

Hi!

Keyboard configuration programs use /usr/share/X11/xkb/rules/*.xml file 
in order to find the possible models, layouts, variants.  Unfortunately 
some Macintosh-related combination are not supported.  For example the 
following logical choice is not supported: keyboard model 'macintosh' 
("Macintosh"), layout 'de' ("Germany") and variant 'mac_nodeadkeys' 
("Germany - Macintosh, eliminate dead keys").

The reason for this is that when the user selects model 'macintosh' and 
layout 'de' the file /usr/share/X11/xkb/symbols/macintosh_vndr/de is 
used instead of /usr/share/X11/xkb/symbols/de and there is no 
mac_nodeadkeys there.  As a result the keyboard is leaved in a bad 
state.

I suppose that one possible fix for this problem would be to ignore the 
files in macintosh_vndr.  The standard files in 
/usr/share/X11/xkb/symbols describe all Mac-layouts so there is no need 
to use the files in macintosh_vndr.  You can find attached a patch that 
shows how this can be fixed but I suppose this will require some 
discussion with the upstream before applying it.

Anton Zinoviev

diff -Naur rules/base rules.new/base
--- rules/base	2009-07-06 21:05:17.790404174 +0300
+++ rules.new/base	2009-07-06 21:06:26.588583187 +0300
@@ -31,8 +31,6 @@
 ! $maclaptop = ibook powerbook macbook78 macbook79
 ! $macs = macintosh macintosh_old ibook powerbook macbook78 macbook79
 
-! $macvendorlayouts = ch de dk es fi fr gb is it latam nl no pt se us
-
 ! $azerty = be fr
 ! $qwertz = al cz de hr hu ro si sk 
 
@@ -303,11 +301,9 @@
   pc98		nec_vndr/jp		=	nec_vndr/jp(pc98)
   macintosh_old	us			=	macintosh_vndr/us(oldmac)
   macintosh_old	en_US			=	macintosh_vndr/us(oldmac)
-  macintosh_old	$macvendorlayouts	=	macintosh_vndr/us(oldmac)+macintosh_vndr/%l%(v)
   macintosh_old	$nonlatin		=	macintosh_vndr/us(oldmac)+%l%(v):2
   macintosh_old	*			=	macintosh_vndr/us(oldmac)+%l%(v)
  $macs		en_US			=	pc+macintosh_vndr/us(extended)
- $macs		$macvendorlayouts	=	pc+macintosh_vndr/%l%(v)
   olpc		$olpclayouts		=	olpc+%l%(m)
   olpc		*			=	olpc+%l%(v)
  $thinkpads   	br			=	pc+br(thinkpad)
@@ -396,9 +392,7 @@
   sun4		*			=	latin+sun_vndr/us(sun4)+%l[1]%(v[1])
   sun5		*			=	latin+sun_vndr/us(sun5)+%l[1]%(v[1])
   macintosh_old	us			=	macintosh_vndr/us(oldmac)
-  macintosh_old	$macvendorlayouts	=	macintosh_vndr/us(oldmac)+macintosh_vndr/%l[1]%(v[1])
   macintosh_old	*			=	macintosh_vndr/us(oldmac)+%l[1]%(v[1])
- $macs		$macvendorlayouts	=	pc+macintosh_vndr/%l[1]%(v[1])
  $thinkpads	br			=	pc+%l[1](thinkpad)
   *		*			=	pc+%l[1]%(v[1])
 
diff -Naur rules/evdev rules.new/evdev
--- rules/evdev	2009-07-06 21:05:17.798900672 +0300
+++ rules.new/evdev	2009-07-06 21:06:42.248594585 +0300
@@ -31,8 +31,6 @@
 ! $maclaptop = ibook powerbook macbook78 macbook79
 ! $macs = macintosh macintosh_old ibook powerbook macbook78 macbook79
 
-! $macvendorlayouts = ch de dk es fi fr gb is it latam nl no pt se us
-
 ! $azerty = be fr
 ! $qwertz = al cz de hr hu ro si sk 
 
@@ -292,11 +290,9 @@
   pc98		nec_vndr/jp		=	nec_vndr/jp(pc98)
   macintosh_old	us			=	macintosh_vndr/us(oldmac)
   macintosh_old	en_US			=	macintosh_vndr/us(oldmac)
-  macintosh_old	$macvendorlayouts	=	macintosh_vndr/us(oldmac)+macintosh_vndr/%l%(v)
   macintosh_old	$nonlatin		=	macintosh_vndr/us(oldmac)+%l%(v):2
   macintosh_old	*			=	macintosh_vndr/us(oldmac)+%l%(v)
  $macs		en_US			=	pc+macintosh_vndr/us(extended)
- $macs		$macvendorlayouts	=	pc+macintosh_vndr/%l%(v)
   olpc		$olpclayouts		=	olpc+%l%(m)
   olpc		*			=	olpc+%l%(v)
  $thinkpads   	br			=	pc+br(thinkpad)
@@ -385,9 +381,7 @@
   sun4		*			=	latin+sun_vndr/us(sun4)+%l[1]%(v[1])
   sun5		*			=	latin+sun_vndr/us(sun5)+%l[1]%(v[1])
   macintosh_old	us			=	macintosh_vndr/us(oldmac)
-  macintosh_old	$macvendorlayouts	=	macintosh_vndr/us(oldmac)+macintosh_vndr/%l[1]%(v[1])
   macintosh_old	*			=	macintosh_vndr/us(oldmac)+%l[1]%(v[1])
- $macs		$macvendorlayouts	=	pc+macintosh_vndr/%l[1]%(v[1])
  $thinkpads	br			=	pc+%l[1](thinkpad)
   *		*			=	pc+%l[1]%(v[1])
 

Reply to: