[PATCH] Add api to obtain min/max keycode

Ran Benita ran234 at gmail.com
Sat Apr 20 13:53:59 PDT 2013


(This is easy to miss without some [xkbcommon] in the subject!)

On Tue, Apr 09, 2013 at 09:57:29PM -0400, matthias.clasen at gmail.com wrote:
> From: Matthias Clasen <mclasen at redhat.com>
> 
> Users of libxkbcommon need these values to iterate over all
> keycodes in the keymap.

Can you describe the use case a bit more? Is it just to get the keysyms,
or something more?

For the patch: I don't think we want to expose this information directly
like this. As far as the API goes, the keycodes may be sparsely
distributed, and then min/max don't make much sense. It's also a bit
too restrictive IMO. Daniel, what do you think?

What I'd suggest is just adding some iterator API for the keys; that'd
be both cleaner and more extensible (e.g. to provide some further
information on the keys). One lazy option would be to opaquely expose
the 'struct xkb_key' object we already have internally, and add some
accessors and first/last/prev/next/whatever. Even if not exposed by
itself, you can find its definition in src/keymap.h and see the various
bits of information it contains.

Would something like that be OK?

While we're on the subject: currently we hold the keys in a simple
array, indexed directly by the keycode. We really should use some other
sparse data structure for that (should be able to iterate it in order
though). TODO :)

(Small comment below)

> ---
>  src/keymap.c          | 12 ++++++++++++
>  xkbcommon/xkbcommon.h | 20 ++++++++++++++++++++
>  2 files changed, 32 insertions(+)
> 

> diff --git a/src/keymap.c b/src/keymap.c
> index 55000f4..14ec25f 100644
> --- a/src/keymap.c
> +++ b/src/keymap.c
> @@ -484,6 +484,18 @@ err:
>      return 0;
>  }
>  
> +XKB_EXPORT xkb_keycode_t
> +xkb_keymap_get_min_keycode (struct xkb_keymap *keymap)

We don't put a space here    ^.

> +{
> +    return keymap->min_key_code;
> +}
> +
> +XKB_EXPORT xkb_keycode_t
> +xkb_keymap_get_max_keycode (struct xkb_keymap *keymap)
> +{
> +    return keymap->max_key_code;
> +}
> +
>  /**
>   * Simple boolean specifying whether or not the key should repeat.
>   */
> diff --git a/xkbcommon/xkbcommon.h b/xkbcommon/xkbcommon.h
> index a2aecfb..412f429 100644
> --- a/xkbcommon/xkbcommon.h
> +++ b/xkbcommon/xkbcommon.h
> @@ -974,6 +974,26 @@ xkb_led_index_t
>  xkb_keymap_led_get_index(struct xkb_keymap *keymap, const char *name);
>  
>  /**
> + * Get the minimum keycode of the keymap
> + *
> + * @returns The minimum keycode of the keymap.

You can skip the @returns if it doesn't say anything interesting...

Ran

> + *
> + * @memberof xkb_keymap
> + */
> +xkb_keycode_t
> +xkb_keymap_get_min_keycode (struct xkb_keymap *keymap);
> +
> +/**
> + * Get the maximum keycode of the keymap
> + *
> + * @returns The maximum keycode of the keymap.
> + *
> + * @memberof xkb_keymap
> + */
> +xkb_keycode_t
> +xkb_keymap_get_max_keycode (struct xkb_keymap *keymap);
> +
> +/**
>   * Determine whether a key should repeat or not.
>   *
>   * A keymap may specify different repeat behaviors for different keys.
> -- 
> 1.8.2
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list