Add xkb_state_key_get_one_sym
The trivial wrapper around xkb_state_key_get_syms that every user to date has implemented. Signed-off-by: Daniel Stone <daniel@fooishbar.org>master
parent
29a8b1ceac
commit
5aaf65b74e
16
src/state.c
16
src/state.c
|
@ -765,6 +765,22 @@ err:
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides either exactly one symbol, or XKB_KEY_NoSymbol.
|
||||
*/
|
||||
XKB_EXPORT xkb_keysym_t
|
||||
xkb_state_key_get_one_sym(struct xkb_state *state, xkb_keycode_t kc)
|
||||
{
|
||||
xkb_keysym_t *syms;
|
||||
int num_syms;
|
||||
|
||||
num_syms = xkb_state_key_get_syms(state, kc, &syms);
|
||||
if (num_syms != 1)
|
||||
return XKB_KEY_NoSymbol;
|
||||
|
||||
return syms[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialises the requested modifier state into an xkb_mod_mask_t, with all
|
||||
* the same disclaimers as in xkb_state_update_mask.
|
||||
|
|
15
test/state.c
15
test/state.c
|
@ -96,6 +96,7 @@ test_update_key(struct xkb_keymap *keymap)
|
|||
{
|
||||
struct xkb_state *state = xkb_state_new(keymap);
|
||||
const xkb_keysym_t *syms;
|
||||
xkb_keysym_t one_sym;
|
||||
int num_syms;
|
||||
|
||||
assert(state);
|
||||
|
@ -174,6 +175,20 @@ test_update_key(struct xkb_keymap *keymap)
|
|||
num_syms = xkb_state_key_get_syms(state, KEY_Q + EVDEV_OFFSET, &syms);
|
||||
assert(num_syms == 1 && syms[0] == XKB_KEY_q);
|
||||
|
||||
/* Multiple symbols */
|
||||
num_syms = xkb_state_key_get_syms(state, KEY_6 + EVDEV_OFFSET, &syms);
|
||||
assert(num_syms == 5 &&
|
||||
syms[0] == XKB_KEY_H && syms[1] == XKB_KEY_E &&
|
||||
syms[2] == XKB_KEY_L && syms[3] == XKB_KEY_L &&
|
||||
syms[4] == XKB_KEY_O);
|
||||
one_sym = xkb_state_key_get_one_sym(state, KEY_6 + EVDEV_OFFSET);
|
||||
assert(one_sym == XKB_KEY_NoSymbol);
|
||||
xkb_state_update_key(state, KEY_6 + EVDEV_OFFSET, XKB_KEY_DOWN);
|
||||
xkb_state_update_key(state, KEY_6 + EVDEV_OFFSET, XKB_KEY_UP);
|
||||
|
||||
one_sym = xkb_state_key_get_one_sym(state, KEY_5 + EVDEV_OFFSET);
|
||||
assert(one_sym == XKB_KEY_5);
|
||||
|
||||
xkb_state_unref(state);
|
||||
}
|
||||
|
||||
|
|
|
@ -724,6 +724,13 @@ int
|
|||
xkb_state_key_get_syms(struct xkb_state *state, xkb_keycode_t key,
|
||||
const xkb_keysym_t **syms_out);
|
||||
|
||||
/**
|
||||
* As with xkb_state_key_get_syms, but either returns exactly keysym, or
|
||||
* XKB_KEY_NoSymbol if there are either zero or more than one symbols.
|
||||
*/
|
||||
xkb_keysym_t
|
||||
xkb_state_key_get_one_sym(struct xkb_state *state, xkb_keycode_t key);
|
||||
|
||||
/**
|
||||
* Returns the layout number that would be active for a particular key with
|
||||
* the given state.
|
||||
|
|
Loading…
Reference in New Issue