From e811743ff2f28085be74a28b57dfe684a320936e Mon Sep 17 00:00:00 2001 From: Pierre Le Marre Date: Tue, 4 Jul 2023 09:23:23 +0200 Subject: [PATCH] Add XKB_KEYSYM_MIN and XKB_KEYSYM_MAX MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Keysyms are 32-bit integers with the 3 most significant bits always set to zero. See: Appendix A “KEYSYM Encoding” of the X Window System Protocol at https://www.x.org/releases/current/doc/xproto/x11protocol.html#keysym_encoding. Add a new constants XKB_KEYSYM_MIN and XKB_KEYSYM_MAX to make the interval of valid keysyms more obvious in the code. --- include/xkbcommon/xkbcommon.h | 9 +++++++++ src/keysym.c | 2 +- src/keysym.h | 8 ++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/include/xkbcommon/xkbcommon.h b/include/xkbcommon/xkbcommon.h index a7148f3..8ad3dcc 100644 --- a/include/xkbcommon/xkbcommon.h +++ b/include/xkbcommon/xkbcommon.h @@ -303,6 +303,15 @@ typedef uint32_t xkb_led_mask_t; #define XKB_KEYCODE_MAX (0xffffffff - 1) +/** + * Maximum keysym value + * + * @since 1.6.0 + * @sa xkb_keysym_t + * @ingroup keysyms + */ +#define XKB_KEYSYM_MAX 0x1fffffff + /** * Test whether a value is a valid extended keycode. * @sa xkb_keycode_t diff --git a/src/keysym.c b/src/keysym.c index 989ae7c..788b7a2 100644 --- a/src/keysym.c +++ b/src/keysym.c @@ -64,7 +64,7 @@ get_name(const struct name_keysym *entry) XKB_EXPORT int xkb_keysym_get_name(xkb_keysym_t ks, char *buffer, size_t size) { - if ((ks & ((unsigned long) ~0x1fffffff)) != 0) { + if (ks > XKB_KEYSYM_MAX) { snprintf(buffer, size, "Invalid"); return -1; } diff --git a/src/keysym.h b/src/keysym.h index 2633963..e636746 100644 --- a/src/keysym.h +++ b/src/keysym.h @@ -50,6 +50,14 @@ #ifndef KEYSYM_H #define KEYSYM_H +/* + * NOTE: this is not defined in xkbcommon.h, because if we did, it may add + * overhead for library user: when handling keysyms they would also need to + * check min keysym when previously there was no reason to. + */ +/** Minimum keysym value */ +#define XKB_KEYSYM_MIN 0x00000000 + bool xkb_keysym_is_lower(xkb_keysym_t keysym);