Patchwork wrong behaviour of caps lock

login
register
mail settings
Submitter Benjamin Drung
Date Nov. 18, 2010, 11:58 p.m.
Message ID <1290124712.2386.6.camel@deep-thought>
Download mbox | patch
Permalink /patch/72171/
State New
Headers show

Comments

Benjamin Drung - Nov. 18, 2010, 11:58 p.m.
Am Montag, den 19.04.2010, 18:07 +0200 schrieb Stefan Weil:
> Kevin Wolf schrieb:
> > Am 19.04.2010 03:23, schrieb Jamie Lokier:
> >> Benjamin Drung wrote:
> >>> - /* SDL does not send the key up event, so we generate it */
> >> Was the original comment just plain wrong?
> >>
> >>> - kbd_put_keycode(keycode);
> >>> - kbd_put_keycode(keycode | 0x80);
> >>> + if (ev->type == SDL_KEYUP) {
> >>> + kbd_put_keycode(keycode | 0x80);
> >>> + } else {
> >>> + kbd_put_keycode(keycode);
> >>> + }
> >> The patch implies that SDL *does* send the key up event.
> >>
> >> Somebody obviously thought that it doesn't, hence the comment.
> >>
> >> So what has changed? Is it different versions of SDL, or does the
> >> patch only work on some hosts / distros?
> >
> > I think we already have had a discussion on this and it turned out that
> > Ubuntu had a "special" version of SDL which changed this behaviour. So
> > it is considered an Ubuntu SDL bug. Googled the old discussion for you:
> >
> > http://www.mail-archive.com/qemu-devel@nongnu.org/msg25246.html
> >
> > Kevin
> 
> My report was based on the Debian testing distribution
> with libsdl components version 1.2.13-5.
> 
> So if it's a bug, both Ubuntu and Debian share it
> (which is not too surprising).
> 
> And as I explained in my previous mail on this thread
> QEMU's caps lock handling is buggy on any distribution.
> 
> Maybe I'll find the time to write a patch until the end
> of this week.

I did more investigation, because kvm has this issue in Debian testing
and Ubuntu 10.10 (maverick). The German NEO2 layout maps the caps lock
key to alt gr. I discovered that libsdl sends a key down and key up
event for caps lock if it is mapped to something else. Therefore you
should only send a key up event if caps lock is really used as caps
lock. Patch for kvm 0.12.5 attached. This works for me. Does it work for
your keyboard layout, too?

You find more Details in the Ubuntu bug #427612 [1] beginning with
comment #29.

[1] https://launchpad.net/bugs/427612

Patch

=== modified file 'sdl.c'
--- sdl.c	2010-02-26 16:26:00 +0000

+++ sdl.c	2010-11-18 22:47:20 +0000

@@ -390,10 +390,13 @@ 

         break;
     case 0x45: /* num lock */
     case 0x3a: /* caps lock */
-        /* SDL does not send the key up event, so we generate it */

-        kbd_put_keycode(keycode);

-        kbd_put_keycode(keycode | 0x80);

-        return;

+        /* SDL does not send the key up event for real caps lock, so we generate it */

+        if (ev->keysym.sym == 0x12d) {

+            kbd_put_keycode(keycode);

+            kbd_put_keycode(keycode | 0x80);

+            return;

+        }

+        break;

     }
 
     /* now send the key code */