diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2025-06-11 01:08:39 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2025-06-11 01:08:39 +0200 |
commit | 1a6e2d721989a0059b8cfe91b604bc33637ec4c7 (patch) | |
tree | 45cccec8c1de2d6db7816d26c94e48493d5ade0f | |
parent | 6f86d32c35e98e14d4c4ed34d5dc21420819fd1d (diff) |
xkb: Make compose table load failure non-fatal
-rw-r--r-- | console-client/xkb/xkb.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/console-client/xkb/xkb.c b/console-client/xkb/xkb.c index 8759c8bf..97dd6683 100644 --- a/console-client/xkb/xkb.c +++ b/console-client/xkb/xkb.c @@ -311,6 +311,8 @@ get_special_char_interpretation(xkb_keysym_t input) void xkb_compose_update (keypress_t key) { + if (!compose_state) + return; if (!key.rel) xkb_compose_state_feed(compose_state, key.keycode); } @@ -318,6 +320,8 @@ xkb_compose_update (keypress_t key) void xkb_compose_update_fini (void) { + if (!compose_state) + return; enum xkb_compose_status status = xkb_compose_state_get_status(compose_state); if (status == XKB_COMPOSE_CANCELLED || status == XKB_COMPOSE_COMPOSED) xkb_compose_state_reset(compose_state); @@ -338,6 +342,9 @@ get_keysym_from_keycode (keycode_t keycode) xkb_keysym_t sym; sym = xkb_state_key_get_one_sym (state, keycode); + if (!compose_state) + return sym; + enum xkb_compose_status status = xkb_compose_state_get_status (compose_state); if (status == XKB_COMPOSE_COMPOSING || status == XKB_COMPOSE_CANCELLED) return XKB_KEYSYM_MAX + 1; @@ -472,11 +479,15 @@ xkb_compose_init (const char *composefile) { compose_table = xkb_compose_table_new_from_locale (ctx, locale, XKB_COMPOSE_COMPILE_NO_FLAGS); if (!compose_table) - return ENOMEM; + return 0; compose_state = xkb_compose_state_new (compose_table, XKB_COMPOSE_STATE_NO_FLAGS); if (!compose_state) - return ENOMEM; + { + xkb_compose_table_unref (compose_table); + compose_table = NULL; + } + return 0; } @@ -502,8 +513,10 @@ void xkb_context_cleanup (void) { /* compose cleanup */ - xkb_compose_state_unref (compose_state); - xkb_compose_table_unref (compose_table); + if (compose_state) + xkb_compose_state_unref (compose_state); + if (compose_table) + xkb_compose_table_unref (compose_table); /* state cleanup */ xkb_state_unref (state); |