keymap: wrap the layout parameter if it is out of range for the key
authorRan Benita <ran234@gmail.com>
Sat, 10 Nov 2012 22:22:46 +0000 (00:22 +0200)
committerRan Benita <ran234@gmail.com>
Sat, 10 Nov 2012 22:32:16 +0000 (00:32 +0200)
commit60bd92021b63ecd3f8396704c841a0bf0fdab72b
tree65163ad722b934323a02a6eac51ebe6b0a37cc9b
parent324d4dbd99f5fb409e8466165481fe2d56c8eb8c
keymap: wrap the layout parameter if it is out of range for the key

The functions num_levels_for_key() and get_syms_by_level() have a
'layout' parameter. Currently it is expected that this value is always
legal for the key, as determined by num_layouts_for_key(). However,
there are legitimate use cases for passing an out-of-range layout there,
most probably passing the effective layout, and expecting to get the
keysyms/levels for just this layout. So we wrap it just as we do in the
xkb_state_* functions.

This is also useful for stuff like this:
http://developer.gnome.org/gdk/stable/gdk-Keyboard-Handling.html#gdk-keymap-lookup-key

If this behavior is not desired, the user has the option to check
against num_layouts_for_key herself.

https://bugs.freedesktop.org/show_bug.cgi?id=56866

Reported-by: Gatis Paeglis <gatis.paeglis@digia.com>
Signed-off-by: Ran Benita <ran234@gmail.com>
src/keymap.c
src/keymap.h
src/state.c
xkbcommon/xkbcommon.h