diff options
author | Wismill <dev@wismill.eu> | 2023-05-01 22:30:41 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-01 23:30:41 +0300 |
commit | 5b5b67f28ccfe1fe69ec5569c90f1752de323a08 (patch) | |
tree | 09c02e8aa8d7fe495109823ee5848cdc01becb96 /meson.build | |
parent | 0e9c2ec97e8f5280171002834243104b9f53a772 (diff) | |
download | xorg-lib-libxkbcommon-5b5b67f28ccfe1fe69ec5569c90f1752de323a08.tar.gz |
Add support for modmap None (#291)
Unlike current xkbcommon, X11’s xkbcomp allows to remove entries in
the modifiers’ map using “modifier_map None { … }”.
“None” is translated to the special value “XkbNoModifier” defined in
“X11/extensions/XKB.h”. Then it relies on the fact that in "CopyModMapDef",
the following code:
1U << entry->modifier
ends up being zero when “entry->modifier” is “XkbNoModifier” (i.e. 0xFF).
Indeed, it relies on the overflow behaviour of the left shift, which in
practice resolves to use only the 5 low bits of the shift amount, i.e.
0x1F here. Then the result of “1U << 0xFF” is cast to “char”, i.e. 0.
This is a good trick but too magical, so in libxkbcommon we will use
an explicit test against our new constant XKB_MOD_NONE.
Diffstat (limited to 'meson.build')
-rw-r--r-- | meson.build | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/meson.build b/meson.build index 61c2f82..d55e8f3 100644 --- a/meson.build +++ b/meson.build @@ -675,6 +675,11 @@ test( env: test_env, suite: ['python-tests'], ) +test( + 'modifiers', + executable('test-modifiers', 'test/modifiers.c', dependencies: test_dep), + env: test_env, +) if get_option('enable-x11') test( 'x11', |