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);