@samitouri / QOSamiQemu / commits / f6e25abf09

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>

Marc-André Lureau committed Apr 4, 2026 at 18:09 UTC f6e25abf09eed17e90c00980f8b6c8407fb57802
2 files changed +11 -3
ui/keymaps.c
+10 -3
@@ -178,6 +178,14 @@ out:
178 return ret;
179 }
180
181 +void kbd_layout_free(kbd_layout_t *k)
182 +{
183 + if (!k) {
184 + return;
185 + }
186 + g_hash_table_unref(k->hash);
187 + g_free(k);
188 +}
189
190 kbd_layout_t *init_keyboard_layout(const name2keysym_t *table,
191 const char *language, Error **errp)
@@ -185,10 +193,9 @@ kbd_layout_t *init_keyboard_layout(const name2keysym_t *table,
193 kbd_layout_t *k;
194
195 k = g_new0(kbd_layout_t, 1);
188 - k->hash = g_hash_table_new(NULL, NULL);
196 + k->hash = g_hash_table_new_full(NULL, NULL, NULL, g_free);
197 if (parse_keyboard_layout(k, table, language, errp) < 0) {
190 - g_hash_table_unref(k->hash);
191 - g_free(k);
198 + kbd_layout_free(k);
199 return NULL;
200 }
201 return k;
ui/keymaps.h
+1
@@ -54,6 +54,7 @@ typedef struct kbd_layout_t kbd_layout_t;
54
55 kbd_layout_t *init_keyboard_layout(const name2keysym_t *table,
56 const char *language, Error **errp);
57 +void kbd_layout_free(kbd_layout_t *k);
58 int keysym2scancode(kbd_layout_t *k, int keysym,
59 QKbdState *kbd, bool down);
60 int keycode_is_keypad(kbd_layout_t *k, int keycode);