• Show log

    Commit

  • Hash : b0b11c4e
    Author : Ran Benita
    Date : 2012-08-02T00:29:07

    types: don't use canonical/required types
    
    Xkb required every keymap to have at least the four following canonical
    types: ONE_LEVEL, TWO_LEVEL, ALPHABETIC, KEYPAD. This is specified in
    e.g. the kbproto spec and XkbKeyTypesForCoreSymbols(3) man page.
    
    If these types are not specified in the keymap, the code specifically
    checks for them and adds them to the 4 first places in the types array,
    such that they exist in every keymap. These are also the types (along
    with some non-required 4-level ones) that are automatically assigned to
    keys which do not explicitly declare a type (see FindAutomaticType in
    symbols.c, this commit doesn't touch these heuristics, whcih are also not
    very nice but necessary).
    
    The xkeyboard-config does not rely on the builtin xkbcomp definitions of
    these types and does specify them explicitly, in types/basic and
    types/numpad, which are virtually always included.
    
    This commit removes the special behavior:
    - The code is ugly and makes keytypes.c harder to read.
    - The code practically never gets run - everyone who uses
      xkeyboard-config or a keymap based upon it (i.e. everyone) doesn't need
      it. So it doesn't get tested.
    - It mixes policy with implementation for not very good reasons, it
      seems mostly for default compatibility with X11 core.
    - And of course we don't need to remain compatible with Xkb ABI neither.
    
    Instead, if we read a keymap with no types specified at all, we simply
    assign all keys a default one-level type (like ONE_LEVEL), and issue
    plenty of warnings to make it clear (with verbosity >= 3). Note that
    this default can actually be changed from within the keymap, by writing
    something like
        type.modifier = Shift
        type.whatever_field = value
    in the top level of the xkb_types section. (This functionality is
    completely unused as well today, BTW, but makes some sense).
    
    This change means that if someone writes a keymap from scratch and
    doesn't add say ALPHABETIC, then something like <AE11> = { [ q Q ]; }; will
    ignore the second level. But as stated above this should never happen.
    
    Signed-off-by: Ran Benita <ran234@gmail.com>
    

  • Properties

  • Git HTTP https://git.kmx.io/kc3-lang/libxkbcommon.git
    Git SSH git@git.kmx.io:kc3-lang/libxkbcommon.git
    Public access ? public
    Description

    keymap handling library for toolkits and window systems

    Users
    kc3_lang_org www_kmx_io thodg_w thodg_l thodg thodg_m
    Tags