state: Add xkb_state_key_get_consumed_mods
This retrieves the mask of consumed modifiers for a given key and state, which is helpful for toolkits without having them to do it one modifier at a time, or pass in 0xFFFFFFFF to xkb_state_remove_consumed_mods to "reverse-engineer" the consumed mods.master
parent
1fa7d6d3ab
commit
4fb7b06b0f
11
src/state.c
11
src/state.c
|
@ -1169,3 +1169,14 @@ xkb_state_mod_mask_remove_consumed(struct xkb_state *state, xkb_keycode_t kc,
|
|||
|
||||
return mask & ~key_get_consumed(state, key);
|
||||
}
|
||||
|
||||
XKB_EXPORT xkb_mod_mask_t
|
||||
xkb_state_key_get_consumed_mods(struct xkb_state *state, xkb_keycode_t kc)
|
||||
{
|
||||
const struct xkb_key *key = XkbKey(state->keymap, kc);
|
||||
|
||||
if (!key)
|
||||
return 0;
|
||||
|
||||
return key_get_consumed(state, key);
|
||||
}
|
||||
|
|
|
@ -333,6 +333,9 @@ test_consume(struct xkb_keymap *keymap)
|
|||
mask);
|
||||
assert(mask == (1U << alt));
|
||||
|
||||
mask = xkb_state_key_get_consumed_mods(state, KEY_EQUAL + EVDEV_OFFSET);
|
||||
assert(mask == (1U << shift));
|
||||
|
||||
xkb_state_unref(state);
|
||||
}
|
||||
|
||||
|
|
|
@ -1483,6 +1483,7 @@ xkb_state_mod_indices_are_active(struct xkb_state *state,
|
|||
* index is not valid in the keymap, returns -1.
|
||||
*
|
||||
* @sa xkb_state_mod_mask_remove_consumed()
|
||||
* @sa xkb_state_key_get_consumed_mods()
|
||||
* @memberof xkb_state
|
||||
*/
|
||||
int
|
||||
|
@ -1502,6 +1503,17 @@ xkb_mod_mask_t
|
|||
xkb_state_mod_mask_remove_consumed(struct xkb_state *state, xkb_keycode_t key,
|
||||
xkb_mod_mask_t mask);
|
||||
|
||||
/**
|
||||
* Get the mask of modifiers consumed by translating a given key.
|
||||
*
|
||||
* @returns a mask of the consumed modifiers.
|
||||
*
|
||||
* @sa xkb_state_mod_index_is_consumed()
|
||||
* @memberof xkb_state
|
||||
*/
|
||||
xkb_mod_mask_t
|
||||
xkb_state_key_get_consumed_mods(struct xkb_state *state, xkb_keycode_t key);
|
||||
|
||||
/**
|
||||
* Test whether a layout is active in a given keyboard state by name.
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue