diff options
author | Daniel Stone <daniel@fooishbar.org> | 2012-06-22 15:27:05 +0100 |
---|---|---|
committer | Daniel Stone <daniel@fooishbar.org> | 2012-06-22 15:27:05 +0100 |
commit | 8e2c66e9ea2f0c1302b943fe63212614b1a46e60 (patch) | |
tree | fa0d8d47908cbd3ca901838c17759d70838ce97d | |
parent | fe89d031548b815e57aaef462354e6c400287de5 (diff) | |
download | xorg-lib-libxkbcommon-8e2c66e9ea2f0c1302b943fe63212614b1a46e60.tar.gz |
Add xkb_key_repeats
Does what it says on the box.
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
-rw-r--r-- | include/xkbcommon/xkbcommon.h | 6 | ||||
-rw-r--r-- | src/map.c | 9 | ||||
-rw-r--r-- | test/state.c | 13 |
3 files changed, 28 insertions, 0 deletions
diff --git a/include/xkbcommon/xkbcommon.h b/include/xkbcommon/xkbcommon.h index 4c148d5..31d0dcf 100644 --- a/include/xkbcommon/xkbcommon.h +++ b/include/xkbcommon/xkbcommon.h @@ -367,6 +367,12 @@ xkb_group_index_t xkb_key_num_groups(struct xkb_keymap *keymap, xkb_keycode_t key); /** + * Returns 1 if the key should repeat, or 0 otherwise. + */ +int +xkb_key_repeats(struct xkb_keymap *keymap, xkb_keycode_t key); + +/** * Returns the number of LEDs in the given map. */ xkb_led_index_t @@ -351,3 +351,12 @@ err: *syms_out = NULL; return 0; } + +/** + * Simple boolean specifying whether or not the key should repeat. + */ +_X_EXPORT int +xkb_key_repeats(struct xkb_keymap *keymap, xkb_keycode_t key) +{ + return !!(keymap->ctrls->per_key_repeat[key / 8] & (1 << (key % 8))); +} diff --git a/test/state.c b/test/state.c index 2409a23..d32a1ea 100644 --- a/test/state.c +++ b/test/state.c @@ -227,6 +227,18 @@ test_serialisation(struct xkb_keymap *keymap) xkb_state_unref(state); } +static void +test_repeat(struct xkb_keymap *keymap) +{ + xkb_keycode_t key; + fprintf(stderr, "%s\n", xkb_map_get_as_string(keymap)); + for (key = keymap->min_key_code; key < keymap->max_key_code; key++) + if (xkb_key_repeats(keymap, key)) + fprintf(stderr, "%d repeats!\n", key); + assert(!xkb_key_repeats(keymap, KEY_LEFTSHIFT + 8)); + assert(xkb_key_repeats(keymap, KEY_A + 8)); +} + int main(void) { @@ -248,6 +260,7 @@ main(void) test_update_key(keymap); test_serialisation(keymap); + test_repeat(keymap); xkb_map_unref(keymap); xkb_context_unref(context); |