diff options
author | Gatis Paeglis <gatis.paeglis@digia.com> | 2014-02-05 16:25:06 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-19 15:42:13 +0100 |
commit | b19b0808940c8c54b102012be134a370b26e348e (patch) | |
tree | 63d951814f771e87508be7b0f8d4346d0079dc05 /src/3rdparty/xkbcommon/src/state.c | |
parent | c6b555dac389f9a599a9ad342de56dea329fff60 (diff) |
Update bundled libxkbcommon version to 0.4.0
This release comes with important bug fixes. Also we can now
remove the workaround code which was needed for libxkbcommon 0.2.0.
Task-number: QTBUG-31712
Task-number: QTBUG-33732
Task-number: QTBUG-34056
Change-Id: I57caf7f803b9a01a15541a5ad82e464de3b8abbb
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/3rdparty/xkbcommon/src/state.c')
-rw-r--r-- | src/3rdparty/xkbcommon/src/state.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/3rdparty/xkbcommon/src/state.c b/src/3rdparty/xkbcommon/src/state.c index ac4576f5b8..768d47c182 100644 --- a/src/3rdparty/xkbcommon/src/state.c +++ b/src/3rdparty/xkbcommon/src/state.c @@ -60,6 +60,7 @@ */ #include "keymap.h" +#include "keysym.h" struct xkb_filter { union xkb_action action; @@ -405,7 +406,6 @@ xkb_action_breaks_latch(const union xkb_action *action) case ACTION_TYPE_PTR_LOCK: case ACTION_TYPE_CTRL_SET: case ACTION_TYPE_CTRL_LOCK: - case ACTION_TYPE_KEY_REDIRECT: case ACTION_TYPE_SWITCH_VT: case ACTION_TYPE_TERMINATE: return true; @@ -833,13 +833,26 @@ XKB_EXPORT xkb_keysym_t xkb_state_key_get_one_sym(struct xkb_state *state, xkb_keycode_t kc) { const xkb_keysym_t *syms; + xkb_keysym_t sym; int num_syms; + xkb_mod_index_t caps; num_syms = xkb_state_key_get_syms(state, kc, &syms); if (num_syms != 1) return XKB_KEY_NoSymbol; - return syms[0]; + sym = syms[0]; + + /* + * Perform capitalization transformation, see: + * http://www.x.org/releases/current/doc/kbproto/xkbproto.html#Interpreting_the_Lock_Modifier + */ + caps = xkb_keymap_mod_get_index(state->keymap, XKB_MOD_NAME_CAPS); + if (xkb_state_mod_index_is_active(state, caps, XKB_STATE_MODS_EFFECTIVE) > 0 && + xkb_state_mod_index_is_consumed(state, kc, caps) == 0) + sym = xkb_keysym_to_upper(sym); + + return sym; } /** @@ -989,13 +1002,12 @@ xkb_state_mod_names_are_active(struct xkb_state *state, { va_list ap; xkb_mod_index_t idx = 0; - const char *str; xkb_mod_mask_t wanted = 0; int ret = 0; va_start(ap, match); while (1) { - str = va_arg(ap, const char *); + const char *str = va_arg(ap, const char *); if (str == NULL) break; idx = xkb_keymap_mod_get_index(state->keymap, str); |