There's an old xkbcomp bug that perhaps because it just causes a
harmless warning (and not with all layouts, us keyboard users won't
notice it) xorg guys never bothered about fixing it.  A couple of years
ago some guy sent them a patch that never was applied:

https://lists.x.org/archives/xorg-devel/2014-September/043751.html

The warning is indeed a bug.  The guy explains all well except for the
way to *reproduce* it, that isn't complete; to see the warning you must
set before one of the affected layouts (i.e. de, es, fr).  Some
examples:

$ setxkbmap fi -print | xkbcomp -w 1 - $DISPLAY
Warning:          Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols
                  Ignoring extra symbols
$ setxkbmap af -print | xkbcomp -w 1 - $DISPLAY
Warning:          Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols
                  Ignoring extra symbols
$ setxkbmap br -print | xkbcomp -w 1 - $DISPLAY
Warning:          Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols
                  Ignoring extra symbols
$ setxkbmap es -print | xkbcomp -w 1 - $DISPLAY
Warning:          Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols
                  Ignoring extra symbols
$ setxkbmap fr -print | xkbcomp -w 1 - $DISPLAY
Warning:          Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols
                  Ignoring extra symbols
$ setxkbmap de -print | xkbcomp -w 1 - $DISPLAY
Warning:          Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols
                  Ignoring extra symbols
$ setxkbmap pl -print | xkbcomp -w 1 - $DISPLAY
Warning:          Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols
                  Ignoring extra symbols
$ setxkbmap us -print | xkbcomp -w 1 - $DISPLAY
$ (no output with 'us' layout)
$ setxkbmap ru -print | xkbcomp -w 1 - $DISPLAY
$ (no output with 'ru' layout)

The final version of the patch (relevant part pasted also at the bottom
of this message):

http://lists.x.org/archives/xorg-devel/attachments/20140911/e675c15a/attachment.patch

The good news is *I've tried the patch in xenocara* and I can confirm it
makes the useless warning disappear and at least with the Spanish
keyboard I haven't noticed any undesirable side effects.  But I ignore
what the expected behavior in all other languages is.  If we wait for
anyone affected to try the patch it won't ever get fixed.  May be
committing the diff, put a notice in misc@, and wait to see if someone
complains? :-)  Once the patch is applied anyone may check specially if
the right alt key *when associated to level3 symbols* works as expected.


Here is the diff (xenocara/app/xkbcomp/symbols.c):

Signed-off-by: Benno Schulenberg <[email protected]>
Reviewed-by: Ran Benita <[email protected]>
---
 symbols.c |   15 ++++++++-------
 1 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/symbols.c b/symbols.c
index d43ba9f..9313d3c 100644
--- a/symbols.c
+++ b/symbols.c
@@ -339,18 +339,19 @@ MergeKeyGroups(SymbolsInfo * info,
     clobber = (from->defs.merge != MergeAugment);
     report = (warningLevel > 9) ||
         ((into->defs.fileID == from->defs.fileID) && (warningLevel > 0));
-    if (into->numLevels[group] >= from->numLevels[group])
-    {
-        resultSyms = into->syms[group];
-        resultActs = into->acts[group];
-        resultWidth = into->numLevels[group];
-    }
-    else
+    if ((from->numLevels[group] > into->numLevels[group])
+        || (clobber && (from->types[group] != None)))
     {
         resultSyms = from->syms[group];
         resultActs = from->acts[group];
         resultWidth = from->numLevels[group];
     }
+    else
+    {
+        resultSyms = into->syms[group];
+        resultActs = into->acts[group];
+        resultWidth = into->numLevels[group];
+    }
     if (resultSyms == NULL)
     {
         resultSyms = uTypedCalloc(resultWidth, KeySym);


Thanks,

        Walter

Reply via email to