ui: fix keymap file search in input-barrier object

If we try to start QEMU with "-k en-us", qemu prints a message and exits
with:

    qemu-system-i386: could not read keymap file: 'en-us'

It's because this function is called way too early, before
qemu_add_data_dir() is called, and so qemu_find_file() fails.

To fix that, move init_keyboard_layout() from the class init function to the
instance init function.

Reported-by: Anthony PERARD <anthony.perard@citrix.com>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Message-id: 20190923220658.27007-1-laurent@vivier.eu
Fixes: 6105683da3 ("ui: add an embedded Barrier client")
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
Laurent Vivier 2019-09-24 00:06:58 +02:00 committed by Gerd Hoffmann
parent 30f5a9dd7a
commit 707f75070a

View File

@ -682,6 +682,13 @@ static void input_barrier_instance_init(Object *obj)
{ {
InputBarrier *ib = INPUT_BARRIER(obj); InputBarrier *ib = INPUT_BARRIER(obj);
/* always use generic keymaps */
if (keyboard_layout && !kbd_layout) {
/* We use X11 key id, so use VNC name2keysym */
kbd_layout = init_keyboard_layout(name2keysym, keyboard_layout,
&error_fatal);
}
ib->saddr.type = SOCKET_ADDRESS_TYPE_INET; ib->saddr.type = SOCKET_ADDRESS_TYPE_INET;
ib->saddr.u.inet.host = g_strdup("localhost"); ib->saddr.u.inet.host = g_strdup("localhost");
ib->saddr.u.inet.port = g_strdup("24800"); ib->saddr.u.inet.port = g_strdup("24800");
@ -719,13 +726,6 @@ static void input_barrier_class_init(ObjectClass *oc, void *data)
UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc); UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
ucc->complete = input_barrier_complete; ucc->complete = input_barrier_complete;
/* always use generic keymaps */
if (keyboard_layout) {
/* We use X11 key id, so use VNC name2keysym */
kbd_layout = init_keyboard_layout(name2keysym, keyboard_layout,
&error_fatal);
}
} }
static const TypeInfo input_barrier_info = { static const TypeInfo input_barrier_info = {