Edit

kc3-lang/libxkbcommon/test/data/keymaps/include-level3-explicit-default.xkb

Branch :

  • Show log

    Commit

  • Author : Pierre Le Marre
    Date : 2025-04-15 19:53:28
    Hash : 9b0b8c68
    Message : xkbcomp: Stricter handling of default map include Before this commit, including a *default* map, i.e. without an explicit section name (e.g. `include "au"` vs `include "au(basic)"`) would match the first section of the first matching file in the XKB include paths, even if this section is not an *explicit* default map (i.e. tagged with `default`) but an *implicit* default map (i.e. the first map of the file, i.e. a weak match). It makes user configuration risky: say a user wants to create a custom version `au(custom)` of the `au` layout: - `./config/xkb/symbols/au`: custom layout in section “custom”. - `/usr/share/X11/xkb/symbols/au`: system layout, with *default* section “basic”. In this setup *any* layout that imports the default map from `au` would in fact import the *implicit* default map `au(custom)` instead of the *explicit* default map `au(basic)`. This incorrect behavior may thus break setups with multiple layouts. This is especially true for symbols files such as: `pc`, `us` or `latin`. Fixed by trying harder to found the exact default map, defaulting to the old behavior (weak match) only if no *explicit* default map (exact match) has been found in the XKB include paths.

  • test/data/keymaps/include-level3-explicit-default.xkb
  • xkb_keymap {
    xkb_keycodes {
    	minimum = 8;
    	maximum = 255;
    	<LVL3>               = 92;
    	<RALT>               = 108;
    };
    
    xkb_types "basic" {
    	virtual_modifiers NumLock;
    
    	type "ONE_LEVEL" {
    		modifiers= none;
    		level_name[1]= "Any";
    	};
    	type "TWO_LEVEL" {
    		modifiers= Shift;
    		map[Shift]= 2;
    		level_name[1]= "Base";
    		level_name[2]= "Shift";
    	};
    	type "ALPHABETIC" {
    		modifiers= Shift+Lock;
    		map[Shift]= 2;
    		map[Lock]= 2;
    		level_name[1]= "Base";
    		level_name[2]= "Caps";
    	};
    };
    
    xkb_compatibility {
    	virtual_modifiers NumLock;
    
    	interpret.useModMapMods= AnyLevel;
    	interpret.repeat= False;
    };
    
    xkb_symbols "level3" {
    	key <LVL3>               {
    		type= "ONE_LEVEL",
    		symbols[Group1]= [ ISO_Level3_Shift ]
    	};
    	key <RALT>               {	[ ISO_Level3_Shift, ISO_Level3_Lock ] };
    	modifier_map Mod5 { <LVL3> };
    };
    
    };