}
/**
- * Return the total number of active LEDs in the keymap.
+ * Return the total number of LEDs in the keymap.
*/
XKB_EXPORT xkb_led_index_t
xkb_keymap_num_leds(struct xkb_keymap *keymap)
{
- const struct xkb_indicator_map *led;
- xkb_led_index_t ret = 0;
-
- darray_foreach(led, keymap->indicators)
- if (led->which_groups || led->groups || led->which_mods ||
- led->mods.mods || led->ctrls)
- ret++;
-
- return ret;
+ return darray_size(keymap->indicators);
}
/**
printf("] ");
printf("leds [ ");
- for (led = 0; led < sizeof(xkb_led_mask_t) * 8; led++) {
+ for (led = 0; led < xkb_keymap_num_leds(keymap); led++) {
if (xkb_state_led_index_is_active(state, led) <= 0)
continue;
printf("%s ", xkb_keymap_led_get_name(keymap, led));
"locked " : "");
}
- for (led = 0; led < sizeof(xkb_led_mask_t) * 8; led++) {
+ for (led = 0; led < xkb_keymap_num_leds(keymap); led++) {
if (xkb_state_led_index_is_active(state, led) <= 0)
continue;
fprintf(stderr, "\tled %s (%d): active\n",
/**
* Returns the number of LEDs in the given map.
+ * Note that LED indexes are not necessarily consecutive in the keymap.
+ * This means that some LEDs in the range between 0 and the return value
+ * might not be valid. Given such an index, xkb_keymap_led_get_name()
+ * will return NULL, and xkb_state_led_index_is_active() will return -1.
*/
xkb_led_index_t
xkb_keymap_num_leds(struct xkb_keymap *keymap);