All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tomas Carnecky <tom@dbservice.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] Bug in SDL key event processing
Date: Thu, 10 Jul 2008 01:27:49 +0200	[thread overview]
Message-ID: <48754975.1050303@dbservice.com> (raw)

I just spend half day figuring out why my arrow keys and some other keys 
wouldn't work inside of the guest OS. Turns out you have a capital error 
in your SDL keyboard event parsing code.

Once the event hits sdl_process_key(), the function converts the event 
to a keycode. That depends on whether a keyboard layout has been loaded 
(-k en-us) or not. If not, it calls into sdl_keyevent_to_keycode() which 
  uses the SDL keyboard event scancode (presumably the X11 keycode) and 
converts it to keycodes that are then sent to the guest OS. The problem 
is that you assume a fixed layout of the X11 'scancodes', and use a 
table (x_keycode_to_pc_keycode) to convert those. Well, my xserver 
generates keycode=111 for the 'Up' key, which then your code translated 
to 'Print'. I tried changing the keymap files, but it didn't make any 
difference since qemu doesn't use those if no layout has been selected 
using the '-k' switch. If I load the en-use keymap, all keys work as 
expected.

Why is there OS (X11/Windows) specific code in the SDL frontend? And why 
does qemu need keymaps anyway? I would expect qemu to translate my 
keypresses to corresponding bios scancodes and do no further processing. 
  If you do that, you won't need the keymaps code, just a table to 
translate from SDL events to bios scancodes. For that you'd need just 
one table, holding ~322 elements. That's how many keysyms are defined in 
SDL.

tom

             reply	other threads:[~2008-07-09 23:28 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-09 23:27 Tomas Carnecky [this message]
2008-07-09 23:37 ` [Qemu-devel] Bug in SDL key event processing Samuel Thibault
2008-07-09 23:46   ` Tomas Carnecky
2008-07-09 23:55     ` Samuel Thibault
2008-07-10  0:09       ` Tomas Carnecky
2008-07-10  0:20         ` Samuel Thibault
2008-07-10  3:19         ` Anthony Liguori
2008-07-10  7:56           ` Tomas Carnecky
2008-07-10 13:35             ` Anthony Liguori
2008-07-10 13:43               ` Tomas Carnecky
2008-07-10 13:56                 ` Anthony Liguori
2008-07-10 14:03                 ` Tomas Carnecky
2008-07-10 14:10                   ` Samuel Thibault
2008-07-10 14:20                     ` Tomas Carnecky
2008-07-10 14:49                       ` Samuel Thibault
2008-07-10 14:39                   ` Anthony Liguori
2008-07-10 15:35                     ` Tomas Carnecky
2008-07-10 15:51                       ` Samuel Thibault
2008-07-10 19:25                       ` Anthony Liguori
2008-07-10 19:51                         ` Tomas Carnecky
2008-07-10 21:55                         ` Samuel Thibault
2008-07-10 22:03                           ` Anthony Liguori
2008-07-10 22:14                             ` Samuel Thibault
2008-07-14 16:02                           ` Ian Jackson
2008-07-14 16:27                             ` Samuel Thibault
2008-07-14 16:01                         ` Ian Jackson
2008-07-09 23:52   ` Anthony Liguori
2008-07-10 12:03     ` Jamie Lokier
2008-07-10 12:24       ` Samuel Thibault
  -- strict thread matches above, loose matches on Subject: below --
2008-07-10 14:22 Juergen Keil

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=48754975.1050303@dbservice.com \
    --to=tom@dbservice.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.