summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2025-06-11 01:08:39 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2025-06-11 01:08:39 +0200
commit1a6e2d721989a0059b8cfe91b604bc33637ec4c7 (patch)
tree45cccec8c1de2d6db7816d26c94e48493d5ade0f
parent6f86d32c35e98e14d4c4ed34d5dc21420819fd1d (diff)
xkb: Make compose table load failure non-fatal
-rw-r--r--console-client/xkb/xkb.c21
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);