Commit f6e25abf09 for qemu.org
commit f6e25abf09eed17e90c00980f8b6c8407fb57802
Author: Marc-André Lureau <marcandre.lureau@redhat.com>
Date: Sat Apr 4 18:09:01 2026 +0400
ui/keymaps: introduce kbd_layout_free()
Enable callers to properly tear down keyboard layouts.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
diff --git a/ui/keymaps.c b/ui/keymaps.c
index 2359dbfe7e..d1b3f43dc8 100644
--- a/ui/keymaps.c
+++ b/ui/keymaps.c
@@ -178,6 +178,14 @@ out:
return ret;
}
+void kbd_layout_free(kbd_layout_t *k)
+{
+ if (!k) {
+ return;
+ }
+ g_hash_table_unref(k->hash);
+ g_free(k);
+}
kbd_layout_t *init_keyboard_layout(const name2keysym_t *table,
const char *language, Error **errp)
@@ -185,10 +193,9 @@ kbd_layout_t *init_keyboard_layout(const name2keysym_t *table,
kbd_layout_t *k;
k = g_new0(kbd_layout_t, 1);
- k->hash = g_hash_table_new(NULL, NULL);
+ k->hash = g_hash_table_new_full(NULL, NULL, NULL, g_free);
if (parse_keyboard_layout(k, table, language, errp) < 0) {
- g_hash_table_unref(k->hash);
- g_free(k);
+ kbd_layout_free(k);
return NULL;
}
return k;
diff --git a/ui/keymaps.h b/ui/keymaps.h
index 3d52c0882a..e8917e5640 100644
--- a/ui/keymaps.h
+++ b/ui/keymaps.h
@@ -54,6 +54,7 @@ typedef struct kbd_layout_t kbd_layout_t;
kbd_layout_t *init_keyboard_layout(const name2keysym_t *table,
const char *language, Error **errp);
+void kbd_layout_free(kbd_layout_t *k);
int keysym2scancode(kbd_layout_t *k, int keysym,
QKbdState *kbd, bool down);
int keycode_is_keypad(kbd_layout_t *k, int keycode);