From b19b0808940c8c54b102012be134a370b26e348e Mon Sep 17 00:00:00 2001 From: Gatis Paeglis Date: Wed, 5 Feb 2014 16:25:06 +0100 Subject: Update bundled libxkbcommon version to 0.4.0 This release comes with important bug fixes. Also we can now remove the workaround code which was needed for libxkbcommon 0.2.0. Task-number: QTBUG-31712 Task-number: QTBUG-33732 Task-number: QTBUG-34056 Change-Id: I57caf7f803b9a01a15541a5ad82e464de3b8abbb Reviewed-by: Oswald Buddenhagen Reviewed-by: Lars Knoll --- src/3rdparty/xkbcommon/src/keysym.c | 56 +++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 15 deletions(-) (limited to 'src/3rdparty/xkbcommon/src/keysym.c') diff --git a/src/3rdparty/xkbcommon/src/keysym.c b/src/3rdparty/xkbcommon/src/keysym.c index 1e92a4ac9f..f52d751973 100644 --- a/src/3rdparty/xkbcommon/src/keysym.c +++ b/src/3rdparty/xkbcommon/src/keysym.c @@ -53,24 +53,31 @@ #include "keysym.h" #include "ks_tables.h" +static inline const char * +get_name(const struct name_keysym *entry) +{ + return keysym_names + entry->offset; +} + static int compare_by_keysym(const void *a, const void *b) { - const struct name_keysym *key = a, *entry = b; - return key->keysym - (int32_t)entry->keysym; + const xkb_keysym_t *key = a; + const struct name_keysym *entry = b; + return *key - (int32_t) entry->keysym; } static int compare_by_name(const void *a, const void *b) { - const struct name_keysym *key = a, *entry = b; - return strcasecmp(key->name, entry->name); + const char *key = a; + const struct name_keysym *entry = b; + return strcasecmp(key, get_name(entry)); } XKB_EXPORT int xkb_keysym_get_name(xkb_keysym_t ks, char *buffer, size_t size) { - const struct name_keysym search = { .name = NULL, .keysym = ks }; const struct name_keysym *entry; if ((ks & ((unsigned long) ~0x1fffffff)) != 0) { @@ -78,12 +85,12 @@ xkb_keysym_get_name(xkb_keysym_t ks, char *buffer, size_t size) return -1; } - entry = bsearch(&search, keysym_to_name, + entry = bsearch(&ks, keysym_to_name, ARRAY_SIZE(keysym_to_name), sizeof(*keysym_to_name), compare_by_keysym); if (entry) - return snprintf(buffer, size, "%s", entry->name); + return snprintf(buffer, size, "%s", get_name(entry)); /* Unnamed Unicode codepoint. */ if (ks >= 0x01000100 && ks <= 0x0110ffff) { @@ -119,25 +126,25 @@ find_sym(const struct name_keysym *entry, const char *name, bool icase) if (!entry) return NULL; - if (!icase && strcmp(entry->name, name) == 0) + if (!icase && strcmp(get_name(entry), name) == 0) return entry; if (icase && xkb_keysym_is_lower(entry->keysym)) return entry; for (iter = entry - 1; iter >= name_to_keysym; --iter) { - if (!icase && strcmp(iter->name, name) == 0) + if (!icase && strcmp(get_name(iter), name) == 0) return iter; - if (strcasecmp(iter->name, entry->name) != 0) + if (strcasecmp(get_name(iter), get_name(entry)) != 0) break; if (icase && xkb_keysym_is_lower(iter->keysym)) return iter; } last = name_to_keysym + len; - for (iter = entry + 1; iter < last; --iter) { - if (!icase && strcmp(iter->name, name) == 0) + for (iter = entry + 1; iter < last; ++iter) { + if (!icase && strcmp(get_name(iter), name) == 0) return iter; - if (strcasecmp(iter->name, entry->name) != 0) + if (strcasecmp(get_name(iter), get_name(entry)) != 0) break; if (icase && xkb_keysym_is_lower(iter->keysym)) return iter; @@ -151,7 +158,6 @@ find_sym(const struct name_keysym *entry, const char *name, bool icase) XKB_EXPORT xkb_keysym_t xkb_keysym_from_name(const char *s, enum xkb_keysym_flags flags) { - const struct name_keysym search = { .name = s, .keysym = 0 }; const struct name_keysym *entry; char *tmp; xkb_keysym_t val; @@ -160,7 +166,7 @@ xkb_keysym_from_name(const char *s, enum xkb_keysym_flags flags) if (flags & ~XKB_KEYSYM_CASE_INSENSITIVE) return XKB_KEY_NoSymbol; - entry = bsearch(&search, name_to_keysym, + entry = bsearch(s, name_to_keysym, ARRAY_SIZE(name_to_keysym), sizeof(*name_to_keysym), compare_by_name); @@ -242,6 +248,26 @@ xkb_keysym_is_upper(xkb_keysym_t ks) return (ks == upper ? true : false); } +xkb_keysym_t +xkb_keysym_to_lower(xkb_keysym_t ks) +{ + xkb_keysym_t lower, upper; + + XConvertCase(ks, &lower, &upper); + + return lower; +} + +xkb_keysym_t +xkb_keysym_to_upper(xkb_keysym_t ks) +{ + xkb_keysym_t lower, upper; + + XConvertCase(ks, &lower, &upper); + + return upper; +} + /* * The following is copied verbatim from libX11:src/KeyBind.c, commit * d45b3fc19fbe95c41afc4e51d768df6d42332010, with the following changes: -- cgit v1.2.3