[PATCH] ui: fix keymap file search in input-barrier object

Laurent Vivier posted 1 patch 4 years, 6 months ago
Test docker-clang@ubuntu passed
Test docker-mingw@fedora passed
Test docker-quick@centos7 passed
Test checkpatch passed
Test asan passed
Test FreeBSD passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20190923220658.27007-1-laurent@vivier.eu
Maintainers: Gerd Hoffmann <kraxel@redhat.com>
ui/input-barrier.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
[PATCH] ui: fix keymap file search in input-barrier object
Posted by Laurent Vivier 4 years, 6 months ago
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>
Fixes: 6105683da35b ("ui: add an embedded Barrier client")
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
 ui/input-barrier.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/ui/input-barrier.c b/ui/input-barrier.c
index a2c961f285a4..fe35049b83a2 100644
--- a/ui/input-barrier.c
+++ b/ui/input-barrier.c
@@ -682,6 +682,13 @@ static void input_barrier_instance_init(Object *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.u.inet.host = g_strdup("localhost");
     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);
 
     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 = {
-- 
2.21.0


Re: [PATCH] ui: fix keymap file search in input-barrier object
Posted by Anthony PERARD 4 years, 6 months ago
On Tue, Sep 24, 2019 at 12:06:58AM +0200, Laurent Vivier wrote:
> 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>
> Fixes: 6105683da35b ("ui: add an embedded Barrier client")
> Signed-off-by: Laurent Vivier <laurent@vivier.eu>

Thanks!

With the patch apply, I can start QEMU (with -k).
And the patch looks fine.

Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>

-- 
Anthony PERARD

Re: [PATCH] ui: fix keymap file search in input-barrier object
Posted by Laurent Vivier 4 years, 5 months ago
Ping?

Le 24/09/2019 à 00:06, Laurent Vivier a écrit :
> 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>
> Fixes: 6105683da35b ("ui: add an embedded Barrier client")
> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
> ---
>  ui/input-barrier.c | 14 +++++++-------
>  1 file changed, 7 insertions(+), 7 deletions(-)
> 
> diff --git a/ui/input-barrier.c b/ui/input-barrier.c
> index a2c961f285a4..fe35049b83a2 100644
> --- a/ui/input-barrier.c
> +++ b/ui/input-barrier.c
> @@ -682,6 +682,13 @@ static void input_barrier_instance_init(Object *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.u.inet.host = g_strdup("localhost");
>      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);
>  
>      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 = {
>