Go to file
Ran Benita b5586a6c42 keysym: fix locale dependence in xkb_keysym_from_name()
We currently use strcasecmp, which is locale-dependent. In particular,
one well-known surprise even if restricted just ASCII input is found in
the tr_TR (Turkish) locale, see e.g.
https://msdn.microsoft.com/en-us/library/ms973919.aspx#stringsinnet20_topic5

We have known to avoid locale-dependent functions before, but in this
case, we forgot.

Fix it by implementing our own simple ASCII-only strcasecmp/strncasecmp.
Might have been possible to use strcasecmp_l() with the C locale, but
went the easy route.

Side advantage is that even this non-optimized version is faster than
the optimized libc one (__strcasecmp_l_sse42) since it doesn't need to
do the locale stuff. xkb_keysym_from_name(), which uses strcasecmp
heavily, becomes faster, and so for example Compose file parsing, which
uses xkb_keysym_from_name() heavily, becomes ~20% faster.

Resolves https://github.com/xkbcommon/libxkbcommon/issues/42
Signed-off-by: Ran Benita <ran234@gmail.com>
2016-12-02 23:46:56 +02:00
bench bench: fix compilation on hurd 2016-09-19 10:09:12 +03:00
doc doc/compat: (! MODIFIER) syntax is parsed but ignored 2016-09-01 21:23:23 +03:00
m4 Remove m4/.gitkeep 2014-02-08 22:44:59 +02:00
src keysym: fix locale dependence in xkb_keysym_from_name() 2016-12-02 23:46:56 +02:00
test keysym: fix locale dependence in xkb_keysym_from_name() 2016-12-02 23:46:56 +02:00
xkbcommon state: add GTK consumed modifiers mode 2016-10-31 12:52:28 +02:00
.autom4te.cfg build: use build-aux as autom4te cache directory 2013-08-15 09:58:50 +03:00
.gitignore gitignore: ignore generated wayland protocol stubs 2016-04-19 12:40:41 +03:00
.travis.yml travis: remove --disable-x11 2016-03-15 20:16:29 +02:00
.uncrustify.cfg Run source tree through uncrustify 2012-07-17 10:20:15 +01:00
Android.mk Android.mk: Remove unnecessary for loop 2012-09-11 15:11:35 +01:00
LICENSE test: Add interactive-wayland 2016-04-12 12:15:04 +01:00
Makefile.am test: Add interactive-wayland 2016-04-12 12:15:04 +01:00
NEWS Update NEWS 2016-11-11 20:01:43 +02:00
PACKAGING PACKAGING: Update for interactive-wayland 2016-06-21 11:35:21 +10:00
README.md README: Add basic build directions 2016-09-16 09:24:09 +03:00
autogen.sh autogen: use --force instead of --symlink 2012-10-24 00:59:37 +11:00
configure.ac keysym: fix locale dependence in xkb_keysym_from_name() 2016-12-02 23:46:56 +02:00
makekeys.py makekeys: mark keysym_names as static 2014-01-11 00:26:58 +02:00
xkbcommon-uninstalled.pc.in build: drop the include/ directory 2012-07-23 00:45:34 +03:00
xkbcommon-x11-uninstalled.pc.in x11: add XKB protocol keymap and state creation support 2014-02-02 11:16:40 +02:00
xkbcommon-x11.map Change initial symbol file versions to V_0.5.0 2014-10-18 16:40:59 +03:00
xkbcommon-x11.pc.in x11: add XKB protocol keymap and state creation support 2014-02-02 11:16:40 +02:00
xkbcommon.map state: allow different modes for calculating consumed modifiers 2016-10-31 12:52:26 +02:00
xkbcommon.pc.in Remove xproto and kbproto from pkg-config file 2012-04-09 14:04:25 +01:00

README.md

libxkbcommon

libxkbcommon is a keyboard keymap compiler and support library which processes a reduced subset of keymaps as defined by the XKB (X Keyboard Extension) specification. It also contains a module for handling Compose and dead keys.

Quick Guide

See Quick Guide.

Building

libxkbcommon is built the typical autoconf way:

./autogen.sh
make

To build for use with Wayland, you can disable X11 support while still using the X11 keyboard configuration resource files thusly:

./autogen.sh --disable-x11 \
    --with-xkb-config-root=/usr/share/X11/xkb \
    --with-x-locale-root=/usr/share/X11/locale
make

API

While libxkbcommon's API is somewhat derived from the classic XKB API as found in X11/extensions/XKB.h and friends, it has been substantially reworked to expose fewer internal details to clients.

See the API Documentation.

Dataset

libxkbcommon does not distribute a keymap dataset itself, other than for testing purposes. The most common dataset is xkeyboard-config, which is used by all current distributions for their X11 XKB data. More information on xkeyboard-config is available here: http://www.freedesktop.org/wiki/Software/XKeyboardConfig

The dataset for Compose is distributed in libX11, as part of the X locale data.

Relation to X11

See Compatibility notes.

Development

An extremely rudimentary homepage can be found at http://xkbcommon.org

xkbcommon is maintained in git at https://github.com/xkbcommon/libxkbcommon

Patches are always welcome, and may be sent to either xorg-devel@lists.x.org or wayland-devel@lists.freedesktop.org or through github.

Bug reports are also welcome, and may be filed either at Bugzilla https://bugs.freedesktop.org/describecomponents.cgi?product=libxkbcommon or Github https://github.com/xkbcommon/libxkbcommon/issues

The maintainers are

Credits

Many thanks are due to Dan Nicholson for his heroic work in getting xkbcommon off the ground initially.