On Sat, Jun 04, 2016 at 06:42:07PM +0200, Walter Alejandro Iglesias wrote:
> 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.
Warning gone from X startup and setxkbmap dk test like the above,
and (apparently) no functional change to RALT level3 behaviour with
dk layout after patch applied to xkbcomp and running the Jun 1st
snapshot:
OpenBSD 6.0-beta (GENERIC.MP) #2161: Wed Jun 1 10:58:02 MDT 2016
[email protected]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
Thanks,
Rune
> 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
>