Package: qemu
Version: 0.9.0+20070816-1
Severity: important
Tags: patch

In DOS:
        -Caps lock events are doubled (so, no efect for caps lock)
        -Extended keyboard events are doubled: double up, double down



In vnc mode:
        -Alt Gr is not well captured
        -ntilde does not work



A patch is attached to solve this problems. It also integrate a new
system to add extra keys without modifying the code (again)


         Regards.



-- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: i386 (i686)

Kernel: Linux 2.6.20-1-686 (SMP w/2 CPU cores)
Locale: LANG=es_ES.UTF-8, LC_CTYPE=es_ES.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages qemu depends on:
ii  bochsbios          2.3+20070705-2        BIOS for the Bochs emulator
ii  libasound2         1.0.14a-2             ALSA library
ii  libc6              2.6.1-2               GNU C Library: Shared libraries
ii  libncurses5        5.6+20070825-1        Shared libraries for terminal hand
ii  libsdl1.2debian    1.2.11-9              Simple DirectMedia Layer
ii  openbios-sparc     1.0~alpha2+20070816-1 SPARC Open Firmware
ii  openhackware       0.4.1-2               OpenFirmware emulator for PowerPC
ii  proll              18-2                  JavaStation PROM 2.x compatible re
ii  vgabios            0.6a-2                VGA BIOS software for the Bochs an
ii  zlib1g             1:1.2.3.3.dfsg-5      compression library - runtime

Versions of packages qemu recommends:
ii  debootstrap                   1.0.3      Bootstrap a basic Debian system
ii  sharutils                     1:4.6.3-1  shar, unshar, uuencode, uudecode
pn  vde2                          <none>     (no description available)

-- no debconf information
? backup-082720072326-pre-qemu.tgz
? description-pak
? doc-pak
? qemu_20070827-1_i386.deb
Index: keymaps.c
===================================================================
RCS file: /sources/qemu/qemu/keymaps.c,v
retrieving revision 1.2
diff -u -r1.2 keymaps.c
--- keymaps.c	30 Apr 2006 21:28:35 -0000	1.2
+++ keymaps.c	28 Aug 2007 04:08:17 -0000
@@ -24,7 +24,14 @@
 
 static int get_keysym(const char *name)
 {
+    unsigned int keysym;
     name2keysym_t *p;
+   
+    //User numerical added keysyms
+    if (1==sscanf(name,"0x%x",&keysym))
+            return keysym;
+    
+    //Normal ones
     for(p = name2keysym; p->name != NULL; p++) {
         if (!strcmp(p->name, name))
             return p->keysym;
Index: sdl.c
===================================================================
RCS file: /sources/qemu/qemu/sdl.c,v
retrieving revision 1.42
diff -u -r1.42 sdl.c
--- sdl.c	21 Jun 2007 21:08:02 -0000	1.42
+++ sdl.c	28 Aug 2007 04:09:19 -0000
@@ -201,9 +201,9 @@
         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);
+    	if (ev->type == SDL_KEYUP)
+		kbd_put_keycode(keycode | 0x80);
+	else kbd_put_keycode(keycode);	
         return;
     }
 
Index: vnc_keysym.h
===================================================================
RCS file: /sources/qemu/qemu/vnc_keysym.h,v
retrieving revision 1.2
diff -u -r1.2 vnc_keysym.h
--- vnc_keysym.h	7 Jan 2007 17:12:41 -0000	1.2
+++ vnc_keysym.h	28 Aug 2007 04:10:12 -0000
@@ -215,6 +215,7 @@
 {"Shift_R", 0xffe2},   /* XK_Shift_R */
 {"Super_L", 0xffeb},   /* XK_Super_L */
 {"Super_R", 0xffec},   /* XK_Super_R */
+{"ISO_Level3_Shift", 0xfe03}, /* ISO_Level3
 
     /* special keys */
 {"BackSpace", 0xff08}, /* XK_BackSpace */
Index: hw/ps2.c
===================================================================
RCS file: /sources/qemu/qemu/hw/ps2.c,v
retrieving revision 1.6
diff -u -r1.6 ps2.c
--- hw/ps2.c	20 Mar 2007 16:45:27 -0000	1.6
+++ hw/ps2.c	28 Aug 2007 04:12:48 -0000
@@ -146,17 +146,24 @@
     PS2State *s = (PS2State *)opaque;
     PS2Queue *q;
     int val, index;
+    static int flag=0;
     
     q = &s->queue;
     if (q->count == 0) {
+	if (!flag){
+	   index=q->rptr - 1;
+	   flag=1;
+	}
+	else index=q->rptr - 2;
         /* NOTE: if no data left, we return the last keyboard one
            (needed for EMM386) */
         /* XXX: need a timer to do things correctly */
-        index = q->rptr - 1;
         if (index < 0)
-            index = PS2_QUEUE_SIZE - 1;
+            index += PS2_QUEUE_SIZE;
+
         val = q->data[index];
     } else {
+	flag=0;
         val = q->data[q->rptr];
         if (++q->rptr == PS2_QUEUE_SIZE)
             q->rptr = 0;
Index: keymaps/es
===================================================================
RCS file: /sources/qemu/qemu/keymaps/es,v
retrieving revision 1.1
diff -u -r1.1 es
--- keymaps/es	12 Dec 2004 16:56:30 -0000	1.1
+++ keymaps/es	28 Aug 2007 04:13:57 -0000
@@ -71,6 +71,8 @@
 Lstroke 0x26 shift altgr
 ntilde 0x27
 Ntilde 0x27 shift
+0xfff1 0x27
+0xffd1 0x27 shift
 dead_doubleacute 0x27 shift altgr
 dead_acute 0x28
 dead_diaeresis 0x28 shift
Index: keymaps/modifiers
===================================================================
RCS file: /sources/qemu/qemu/keymaps/modifiers,v
retrieving revision 1.2
diff -u -r1.2 modifiers
--- keymaps/modifiers	1 Mar 2005 21:43:42 -0000	1.2
+++ keymaps/modifiers	28 Aug 2007 04:13:59 -0000
@@ -3,6 +3,7 @@
 
 Alt_R 0xb8
 Mode_switch 0xb8
+ISO_Level3_Shift 0xb8
 Alt_L 0x38
 
 Control_R 0x9d

Reply via email to